用 VSCode 编译和调试 MySQL,每个 DBA 都应 get 的小技能
破产码农
如果5年前有人问:MySQL DBA需要拥有内核开发的技能么?
我会说:不需要。
2021年的这个时间,若有人问:MySQL DBA需要拥有内核开发的技能么?
我依然会坚持道:不需要。
但是会补充道:MySQL DBA 不要求能进行数据库内核层面的开发,但是要能进行一般内核问题的故障诊断与分析。
因此,学会编译和调试 MySQL 源码就是当前一个必备技能了。
在我10年前撰写的书籍《MySQL技术内幕:InnoDB存储引擎》有关于内核代码的调试,可惜是基于 Visual Studio 。
用 Visual Studio 编译和调试 MySQL 和线上用 gdb 处理问题依然有很大的区别。
更重要的是,那时还没有 VSCode (Visual Studio Code)这样的跨平台杀手级 IDE 。
VSCode 一出,其他 IDE 都成为了”垃圾“。
在开始介绍如何通过 VSCode 编译和调试 MySQL 数据库前,我们先介绍 VSCode 的一个杀手级插件:Remote SSH。
上述插件简单来说就是:通过SSH技术,可以本地编写、编译、调试在远程存储的代码。
以前开发大致需要经过:本地开发环境 -> 测试环境 -> 联调环境 -> 预发布环境 -> 线上环境
而本地开发环境由于操作系统是 Windows、Mac等,总存在各种各样的依赖。
通过 VSCode 的 Remote SSH 插件,码农们基本就统一了本地开发环境和测试环境。
而 Remote 的这台主机可以是一台性能超级强劲的云主机,如 32 核 64G,通常来说,都要比本地主机性能好很多。
BTW,Win 10 推出了 WSL (Windows Subsystem Linux ),通过 Remote WSL 插件可以无缝连接到 Win 10 内置的 Linux 系统。
对于不想申请云主机,就想在 Windows 下开发的同学来说,这又是一个真香系列。
总之,VSCode + WSL 是微软 CEO 纳德拉上台后,推出的最好技术产品。
试问,若你是纳德拉,在微软风雨飘摇的时候上台,如何快速讨好流失的用户呢?
纳德拉其实真是一个很棒的产品经理!
小 tips :GitHub Codespaces
之前网上有一篇如何使用 VSCode 编译和调试 MySQL 源码的文章。
很可惜,那篇文章没有充分发挥 CMake 的威力以及理解 VSCode 的拥有能力。
配置上过于繁琐,不是一个如 VSCode 优秀 IDE 应该的使用姿势。
接着让姜老师 step by step 教大家如何使用 VSCode 编译和调试 MySQL 源码。
首先,在本地 VSCode 中安装插件:Remote SSH
接着,按 Ctrl + Shift + p,通过 Remote 插件连接到远程的 Linux 服务器或本地 WSL,并打开远程服务器上的 MySQL 源码文件夹:
上述操作都完成后,在 VSCode 左侧(默认),你应该能看到类似如下的界面:
SSH:DAVID_DEV 表示是用过 Remote 插件连接到的远程服务器。
OUTLINE显示的是打开源码文件中对应的函数和变量等信息。
接着,在远程远程服务器上依次安装 C/C++、CMake、CMake Tools插件,如:
切记,上述三个插件要安装在 Remote 环境下,不要安装在 LOCAL 本地。否则远程服务器无法编译和调试源码。
在安装完 CMake Tools 插件后,在 VSCode 的底部,可以看到 CMake 的配置选项:
最左侧是选择编译的版本,按下CMake会出现Debug、Release、MinSizeRel、RelWithDebInfo 的编译版本选择。
中间部分是选择编译器,如 GCC、llvm、Clang 的版本,点击会出现类似如下的选项:
这里我选择了 GCC 9.3.1。
之后的齿轮图片⚙表示进行BUILD编译;蜘蛛🕷图片表示调试按钮;最后的箭头表示表示启动程序,这里选择启动 mysqld 这个程序。
好了,到这就可以进行第一步编译了。
在编译前,还需要对 CMake 做一些配置,因为 MySQL 源码依赖 boost 库,这个库没有随源码一起分发,需要独立下载。
因此,按下 Ctrl + , 在 CMake 插件中的Workspace选项卡中,进行如下配置:
完成这一步,接着点击底部的 BUILD 按钮,就可以顺利的完成编译工作了。
要启动 mysqld 程序的话,还需要配置额外的参数,需要在配置文件 settings.json 中进行如下配置:
"cmake.debugConfig": {
"args": ["--user=mysql --datadir=..."],
}
这样就可以进行 mysqld 程序的启动和调试。
若通过 VSCode 设置断点,VSCode 会调式中通过 gdb attach 到 mysqld 进程,这样就能进行源码级别的调式了:
相信现在同学们已经学会了编译、调试 MySQL 源码的工作。
现在修改 MySQL 源码,自定义 MySQL 的版本,如:
直播预告
往期推荐
老盖除名 Oracle ACE ,旧时代的终结!
收藏!最新《MySQL数据库开发设计规范》
这么哇塞的 MySQL 功能,你确定不用么?
作为新生代农民工,码农30岁存款应该有多少?
关于 O_DIRECT 的正确答案!