当前位置: 首页 > article >正文

解锁MySQL 8.0.41源码调试:Mac 11.6+CLion 2024.3.4实战指南

文章目录

  • 解锁MySQL 8.0.41源码调试:Mac 11.6+CLion 2024.3.4实战指南
    • 前期准备
    • 环境搭建详细步骤
      • 安装 CLion
      • 安装 CMake 3.30.5
      • 准备 MySQL 8.0.41 源码
      • 配置 CMake 选项
      • 构建 MySQL 项目
    • 调试环境配置与验证
      • 配置 LLDB 调试器
      • 启动调试
      • 验证调试环境
    • 总结与拓展
    • 碰到的问题
      • 1. ld: unknown option: -no_warn_duplicate_libraries
      • 2 .std::bit_floor 未定义
      • 3.无法从 archives.boost.io 下载 Boost 1.77.0 源码包
      • 4.MySQL 启动时 component_reference_cache.so 缺失
      • 5.修复 Unix Socket 锁文件创建失败
    • 参考

解锁MySQL 8.0.41源码调试:Mac 11.6+CLion 2024.3.4实战指南

前期准备

在这里插入图片描述

环境搭建详细步骤

安装 CLion

首先,前往JetBrains 官网下载适用于 Mac 系统的 CLion 安装包。下载完成后,将安装包拖动到 “应用程序” 文件夹进行安装。安装过程中,可能会要求输入管理员密码以完成安装操作。安装完成后,首次打开 CLion 时,会提示进行一些初始设置,例如选择主题、导入设置等,可以根据个人喜好进行配置。

安装 CMake 3.30.5

下载:我用的cmake工具为Clion捆绑的,所以不需要单独下载。

安装:安装完Clion就有cmake工具了。如下图:

在这里插入图片描述
CMake 是一个强大的跨平台编译工具,它使用简单的配置文件来描述编译过程,能够生成适用于各种平台的makefile或项目文件。CMake的主要功能包括编译自动化和跨平台支持,它可以极大地提高软件开发的效率,特别是在涉及多个项目和复杂依赖关系时。

准备 MySQL 8.0.41 源码

获取源码

git clone https://gitee.com/mirrors/mysql-server.git
git checkout 8.0

配置 CMake 选项

打开mysql-server项目时,会自动弹出如下页面,这样我们就可以配置了。
在这里插入图片描述
-DDOWNLOAD_BOOST=0:表示不自动下载 Boost 库,因为我们已经指定了 Boost 库的路径。前提是我们用以下命令把boost库下载到指定目录了。如下:

curl -L -o ~/Downloads/boost_1_77_0.tar.bz2 https://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.bz2/download
mv ~/Downloads/boost_1_77_0.tar.bz2 ~/CLionProjects/mysql-server/boost/

-DWITH_BOOST=/Users/shandian/CLionProjects/mysql-server/boost:指定 Boost 库的路径,让 MySQL 在编译时能够找到 Boost 库。

-DCMAKE_BUILD_TYPE=Debug:设置构建类型为 Debug,这样在调试时能够包含更多的调试信息。

-DCMAKE_INSTALL_PREFIX=~/CLionProjects/mysql-server/build_out:指定安装路径,编译后的文件将安装到这个目录。

-DMYSQL_DATADIR=/Users/shandian/CLionProjects/mysql-server/build_out/data:指定 MySQL 的数据目录。
注意:如果有多次初始化,需要把前一次生成的的文件先删除掉,不然会导致初始化失败

-DSYSCONFDIR=~/CLionProjects/mysql-server/build_out:指定 MySQL 的配置文件目录。

-DMYSQL_UNIX_ADDR=/Users/shandian/CLionProjects/mysql-server/build_out/data/mysql.sock:指定 MySQL 的 Unix 套接字文件路径。

-DMYSQL_MAINTAINER_MODE=false:关闭维护者模式,减少编译时的一些额外检查。

构建 MySQL 项目

打开 CLion,点击 “Create New Project”。

在弹出的窗口中,选择 “Import Project”,然后找到 MySQL 源码所在目录/Users/shandian/CLionProjects/mysql-server

在 “CMake Options” 中输入之前配置好的 CMake 选项。

在 “Build Directory” 中指定构建目录为/Users/shandian/CLionProjects/mysql-server/build_out

点击 “OK”,CLion 会自动加载项目并开始配置 CMake。

配置完成后,点击 CLion 界面右上角的 “Build” 按钮开始构建项目。构建过程可能会持续一段时间,期间可能会下载一些依赖库,如果遇到网络问题导致下载失败,可以手动下载并放置到相应目录。构建完成后,如果没有报错,就可以开始进行调试了。

调试环境配置与验证

配置 LLDB 调试器

如果 CLion 的 CMake 执行成功后,就会出现对应的 Run / Debug Configurations 选项,如下所示:

在这里插入图片描述

打开 CLion,进入 MySQL 项目。点击菜单栏中的 “Run” -> “Edit Configurations”。

