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)