关于mysql:技术分享-如何根据-MySQL-崩溃日志找到已修复的-BUG-内容

50次阅读

共计 1190 个字符,预计需要花费 3 分钟才能阅读完成。

作者:岳明强

爱可生北京分公司 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 时并没有对该段代码进行间接批改时,可能会生效,这时候须要对堆栈指向的代码进行梳理,搞清楚这部分逻辑,再剖析。

正文完
 0