在弹出的配置窗口中,找到 “Configuration” 选项卡。

在 “Debugger” 下拉框中选择 “LLDB19.1.3”。

确保 “Use bundled LLDB” 选项被勾选,这样 CLion 就会使用捆绑的调试器进行调试。
在这里插入图片描述

点击 “OK” 保存配置。此时,LLDB 调试器已经配置完成,它将在后续的调试过程中发挥作用,帮助我们分析 MySQL 程序的执行流程和变量状态。

启动调试

在 CLion 的代码编辑界面中,找到需要调试的代码位置,例如sql/``session.cc文件中的某个函数,在代码行号旁边点击,设置断点。断点是调试过程中的关键标记,当程序执行到断点处时,会暂停执行,方便我们查看程序状态。

设置好断点后,点击 CLion 界面右上角的绿色虫子图标(Debug 按钮),或者使用快捷键Command + Shift + F9启动调试。

程序开始运行,当执行到设置的断点时,会暂停下来。此时,CLion 的调试窗口会显示当前的调试信息,包括当前执行的代码行、调用栈、变量的值等。我们可以在调试窗口中查看各个变量的值,观察程序的执行流程是否符合预期。例如,可以查看某个 SQL 语句执行过程中变量的变化,分析查询优化的过程。

验证调试环境

为了验证调试环境是否搭建成功,我们可以进行一个简单的调试示例。比如,在 MySQL 的查询执行代码中设置断点,然后执行一个简单的 SQL 查询,如SELECT * FROM users;

启动调试后,程序会在断点处暂停。我们可以通过调试窗口查看查询执行过程中各个变量的状态,例如查询语句的解析结果、执行计划等。

逐步执行代码(使用调试窗口中的 “Step Over”、“Step Into”、“Step Out” 按钮),观察程序的执行流程。如果能够顺利地进行断点调试,并且能够正确查看变量的值和执行流程,那么说明调试环境搭建成功。

例如,在调试过程中,我们可以看到查询语句被解析成抽象语法树,然后根据优化规则生成执行计划,最终执行查询并返回结果。通过这样的调试,我们可以深入了解 MySQL 的内部机制,为后续的开发和优化工作提供有力支持。

我们找到名称为 mysqld 的选项,它就是 MySQL Server 启动的选项。可以先用该选项执行 MySQL数据库目录的初始化操作,生成对应的配置文件和用户名密码,然后再使用该选项来启动 MySQL Server。要注意,两个操作对应的参数不一样。

初始化的参数如下:

–initialize-insecure --user=mysql

然后再使用下面参数启动:

–user=mysql

最后使用登录命令进行登录,直接回车就可以,因为我们初始化的时候并没有设置密码

mysql -uroot -S /Users/shandian/CLionProjects/mysql-server/build_out/data/mysql.sock

然后我们就可以在 CLion 上打上断点,对 MySQL 进行调试了。

总结与拓展

搭建 MySQL 8.0.41 源码在 Mac 11.6 系统下,借助 CLion 2024.3.4、CMake 3.30.5 和 LLDB19.1.3 进行 Debug 环境的过程,虽然步骤较为繁琐,但每一步都至关重要。在这个过程中,需要特别注意各软件版本的兼容性,比如 CMake 版本与 CLion、MySQL 源码之间的适配,避免因版本不兼容导致构建失败。同时,配置 CMake 选项时,一定要仔细核对路径和参数,任何一个小的错误都可能引发后续构建和调试的问题。在构建项目过程中,网络问题可能会影响依赖库的下载,需要及时处理。

通过成功搭建这个调试环境,我们获得了深入探索 MySQL 内部机制的有力工具。建议读者在掌握了基本的调试技巧后,进一步探索 MySQL 的核心模块,比如存储引擎的实现、查询优化器的算法等。可以尝试修改源码,观察其对 MySQL 功能和性能的影响,从而加深对数据库原理和开发的理解。希望大家在 MySQL 源码调试的探索中不断取得新的成果,为数据库领域的研究和开发贡献自己的力量。

碰到的问题

1. ld: unknown option: -no_warn_duplicate_libraries

根据错误信息 ld: unknown option: -no_warn_duplicate_libraries,问题根源是 macOS 的 ld 链接器不支持 -no_warn_duplicate_libraries 选项。该选项可能由 MySQL 的 CMake 脚本在非 macOS 平台下添加,但在 macOS 上不兼容。以下是具体解决方案:
临时修复(快速验证)

# 进入构建目录
cd /Users/shandian/CLionProjects/mysql-server/build_out

# 使用 sed 删除 -Xlinker -no_warn_duplicate_libraries 选项
sed -i '' 's/-Xlinker -no_warn_duplicate_libraries//g' build.ninja

# 

重新编译

2 .std::bit_floor 未定义

在编译 MySQL 时遇到 std::bit_floor 未定义的错误,是因为你的编译器或标准库版本不支持 C++20 的 头文件中的 bit_floor 函数。以下是针对 macOS 环境的解决方案:

