分类: MySQL
GTID备份恢复注意事项

MySQL工作在GTID模式做备份恢复的时候,有时需要恢复出来的 MySQL 实例可以作为从库连上原来的主库继续复制,这就要求从备份恢复出来的 MySQL 实例拥有和主数据库数据一致的 gtid_executed 值。这也是通过设置 gtid_purged实现的,下面看下 mysqldump 做备份的例子。

通过mysqldump在主库上做一个全量备份
这里使用 --all-databases选项是因为基于 GTID 的复制会记录全部的事务, 所以要构建一个完整的dump备份

/usr/local/mysql/bin/mysqldump --user=root --host=localhost --default-character-set=utf8 --socket=/data/mysql/mysql.sock -p'xxxxxx' --extended-insert=false  --all-databases --single-transaction  --triggers --routines --events > /tmp/alldatabase.sql

在备份的alldatabase.sql中有GTID_PURGED语句

SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0;

--
-- GTID state at the beginning of the backup 
--

SET @@GLOBAL.GTID_PURGED='91a08937-7b0b-11e7-9575-52540061843d:1-6';
在slave上恢复前需要清空 gtid_executed 变量

reset master;        #清空gtid_executed
source /tmp/alldatabase.sql;  #导入备份

或者

mysql -h127.0.0.1 --user=root -pxxxxxx < /tmp/alldatabase.sql  #导入

此时恢复出的 MySQL 实例的 GTID_EXECUTED 和在主库备份时的一致:
可以直接进行主从同步了·


相关博文:

发表新评论