【云备份最佳实践】利用CBR应用一致性备份实现自建数据库的PITR

举报
小W 发表于 2023/02/23 21:40:55 2023/02/23
【摘要】 准备工作本章节以Centos7.6操作系统下MySQL 5.6单机版为例,介绍如何通过应用一致性云服务器实现Mysql数据库的PITR还原能力。前提条件该数据库服务器已经按照数据库服务器备份指导,实现了应用一致性备份,且应该一致性备份成功,如下图所示。场景介绍某企业购买了云服务器,并在云服务器中安装了MySQL 5.6数据库用于存放业务数据。采用应用一致性备份后,减小RTO与RPO。但是仍然...

准备工作

本章节以Centos7.6操作系统下MySQL 5.6单机版为例,介绍如何通过应用一致性云服务器实现Mysql数据库的PITR还原能力。

  • 前提条件

该数据库服务器已经按照数据库服务器备份指导,实现了应用一致性备份,且应该一致性备份成功,如下图所示。

备份详情.png

  • 场景介绍

某企业购买了云服务器,并在云服务器中安装了MySQL 5.6数据库用于存放业务数据。采用应用一致性备份后,减小RTORPO。但是仍然不能恢复到指定时刻点导致部分数据丢失,需要更精确的恢复能力。


 详细步骤

  • 步骤 1 购买SFS Turbo资源并组合购买CBR存储库。该Turbo将用于存储binlog文件,需要将该文件系统定期备份,以避免文件系统误中勒索病毒或被误删除。

步骤1.png

  • 步骤 2 参考用户指南将SFS Turbo实例挂载至数据库服务器上,假设挂载路径为/mnt/sfs_turbo

步骤2.png

步骤 3 确保自建的Mysql数据库已经开启binlog功能。如果没有开启的话,执行vim /etc/my.cnf,在[mysqld]分组下,添加配置:

log-bin=/var/lib/mysql/mysql-bin

   保存退出,并重启数据库让其生效。

步骤3.png

同时开启同步binlog开关:

         set global sync_binlog=1

  • 步骤 4 编写自定义脚本,将Mysql数据库产生的binlog定时向SFS Turbo挂载的路径定时同步,确保最新的binlog都能复制到SFS Turbo资源上。示例脚本如下:

步骤4.png

同时编辑crontab文件,每5分钟执行一次该脚本。

步骤4-2.png

由于是每5min同步一次,因此备份端的binlog状态会滞后一些。

步骤4-3.png

  • 步骤 5 编写脚本,向Mysql数据库定时插入数据。向customers数据库插入39w+数据。

步骤5.png

  • 步骤 6 由于误删除操作,此时将数据库误删除,此时数据全部丢失。

步骤6.png

下面将模拟如何使用备份结合binlog还原到指定状态。

    • 步骤 7 在CBR界面上找到该数据库服务器最近的备份时刻点,并将其还原到基准时刻点。

    步骤8.png

    CBR即时恢复能力分钟级还原数据库服务器。

    步骤8-2.png

    还原成功后,进入数据库查看,已经有28w+的数据存在了。

    步骤8-9.png

    剩下的数据就需要结合binlog进行还原了。

    • 步骤 8 将binlog自动拷贝的crontab关闭,否则会导致还原后的binlog覆盖源binlog(非常重要)

    vim /etc/crontab

    步骤7.png

    将自动同步脚本注释后,并保存。

    •  步骤 9 将第一步创建的SFS Turbo重新挂载到数据库服务器。(因为恢复之后虚拟机的挂载点会消失,需要重新挂载。此处未避免步骤8被遗忘导致脚本覆盖sfs-turbo上的binlog,此处建议挂载到新路径,如/mnt/sfs_turbo222)

    步骤9.png

    可以看到此时数据库默认的binlog是比归档的binlog日志要少的。

    步骤9-2.png

    • 步骤 10 获取当前数据库所处的position

    -- 找到当前数据库,mysql-bin.000002文件最后一个语句如下,执行命令:

    mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000002 | less

    步骤12.png

       假设需要还原到394146的数据,获取结束的pos31109616

     

    • 步骤 12 重做binlog

    使用命令:mysqlbinlog --start-position=1649856 --stop-position=31109616 /mnt/sfs_turbo/mysql-bin.000002| mysql -uroot -p

    并按照提示输入密码后,将会重做binlog

    执行完成后,再次进入数据库查看数据,发现数据还原到指定的pos位置了。

    步骤13.png

    该文档目的是演示如何结合应用一致性实现自建Mysql数据库的PITR(Point-In-Time Recovery)的恢复能力,仅供参考。

    【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
    • 点赞
    • 收藏
    • 关注作者

    评论(0

    0/1000
    抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。