专栏首页杨建荣的学习笔记MySQL代码开发和调试利器CLion

MySQL代码开发和调试利器CLion

MySQL源码对于很多人来说,是很有距离感的。

我想对于MySQL技术有兴趣的同学,基本测试过如下的一些方法(之一或者是全部):

1)下载MySQL源代码,一窥其中的奥妙

2)基于源码安装MySQL,从cmake开始,基本要被bison,curces,boost折腾一波

3)在Windows环境配置MySQL源码环境,特殊配置Cross GCC,MinGW

4)通过GDB调试MySQL,设置断点,得到一些堆栈信息,进行全面跟踪

5)使用LLDB调试MySQL,需要从源码仓库构建版本,基于MAC端还好,Linux端还需要额外处理。

6)通过pstack,perf,strace等得到一些堆栈信息,不同水平的人分析的效果差异较大

7)通过应用管理中的一些特性或者bug,从代码中去查找相关的逻辑,问题锁定的方向相对比较清晰,可能最尴尬的就是验证了下这个bug确实是个bug

在此,我不是要安利什么,我也做过这些尝试,有些尝试其实是很痛苦的,这个过程中的投入和收益是严重不成正比的。有句话说得好,对于你想做的事情,时间会给你答案,我想对于很多人来说,这个答案就是放弃

通过最近的一次线上问题修复,让我有了新一步的思考。问题的背景是一个GitHub开源的基于Java技术栈的后端服务,最近在数据流转中出现了数据问题,主要原因是基于时差的问题,对于这个问题自己看了相关的代码,也做了很多的调试和测试,整个过程都是在Windows环境下完成的,做完测试之后,在编译和发布的过程,走了一些弯路,最后发布到线上前又做了一次验证测试,发现和之前测试的结果竟然不一样。

于是后续的补充测试是在Linux环境下进行的,我做了更多的测试和验证,最后的修复方案完全是基于命令行方式调整的,直观来看,流转效率和准确性比之前提高了好几倍,让我也有了一些欣喜和成就感。

我开始重新思考这个过程中的一些弯路,我的初步思路是,我的服务是要发布在Linux X86_64位的环境下,而整个开发过程竟然都是在Windows下验证的,也就意味着存在一些可能会导致我原本Windows下的环境配置或者测试场景和Linux存在一些差异,尤其是一些依赖库的差异就更大了,这样就意味着会返工,那么为什么不直接在Linux下基于IDE开发呢。

这么一想,突然发现我们基于Python的项目还早是按照这种模式做了很久了,我们是在VirtualBox中安装了Linux虚拟机,然后在上面配置了开发环境,最开始就是因为跨平台库依赖支持差异比较大,所以放弃了Windows侧的开发模式,从开始就在Linux下开始,这么些年下来,还真没感觉到太大的差异。

我想很多人都会很自然的抗拒说,Linux下的命令行模式不够友好,至少在MySQL源码方向上,IDE用起来会很麻烦吧,目前我知道的工具,主要有VS Code,Eclipse for C++,CLion

经过周末的一些对比和测试,我选择了CLion,为此还特意选定了一个风火轮图标。

进入CLion配置整个MySQL源码环境,从系统命令行配置到IDE的配置切换,整个过程个把小时就差不多了。

如果在查看代码中喜欢查看上下文,做下更细致的调试,我想这个工具的粒度和支持要更强大,细腻。

比如我们选择官网的MySQL源码包,比如:mysql-boost-5.7.31.tar.gz

假设路径如下:

basedir : /usr/local/mysql_5.7.31_source
datadir : /data/mysql_5.7.31_source
boost:/root/mysql_5.7.31_source/boost_1_59_0

可以使用如下的cmake命令:

cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql_5.7.31_source \
-DMYSQL_DATADIR=/data/mysql_5.7.31_source/  \
-DSYSCONFDIR=/data/mysql_5.7.31_source \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=all \
-DMYSQL_UNIX_ADDR=/data/mysql_5.7.31_source/mysql.sock \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_DEBUG=1 \
-DWITH_BOOST=/root/mysql_5.7.31_source/mysql-5.7.31/boost/boost_1_59_0

如果想省事些,直接先下载boost也可以,使用download选项

会自行映射boost_1_59_0/boost以及下面的目录和文件

如果不知道该映射的boost文件,则可以使用download选项

-DWITH_DEBUG=1 \
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/xxxx/boost_xxxx

命令行方式初始化数据库

cd /usr/local/mysql_5.7.31_source/bin
./mysqld --basedir=/usr/local/mysql_5.7.31_source  --datadir=/data/mysql_5.7.31_source --initialize-insecure --user=mysql --server-id=57310

整个过程CLion的配置和命令行的参数是一模一样的。

启动MySQL的过程,配置和命令行方式是一样的,只是通过CLion启动,然后就可以开启调试模式,得到一些更具体的信息了。

这是基本真实环境下的开发调试,而且代码和服务都是在环境中真实可见的,这种体验和学习效果强烈推荐。

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes),作者:杨建荣

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-06

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 不能轻视的mysql重启过程 (r7笔记第55天)

    数据库的重启看似是一件非常简单,没有技术含量的活,这是我以前说的话。而这句话简直是戳中了我的痛点。这种活真是太有技术含量了,高深到让人需要注意太多的东西,需要做...

    jeanron100
  • MySQL InnoDB Cluster环境搭建和简单测试

    InnoDB Cluster初印象 记得MySQL Group Replicatioin 刚开始的时候,MySQL界很是轰动,等待了多年,终于有了官方的这...

    jeanron100
  • MySQL中间件方案盘点

    首先数据库技术发展的基础还是在业务推动的背景下,能够实现相关的技术保障。业务需求的提升必然会在数据量,访问量等方面有更高的要求,而映射到数据库层...

    jeanron100
  • 解决wampServer 中MySQL插入中文乱码问题

    大家在使用wampserver中的mysql数据库时,插入中文会显示“??”,很多小伙伴都不知道给如何做,明明在创建数据库和表时已经设置字符为UTF-8了,可插...

    无邪Z
  • linux mysql 安装

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    云雀叫了一整天
  • Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战<MySQL数据库>(详解教程)

    在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,上一篇文章宏哥主要介绍了jmeter连接和创建数据库测试计划的过程...

    北京-宏哥
  • guava:Cache中使用数组(Object[],int[]...)作为KEY

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    用户1148648
  • 网站漏洞修补网站文件任意查看漏洞详情与利用

    在对网站程序代码的安全检测当中,网站文件任意查看漏洞在整个网站安全报告中属于比较高危的网站漏洞,一般网站里都会含有这种漏洞,尤其平台,商城,交互类的网站较多一些...

    技术分享达人
  • 人群计数--Single-Image Crowd Counting via Multi-Column Convolutional Neural Network

    Single-Image Crowd Counting via Multi-Column Convolutional Neural Network CVPR...

    用户1148525
  • JVM系列之:JIT中的Virtual Call

    什么是Virtual Call?Virtual Call在java中的实现是怎么样的?Virtual Call在JIT中有没有优化?

    程序那些事

扫码关注云+社区

领取腾讯云代金券