mysql数据库binlog日志的异地备份
MySQL数据库的二进制日志binlog记录了对数据库的全量DDL和DML操作,对数据库的point to point灾难恢复起着无法替代的关键作用。因此,基于此类考虑,需要对生产环境产生的binlog做好相应的备份措施。
这里主要谈及2种备份方法,一种通过脚本定时调度的方式,强行切换binlog,增量备份二进制binlog。另一种则是通过mysqlbinlog的远程实时备份的方式实现binlog备份。
1、基于flush logs方式实现binlog文件切换
基本原理:通过last_binlog_pos.txt文件记录上一次备份的位置点信息,下一次备份基于该位置点信息进行增量备份。如果是首次备份(last_binlog_pos.txt文件不存在,则全量备份binlog);通过flush logs的方式强行切换binlog文件(只备份到次新的binlog文件),避免备份binlog过程中,MySQL仍对其进行写入操作;备份每个binlog文件对其生产侧和备份侧的binlog文件md5值进行校验,校验不通过通过配置重传次数$num,超过重传次数仍md5值校验不通过的话,放弃该binlog备份并记录到日志。
脚本如下:
2、通过mysqlbinlog方式实现远程异地备份binlog。
基本原理:通过mysqlbinlog的--read-from-remote-server、 --stop-never参数实现异地binlog实时备份。通过while死循环的方式,避免由于网络等异常造成的断连。
脚本如下:
综上所述,这两种binlog备份的方式各有优缺点:
缺点:
第一种方式,必须通过定时调度的方式实现备份,极端情况下存在丢失binlog的可能(在两个定时调度的窗口时间,MySQL异常并且所有生产binlog不可用,这个窗口时间产生的binlog无法备份到)。
第二种方式,通过mysqlbinlog的功能去实现实时备份,无法确认备份的可用性,即无法通过对比文件md5值来判断文件是否同生产环境保持一致。极端情况下会出现异常(网络异常造成的断连并且备份路径的binlog被误操作),因为断连是通过while死循环去实现重连的,而重连的位置点信息是基于备份路径下的最新binlog文件。
优点:
第一种方式,可以通过验证md5值的方式确保备份同生产的一致性。备份的逻辑简单,便于理解。
第二种方式,可以实现binlog实时备份功能。
所以,基于以上的优缺点分析,选择哪种备份策略,仍需要根据生产环境的实际需要进行抉择。
相关文章
- 第 12 章 MySQL 可扩展设计的基本原则
- mysql数据库使用mysqldump工具针对一个数据库备份,使用--databases选项与不使用该参数的区别
- mysql数据库,什么是数据库的全备份?
- MySQL 数据库备份种类以及经常使用备份工具汇总
- 用navicat连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理
- MySQL通过增加用户实现远程连接数据库
- MySQL:使用mysqldump在Windows数据库定时备份
- MySQL实战系列2:你不可不知的数据库操作
- 【数据库提权】MySQL UDF提权 (Window环境)
- 数据库 SQL Server 到 MySQL 迁移方法总结
- Linux单机MySQL数据库自动备份
- jboss7.1.1配置数据库mysql与oracle
- Exel文件数据导入至Mysql数据库
- mysql命令(数据库备份与恢复)
- 转 如何使用Mysqldump备份和还原MySQL数据库
- MySQL数据库基础:安装+登入+SQL操作语句+数据库授权、备份、恢复+其他操作
- 支持MySql的数据库自动分表工具DBShardTools发布
- 6:7 题一起MySQL数据库分库备份
- 远程linux服务器mysql数据库定期备份和删除
- 定时备份mysql数据库 并删除7天前的备份 (windows linux )
- python操作mysql数据库
- CYQ.Data 轻量数据层之路 V4.3 版本发布[增加对SQLite,MySQL数据库的支持]
- mysql数据库字符集初步理解
- mysql-数据库的主从同步,实现读写分离
- [转]备份与还原mysql 数据库的常用命令。