MySQL 源码分析 binlog 编号上限
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。
分析结论
- binlog 的最大编号是 2147483647;
- 当编号接近最大值,且差距小于 1000 设定时,向 error log 中写入警告信息;
- 当编号达到最大值时,MySQL 向 error log 写入错误信息,进程退出;
- 生产新的 binlog 时,会扫描当前已经存在的 binlog 文件,最终取得最大编号值。因此,如果 binlog 文件数目特别多的话,是会影响 MySQL 的启动及日志切换效率的;
- 由此可见有两个隐患,当binlog文件数目过大,会导致binlog切换效率较低。当binlog文件最大序号快达到最大值时,离mysqld进程挂掉就不远了,需要加急处理;
- 因此,除了要监控binlog文件数目、最大序号外,还应该再error log的内容,都予以足够重视。
MySQL 源码分析 binlog 编号上限相关推荐
- 转 MySQL源码分析
看到一个不错的介绍,原址如下: http://software.intel.com/zh-cn/blogs/2010/08/20/mysql0/ MySQL源码分析(0):编译安装及调试 作者: Yu ...
- MySQL 源码分析 v2.0
第一节 mysql编译 (一).参考 https://blog.jcole.us/innodb/ https://www.cnblogs.com/zengkefu/p/5674503.html htt ...
- mysql源码分析——InnoDB引擎启动分析
一.InnoDB启动 在MySql中,InnoDB的启动流程其实是很重要的.一些更细节的问题,就藏在了这其中.在前面分析过整个数据库启动的流程,本篇就具体分析一下InnoDB引擎启动所做的各种动作.在 ...
- mysql 执行概况_转mysql源码分析之SQL执行过程简介
本人打算从SQL语句的执行开始学习和分析MYSQL源码,首先了解MYSQL是如何执行一条SQL语句的,详细了解它的执行过程之后,再深入学习执行一条SQL语句的运行原理. 1)从执行一条SQL语句的堆栈 ...
- mysql源码分析——索引的数据结构
引子 说几句题外话,在京被困三个月之久,不能回家,所以这个源码分析就中断了.之所以在家搞这个数据库的源码分析,主要是在家环境齐全,公司的电脑老旧不堪.意外事件往往打断正常的习惯和运行轨迹,但这却是正常 ...
- mysql源码分析书籍_从源码分析 MySQL 死锁问题入门
链接:https://juejin.im/post/5ce287326fb9a07ea8039d70 这篇文章主要讲的是如何通过调试 MySQL 源码,知道一条 SQL 真正会拿哪些锁,不再抓虾,瞎猜 ...
- mysql源码分析书籍
哪里可以下载mysql的源代码,请把详细地址贴出来? MySQL5.0.18-源码包有点旧了的.貌似官网上有新版的,但我也没找到~ 本回答由网友推荐 如何查看mySQL的源代码 给你个过来人的建议.两 ...
- MySQL · 源码分析 · MySQL 半同步复制数据一致性分析
简介 MySQL Replication为MySQL用户提供了高可用性和可扩展性解决方案.本文介绍了MySQL Replication的主要发展历程,然后通过三个参数rpl_semi_sync_mas ...
- mysql源码分析——InnoDB的内存应用整体架构源码
一.基本介绍 在前面基本把几个缓冲的创建应用的源码搞定了.但是在宏观层次上的使用是怎么设计的呢?这篇就分析一下Buffer Pool的整体应用框架,其它的如果有时间再慢慢一一补齐,重点还是要把MySq ...
最新文章
- Redis 官方可视化工具,功能真心强大!
- 业绩-----我觉得最难得不是写代码,而是写业绩表
- 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )
- 学生选课数据库SQL语句练习题——成绩表
- BootStrap笔记-信息提示框的使用
- java 状态机_Java 数据持久化系列之池化技术
- hard-negative mining 及伪代码实现
- XP下安装ubuntu双系统
- python 两个list 求交集,并集,差集
- Julia: 由0.3 升级到0.4 版本的变化
- python监控钉钉群消息_使用python对mysql主从进行监控,并调用钉钉发送报警信息...
- 字符集,字体,编码,代码页,输入法
- MMKV_MMKV—强大的存储工具
- 苹果商城怎么调成中文_海豚加速器拳头账号中文注册下载-海豚加速器拳头账号注册下载 v2020...
- Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be forced)
- 两个计算机怎么共享一台打印机共享,两台电脑如何共享打印机 多台电脑共享一台打印机设置方法【详细教程】...
- 新手SEO篇之外链建设与查询
- weixin-java-pay实现APP微信支付与退款
- Linux命令 - ps命令
- 奈何桥上经过的地方,看醒了多少人
热门文章
- SOLIDWORKS Plastics 模流分析基础与功能介绍
- java实现文件夹的复制和剪切(包括子文件和子文件夹)
- Linux系统关闭防火墙命令
- linux 打开和关闭防火墙命令
- chromeos-apk_ChromeOS.dev-为Chrome OS构建世界一流的应用和游戏的蓝图
- 吃鸡2019年5月7日服务器维护,绝地求生更新:绝地求生5月7日更新内容 绝地求生5月7日更新维护公告...
- modulate与modem
- Visual FoxPro初学:建立数据库,创建表,向表中添加数据
- 查询域名MX、A、DNS、txt、cname记录是否生效
- JS数据类型转换,转数值,转字符串,转布尔