前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysqldump备份容灾脚本(下)

mysqldump备份容灾脚本(下)

原创
作者头像
陈不成i
修改2021-06-11 14:15:23
1.4K0
修改2021-06-11 14:15:23
举报
文章被收录于专栏:ops技术分享

三.容灾测试

准备

按照第一步,环境需求中,将mysql开启binlog并重启,也可以设置全局变量,不用重启

vim /root/bin/mybak-all.sh,将全量脚本复制到其中,并 chmod+ x /root/bin/mybak-all.sh 添加执行权限。

vim /root/bin/mybak-section.sh,将增量脚本复制到其中,并 chmod +x /root/bin/mybak-section.sh 添加执行权限。

创建测试数据库 create database test;

切换数据库 use test;

创建测试表 create table s1(id int AUTO_INCREMENT PRIMARY KEY,name char(20),age int);

vim /root/bin/testsql.sh 命令创建一个数据插入脚本,随机插入一千条数据用于测试。

  1. #!/bin/bash
  2. ku=one
  3. biao=s1
  4. zi() {
  5. zu=(q w e r t y u i o p a s d f g h j k l z x c v b n m)
  6. for i in `seq 1 5`
  7. do
  8. a=`echo $[RANDOM%24]`
  9. echo -n ${zu[a]}
  10. done
  11. }
  12. for i in `seq 1 1000`
  13. do
  14. b=`zi`
  15. mysql -uroot -p'123456' -e "use test;insert into s1(name,age) values('${b}',${i});"
  16. done

执行脚本 bash /root/bin/testsql.sh

用如下命令检查表的条目数是否是1000条 mysql -uroot -p'123456' -e "use test;select count(*) from s1;"

测试

第一次: 更改时间 date -s 2016-04-04

执行全量脚本 bash /root/bin/mybak-all.sh -uroot -p'123456'

再执行增量脚本 bash /root/bin/mybak-section.sh -uroot -p'123456'

查看是否有2个tar包。可以看到tar包 ls /ops/bak mybak-all-2016-04-04-00-00.tar.gz mybak-section-2016-04-04-00-00.tar.gz

执行脚本插入1000条数据 bash /root/bin/testsql.sh

用如下命令检查表的条目数是否是2000条 mysql -uroot -p'123456' -e "use test;select count(*) from s1;"

第二次: 更改时间 date -s 2016-04-05

执行全量脚本 bash /root/bin/mybak-all.sh -uroot -p'123456'

再执行增量脚本 bash /root/bin/mybak-section.sh -uroot -p'123456'

用查看是否有4个tar包。可以看到如下 ls /ops/bak mybak-all-2016-04-04-00-00.tar.gz / mybak-section-2016-04-04-00-00.tar.gz mybak-all-2016-04-05-00-00.tar.gz / mybak-section-2016-04-05-00-00.tar.gz

执行脚本插入1000条数据 bash /root/bin/testsql.sh

用如下命令检查表的条目数是否是3000条 mysql -uroot -p'123456' -e "use test;select count(*) from s1;"

第三次 更改时间 date -s 2016-04-06

执行全量脚本 bash /root/bin/mybak-all.sh -uroot -p'123456'

再执行增量脚本 bash /root/bin/mybak-section.sh -uroot -p'123456'

用查看是否有4个tar包。可以看到如下 ls /ops/bak mybak-all-2016-04-04-00-00.tar.gz / mybak-section-2016-04-04-00-00.tar.gz mybak-all-2016-04-05-00-00.tar.gz / mybak-section-2016-04-05-00-00.tar.gz mybak-all-2016-04-06-00-00.tar.gz / mybak-section-2016-04-06-00-00.tar.gz

执行脚本插入1000条数据 bash /root/bin/testsql.sh

用如下命令检查表的条目数是否是4000条 mysql -uroot -p'123456' -e "use test;select count(*) from s1;"

误删除

删除: 登陆mysql服务器 mysql -uroot -p’123456’

删除test数据库,用来模拟误操作 drop database test;

恢复第一步:准备 移动到备份所在的目录 cd /ops/bak

解开最近时间点的全量备份包,最近时间是2016-04-06 tar -xf mybak-all-2016-04-06-00-00.tar.gz

解压后可以看到 mybak-all-2016-04-06-00-00.sql 和 2016-04-06-00-00-binlog.txt

其中mybak-all-2016-04-06-00-00.sql 是sql语句,用于恢复某个时间点的全部内容,如果只误操作某个库,可以单独恢复某个库。2016-04-06-00-00-binlog.txt中记录了全备过程中刷新的Binlog文件名。

解压增量备份的文件夹 ,因为这2个脚本是先后执行的,所以不需要解压6号前的,只解压6号及以后的。 tar -xf mybak-section-2016-04-06-00-00.tar.gz

解压后可以看到 mysql-bin.000008 和 mysql-bin.000009 2个binlog日志

恢复第二步:全备份恢复 导入数据进去 mysql -uroot -p'123456' < mybak-all-2016-04-06-00-00.sql

用如下命令检查表的条目数是否是3000条,6号备份完成后,才添加的最后1000条。 mysql -uroot -p'123456' -e "use test;select count(*) from s1;"

恢复第三步:增量恢复 查看应该从哪个binlog文件恢复。当前获得 ./mysql-bin.000014 cat 2016-04-06-00-00-binlog.txt

将 mybak-section-2016-04-06-00-00 文件夹中的 mysql-bin.000014 恢复,因为操作有问题的binlog日志在15中,14日志可以直接用于恢复 mysqlbinlog mybak-section-2016-04-06-00-00/ysql-bin.000014 | mysql -uroot -p'123456'

检查表的条目数是否是3000条,因为在写入3000条后,mysqldmp全备刷新了一下binlog,这个最新的是14,而还没有写入任何东西时便执行增量备份了,刷新了一下binlog,最新的是15,这时候才导入了最新的1000条。如果是持续的在写入,恢复14后会有数据变化。 mysql -uroot -p'123456' -e "use test;select count(*) from s1;"

在mysql数据目录/ops/server/mysql/data/下找到mysql-bin.000015 找出binlog日志中有删除数据库语句的行数,当前为728 mysql -uroot -p'123456' -e "show binlog events in 'mysql-bin.000015'\G" | grep -n "drop database "

找出728前后几行的内容,可以看到出现问题的pos点为5519,恢复到5519之前的数据即可。 mysql -uroot -p'123456' -e "show binlog events in 'mysql-bin.000015'\G" | sed -n '715,730p'

进行恢复,stop-position是指定恢复截止的pos点。 mysqlbinlog --stop-position=5519 mysql-bin.000015 | mysql -uroot -p'123456'

检查表的条目数是否是4000条 mysql -uroot -p'123456' -e "use test;select count(*) from s1;"

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 三.容灾测试
    • 准备
      • 测试
        • 误删除
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档