MySQL binlog后面的编号最大是多大?

原文地址:http://mp.weixin.qq.com/s/gDpWhlBawRal_pQK2huTMA


具体文章请关注微信公众号:izhishuedu 【知数堂】 知数堂版权所有。


这里我就不啰嗦了,直接上贴代码:

版本:5.7.18

mysql-5.7.18/sql/binlog.cc  大约在3310行开始:

wKiom1lL05rjNeJZAABIoVTebz8967.png


MAX_LOG_UNIQUE_FN_EXT这个值在mysql-5.7.18/sql/binlog.cc  的3253行有定义。是0x7FFFFFFF,转换成10进制就是2147483647。也就是binlog文件编号最大到2147483647(文件名可以为这个),超过就个就报错退出了。

wKioL1lL1CySkbNmAAA3CPLfwR0552.png

wKiom1lL1kvRdu5VAACIcssCLUM013.png

上面2张图中,可以看到有个宏定义LOG_WARN_UNIQUE_FN_EXT_LEFT 为1000,就是说当binlog文件名超过1000时候,就会在errlog里面记录"请考虑归档部分binlogs"。



如果我们人工创建个binlog文件名为mysql-bin.2147483645 然后启动mysql,并执行几次flush logs,就会触发binlog最大值的报错。

报错导致mysqld退出后,我们可以去看下errlog里面内容如下:

wKioL1lL1V7AHIrsAABpt8OrFIk025.png


这时候,解决办法就是reset master; 清理掉之前的binlog。

当然,按照目前常理来讲,即便我们1分钟切割一次binlog,要达到最大值也要4K年。一般我们不会遇到这个问题的。