博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL增量备份与恢复
阅读量:6154 次
发布时间:2019-06-21

本文共 2292 字,大约阅读时间需要 7 分钟。

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

增量备份的特点:

优点:没有重复数据,备份量不大,时间短。

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

增量备份与恢复实验:

(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--position

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


本篇总结:

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

使用分割日志的方式进行增量备份。

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

转载于:https://blog.51cto.com/13721050/2172797

你可能感兴趣的文章
Codeforces Round #431 (Div. 1)
查看>>
如何进行数组去重
查看>>
将标题空格替换为 '_' , 并自动复制到剪切板上
查看>>
List Collections sort
查看>>
Mysql -- You can't specify target table 'address' for update in FROM clause
查看>>
使用局部标准差实现图像的局部对比度增强算法。
查看>>
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>
菜鸡互啄队—— 团队合作
查看>>
HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法...
查看>>
SparseArray
查看>>
第二章
查看>>
android背景选择器selector用法汇总
查看>>
[转]Paul Adams:为社交设计
查看>>
showdialog弹出窗口刷新问题
查看>>
java
查看>>
Vue.js连接后台数据jsp页面  ̄▽ ̄
查看>>
关于程序的单元测试
查看>>
mysql内存优化
查看>>
都市求生日记第一篇
查看>>