【MySQL运维】使用备份与binlog恢复MySQL数据

TangLu 449 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已经恢复,基本可以代表数据已经还原到最新位置

版权声明
本站所有文章均为原创,转载请注明出处!小站维护不易,如果对您有所帮助,希望能点击一下站内广告,谢谢!
上一篇:MySQL高可用解决方案(6)数据库中间件之ProxySQL
下一篇:【MySQL运维】SQL性能分析之——explain执行计划
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

微信二维码