MySQL 源码分析 binlog 编号上限

更新时间:2022-10-30


文章目录

  • MySQL 源码分析 binlog 编号上限
  • 内容声明
  • 问题描述
  • 测试想法
  • 问题测试
  • 源码说明
    • MAX_LOG_UNIQUE_FN_EXT
    • LOG_WARN_UNIQUE_FN_EXT_LEFT
  • 分析结论

内容声明

  • 本篇部分内容引用至老叶(叶金荣)文章《MySQL binlog后面的编号最大是多大?》;
  • 出于个人好奇,想看下 MySQL 源码里面如何定义的;
  • 然后随缘记录下,有兴趣的朋友也可自行查看;
  • MySQL 版本在源码部分做了标注。

问题描述


每个 binlog 文件都有编号,从最早的3位数(没错,很老的版本只有3位数~),到现在扩展到6位数,从000001开始,但如果这个序号达到999999后,binlog是否就要重新开始了?

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

测试想法


1.当文件序号达到999999后,下一个新文件序号是多少;
2.测试binlog序号达到最大值后会怎样;
3.测试binlog序号能不能循环重来。

问题测试


备注:测试过程略过,具体可参考老叶茶馆《MySQL binlog后面的编号最大是多大?》,本篇只作了源码部分展示。

源码说明


  • MySQL 版本
    MySQL 5.7.19

查看源码 mysql-5.7.19/sql/binlog.cc

MAX_LOG_UNIQUE_FN_EXT

当超出 MAX_LOG_UNIQUE_FN_EXT 限定时,MySQL 向 error log 写入错误信息,进程退出。

  /* check if reached the maximum possible extension number */if (max_found == MAX_LOG_UNIQUE_FN_EXT)
{sql_print_error("Log filename extension number exhausted: %06lu. \
Please fix this by archiving old logs and \
updating the index files.", max_found);error= 1;goto end;
}

查看 MAX_LOG_UNIQUE_FN_EXT 值设定

  • 源码部分

  • MAX_LOG_UNIQUE_FN_EXT 定义

      /*Maximum unique log filename extension.Note: setting to 0x7FFFFFFF due to atol windowsoverflow/truncate.*/#define MAX_LOG_UNIQUE_FN_EXT 0x7FFFFFFF
    

    0x7FFFFFFF 转换十进制结果 2147483647。

      mysql> select conv('7FFFFFFF',16,10);+------------------------+| conv('7FFFFFFF',16,10) |+------------------------+| 2147483647             |+------------------------+1 row in set (0.03 sec)
    

MAX_LOG_UNIQUE_FN_EXT 的值为 0x7FFFFFFF ,转换十进制结果 2147483647。

备注:由此可见,binlog 的最大编号是 2147483647。

LOG_WARN_UNIQUE_FN_EXT_LEFT

当序号接近这个值,且差距小于 LOG_WARN_UNIQUE_FN_EXT_LEFT 设定时,MySQL 向 error log 中写入警告信息。

查看 LOG_WARN_UNIQUE_FN_EXT_LEFT 值设定如下:

LOG_WARN_UNIQUE_FN_EXT_LEFT 定义

/*Number of warnings that will be printed to error logbefore extension number is exhausted.
*/
#define LOG_WARN_UNIQUE_FN_EXT_LEFT 1000

LOG_WARN_UNIQUE_FN_EXT_LEFT 的值为1000。

分析结论


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

