前往小程序,Get更优阅读体验!
立即前往
社区首页 >专栏 >xtra+binlog增量备份脚本(下)

xtra+binlog增量备份脚本(下)

原创
作者头像
陈不成i
修改于 2021-06-10 03:21:48
修改于 2021-06-10 03:21:48
3000
举报
文章被收录于专栏:ops技术分享ops技术分享

四.容灾测试

写入测试数据 创建脚本,脚本将创建一个single库,s1表,持续写入数据。 vim /root/bin/mysql_test.sh

  1. #!/bin/bash
  2. #混合测试数据库脚本
  3. #将创建一个single数据库,其中创建一个s1表
  4. #如果数据库存在,将会写入数据,可以在写入部分sleep 1 来让数据持续写入
  5. #使用方法 ./xx.sh -uroot -p'123456'
  6. #检查
  7. mysql $* -e "show databases;" &> /tmp/info_error.txt
  8. if [[ $? -ne 0 ]];then
  9. echo "time:$(date +%F-%H-%M-%S) info:登陆命令错误"
  10. cat /tmp/info_error.txt #如果错误则显示错误信息
  11. echo
  12. echo "./xx.sh -uroot -p'123456'"
  13. exit 1
  14. fi
  15. #检查库是否存在
  16. mysql $* -e "use single;" &> /tmp/info_error.txt
  17. if [[ $? -eq 0 ]];then
  18. mysql $* -e "use single;select * from s1 where id=1;"
  19. if [[ $? -ne 0 ]];then
  20. mysql $* -e "use single;drop table s1;"
  21. mysql $* -e "use single;create table s1(id int AUTO_INCREMENT PRIMARY KEY,name char(20),age int);"
  22. fi
  23. else
  24. mysql $* -e "create database single;"
  25. mysql $* -e "use single;create table s1(id int AUTO_INCREMENT PRIMARY KEY,name char(20),age int);"
  26. fi
  27. #name随机数
  28. random_name() {
  29. local 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)
  30. for i in `seq 1 5`
  31. do
  32. local a=`echo $[RANDOM%24]`
  33. echo -n ${zu[a]}
  34. done
  35. }
  36. #age随机数
  37. random_age() {
  38. local a=`echo $[RANDOM%99]`
  39. echo $a
  40. }
  41. #写入部分
  42. for i in `seq 1 1000`
  43. do
  44. b=`random_name`
  45. c=`random_age`
  46. sleep 2
  47. mysql $* -e "use single;insert into s1(name,age) values('${b}',${c});"
  48. done

执行脚本,持续写入测试数据 bash /root/bin/mysql_test.sh -uroot -p'123456'

模拟备份

1.开启另一个终端,检查数据是否在写入 mysql -uroot -p'123456' -e "use single;select count(*) from s1;"

2.进行全备份,返回ok正确 cd /root/bin bash mybak-all.sh

3.模拟第一天晚上,因为在持续写入数据,等一会再进行增量备份,并备份binlog bash mybak-section.sh bash mybak-binlog.sh -uback -p'123456'

4.等一会,模拟第二天晚上 bash mybak-section.sh bash mybak-binlog.sh -uback -p'123456'

错误恢复

1.模拟出现问题了,停止写入 ctl + c

2.查看当前总数据,为129条 mysql -uroot -p'123456' -e "use single;select count(*) from s1;"

3.模拟误删除数据库 mysql -uroot -p'123456' -e "drop database single;"

4.对最新的状态备份binlog bash mybak-binlog.sh -uback -p'123456'

5.关闭mysql systemctl stop mysql

6.删除数据目录,否则无法恢复 rm -fr /usr/local/mysql/data/*

7.对全备份进行封装,返回ok正确 innobackupex --apply-log --redo-only /bak/mysql-xback/all-backup/

8.合并第一次模拟到全备份,最后一个参数是指定全备份 innobackupex --apply-log --redo-only --incremental-dir=/bak/mysql-xback/2018-12-12-14-51-26/ /bak/mysql-xback/all-backup/

9.合并第二次模拟到全备份 innobackupex --apply-log --redo-only --incremental-dir=/bak/mysql-xback/2018-12-12-14-52-47/ /bak/mysql-xback/all-backup/

10.开始恢复 innobackupex --copy-back /bak/mysql-xback/all-backup/

11.添加权限并启动 chown -R mysql.mysql /usr/local/mysql/data/ systemctl start mysql

12.查看数据恢复到125条,正常前是129条 mysql -uroot -p'123456' -e "use single;select count(*) from s1;"

13.查看备份时的pos点 cat /bak/mysql-xback/2018-12-12-14-52-47/xtrabackup_info | grep binlog_pos

显示如下 binlog_pos = filename ‘mysql-bin.000003’, position ‘1509’

14.解压最后2个binlog压缩包 cd /bak/mysql-binback/ tar -xf mybak-section-2018-12-12-15-07.tar.gz tar -xf mybak-section-2018-12-12-15-15.tar.gz

15.进入第二个包,它是在最后一次增量备份后才执行的binlog cd mybak-section-2018-12-12-15-07

将1509pos点之前的行删除,每个binlog文件前18行要保留 mysqlbinlog mysql-bin.000003 > 03.log cat 03.log | grep -n 1509

恢复数据 cat 03.log | mysql -uroot -p'123456'

当前总是为128 mysql -uroot -p'123456' -e "use single;select count(*) from s1;"

16.进入倒数第一个包,它存放出问题之前的数据 cd mybak-section-2018-12-12-15-15

将drop这个有问题的指令之后的行删除 mysqlbinlog mysql-bin.000004 > 04.log cat 04.log | grep -n drop

恢复数据 cat 04.log | mysql -uroot -p'123456'

当前总是为129 mysql -uroot -p'123456' -e "use single;select count(*) from s1;"

五.重写测试

进入到脚本目录 cd /root/bin

执行重写脚本 bash mybak-rewrite.sh

可以看到原先目录只有一个全备份 ls /bak/mysql-xback/

原先的全备份和增量备份的打包 ls -lh /bak/xback/

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 四.容灾测试
    • 模拟备份
    • 错误恢复
  • 五.重写测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文