导读

每个binlog文件都有编号,从最早的3位数(没错,很老的版本只有3位数~),到现在扩展到6位数,从000001开始计数。

但我打赌,你一定不知道这个序号最大可以跑到多少。

在我们知数堂的MySQL DBA课上讲到binlog序号是从000001开始,这时有细心的同学问到,是不是这个序号达到999999后,binlog就要重新开始了?

讲真,当时我也是一下子被问住了,只是隐约记得这个值是可以大于999999的。于是,课后我自己细致地探究了一番,遂有本文。

MySQL在启动时会扫一下binlog文件,找到最大的序号,然后产生下个序号文件。根据这个规则,我们可以自行测试一下,若当前最大的binlog序号是 999999 时,下一个文件序号是重新从 000001 开始,抑或是 1000000 呢?

  • 测试一,当文件序号达到999999后,下一个新文件序号是多少

把mysqld关掉,人为造出序号为999999的binlog,并直接启动mysqld,看看会怎样呢?

执行 show master status 进行确认

可以看到,mysqld并没有挂掉,也没重新从mysql-bin.000001开始,这个序号会继续增加。

现在,我们再深挖下这个问题,最大的序号到底是多少呢?

我们课上教学使用的版本是mysql 5.7.18,下载相应版本的源码直接看好了,在 sql/binlog.cc 文件中我们找到下面这段代码:

在上面这段代码中,我们看到如下判断:

if (max_found == MAX_LOG_UNIQUE_FN_EXT)

也就是当找到binlog文件最大序号,达到起定义的最大值时,mysqld就会退出。

我们再看下 MAX_LOG_UNIQUE_FN_EXT 宏定义:

#define MAX_LOG_UNIQUE_FN_EXT 0x7FFFFFFF

把它转成十进制看下:

这个值等于:pow(2,31) - 1

  • 测试二,测试binlog序号达到最大值后会怎样

手动创建一个序号较大的binlog,比如mysql-bin.2147483640。把所有日志文名都写入到 mysql-bin.index 中,并确认 mysql-bin.000001 文件存在(看会不会被覆盖或者其他的)。

touch mysql-bin.2147483640

然后启动mysqld,再执行 FLUSH LOGS,看看会怎样。

这时,我们能看到 mysqld 启动,日志里记录的告警信息:

我们多执行几次 FLUSH LOGS,切换日志,直到序号达到最大值,看看会发生什么:

第一次切换会发出一个 ERROR 级别错误日志,第二次再切换,直接导致 mysqld 进程退出了。看看错误日志:

看这架势,是想生成 mysql-bin.(1-999) 这样的文件而未果。于是我们再进行下面的测试。

  • 测试三,测试binlog序号能不能循环重来

还是 touch 一个较大序号的binlog,比如mysql-bin.2147483646。把所有日志文名都写入到 mysql-bin.index 中,并确认 mysql-bin.000001 文件到 mysql-bin.000999 这些文件都不存在(和测试二不同,这次是要确保这些文件不存在,看能不能重复利用)。

然后启动mysqld,再执行 FLUSH LOGS,看看会怎样。

可以看到,还是会退出,并没有进行日志的轮转再次重复利用。

最后,关于binlog的序号问题,我们结论如下:

  1. binlog的最大序号是 pow(2,31)-1 = 2147483647。
  2. 当序号接近这个值,且差距小于 1000 时(也就是序号大于 2147482647 时),就开始向error log中写入警告。
  3. 当序号达到最大值时,mysqld 进程直接退出。
  4. 生成新的binlog时,会扫描当前已存在的binlog文件,最终取得最大序号值。因此,如果binlog文件数目特别多的话,是会影响MySQL的启动及日志切换效率的。
  5. 由此可见有两个隐患,当binlog文件数目过大,会导致binlog切换效率较低。当binlog文件最大序号快达到最大值时,离mysqld进程挂掉就不远了,需要加急处理。
  6. 因此,除了要监控binlog文件数目、最大序号外,还应该再error log的内容,都予以足够重视。

最后祝大家的mysqld进程都棒棒哒!

关于「3306π」社区

围绕 MySQL 核心技术,将互联网行业中最重要的数据化解决方案带到传统行业中;囊括其他开源技术Redis、MongoDB、Hbase、Hadoop、ElasticSearch、Storm、Spark等;分享干货知识,即便是赞助商,也要求如此,拒绝放水。