MySQL 源码分析 binlog 编号上限相关推荐

  1. 转 MySQL源码分析

    看到一个不错的介绍,原址如下: http://software.intel.com/zh-cn/blogs/2010/08/20/mysql0/ MySQL源码分析(0):编译安装及调试 作者: Yu ...

  2. MySQL 源码分析 v2.0

    第一节 mysql编译 (一).参考 https://blog.jcole.us/innodb/ https://www.cnblogs.com/zengkefu/p/5674503.html htt ...

  3. mysql源码分析——InnoDB引擎启动分析

    一.InnoDB启动 在MySql中,InnoDB的启动流程其实是很重要的.一些更细节的问题,就藏在了这其中.在前面分析过整个数据库启动的流程,本篇就具体分析一下InnoDB引擎启动所做的各种动作.在 ...

  4. mysql 执行概况_转mysql源码分析之SQL执行过程简介

    本人打算从SQL语句的执行开始学习和分析MYSQL源码,首先了解MYSQL是如何执行一条SQL语句的,详细了解它的执行过程之后,再深入学习执行一条SQL语句的运行原理. 1)从执行一条SQL语句的堆栈 ...

  5. mysql源码分析——索引的数据结构

    引子 说几句题外话,在京被困三个月之久,不能回家,所以这个源码分析就中断了.之所以在家搞这个数据库的源码分析,主要是在家环境齐全,公司的电脑老旧不堪.意外事件往往打断正常的习惯和运行轨迹,但这却是正常 ...

  6. mysql源码分析书籍_从源码分析 MySQL 死锁问题入门

    链接:https://juejin.im/post/5ce287326fb9a07ea8039d70 这篇文章主要讲的是如何通过调试 MySQL 源码,知道一条 SQL 真正会拿哪些锁,不再抓虾,瞎猜 ...

  7. mysql源码分析书籍

    哪里可以下载mysql的源代码,请把详细地址贴出来? MySQL5.0.18-源码包有点旧了的.貌似官网上有新版的,但我也没找到~ 本回答由网友推荐 如何查看mySQL的源代码 给你个过来人的建议.两 ...

  8. MySQL · 源码分析 · MySQL 半同步复制数据一致性分析

    简介 MySQL Replication为MySQL用户提供了高可用性和可扩展性解决方案.本文介绍了MySQL Replication的主要发展历程,然后通过三个参数rpl_semi_sync_mas ...

  9. mysql源码分析——InnoDB的内存应用整体架构源码

    一.基本介绍 在前面基本把几个缓冲的创建应用的源码搞定了.但是在宏观层次上的使用是怎么设计的呢?这篇就分析一下Buffer Pool的整体应用框架,其它的如果有时间再慢慢一一补齐,重点还是要把MySq ...

最新文章

  1. Redis 官方可视化工具,功能真心强大!
  2. 业绩-----我觉得最难得不是写代码,而是写业绩表
  3. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )
  4. 学生选课数据库SQL语句练习题——成绩表
  5. BootStrap笔记-信息提示框的使用
  6. java 状态机_Java 数据持久化系列之池化技术
  7. hard-negative mining 及伪代码实现
  8. XP下安装ubuntu双系统
  9. python 两个list 求交集,并集,差集
  10. Julia: 由0.3 升级到0.4 版本的变化
  11. python监控钉钉群消息_使用python对mysql主从进行监控,并调用钉钉发送报警信息...
  12. 字符集,字体,编码,代码页,输入法
  13. MMKV_MMKV—强大的存储工具
  14. 苹果商城怎么调成中文_海豚加速器拳头账号中文注册下载-海豚加速器拳头账号注册下载 v2020...
  15. Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be forced)
  16. 两个计算机怎么共享一台打印机共享,两台电脑如何共享打印机 多台电脑共享一台打印机设置方法【详细教程】...
  17. 新手SEO篇之外链建设与查询
  18. weixin-java-pay实现APP微信支付与退款
  19. Linux命令 - ps命令
  20. 奈何桥上经过的地方,看醒了多少人

热门文章

  1. SOLIDWORKS Plastics 模流分析基础与功能介绍
  2. java实现文件夹的复制和剪切(包括子文件和子文件夹)
  3. Linux系统关闭防火墙命令
  4. linux 打开和关闭防火墙命令
  5. chromeos-apk_ChromeOS.dev-为Chrome OS构建世界一流的应用和游戏的蓝图
  6. 吃鸡2019年5月7日服务器维护,绝地求生更新:绝地求生5月7日更新内容 绝地求生5月7日更新维护公告...
  7. modulate与modem
  8. Visual FoxPro初学:建立数据库,创建表,向表中添加数据
  9. 查询域名MX、A、DNS、txt、cname记录是否生效
  10. JS数据类型转换,转数值,转字符串,转布尔