大家好,我是 JiekeXu,江湖人称“强哥”,青学会 MOP 技术社区主席,荣获 Oracle ACE Pro 称号,墨天轮 MVP,墨天轮年度“墨力之星”,拥有 Oracle OCP/OCM 认证,MySQL 5.7/8.0 OCP 认证以及 PCA、PCTA、OBCA、OGCA、KCA、KCP、KCM、KCSM 等众多国产数据库认证证书,欢迎关注我的微信公众号“JiekeXu DBA之路”,然后点击右上方三个点“设为星标”置顶,更多干货文章才能第一时间推送,谢谢!

背景
在这个信息化时代,数据的重要性不言而喻,相对于企业而言,数据丢失则会带来严重的后果。为了保障数据的安全和可靠性,备份数据恢复验证变的致关重要,本测试验证旨在验证 MySQL Xtrabackup 备份数据的有效性。
目标
验证一个完整备份集能够正常恢复,无任何报错,且能够恢复到指定的时间点提供正常服务。
环境说明
OS配置:单机 X86 Linux 7.9 虚拟机,CPU 内存配置16c/64GB,6TB /data 本地磁盘。
DB配置:安装MySQL 社区版 8.0.15,innodb_buffer_pool_size=12GB
测试步骤
1、准备安装好 MySQL 社区版 8.0.15以及备份恢复软件 Xtrabackup、qpress(Innobackupex 解压缩工具)
wget https://docs-tencentdb-1256569818.cos.ap-guangzhou.myqcloud.com/qpress-11-linux-x64.tar
tar -xf qpress-11-linux-x64.tar -C /usr/local/bin
source /etc/profile
2、通过备份一体机或者 NFS 恢复或拷贝一个全备(每周六全备,其他增备)数据到备份恢复验证机器 /data/backup/mysqlbak 目录
3、通过xtrabackup如下命令解压所有的备份
xtrabackup --decompress --use-memory=8G --target-dir=/data/backup/mysqlbak/2024-10-19-6
xtrabackup --decompress --use-memory=8G --target-dir=/data/backup/mysqlbak/2024-10-20-0
xtrabackup --decompress --use-memory=8G --target-dir=/data/backup/mysqlbak/2024-10-21-1
xtrabackup --decompress --use-memory=8G --target-dir=/data/backup/mysqlbak/2024-10-22-2
xtrabackup --decompress --use-memory=8G --target-dir=/data/backup/mysqlbak/2024-10-23-3
xtrabackup --decompress --use-memory=8G --target-dir=/data/backup/mysqlbak/2024-10-24-4

如下所示,解压完成。

4、通过xtrabackup进行全量恢复
xtrabackup --prepare --apply-log-only --use-memory=8G --target-dir=/data/backup/mysqlbak/2024-10-19-6


合并其他几天的增量备份数据。
xtrabackup --prepare --apply-log-only --use-memory=8G --target-dir=/data/backup/mysqlbak/2024-10-19-6 --incremental-dir=/data/backup/mysqlbak/2024-10-20-0
xtrabackup --prepare --apply-log-only --use-memory=8G --target-dir=/data/backup/mysqlbak/2024-10-19-6 --incremental-dir=/data/backup/mysqlbak/2024-10-21-1
xtrabackup --prepare --apply-log-only --use-memory=8G --target-dir=/data/backup/mysqlbak/2024-10-19-6 --incremental-dir=/data/backup/mysqlbak/2024-10-22-2
xtrabackup --prepare --apply-log-only --use-memory=8G --target-dir=/data/backup/mysqlbak/2024-10-19-6 --incremental-dir=/data/backup/mysqlbak/2024-10-23-3
--合并最后增量备份
xtrabackup --prepare --use-memory=8G --target-dir=/data/backup/mysqlbak/2024-10-19-6 --incremental-dir=/data/backup/mysqlbak/2024-10-24-4


5、通过 xtrabackup 恢复 MySQL
xtrabackup --defaults-file=/data/mysql/conf/mysql.conf --copy-back --use-memory=8G --target-dir=/data/backup/mysqlbak/2024-10-19-6


6、登录 MySQL 数据库验证
mysql -uroot -h 192.168.xx.xx -P3306 -pxxxxx
验证恢复后的数据库,比较两端数据库个数和个别表的记录数一样,则恢复无问题。
如果备份了 binlog,则可以通过 binlog 恢复到某个时间点或最后一个 binlog 所在的时间点。 如下则是恢复binlog 的步骤。
查看备份文件中最后备份binlog位置

查看数据库在恢复前MySQL gitd及binlog位置
查看恢复前ccte.t_axxion表数量

执行命令,从备份结束位置,开始恢复binlog
mysqlbinlog binlog.004454 --start-position=231 | mysql -uroot -h 192.168.xx.xx -P3306 -p

恢复后 MySQL gitd 及 binlog 位置
查看恢复后cc.t_axxion表数量,已经发生了增长。

测试结果
通过以上测试恢复及登录验证,原库和恢复库数据库一致,恢复无报错,算是正常恢复了。随机查看数据库和对应的表数据,记录数一致,则可验证恢复没有问题。然后通过备份 binlog 还可以进行基于时间点的恢复,能够恢复到指定时间的数据。
测试结论
通过本次拿到的一周全备加每天的增备及 binlog 日志,可以将数据库恢复到一个特定的时间点,也验证了本次备份集的备份有效性,符合预期。以上是本次 MySQL 备份有效性恢复验证的过程,如有问题,可随时与我交流沟通,谢谢。
全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~
欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
——————————————————————————





