我已经安装了mariadb版本10.0.21。
我需要每5分钟备份一次到TSM的binlog文件,但是由于每秒钟编写一次binlog,我担心文件在复制时会损坏。这种情况有可能发生吗?如果binlog被破坏(结束),它会破坏整个文件还是我可以丢弃最后一行?还有其他的解决方案吗?我们已经有了主/从复制,但是出于安全和审计的原因,我们需要保留一个binlog的副本。
问候
发布于 2015-11-15 04:50:43
如果您在linux下工作,则可以使用个性化备份- https://www.percona.com/software/mysql-database/percona-xtrabackup进行热bin-log备份。
发布于 2019-11-09 23:39:42
不久前,我回答了一个类似的问题:https://dba.stackexchange.com/a/246571/30545,为了方便起见,我把它粘贴到这里:
为您的数据库保存压缩的二进制日志档案是实现数据库时间点恢复的一种非常常见的方法,前提是您有一个完整的备份,您可以从中滚出。
只需使用远程传输过程(例如scp)复制二进制日志就可以了--它们可以按原样应用;但是,如果二进制日志正在使用、被旋转/清除,以及最重要的是,因为它们是最后的日志,则可能会造成不便。尽管你可以解决这个问题,但是有一个更简单的方法:
mysqlbinlog是mysql客户端代码中包含的实用工具,它不仅允许将绑定日志转换为sql,而且还允许使用mysql协议对它们进行远程流(因此不需要设置附加的基础结构和代码)。特别是,-R选项将允许您连接到远程服务器,并在本地对其绑定日志进行流。结合-生和-停-永远不要选项,您将有一个内置选项,可以几乎实时地以原始格式对二进制日志进行流处理,而不必处理不同的文件和丢失事件等。不过,您可能仍然希望包装这些选项,以便处理远程副本上可能出现的连接错误和其他问题。
从上次mysqldump的确切时间开始,我如何才能得到二进制日志?
为此,您需要使用--master-data或--dump-slave选项 (以及单事务或其他实现一致性的方式)运行mysqldump,并收集binlog或gtid坐标。这样,您就可以配置从哪里开始收集绑定日志(或者更简单,从哪里开始应用这些日志)。让事情变得更容易的一个诀窍是在转储之前运行FLUSH LOGS,这样在执行时间点恢复时就可以移动更少的数据。
如果在此之前开始了另一个事务,并在此之后完成了事务,那么它是否仍然正确地包含在日志中?
它可能在日志中,也可能不在日志中,但是它根据mysqldump的坐标将不包括在内。事务只包含在提交时间的binlog中。同时,它们被缓存在内存或磁盘上。虽然可以像您想的那样分割日志,但我建议尽可能保持它们与msater的原始格式相似,并使用坐标来处理不同备份的一致性--为了简单起见,这样就可以重用相同的文件来恢复类似的备份。
我可以使用mysqlbinlog只获取自上次mysqldump以来的更改吗?
如果您仍然喜欢将它们分开,请使用我前面建议的旋转,但是您可能需要增加(不必要的)数据库锁定,以使日志和备份的旋转保持一致。或者您也可以使用--start-position和--stop-position mysqlbinlog选项进行一次复制。
https://dba.stackexchange.com/questions/121041
复制相似问题