MySQL增量备份与恢复

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL增量备份与恢复相关的知识,希望对你有一定的参考价值。

上篇讲的完全备份我们现在总结出完全备份会有大量的重复数据,并且完全备份的时间与恢复的时间很长。解决完全备份存在的问题就是使用增量备份的方式,增量备份就是备份自上一次备份之后增加或改变的文件或者内容。

增量备份的特点:

优点:没有重复数据,备份量不大,时间短。
缺点:需要上次完全备份及完全备份之后所有的增量备份才能恢复,
mysql没有提供直接的增量备份方法,但是可以通过mysql的二进制文件(binarylogs)间接实现增量备份。二进制日志对备份的意义如下:
(1)二进制日志文件保存了所有更新或者可能更新数据库的操作。
(2)二进制日志在启动MySQL服务器后开始记录,并在文件达到max_binlog_size所设置的大小或者接收到flush logs命令后重新创建新的日志文件。
(3)只需要定时执行flush logs方法重新创建新的日志,生成二进制文件序列,并及时把这些日志保存到安全的地方就完成了一个时间段的增量备份。

增量备份与恢复实验:

(1)先进MySQL的配置文件,配置二进制日志,重启服务:
[[email protected] ~]# vim /etc/my.cnf
技术分享图片
[[email protected] ~]# systemctl restart mysqld.service //配置完重启服务
技术分享图片
(2)接下来登录MySQL数据库,创建数据库并建表写入内容:
技术分享图片
技术分享图片
(3)数据库、表创建好之后做一个完全备份:
[[email protected] ~]# mysqldump -uroot -p company > /opt/company$(date +%F).sql
技术分享图片
(4)创建数据库 表的所有数据和操作将完整记录在第一个二进制文件(mysql-bin.000001)中:
[[email protected] data]# mysqlbinlog --no-defaults mysql_bin.000001
技术分享图片
(5)使用flush logs命令生成一个二进制文件:
[[email protected] data]# mysqladmin -uroot -p flush-logs
技术分享图片
(6)接下来修改表内容,会在第二个二进制文件mysql_bin.000002中记录增量数据及操作:
技术分享图片
(7)查看新生成的二进制日志文件 [[email protected] data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql_bin.000002
技术分享图片
(8)接下来将增量备份的文件恢复到数据库company中的表中:
[[email protected] data]# mysqlbinlog --no-defaults mysql-bin.000001 | mysql -uroot -p
[[email protected] data]# mysqlbinlog --no-defaults mysql-bin.000002 | mysql -uroot -p //使用二进制文件进行恢复操作(需要注意:恢复的顺序,要先恢复最先生成的二进制文件,然后依次执行)


(9) 接下来是基于时间点恢复:
通过查看二进制日志文件: 180903 15:31:56 错误操作时间点 --stop-datetime
[[email protected] data]# mysqlbinlog --no-defaults --stop-datetime=‘2018-09-03 15:31:56‘ /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p
通过查看二进制日志文件:180903 15:32:10 下一个正确操作的时间点 --start-datetime
[[email protected] data]# mysqlbinlog --no-defaults --start-datetime=‘2018-09-03 15:32:10‘ /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p


(10) 接下来是基于位置点恢复:
通过查看二进制日志文件: At 833 上一次可以被正确执行的位置 --stop--position
[[email protected] data]# mysqlbinlog --no-defaults --stop-position=‘833‘ /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p
通过查看二进制日志文件:At 930 下一次可以被正确执行的位置 --start--position

[[email protected] data]# mysqlbinlog --no-defaults --start-position=‘930‘ /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p


本篇总结:

MySQL没有直接提供增量备份的工具,需要借助二进制日志文件进行操作。

使用分割日志的方式进行增量备份。
增量恢复需要根据日志文件的时间先后,逐个执行。
使用基于时间和位置的方式进行恢复,可以更精确地恢复数据。
大企业应每周做一次全备,每天做一次增量备份;中小企业应每天进行一次全备。

以上是关于MySQL增量备份与恢复的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的增量备份与恢复

MySQL 数据库备份(增量备份与恢复)

MySQL增量备份与恢复

# MySQL增量备份与恢复

MySQL 完全备份 + 增量备份+完全恢复

Mysql增量备份与恢复