mysqld 进程非常多_MySQL binlog后面的编号最大是多大?相关推荐

  1. mysql老叶博客_MySQL binlog后面的编号最大是多大?【老叶茶馆公众号】

    MySQL binlog后面的编号最大是多大? 具体文章请关注微信公众号:izhishuedu [知数堂] 知数堂版权所有. 这里我就不啰嗦了,直接上贴代码: 版本:5.7.18 mysql-5.7. ...

  2. MySQL binlog后面的编号最大是多大?【老叶茶馆公众号】

    MySQL binlog后面的编号最大是多大? 原文地址:http://mp.weixin.qq.com/s/gDpWhlBawRal_pQK2huTMA 具体文章请关注微信公众号:izhishued ...

  3. mysql binlog 多少,MySQL binlog后面的编号最大是多大?

    在上课中讲到MySQL的binlog是mysql-bin.000001,有细心的学习提到,是不是这个达到mysql-bin.999999后数据库的binlog就要重新开始了? 对于这个问题一时间也被问 ...

  4. MySQL 的 binlog 编号竟然可以这么大!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://urlify.cn/VVFFN ...

  5. 阿里mysql 二进制_Mysql binlog 之阿里canal

    1.What is Canal? canal [kə'næl],中文翻译为 水道/管道/沟渠/运河,主要用途是用于 MySQL 数据库增量日志数据的订阅.消费和解析,是阿里巴巴开发并开源的,采用Jav ...

  6. mysqlbinlog工具_MySQL binlog相关分析

    1.redolog.binlog的简单分析图解:redolog和binlog机制2.开启binlog及关注点3.关注binlog的相关参数4.binlog模式分析5.关于binlog的使用补充:双一模 ...

  7. 技术分享 | MySQL中MGR中SECONDARY节点磁盘满,导致mysqld进程被OOM Killed

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 在MGR测试中,人为制造磁盘满问题后,节点被oom killed 问题描述 在对 ...

  8. mysqld进程 ut_delay 占用率过高

    采用性能分析工具perf top -p mysqld进程 在测试mysql数据库时,用perf top如果看到热点函数是ut_delay或者_raw_spin_lock的话,说明锁争用比较严重. ut ...

  9. mysql 内存太大被杀_数据库mysqld进程频繁被杀解决方案[终]

    重要:本文最后更新于2018-11-25 23:33:42,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗. 上次数据库mysql进程总是被杀,以前眼光不够长远,认为mysql被杀就是 ...

最新文章

  1. RouterOS连载3:架设PPPoE服务
  2. getResources().getIdentifier(textView01, id, cn.xxx.xxx);
  3. python爬虫工程师-记录一下自己找“python爬虫工程师实习生”岗位的经历
  4. Python 第2周 - Python基础-模块\数据运算
  5. C# 中 StringBuilder和String的区别
  6. 数字转化成时分秒(二)
  7. jquery源码抽丝剥茧--把jquery最小化
  8. C#:抽象类和抽象函数, 密封类和密封方法(抄录自LilianChen)
  9. 闪电网络开启BTC支付时代?他们不同意
  10. matlab小波滤波详解,基于matlab的振动波形小波分析及小波基础知识学习
  11. Cisco路由器的命令配置教程详解
  12. 伽罗瓦2^8域下模多项式求逆python(查表)实现
  13. java tiff 压缩,使用Java ImageIO进行Tiff压缩
  14. 角色动画中的骨骼蒙皮技术
  15. win 10卸载mysql_Windows 10系统下彻底删除卸载MySQL的方法教程
  16. 辽宁 viewpro.php,辽宁省策划学会赴沙地沟村考察
  17. mysql查看数据库事务隔离级别_MySQL查看和修改事务隔离级别的实例讲解
  18. css控制英文字母的大小写
  19. idea 导入halo报错
  20. 日常工作笔记0807

热门文章

  1. 测试用例 集成测试增删改查_20年高级测试人员的进阶汇总
  2. 周易的含义_朱熹与《周易本义》
  3. dtsi与dts_[dts]DTS实例分析
  4. 分数阶simulink工具箱_CCDC 2021特别专题:分数阶微积分与分数阶系统
  5. 阿里云西安ACE同城会 | 钉钉生态应用促进企业信息化实战沙龙
  6. 分享一下我的JAVA自学历程,加上我觉得效果还不错的方法
  7. 创作一个数字人,总共分几步?(下)
  8. 浅谈游戏单位属性模块设计:属性组成、分级、计算与同步
  9. DOTA2:IG实力不如Nigma?解说:错了,让门票给他们自己回家训练
  10. 2021年8月Web服务器排行榜:Nginx牛市上升