【云备份最佳实践】利用CBR应用一致性备份实现自建数据库的PITR
准备工作
本章节以Centos7.6操作系统下MySQL 5.6单机版为例,介绍如何通过应用一致性云服务器实现Mysql数据库的PITR还原能力。
- 前提条件
该数据库服务器已经按照数据库服务器备份指导,实现了应用一致性备份,且应该一致性备份成功,如下图所示。
- 场景介绍
某企业购买了云服务器,并在云服务器中安装了MySQL 5.6数据库用于存放业务数据。采用应用一致性备份后,减小RTO与RPO。但是仍然不能恢复到指定时刻点导致部分数据丢失,需要更精确的恢复能力。
详细步骤
- 步骤 1 购买SFS Turbo资源并组合购买CBR存储库。该Turbo将用于存储binlog文件,需要将该文件系统定期备份,以避免文件系统误中勒索病毒或被误删除。
- 步骤 2 参考用户指南将SFS Turbo实例挂载至数据库服务器上,假设挂载路径为/mnt/sfs_turbo。
步骤 3 确保自建的Mysql数据库已经开启binlog功能。如果没有开启的话,执行vim /etc/my.cnf,在[mysqld]分组下,添加配置:
log-bin=/var/lib/mysql/mysql-bin
保存退出,并重启数据库让其生效。
同时开启同步binlog开关:
set global sync_binlog=1
- 步骤 4 编写自定义脚本,将Mysql数据库产生的binlog定时向SFS Turbo挂载的路径定时同步,确保最新的binlog都能复制到SFS Turbo资源上。示例脚本如下:
同时编辑crontab文件,每5分钟执行一次该脚本。
由于是每5min同步一次,因此备份端的binlog状态会滞后一些。
- 步骤 5 编写脚本,向Mysql数据库定时插入数据。向customers数据库插入39w+数据。
- 步骤 6 由于误删除操作,此时将数据库误删除,此时数据全部丢失。
下面将模拟如何使用备份结合binlog还原到指定状态。
- 步骤 7 在CBR界面上找到该数据库服务器最近的备份时刻点,并将其还原到基准时刻点。
CBR即时恢复能力分钟级还原数据库服务器。
还原成功后,进入数据库查看,已经有28w+的数据存在了。
剩下的数据就需要结合binlog进行还原了。
- 步骤 8 将binlog自动拷贝的crontab关闭,否则会导致还原后的binlog覆盖源binlog(非常重要)。
vim /etc/crontab
将自动同步脚本注释后,并保存。
- 步骤 9 将第一步创建的SFS Turbo重新挂载到数据库服务器。(因为恢复之后虚拟机的挂载点会消失,需要重新挂载。此处未避免步骤8被遗忘导致脚本覆盖sfs-turbo上的binlog,此处建议挂载到新路径,如/mnt/sfs_turbo222)
可以看到此时数据库默认的binlog是比归档的binlog日志要少的。
- 步骤 10 获取当前数据库所处的position。
-- 找到当前数据库,mysql-bin.000002文件最后一个语句如下,执行命令:
mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000002 | less
假设需要还原到394146的数据,获取结束的pos为31109616
- 步骤 12 重做binlog。
使用命令:mysqlbinlog --start-position=1649856 --stop-position=31109616 /mnt/sfs_turbo/mysql-bin.000002| mysql -uroot -p
并按照提示输入密码后,将会重做binlog。
执行完成后,再次进入数据库查看数据,发现数据还原到指定的pos位置了。
该文档目的是演示如何结合应用一致性实现自建Mysql数据库的PITR(Point-In-Time Recovery)的恢复能力,仅供参考。
- 点赞
- 收藏
- 关注作者
评论(0)