从MySQL源码看日志命令失效的原因

今天看数据库内核月报,发现一个蛮有意思的问题,就是show binary logs的时候没有任何结果,这个问题的原因很简单,但是分析问题的过程相比是艰辛的,需要在各种潜在的可能中找到那个肯定的结果。当然这个问题带给我的最大福利不是解决了这个问题,而是通过这个问题我们可以换一个思路来分析,比如说通过源码的方式来了解更多的细节。

我在自己的电脑上下载了MySQL近几个版本的源码,平时很少看,但是环境基本配置好了,就等待一些实用快捷的案例了。

首先复现下问题,我所测试的版本是5.6,使用show binary logs查看binlog的信息时,得到的结果如下:

mysql> show binary logs; Empty set (0.00 sec)

而实际上这个环境是存在binlog的,毫无疑问,binlog是打开的。

我们可以在系统层面看到这些binlog

可以通过binlog.index文件看到,确实是存在这些binlog的。

因为我知道了问题的答案,所以就顺着里面的疑点来看,上面的index文件看起来比较奇怪,怎么第1行是空着的。

所以顺着这个思路,可以看看是否是由于这个问题导致。

阿里的同学在文章 http://mysql.taobao.org/monthly/2017/09/03/

给出了参考的文件,是rpl_master.cc,简单翻译就是属于replication部分,master端的。我们在master端使用的命令show master status,或者是reset master,里面的实现细节都在这个文件里面,所以我们举一反三,还有一个文件是rpl_slave,使用的reset_slave, start slave,stop slave,show slave status等等,都是在这个文件里面的。

我们查看文件rpl_master.cc文件看看里面的实现部分。如果使用eclipse的方式查看基本就能通过几个维度来看到一些明细的信息,左边的是代码的层级结构,中间的是指定的函数,比如show binary logs的实现,右边的是一些概览,比如变量,方法等。

当然rpl_master和rpl_slave的代码量相差巨大,rpl_slave加入了GTID的部分,可以看到大量的注释。

而rpl_master中,我们可以很快看到下面的逻辑。如果是空行或者是EOF结尾都会被视为文件的末尾,上面1行是调用了index文件得到一个列表的信息。

所以这个问题的明白了原委,修复起来也就很简单了。直接删掉那个空行,然后再次刷新日志即可。

先删掉空格,然后刷新日志,如下所示。

所以按照这个思路,我们可以在rpl_slave中找到自己自己想得到的内容,比如Seconds_Behind_Master的含义,代码中自有黄金屋。注释中甚至给出了伪代码,把计算的流程说得很详细。

里面的代码解释还是很详细的,感觉和读文档的感觉差不多。

当然里面也说得很明确,Seconds_Behind_Master不能全信,有时候也是不准的。

读了一会代码,发现request_dump的实现里还有些不完善的地方。代码里看起来也是很无奈,只能以后修复了。

有了这些信息,不断跟着内核月报学学,发现分析问题也会别有一番风味。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2017-10-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏卡少编程之旅

新主题博客诞生之路

35790
来自专栏DeveWork

WordPress免插件仅代码实现文章浏览次数的方法(3)

在WordPress中为每一篇文章提供个“浏览次数”计数,一来可以间接地给访客一种文章有价值的暗示,二来方便自己获取相关数据(访客的内容偏好等等),三貌似想不到...

226100
来自专栏互联网杂技

如何有效减少网页加载时间?20个提高网站访问速度的方法

网友上网都不喜欢用太多的时间等待网页的打开,等待的越长,用户可能会直接关闭网页,这样就会损失很多流量!其次,关键字的排名与网页的打开速度也有关系,这个主要体现搜...

428130
来自专栏AI研习社

马蜂窝数据被扒光, 用 Python 爬取网页信息 4 分钟就能搞定

图片来自https://www.freestock.com/free-photos/illustration-english-window-blue-sky-c...

16310
来自专栏黑白安全

Github寻找敏感信息

0x01 引子 先给不知道什么是Github的朋友们科普一下什么是Github Github是一个分布式的版本控制系统,目前拥有140多万开发者用户。随着越...

40120
来自专栏linux运维学习

linux学习第五十八篇: 负载均衡集群介绍,LVS介绍,LVS的调度算法,LVS NAT模式搭建

负载均衡集群介绍 主流开源软件LVS、keepalived、haproxy、nginx等 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,hap...

25390
来自专栏编程

你需要了解的前端测试“金字塔”

来自:开源中国社区 链接:www.oschina.net/translate/the-front-end-test-pyramid-rethink-your-t...

21680
来自专栏企鹅号快讯

如何将数据库检索的结果导出?

最近很多同学询问不同的数据库的文献如何导出……老师表示很是不解,这是个很简单的小问题,上课时候也讲过,演示过,可是却是提问频率最高的问题之一。于是,今天就来大家...

42450
来自专栏BY的专栏

利用 GitHub Pages 快速搭建个人博客前言快速开始写文章自定义域名进阶利用GithHub Desktop管理GitHub仓库修改个人介绍常见问题其他Star补充最后要说个事情

911100
来自专栏AI科技评论

干货 | 马蜂窝数据被扒光, 用 Python 爬取网页信息 4 分钟就能搞定

图片来自https://www.freestock.com/free-photos/illustration-english-window-blue-sky-c...

22730

扫码关注云+社区

领取腾讯云代金券