安装mysql
本次使用五个rpm包安装
安装后修改密码即可
密码默认在log中
初始化修改即可
开启mysql二进制日志
可以设定徐亚同步的数据库或不需要的数据库
进入mysql创建备份账户
查看日至位置以及pos在备份机使用
grant replication slave on *.* to 'bobo'@'172.25.15.%' identified by 'Hh~802119323'
备份机设置同主机
但把server-id改为2即可
进入mysql配置即可
都出现yes为正确设置
测试
主机上的数据被备份成功
基于GTID
GTID是对于一个已提交事务的编号,并且是一个全局唯一的编号。
GTID = source_id :transaction_id
每一个 GTID 代表一个数据库事务
在mysql的数据目录(/var/lib/mysql)里查看二进制日志
配置主机my.cnf
添加gtid数据
备份主机配置
change master to master_host='172.25.15.12', master_user='bobo',master_password='Hh~802119323',master_auto_position=1;
查看状态
当Slave_IO_Running
, Slave_SQL_Running
为YES,
且Slave_SQL_Running_State
为Slave has read all relay log; waiting for more updates时表示成功构建复制链路
可以在备份主机上看到个gtid 测试成功
半同步复制
半同步复制:异步复制和同步复制的折中,主库上提交事务时,需要等待至少一个从库发来的收到事件确认信息,才向客户端返回成功。
主节点安装 rpl_semi_sync_master 插件
root@localhost:mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
Query OK, 0 rows affected (0.17 sec)
root@localhost:mysql>show variables like '%rpl%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
| rpl_stop_slave_timeout | 31536000 |
+-------------------------------------------+------------+
7 rows in set (0.03 sec)
备节点安装 rpl_semi_sync_slave 插件
root@localhost:mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Query OK, 0 rows affected (0.15 sec)
root@localhost:mysql>show variables like '%rpl%';
+---------------------------------+----------+
| Variable_name | Value |
+---------------------------------+----------+
| rpl_semi_sync_slave_enabled | OFF |
| rpl_semi_sync_slave_trace_level | 32 |
| rpl_stop_slave_timeout | 31536000 |
+---------------------------------+----------+
3 rows in set (0.03 sec)
主节点my.cnf配置增加以下
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=10000
备节点
rpl_semi_sync_slave_enabled=1
关闭从库后,在主库上创建一张表延迟了 10 秒左右,刚好是参数 rpl_semi_sync_master_timeout 设置的值。
关于数据手动备份恢复
在备份数据被从库恢复时 恢复文件中会有sql语句删除已经存在的table——————mysqldump
二进制日志的恢复
基于行的日志格式 binlog_format=ROW
- 这是mysql5.7之后默认的二进制日志格式
- 记录的是增删改查的数据行信息
- 优点:
- 使mysql主从复制更加安全
- 对每一行数据的修改比基于段的复制高效
- 由于误操作修改数据库信息,且没有备库可恢复时,可通过对日志文件数据操作反向处理恢复数据
- 缺点:
- 记录日志量较大
- binlog_row_image =[FULL|MINIMAL|NOBLOB]
- 记录日志量较大
基于时间恢复数据
mysqlbinlog –no-defaults –stop-datetime=’2017-04-11 09:48:48’/var/lib/mysql/mysql-bin.000007 |mysql –uroot –pHh~802119323
基于position恢复数据
mysqlbinlog –no-defaults –start-position=”1159” –stop-position=”1594” /varlib/mmysql/binlog.000007 | mysql -u root -pHh~802119323
并行复制
slave端开启 my.cnf
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
无损复制
官方文档
https://dev.mysql.com/doc/refman/5.7/en/replication-semisync-installation.html
On the master:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
On each slave:
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
查看状态
SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%semi%';
master-
SET GLOBAL rpl_semi_sync_master_enabled = {0|1};
SET GLOBAL rpl_semi_sync_master_timeout = N;
slave
SET GLOBAL rpl_semi_sync_slave_enabled = {0|1};
重启io
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
测试 在添加数据后 slave端看到收到两条信息
slave 端看master yes tx数据可以看到几条信息
可以看到设置本slave的maser与slave状态都开启
mysql group replication 去中心化
官方文档
https://dev.mysql.com/doc/refman/5.7/en/group-replication-adding-instances.html
配置解析用于主机互相连接
编辑配置文件
修改serverid 本机ip即可
登陆数据库 修改初始密码
ALTER USER root@localhost identified by 'Hh~802119323'
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY 'Hh~802119323'
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
FLUSH PRIVILEGES;
reset master;
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Hh~802119323' FOR CHANNEL 'group_replication_recovery';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
SHOW PLUGINS;
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=ON;
SET GLOBAL group_replication_bootstrap_group=OFF;
下图为正确结果
配置第二台加入集群的主机、
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
start GROUP_REPLICATION;
看到下图即可
节点三与节点的配置相同 不再赘述
测试 在2节点创创建数据库 以节点可以看到