暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

为什么我们要调试MySQL Server?如何调试?

原创 Tomer Shay 2020-04-16
3814

为什么要调试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帐户的密码-请从命令输出中复制该密码,并在下一步中使用它。

image.png

image.png

./build/bin/mysqld --initialize
./build/bin/mysqld --debug

image.png

现在,在另一个终端选项卡中,您可以使用MySQL客户端连接到数据库,并更改密码:

./build/bin/mysql -u root -p 
ALTER USER 'root'@'localhost' IDENTIFIED BY "<newpassword>";

运行快速测试查询以确保一切正常:

show databases;

现在,您可以关闭服务器并进行所有设置以调试数据库服务器:

exit
./build/bin/mysqladmin -u root -p shutdown

调试MySQL Server 8.x

要调试MySQL,可以使用Visual Studio Code,它是Microsoft的一种出色的(免费)IDE。首先下载并安装它。

安装之后,我们需要从扩展存储库中安装C ++扩展,因为它不是其核心功能的一部分。此扩展将设置有效浏览和调试C ++代码所需的一切。

image.png

现在,请导航至左侧的“资源管理器”标签,然后选择“打开文件夹”。作为源文件夹,请选择从GitHub克隆的“ mysql-server”文件夹:

image.png

要设置调试器以调试mysqld进程,请从顶部菜单中选择:运行 > 开始调试> C ++(gdb)。当loader.json文件打开时,将程序参数设置为mysqld二进制文件的路径。

image.png

现在您可以开始调试了。

从菜单中再次选择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/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论