我们知道,写二进制日志与master数据库中的数据变化并不是一一对应的关系。要保持数据库和二进制日志之间的一致性,以防系统崩溃,就是要做到,如果更新没有写入二进制日志,就不会被提交到存储引擎,反之亦然。
sync-binlog选项可控制数据写入磁盘的频率,其值是一个整数,指定二进制日志写入磁盘的频率,以每提交语句或事务的次数为准,默认值为0,由操作系统决定。在5.6中,由于引入了二进制日志组提交,所以sync以提交组为单位,而不是按事务或语句。对于像InnoDB引擎,将sync-binlog=1,一般情况下操作系统的崩溃不会丢失事务,不支持事务的引擎,可能至少丢失一个事务。
有4种行为会导致二进制日志文件轮换,第一服务器停止,每次服务器启动都会开始一个新的二进制日志。第二,binlog文件大小达到最大限制,可以通过binlog-cache-size来控制binlog文件的大小。第三,二进制日志被显示刷新,flush logs命令将所有日志写入磁盘,然后创建一个新的文件继续写二进制日志。第四,服务器上发生故障,除了完全停止工作以外,服务器还可能遇到其他事故,从而导致二进制日志被轮换。
通过设置expire-logs-days选项,服务器可以自动清除旧的binlog文件。这个选项也可以用作服务器变量,其值为存储binlog文件的天数。也可以手工清除binlog文件,可使用purge binary logs命令。
purgebinary logs before datetime,清除给定时间之前的所有文件。
purgebinary logs to ‘filename’清除给定文件前的所有文件。
清除文件的过程是,首先将那些服务器认为电动机成熟的文件写到清除索引文件,然后,将文件从文件系统中删除,最后删除清除索引文件。