降级 MySQL 版本

git checkout 8.0  # 假设使用 Git 仓库
# 清理并重新编译
rm -rf build_out/*

3.无法从 archives.boost.io 下载 Boost 1.77.0 源码包

错误日志:

Applications/CLion.app/Contents/bin/cmake/mac/x64/bin/cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=/Applications/CLion.app/Contents/bin/ninja/mac/x64/ninja -DDOWNLOAD_BOOST=1 -DWITH_BOOST=~/CLionProjects/mysql-server/boost -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=~/CLionProjects/mysql-server/build_out -DMYSQL_DATADIR=~/CLionProjects/mysql-server/build_out/data -DSYSCONFDIR=~/CLionProjects/mysql-server/build_out -DMYSQL_UNIX_ADDR=~/CLionProjects/mysql-server/build_out/data/mysql.sock -DMYSQL_MAINTAINER_MODE=false -G Ninja -S /Users/shandian/CLionProjects/mysql-server -B /Users/shandian/CLionProjects/mysql-server/build_out
-- Running cmake version 3.30.5
-- CMAKE_MODULE_PATH is /Users/shandian/CLionProjects/mysql-server/cmake
-- MySQL 8.0.41
-- Source directory /Users/shandian/CLionProjects/mysql-server
-- Binary directory /Users/shandian/CLionProjects/mysql-server/build_out
-- CMAKE_GENERATOR: Ninja
-- SIZEOF_VOIDP 8
-- DEFAULT_PLATFORM macos11.6
-- Packaging as: mysql-8.0.41-macos11.6-x86_64
-- Downloading boost_1_77_0.tar.bz2 to /Users/shandian/CLionProjects/mysql-server/boost
-- Download failed, error: 7;"Couldn't connect to server"
CMake Error at cmake/boost.cmake:234 (MESSAGE):
  You can try downloading
  https://archives.boost.io/release/1.77.0/source/boost_1_77_0.tar.bz2
  manually using curl/wget or a similar tool
Call Stack (most recent call first):
  CMakeLists.txt:1586 (INCLUDE)

解决方案:
手动下载 Boost

步骤 1:下载 Boost 1.77.0
通过浏览器或命令行下载 Boost:

# 使用 curl 或 wget
curl -L -o ~/Downloads/boost_1_77_0.tar.bz2 https://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.bz2/download
# 移动下载的文件
mv ~/Downloads/boost_1_77_0.tar.bz2 ~/CLionProjects/mysql-server/boost/

步骤2 :调整 CMake 配置
在 CLion 的 CMake 配置中移除 -DDOWNLOAD_BOOST=1,或显式设置为 0:

-DDOWNLOAD_BOOST=0

使用绝对路径指定 Boost

-DWITH_BOOST=/Users/shandian/CLionProjects/mysql-server/boost

清理并重新生成构建

rm -rf /Users/shandian/CLionProjects/mysql-server/build_out/*

4.MySQL 启动时 component_reference_cache.so 缺失

从其它地方拷贝了一个,放在以下目录

/Users/shandian/CLionProjects/mysql-server/build_out/lib/plugin/

5.修复 Unix Socket 锁文件创建失败

Could not create unix socket lock file ~/CLionProjects/mysql-server/build_out/data/mysql.sock.lock.

解决方法:
在 CMake 配置中替换 ~ 为绝对路径 /Users/shandian

-DMYSQL_DATADIR=/Users/shandian/CLionProjects/mysql-server/build_out/data \
  -DMYSQL_UNIX_ADDR=/Users/shandian/CLionProjects/mysql-server/build_out/data/mysql.sock

参考

原文链接:https://blog.csdn.net/qq_40161813/article/details/127823025


http://www.kler.cn/a/593386.html

相关文章:

  • 河南大学数据库实验5
  • 涨薪技术|Kubernetes(k8s)之Pod环境变量
  • OpenEuler kinit报错找不到文件的解决办法
  • Mybatis使用Druid连接池
  • Node.js模块:使用 Bull 打造高效的任务队列系统
  • 【IDEA中配置Maven国内镜像源】
  • 微信小程序面试内容整理-如何使用wx.request()进行网络请求
  • 链表操作:分区与回文判断
  • Linux与深入HTTP序列化和反序列化
  • C++内存分配方式
  • CVPR2024 | SWARM | 并非所有提示都安全:针对预训练视觉Transformer的可开关后门攻击
  • Python 监听模式(Observer Pattern)
  • 【LeetCode】622、设计循环队列
  • 软考程序员考试知识点汇总
  • Java爬虫抓取B站视频信息
  • C#实现的一个简单的软件保护方案
  • Unity框架集合(持续更新)
  • 【最后203篇系列】016 Q201架构思考
  • 移动端高效3D场景重建技术突破:从2D图像到语义化空间理解的范式迁移
  • 私有云大数据部署:从开发到生产(Docker、K8s、HDFS/Flink on K8s)