技术分享 | 如何根据 MySQL 崩溃日志找到已修复的 BUG 内容

作者:岳明强

爱可生北京分公司 DBA 团队成员,负责数据库管理平台的运维和 MySQL 问题处理。擅长对 MySQL 的故障定位。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


在生产中一般发生运行问题,可以翻翻 error 日志,大部分都能解决。有的时候数据库突然宕机重启,此时我们在 error 日志中会发现"This could be because you hit a bug",然后打了一堆看不懂的堆栈。这时候如果拿着碰到BUG的结论交差,多半会被应用一顿暴击输出:有证据没,这个 bug 怎么出现的,官方怎么修的,在什么版本修的。那么接下来,我将根据现有 error 日志报错中的堆栈信息,找到详细的 BUG 修复记录

一、查看当前错误日志

MySQL 异常崩溃,查看 error 日志,红框处为位置信息

注:如出现这种类似 BUG 信息,不应只看这部分信息,应先查看 MySQL 异常退出前是否存在报错信息。此处不进行演示

二、gdb 查看报错文件位置

使用 gdb 追踪报错文件位置,前面报错文件为 mysqld ,就 gdb mysqld 文件,如果是其他的文件,例如组复制插件,那么就 gdb 该文件

首先先 b 一下函数名称,如下所示:

可以看出后面找到两个位置,然后我们再加上偏移量,再 b 一下:

很明显,第二个找到的是 mysql 里文件,从官方上下载相同版本源码包进行解压,找过 pipeline_stats.h 这一文件中的410行,确定函数名为 Pipeline_member_stats()

三、查看该函数变更内容

在 github上mysql 官方地址中找到这一文件

https://github.com/mysql/mysq...

搜索相应的关键字到该位置

网址上默认为8.0最新版本的代码,取下来和8.0.18版本的代码进行对比

四、查看变更内容历史

通过对比工具,可以看出该段函数代码,存在部分的更改,接下来,再看看变更这部分代码的原因,打开左侧的 Blame ,可以看出历史的变更记录

该函数内大部分的变更都是由于 Bug#30049349 引起,可以进去看看 bug 详细的内容,文章中指出 stop group_replication 时,进行P_S查看有几率造成数据库 crash,修复的方式是在 stop group_replication 的时候,给P_S中的相关表加一个读写锁,禁止查询

在 MySQL 官网的 Release Notes 里也能找到是在8.0.20版本修复该bug

还可以从整个文件的 History 中查看历史更改

五、结语

文章内主要提到通过 error 日志找到当前已经修复的 bug 。碰到 error 日志中有上述报错,应该先对崩溃前的报错进行分析,部分的崩溃报错不用通过堆栈的方式定位就能找到问题。如碰到目前还未修复或者修复 bug 时并没有对该段代码进行直接修改时,可能会失效,这时候需要对堆栈指向的代码进行梳理,搞清楚这部分逻辑,再分析。

中国领先的企业数据处理技术整体解决方案提供商,开源数据库领域优秀企业。为大型行业用户的特定场景提...

344 声望
177 粉丝
0 条评论
推荐阅读
技术分享 | MySQL 覆盖索引优化案例一则
作者:刘晨网名 bisal ,具有十年以上的应用运维工作经验,目前主要从事数据库应用研发能力提升和技术管理相关的工作,Oracle ACE(Alumni),腾讯云TVP,拥有 Oracle OCM & OCP 、EXIN DevOps Master 、SCJP 等...

爱可生云数据库阅读 129

一次偶然机会发现的MySQL“负优化”
今天要讲的这件事和上述的两个sql有关,是数年前遇到的一个关于MySQL查询性能的问题。主要是最近刷到了一些关于MySQL查询性能的文章,大部分文章中讲到的都只是一些常见的索引失效场合,于是我回想起了当初被那个...

骑牛上青山7阅读 1.8k评论 2

分布式高可用Mysql数据库Percona XtraDB Cluster 8.0 与 Proxysql 史上最详尽用法指南
PXC是Percona XtraDB Cluster的缩写,是 Percona 公司出品的免费MySQL集群产品。PXC的作用是通过mysql自带的Galera集群技术,将不同的mysql实例连接起来,实现多主集群。在PXC集群中每个mysql节点都是可读可写的...

apollo0084阅读 7.2k评论 2

MongoDB 插入时间与更新时间(create_time/update_time)
MongoDB 在数据库层面不能像 MySQL 一样设置自动创建 create_time/update_time,自动更新 update_time

qbit阅读 14k评论 2

Mysql索引覆盖
通常情况下,我们创建索引的时候只关注where条件,不过这只是索引优化的一个方向。优秀的索引设计应该纵观整个查询,而不仅仅是where条件部分,还应该关注查询所包含的列。索引确实是一种高效的查找数据方式,但...

京东云开发者2阅读 727

封面图
SegmentFault 思否技术周刊 Vol.70 — 深入 MySQL 实战
MySQL 软件采用了 GPL( GNU 通用公共许可证),由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库。

Beverly2阅读 1.5k

封面图
MySQL 数据库索引技术原理初探
一本书 500 页的书,如果没有目录,直接去找某个知识点,可能需要找一会儿,但是借助前面的目录,就可以快速找到对应知识点在书的哪一页。这里的目录就是索引。

mylxsw1阅读 1.3k

中国领先的企业数据处理技术整体解决方案提供商,开源数据库领域优秀企业。为大型行业用户的特定场景提...

344 声望
177 粉丝
宣传栏