MySQL增量备份与恢复

上篇讲的彻底备份咱们如今总结出彻底备份会有大量的重复数据,而且彻底备份的时间与恢复的时间很长。解决彻底备份存在的问题就是使用增量备份的方式,增量备份就是备份自上一次备份以后增长或改变的文件或者内容。mysql

增量备份的特色:sql

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

增量备份与恢复实验:vim

(1)先进MySQL的配置文件,配置二进制日志,重启服务:
[root@localhost ~]# vim /etc/my.cnf
MySQL增量备份与恢复
[root@localhost ~]# systemctl restart mysqld.service //配置完重启服务
MySQL增量备份与恢复
(2)接下来登陆MySQL数据库,建立数据库并建表写入内容:
MySQL增量备份与恢复
MySQL增量备份与恢复
(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)使用flush logs命令生成一个二进制文件:
[root@localhost data]# mysqladmin -uroot -p flush-logs
MySQL增量备份与恢复
(6)接下来修改表内容,会在第二个二进制文件mysql_bin.000002中记录增量数据及操做:
MySQL增量备份与恢复
(7)查看新生成的二进制日志文件 [root@localhost data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql_bin.000002
MySQL增量备份与恢复
(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--positionide

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


本篇总结:

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

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

相关文章
相关标签/搜索