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

增量备份的特点:

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

增量备份与恢复实验:

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


(9) 接下来是基于时间点恢复:
通过查看二进制日志文件: 180903 15:31:56 错误操作时间点 --stop-datetime
[root@localhost 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
[root@localhost 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
[root@localhost data]# mysqlbinlog --no-defaults --stop-position='833' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p
通过查看二进制日志文件:At 930 下一次可以被正确执行的位置 --start--position

[root@localhost data]# mysqlbinlog --no-defaults --start-position='930' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p


本篇总结:

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

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