暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql8.0.22 GTID模式主从复制13114错误的解决方案

mysql> select  version();

+-------------+

| version() |

+-------------+

| 8.0.22   |

+-------------+

1 row in set (0.00 sec)

 

 

一、主库上带 GTID方式备份:

mysqldump -uroot -p -S /data/mysql/mysql.sock  --set-gtid-purged=ON --all-databases --single-transaction --master-data=2 --triggers --routines --events >/data/backup/all_database.sql

 

二、传到备库后恢复:

mysql  -uroot -p  -S /data/mysql/mysql.sock</data/backup/all_database.sql 

Enter password: 

 

输入密码后报出如下ERROR:

ERROR 3546 (HY000) at line 26: @@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@GLOBAL.GTID_EXECUTED

 

故障排除法:

1. 登陆slave库

2. Stop slave

3. reset slave all; reset master;

 4.再次执行mysql  -uroot -p  -S /data/mysql/mysql.sock</data/backup/all_database.sql后正常导入

 

3、 将备库建立为从属关系:

 

登陆slave库

mysql> reset slave all;reset master;

Query OK, 0 rows affected, 1 warning (0.01 sec)

 

Query OK, 0 rows affected (0.01 sec)

 

 

mysql> change master to

   -> master_host='172.30.66.4',

   -> master_port=3306,

   -> master_user='repl',

   -> master_password='replxxx',

-> master_auto_position=1;

 

Query OK, 0 rows affected, 2 warnings (0.02 sec)

 

mysql> start slave;

Query OK, 0 rows affected, 1 warning (0.00 sec)

 

mysql> show slave status\G;

 

报出如下Error :

Last_IO_Errno: 13114

Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Cannot replicate because the master purged required binary logs. Replicate the missing transactions from elsewhere, or provision a new slave from backup. Consider increasing the master's binary log expiration period. The GTID set sent by the slave is '', and the missing transactions are '3e7c7be8-5c68-11eb-ac69-525402ff357a:1-1135000''

原因分析:

1.在主从复制中主库发生过的事务,在全局中由唯一的GTID记录,方便Failover断点定位

2.change master to 的时候不再需要binlog 文件名和position号,设置MASTER_AUTO_POSITION=1 自动定位;

3.Master到Slave的复制中,Slave库不再依赖master.info文件,而是直接读取最后一个relaylog的 GTID号

4.通过mysqldump工具备份时,默认会将备份中包含的事务以

   SET @@GLOBAL.GTID_PURGED='3e7c7be8-5c68-11eb-ac69-525402ff357a:1-1135000';

   告诉Slave库,我的备份中已经有以上事务,你就不用运行了,直接从下一个GTID开始请求binlog就行。

 

 

解决方法:

 

mysql> stop slave;

Query OK, 0 rows affected, 1 warning (0.01 sec)

 

mysql> SET @@GLOBAL.GTID_PURGED='3e7c7be8-5c68-11eb-ac69-525402ff357a:1-1135000';

Query OK, 0 rows affected (0.00 sec)

 

mysql> show slave status\G;

 

主从关系恢复正常

 

 

故障排除成功!

 

最后登陆slave1、slave2分别设置

 

set global read_only=1;

 

备注:slave1、slave2 (从库对外提供读服务,不写进配置文件,因为随时slave会提升为master)