点击上方蓝色“程序猿DD”,选择“设为星标”

回复“资源”获取独家整理的学习资料!

来源 | https://urlify.cn/VVFFNn

每个binlog文件都有编号,从最早的3位数(没错,很老的版本只有3位数~),到现在扩展到6位数,从000001开始计数。但我打赌,你一定不知道这个序号最大可以跑到多少。

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的序号问题,我们结论如下:

binlog的最大序号是 pow(2,31)-1 = 2147483647。

当序号接近这个值,且差距小于 1000 时(也就是序号大于 2147482647 时),就开始向error log中写入警告。

当序号达到最大值时,mysqld 进程直接退出。

生成新的binlog时,会扫描当前已存在的binlog文件,最终取得最大序号值。因此,如果binlog文件数目特别多的话,是会影响MySQL的启动及日志切换效率的。

由此可见有两个隐患,当binlog文件数目过大,会导致binlog切换效率较低。当binlog文件最大序号快达到最大值时,离mysqld进程挂掉就不远了,需要加急处理。

因此,除了要监控binlog文件数目、最大序号外,还应该再error log的内容,都予以足够重视。

往期推荐

fastjson 的作者,在阿里内网挨骂了?!

Redisson 是如何实现分布式锁的?

详解:UML类图符号、各种关系说明以及举例

Spring Cloud 常见面试题及答案

面试:为什么 Java 线程没有Running状态?

星球限时拼团优惠进行中

我的星球是否适合你?

点击阅读原文看看我们都聊过啥?

MySQL 的 binlog 编号竟然可以这么大!相关推荐

  1. 今天才知道,MySQL 的 binlog 编号可以这么大!

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 来源:22j.co/bYaE 每个binlog文件都有编号,从最早的3位数 ...

  2. mysql binlog 多少_今天才知道,MySQL 的 binlog 编号可以这么大!

    每个binlog文件都有编号,从最早的3位数(没错,很老的版本只有3位数~),到现在扩展到6位数,从000001开始计数.但我打赌,你一定不知道这个序号最大可以跑到多少. MySQL在启动时会扫一下b ...

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

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

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

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

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

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

  6. MySQL 源码分析 binlog 编号上限

    MySQL 源码分析 binlog 编号上限 更新时间:2022-10-30 文章目录 MySQL 源码分析 binlog 编号上限 内容声明 问题描述 测试想法 问题测试 源码说明 MAX_LOG_ ...

  7. mysql的binlog太多太大占用了空间的解决办法

    现象:网站访问越来越慢,最后无法访问了,经过检查发现磁盘满了 分析过程及解决方案:通常出现这种问题都应该登录服务器检查磁盘.内存和进程使用的情况,通过top.df –h和free –m来检查,发现磁盘 ...

  8. mysql的binlog太大太多占用大量磁盘的解决

    现象: zabbix邮件报警,故障PROBLEM,服务 Free disk space isless than 20% on volume :xxx.xxx.xxx.xxx发生:/data故障! 分析 ...

  9. 大数据实时监控mysql数据库binlog(一)

    MySQL之binlog 参考连接:https://www.cnblogs.com/xhyan/p/6530861.html.https://www.cnblogs.com/martinzhang/p ...

最新文章

  1. 【设计模式】建造者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )
  2. python怎么写csv文件_python怎么写csv文件
  3. [摘]一张图 , oracle merge用法:
  4. 在游戏运营行业,Serverless 如何解决数据采集分析痛点?
  5. Qt::WA_TransparentForMouseEvents用法
  6. Instagram CEO:苹果iPad用户数少 不值得开发App
  7. c语言分治法求众数重数_分治法求众数 - osc_twlari2q的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. SQL,C#查询Excel数据
  9. 路由器刷固件——斐讯路由器FIR300M刷OpenWrt固件教程
  10. Django项目实战(1)
  11. WEBMAX功能简述
  12. 离散数学知识点总结(4):合取范式,析取范式
  13. 【初赛】初赛提纲¿ 错题集
  14. 3GPP协议R15完整版下载
  15. 浅论程序员的工作经历与工作经验
  16. 【图像处理】多光谱 波长波段划分 主要波段特性 植被遥感原理 典型植被指数
  17. Beyong Compare 4 提示 “这个授权已被吊销” 的解决办法
  18. MFS分布式存储搭建
  19. 一文掌握差模信号、共模信号、共模抑制比的概念
  20. 【JavaScript-移动端常用事件】了解移动端touch触摸事件

热门文章

  1. python3 文件读写 r 和 rb 区别
  2. linux shell 显示路径
  3. 工控系统的指纹识别技术
  4. vim tab设置为4个空格
  5. 内核模块相关命令:lsmod,depmod,modprob,modinfo,insmod,rmmod
  6. Windows操作系统产品名与内部版本号的对应(windows版本号)
  7. 关于Visual Studio 2010与64位系统的问题
  8. Android开发--BroadcastReceiver介绍1
  9. 在Ubuntu服务器上使用python3+selenium模块
  10. java入门经典 贴吧_学完Java经典入门 后就想编游戏了