innobackupex备份+binlog日志的完全恢复

2021年9月22日15:12:12 发表评论
摘要

【微语】当你很累很累的时候,不妨闭上眼睛,告诉自己,关于明天的事后天才知道,在一切变好之前,我们总要经历一些不开心的日子。即使没有人为你鼓掌,也要优雅的谢幕,感谢自己认真的付出。

前言:
Mysql的完全恢复,我们可以借助于完整的备份+binlog来将数据库恢复到故障点。备份可以是热备与逻辑备份(mysqldump),只要备份与binlog是完整的,都可以实现完全恢复
1、准备环境
mysql> select version();
innobackupex备份+binlog日志的完全恢复
mysql> create database com_rec;
innobackupex备份+binlog日志的完全恢复
mysql> use com_rec;
mysql> create table andy (id int);
innobackupex备份+binlog日志的完全恢复
mysql> insert into andy values(1),(2);
innobackupex备份+binlog日志的完全恢复
2、全备一次
[root@hostname myname ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=abc.123ASD --port=3306 /data/backup/full/
innobackupex备份+binlog日志的完全恢复
3、查看全备份生成文件
[root@hostname myname ~]# cd /data/backup/full/
innobackupex备份+binlog日志的完全恢复
4、模拟业务新数据
mysql> insert into andy values(3),(4);
innobackupex备份+binlog日志的完全恢复
5、增量备份
--创建存放增量备份目录并授权--
[root@hostname myname backup]# mkdir incr
[root@hostname myname backup]# chown -R mysql.mysql incr/
innobackupex备份+binlog日志的完全恢复
----开始增量备份----
[root@hostname myname backup]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=abc.123ASD --incremental --incremental-basedir=/data/backup/full/2021-09-14_23-49-57/ /data/backup/incr/
innobackupex备份+binlog日志的完全恢复
6、在模拟新业务,该记录在保存在binlog.而不会存在于任何备份,这条记录用于验证完全恢复
mysql> insert into andy values(5);
innobackupex备份+binlog日志的完全恢复
7、记录下操作后的position点
mysql> show master status;
innobackupex备份+binlog日志的完全恢复
8、切换下binlog日志
mysql> flush logs;
innobackupex备份+binlog日志的完全恢复
9、使用binglog events命令来查看我们最后insert的一条记录
mysql> show binlog events in 'mysql-bin.000008';
innobackupex备份+binlog日志的完全恢复
10、恢复
--先基于全备的apply ,注意,此时使用 - - redo-only
[root@hostname myname backup]# innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /data/backup/full/2021-09-14_23-49-57/
innobackupex备份+binlog日志的完全恢复
11、在恢复增量备份集:--此时没有—redo-only,如果有多个增备,仅仅最后一个增备无需指定—redo-only
[root@hostname myname backup]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=abc.123ASD --apply-log /data/backup/full/2021-09-14_23-49-57/ --incremental-dir=/data/backup/incr/2021-09-15_00-02-56/
说明:/data/backup/full/2021-09-14_23-49-57/为全备目录,--incremental-dir 为增量备份
innobackupex备份+binlog日志的完全恢复
12、关闭要恢复的实例
[root@hostname myname backup]# /etc/init.d/mysqld stop
innobackupex备份+binlog日志的完全恢复
13、将原有文件重命名到新位置,并创建原文件夹
[root@hostname myname backup]# mv /data/mysql /data/mysqlback
[root@hostname myname backup]# mkdir -p /data/mysql
innobackupex备份+binlog日志的完全恢复
14、执行拷贝恢复的文件到原来的数据位置
[root@hostname myname backup]# innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/backup/full/2021-09-14_23-49-57/
innobackupex备份+binlog日志的完全恢复
说明:/data/backup/full/2021-09-14_23-49-57/ 为全备目录
15、权限修改
[root@hostname myname data]# chown mysql.mysql mysql –R
innobackupex备份+binlog日志的完全恢复
16、剪切源文件里面的binlog日志文件到新的数据目录下面
[root@hostname myname data]# mv mysqlback/mysql-bin.* mysql/
innobackupex备份+binlog日志的完全恢复
17、启动恢复后的实例
[root@hostname myname mysql]# /etc/init.d/mysqld start
innobackupex备份+binlog日志的完全恢复
18、登录检查
[root@hostname myname ~]# mysql -uroot -pabc.123ASD
mysql> use com_rec;
mysql> select * from andy;
innobackupex备份+binlog日志的完全恢复
此时我们看到恢复成功了,但是没有恢复到最新,缺少 id=5,mysql-binlog记录并没有被恢复
19、使用binlog做完全恢复
[root@hostname myname ~]# cd /data/backup/full/2021-09-15_00-31-45/
--从innobackupex获得binlog的位置--
[root@hostname myname 2021-09-15_00-31-45]# more xtrabackup_binlog_info
innobackupex备份+binlog日志的完全恢复
--使用mysqlbinlog追加最新
[root@hostname myname 2021-09-15_00-31-45]# mysqlbinlog --start-position=1191 --stop-position=1452 /data/mysql/mysql-bin.000008|mysql -uroot -pabc.123ASD
--验证数据是否恢复成功,如果可以看到最后一条数据表示恢复--
mysql> select * from andy;
innobackupex备份+binlog日志的完全恢复
总结

  • 对于完全恢复,我们需要使用备份加binlog两者结合的方式来实现
  • 在恢复期间,首先使用带read-only的apply-log方式来prepare全备
  • 接下来使用带 read-only的apply-log方式来prepare增备,仅最后一个增备可以不用read-only
  • 停止原有实例,并copy-back后启动恢复后的实例
  • 从innobackupex备份信息中获取最后的binlog日志及位置信息
  • 使用mysqldump方式将日志追加到最新的时刻

20、Innobackupex全量备份+binlog日志的备份完全恢复数据
实验概述:

1、模拟凌晨12点备份一次全量备份数据
2、模拟当天新增了一个数据库以及一些数据
3、模拟误删了数据以及数据
4、使用全量备份+加binglog日志恢复完整的数据
一、模拟凌晨12点全量备份一份数据
innobackupex备份+binlog日志的完全恢复
[root@hostname myname ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=abc.123ASD --port=3306 /data/backup/full/
innobackupex备份+binlog日志的完全恢复
innobackupex备份+binlog日志的完全恢复
#全量备份完成
二、模拟新增了一个数据库,以及一些数据
mysql> create database com_rec; \\创建数据库
mysql> use com_rec; \\进入到数据库
mysql> create table andy (id int); \\创建数据库表
mysql> insert into andy values(1),(2); \\创建2条数据
mysql> insert into andy values(3),(4); \\ 创建2条数据

innobackupex备份+binlog日志的完全恢复
三、模拟删除了数据库
mysql> drop database com_rec;
innobackupex备份+binlog日志的完全恢复
4、使用全量备份+加binglog日志恢复完整的数据
1、恢复之前我们一定要确定删除的时间点范围是那个,由这个时间来取binlog恢复的时间点
获取目前数据库使用的binlog日志文件
[root@hostname myname mysql]# cat mysql-bin.index
innobackupex备份+binlog日志的完全恢复
[root@hostname myname mysql]# mysqlbinlog mysql-bin.000013 |grep "server id"
innobackupex备份+binlog日志的完全恢复
红框内的时间非常重要,这个是你删除文件之前的一个post点2061
#全量恢复下数据
[root@hostname myname mysql]# innobackupex --defaults-file=/etc/my.cnf --user=root --apply-log --redo-only /data/backup/full/2021-09-22_21-56-16/
innobackupex备份+binlog日志的完全恢复
#关闭恢复的实例
[root@hostname myname mysql]# /etc/init.d/mysqld stop
innobackupex备份+binlog日志的完全恢复
#将原有的数据库文件重命名到新的位置
[root@hostname myname data]# mv mysql mysql_back
[root@hostname myname data]# mkdir mysql \\重新创建数据目录
# 执行拷贝恢复的文件到原来的数据位置
[root@hostname myname data]# innobackupex --defaults-file=/etc/my.cnf --user=root --copy-back /data/backup/full/2021-09-22_21-56-16/
innobackupex备份+binlog日志的完全恢复
#权限修改下
[root@hostname myname data]# chown mysql.mysql /data/mysql –R
#拷贝原来的数据库中的binlog日志到现有的数据目录里面来
[root@hostname myname data]# mv /data/mysql_back/mysql-bin.* /data/mysql
#启动数据库
[root@hostname myname data]# /etc/init.d/mysqld start
innobackupex备份+binlog日志的完全恢复
#使用binlog做完全恢复
[root@hostname myname 2021-09-22_21-56-16]# cat xtrabackup_binlog_info \\获取post起始点
innobackupex备份+binlog日志的完全恢复
# 使用mysqlbinlog追加的最新
[root@hostname myname ~]# mysqlbinlog --start-position=1190 --stop-position=2061 /data/mysql/mysql-bin.000013 |mysql -uroot -pabc.123ASD
innobackupex备份+binlog日志的完全恢复
#已删除的数据库数据已经恢复

  • 微信公众号
  • 这是我的微信公众号扫一扫
  • weinxin
  • 我的QQ技术群
  • 我的QQ技术群扫一扫
  • weinxin
admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: