基于从库的Xtrabackup全量备份+binlog文件实现数据恢复,由于增量数据是基于binlog进行恢复,所以为了保证备份数据完全,数据库双1参数一定要配置。恢复数据时建议先使用临时的数据库实例进行还原验证,没有问题后再进行生产还原。
一、还原全量数据
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、确定增量数据起始点
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时注意position信息要正确
mysqlbinlog --start-position=887027467 /data/mysql_binlog_backup/ops/binlog/mysql-bin.000025 | mysql -udba -p -S /data/mysql3333/mysql.sock
#导入后续binlog mysqlbinlog
/data/mysql_binlog_backup/ops/binlog/mysql-bin.000026 | mysql -udba -p -S /data/mysql3333/mysql.sock mysqlbinlog
/data/mysql_binlog_backup/ops/binlog/mysql-bin.000027 | mysql -udba -p -S /data/mysql3333/mysql.sock
4、验证数据,用于标识的test_restore已经恢复,代表还原正常