mysql的gtid主从复制配置
学习网站:https://www.cnblogs.com/zhoujinyi/p/4717951.html
一、主从配置:vim /etc/my.cnf
[mysqld]
gtid-mode = on
enforce-gtid-consistency = true
log_slave_updates = 1
二、从配置:vim /etc/my.cnf
change master to master_host='127.0.0.1',master_user='rep',master_password='rep',master_port=3306,master_auto_position=1;
主从同步后,再查看:(从上操作)
show processlist\G
mysql的gtid主从复制--报错处理
一、从库上报错查看:
show slave status\G
Retrieved_Gtid_Set: e10c75be-5c1b-11e6-ab7c-000c296078ae:5-6 #6是出错的事务
Executed_Gtid_Set: e10c75be-5c1b-11e6-ab7c-000c296078ae:1-5 #已经执行过的事务
Auto_Position: 1
二、解决1:单个跳过事务
通过设置gtid_next跳过这个出错的事务(只能跳过一个事务)
mysql> set gtid_next='e10c75be-5c1b-11e6-ab7c-000c296078ae:6';
mysql> begin;
mysql> commit;
mysql> set gtid_next='AUTOMATIC';
mysql> start slave;
三、解决2:批量的跳过事务
通过设置gtid_purged完成批量跳过事务
1:主库操作(查看主库上已执行的事务)
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------------------------------+
| binlog.000001 | 2364 | | | e10c75be-5c1b-11e6-ab7c-000c296078ae:1-10 |
+---------------+----------+--------------+------------------+-------------------------------------------+
1 row in set (0.00 sec)
从库上操作:
也可查看从库上已执行的事务,mysql> show master status;
mysql> reset master;
mysql> set GLOBAL gtid_purged='e10c75be-5c1b-11e6-ab7c-000c296078ae:1-10';
mysql> start slave;
四、快照恢复从库数据
从库上操作:做好快照后,查看sql文件
cat db.sql | grep GTID_PURGED
SET @@GLOBAL.GTID_PURGED='e10c75be-5c1b-11e6-ab7c-000c296078ae:1-10';
mysql> reset master;
再导入sql文件
mysql> CHANGE MASTER TO MASTER_HOST='主库ip', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_AUTO_POSITION = 1;
mysql> start slave;
mysql的gtid主从复制故障切换
五、故障切换步骤
主有故障时:(切换步骤,需要把其中的一个从设置为主,另一个设置为其的从库)
1:检查从库上,完成事务的从,谁最接近主库
server2: show salve status\G;
Master_Log_File: mysql-bin3306.000002 ---(越大越接近)
Read_Master_Log_Pos: 4156773
Exec_Master_Log_Pos: 4156773
server3: show salve status\G;
Master_Log_File: mysql-bin3306.000001 ---(越大越接近)
Read_Master_Log_Pos: 83795320
Exec_Master_Log_Pos: 83795320
相比之下server2完成的事务要比server3更接近或则等于server1,现在需要把server3设置为server2的从库。
2:切换
1:从库server3,上重新指定主库信息(指向server2)
mysql> stop slave; #千万不要执行 reset master,否则会从最先的GTID上开始执行。
change master to master_host='127.0.0.1',master_user='rep',master_password='rep',master_port=3307,master_auto_position=1; #指定到server2从上
start slave; #成功的切换到新主
3:把业务从server1主库上切换到server2(完成的事务最接近主库)--server2当主
实际操作
实列:
32集群3台服务器msyql重启后gtid主从报错(两个no)
解决办法:
1:先到db上查看偏移量(Position)
mysql> show master status;
+------------------+----------+--------------+------------------+----------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+----------------------------------------------+
| mysql-bin.000014 | 191 | | | 03969184-0807-11e9-9734-001e67f4efb0:1-25434 |
+------------------+----------+--------------+------------------+----------------------------------------------+
1 row in set (0.00 sec)
2:上web1和web2的mysql
reset slave;
CHANGE MASTER TO MASTER_HOST='192.168.116.101', MASTER_USER='hhg', MASTER_PASSWORD='123456',master_port=3306,MASTER_AUTO_POSITION = 191;
start slave;