原文地址:http://mp.weixin.qq.com/s/gDpWhlBawRal_pQK2huTMA
具体文章请关注微信公众号:izhishuedu 【知数堂】 知数堂版权所有。
这里我就不啰嗦了,直接上贴代码:
版本:5.7.18
mysql-5.7.18/sql/binlog.cc 大约在3310行开始:
MAX_LOG_UNIQUE_FN_EXT这个值在mysql-5.7.18/sql/binlog.cc 的3253行有定义。是0x7FFFFFFF,转换成10进制就是2147483647。也就是binlog文件编号最大到2147483647(文件名可以为这个),超过就个就报错退出了。
上面2张图中,可以看到有个宏定义LOG_WARN_UNIQUE_FN_EXT_LEFT 为1000,就是说当binlog文件名超过1000时候,就会在errlog里面记录"请考虑归档部分binlogs"。
如果我们人工创建个binlog文件名为mysql-bin.2147483645 然后启动mysql,并执行几次flush logs,就会触发binlog最大值的报错。
报错导致mysqld退出后,我们可以去看下errlog里面内容如下:
这时候,解决办法就是reset master; 清理掉之前的binlog。
当然,按照目前常理来讲,即便我们1分钟切割一次binlog,要达到最大值也要4K年。一般我们不会遇到这个问题的。