【MySQL运维】使用binlog2sql工具实现数据回滚
1768
2021-10-12
本文基于从库Xtrabackup的全量备份+实时同步的binlog作为增量备份而实现数据恢复,恢复到的数据状态为最新数据而非指定时间节点数据。由于增量数据是基于binlog进行恢复,所以为了保证备份数据完全,数据库双1参数一定要配置。恢复数据时建议先使用临时的数据库实例进行还原验证,没有问题后再进行生产还原。
一、还原Xtrabackup的全量数据
1、解压经过LZ4压缩的xtrabackup全量备份(如未压缩可跳过)
lz4_decompress /data/mysql_backup/xmglb/mysqlfull_2021-04-06_3308.xbstream /data/restore_mysql/mysqlfull_2021-04-06_3308
2、解压xtrabackup流备份
xbstream -x < /data/restore_mysql/mysqlfull_2021-04-06_3308 -C /data/restore_mysql/
3、应用日志并还原备份文件,确保每次执行后有输出"completed OK"字符串
xtrabackup --defaults-file=/etc/my3333.cnf --prepare --target-dir=/data/restore_mysql/ xtrabackup --defaults-file=/etc/my3333.cnf --move-back --target-dir=/data/restore_mysql/
4、修改权限并启动还原实例
chown -R mysql. /data/mysql3333/ mysqld_safe --defaults-file=/etc/my3333.cnf &
5、在恢复完全量备份后,可以在原实例上创建一些测试数据作为埋点,比如创建test_restore数据库。在增量数据恢复完成后查看埋点数据是否已经还原成功,这样可确保数据恢复的完整性。实际还原过程中对备份文件校验的大致逻辑是恢复全备+增量数据,然后作为线上主库的从服务器,确保数据能正常同步。
二、还原binlog增量数据
1、确定增量数据起始点
#这里是物理备份,所以信息存放于xtrabackup_slave_info cat /data/mysql3333/xtrabackup_slave_info CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000025', MASTER_LOG_POS=887027467;
2、登录还原实例清空从库状态
mysql > reset slave all;
3、导入binlog
需要注意的是在用binlog进行数据恢复时,不能用mysqlbinlog工具解析出日志然后生成SQL文件来直接执行,因为有些语句的执行结果是依赖上下文的,直接执行的结果很可能是错误的。标准做法是用mysqlbinlog工具解析后通过管道传给MySQL执行,如果存在多个二进制日志,不建议一个一个恢复,而是一起导入。如果分两次操作就是开启两个session,如果刚好用到一个临时表,一个session退出,另一个session就会出错
#导入第一个binlog时注意position信息要正确 mysqlbinlog --start-position=887027467 mysql-bin.000025 | mysql -udba -p -S /data/mysql3333/mysql.sock mysqlbinlog mysql-bin.000026 mysql-bin.000027 | mysql -u root -p
4、验证数据,如果用于标识的test_restore已经恢复,基本可以代表数据已经还原到最新位置
发表评论
暂时没有评论,来抢沙发吧~