具體文章請關注微信公衆号:izhishuedu 【知數堂】 知數堂版權所有。
這裡我就不啰嗦了,直接上貼代碼:
版本:5.7.18
mysql-5.7.18/sql/binlog.cc 大約在3310行開始:
<a href="https://s3.51cto.com/wyfs02/M00/99/C1/wKiom1lL05rjNeJZAABIoVTebz8967.png" target="_blank"></a>
MAX_LOG_UNIQUE_FN_EXT這個值在mysql-5.7.18/sql/binlog.cc 的3253行有定義。是0x7FFFFFFF,轉換成10進制就是2147483647。也就是binlog檔案編号最大到2147483647(檔案名可以為這個),超過就個就報錯退出了。
<a href="https://s1.51cto.com/wyfs02/M00/99/C1/wKioL1lL1CySkbNmAAA3CPLfwR0552.png" target="_blank"></a>
<a href="https://s5.51cto.com/wyfs02/M01/99/C1/wKiom1lL1kvRdu5VAACIcssCLUM013.png" target="_blank"></a>
上面2張圖中,可以看到有個宏定義LOG_WARN_UNIQUE_FN_EXT_LEFT 為1000,就是說當binlog檔案名超過1000時候,就會在errlog裡面記錄"請考慮歸檔部分binlogs"。
如果我們人工建立個binlog檔案名為mysql-bin.2147483645 然後啟動mysql,并執行幾次flush logs,就會觸發binlog最大值的報錯。
報錯導緻mysqld退出後,我們可以去看下errlog裡面内容如下:
<a href="https://s4.51cto.com/wyfs02/M02/99/C1/wKioL1lL1V7AHIrsAABpt8OrFIk025.png" target="_blank"></a>
這時候,解決辦法就是reset master; 清理掉之前的binlog。
當然,按照目前常理來講,即便我們1分鐘切割一次binlog,要達到最大值也要4K年。一般我們不會遇到這個問題的。
本文轉自 lirulei90 51CTO部落格,原文連結:http://blog.51cto.com/lee90/1941114,如需轉載請自行聯系原作者