为什么要调试MySQL?
从源代码构建MySQL听起来像通常不会做的事情,尽管它在几种情况下很有用:
当您想通过新功能或错误修复为MySQL做出贡献时。
当您想探索MySQL或下划线引擎的行为方式时,超出了记录的范围。
当您考虑使用MySQL进行工作并在自己的存储库中对其进行自定义时。
当您要使用自定义构建参数或编译器优化来创建自定义MySQL构建时。
对于EverSQL来说,这是原因2。
为了改进我们的查询优化算法,我们一直在探索数据库的源代码,以了解数据库的操作方式,超出实际记录的范围,以及我们的产品如何补充数据库的核心功能。
在本教程中,您将学习如何从最新的源代码构建MySQL并对其进行调试。在本教程中,我使用Ubuntu 16.04并从GitHub构建了最新版本的MySQL(到目前为止,是MySQL 8.0.19)。
从源代码构建MySQL 8.x
首先,将最新的MySQL服务器源代码从GitHub 复制到您的Ubuntu计算机:
git clone https://github.com/mysql/mysql-server
安装以下依赖项:
sudo apt install cmake libssl-dev libzstd-dev libncurses5-dev libreadline-dev bison pkg-config
接下来,我们创建构建输出目录,并进行构建。
cmake参数将为调试做好准备,还将自动下载boost,这是构建MySQL的前提。
cd mysql-server
mkdir build
cd build
cmake .. -DWITH_DEBUG=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=~/boost_1_69_0
make
一旦cmake成功完成,您将看到: 使用make进行构建可能需要几分钟(或更长时间)。一旦make成功完成,您应该会看到类似以下的输出: 现在您可以初始化MySQL并运行服务器。默认情况下,初始化操作将随机化root帐户的密码-请从命令输出中复制该密码,并在下一步中使用它。
./build/bin/mysqld --initialize
./build/bin/mysqld --debug
现在,在另一个终端选项卡中,您可以使用MySQL客户端连接到数据库,并更改密码:
./build/bin/mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY "";
运行快速测试查询以确保一切正常:
show databases;
现在,您可以关闭服务器并进行所有设置以调试数据库服务器:
exit
./build/bin/mysqladmin -u root -p shutdown
调试MySQL Server 8.x
要调试MySQL,可以使用Visual Studio Code,它是Microsoft的一种出色的(免费)IDE。首先下载并安装它。
安装之后,我们需要从扩展存储库中安装C ++扩展,因为它不是其核心功能的一部分。此扩展将设置有效浏览和调试C ++代码所需的一切。
现在,请导航至左侧的“资源管理器”标签,然后选择“打开文件夹”。作为源文件夹,请选择从GitHub克隆的“ mysql-server”文件夹:
要设置调试器以调试mysqld进程,请从顶部菜单中选择:运行 > 开始调试> C ++(gdb)。当loader.json文件打开时,将程序参数设置为mysqld二进制文件的路径。
现在您可以开始调试了。
从菜单中再次选择Run ==> Start Debugging,完成后,MySQL将以调试模式启动。
如果你在代码中找一个有趣的地方分配一个断点开始调试之前,一个不错的选择将是Optimize_table_order :: greedy_search()在文件功能sql_planner.cc,这将让你有一个一眼MySQL如何确定查询的最佳执行计划。
原文链接:https://www.eversql.com/why-and-how-build-debug-mysql-from-source-code/