MySQL8增量备份1008无标题_mysql增量备份及断点恢复脚本实例

简介

增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。这就意味着,第一次增量备份的对象是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件,如此类推。

目的

解决完全备份中时间长、恢复慢的问题,采取了增量备份

特点

优:无重复数据,备份量不大,时间短

缺:需要上次完全备份及完全备份后的增量备份才能恢复,需对增量备份逐个反复恢复,操作繁琐

实现方式

通过mysql的二进制日志间接实现增量备份:

二进制日志保存了所有更新或可能更新的数据

二进制日志在mysql启动时开始记录,且会重新创建新的日志文件

需定时执行flush logs方法重新创建日志,生成二进制文件序列

实验环境:

安装了mysql5.7数据库的一台centos7虚拟机

操作过程:

一、增量备份

1、在配置文件中添加二进制日志

vim /etc/my.cnf

[mysqld] #在此模块下添加

log-bin=mysql-bin #二进制日志

2、重启服务,并查看二进制日志

systemctl restart mysqld.service

cd /usr/local/mysql/data/

mysqlbinlog --no-defaults mysql-bin.000001

2db43b2b9bc3019478ed0a56658327c1.png

3、在数据库自由创建数据库、表,作为实验模板

2d1426f0d6106e22e2f46637e343effc.png

4、对school数据库进行完全备份

mysqldump -uroot -pabc123 school > /opt/school.sql

5、刷新日志,生成新的日志,注意:之前数据库的操作写入编号为000001的日志中,新生成的000002的日志为空

mysqladmin -uroot -pabc123 flush-logs #刷新日志

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001 #查看000001日志

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 #查看000002日志

#--base64-output=decode-rows -v:避免文件中乱码,前面的查看命令也可以使用

16070b757acef7fc6054ff222d9ea2e7.png

43ca709c052d8e5061a98be95feb02e5.png

6、新添加mysql数据库操作,然后刷新日志,进行增量备份

use school;

mysql>indert into info (id,name,score) values (3,'aaa',78);

mysql>delete from info where name='tom'; #误操作

mysql> insert into info (id,name,score) values (4,'bbb',64);

mysqladmin -uroot -pabc123 flush-logs #刷新日志,生成000003

#此次增量备份已记录到000002日志文件中

fb8025bf46e425c16bf3cbd961f407c6.png

4a868d3d5ec805630e0b712505ff9d5b.png

7、删除info表

mysql -uroot -pabc123 -e 'use school;drop table info;'

8、恢复完全备份,然后恢复增量备份

mysql -uroot -pabc123 school < /opt/school.sql #完全备份还原

7346e3536c7e0288b127c5d7c4b48444.png

mysqlbinlog --no-defaults mysql-bin.000002 | mysql -uroot -p

0a6f0a7adc8c006961d4e7567d37fcf9.png

那么,此处暴露出一个问题,如果出现误操作,还原备份时就会出现错误,并不能实现理想的备份,达到真正的目的。此时,就需要断链恢复(属于恢复增量备份的特殊用法),即在还原时只恢复正确的数据库操作。

二、断链恢复

在操作断链恢复前,需要还原到未进行增量备份还原的状态,如图

4c2a89e09ab2131e9dec825117e0e5ea.png

基于时间点

2018-09-04 16:43:52 错误操作时间 (开头加载到此时间点结束)

2018-09-04 16:44:32 正确操作时间 (从此时间点再次开始加载) 从此时间点再次开始加载

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 #查看000002日志

e02e50e34521e88540d45635b015d3db.png

mysqlbinlog --no-defaults --stop-datetime='2018-09-04 16:43:52' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p

mysqlbinlog --no-defaults --start-datetime='2018-09-04 16:44:32' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p

eac28e1d4186755b97e3f3653bb4ab40.png

基于位置点

at 565 上一次正确执行位置 --stop-position

at 667 下一次正确执行位置 --start-position

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 #查看000002日志

e34e004f76388bec3a9a5e6761f45974.png

mysqlbinlog --no-defaults --stop-position='565' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p

mysqlbinlog --no-defaults --start-position='667' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p

c957e783a23702d150862c4a3fd634b2.png

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值