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实时备份功能。
所以,基于以上的优缺点分析,选择哪种备份策略,仍需要根据生产环境的实际需要进行抉择。