目录
0 准备工作
1 IDE
2 下载MySQL源码
编辑
一 配置CLion
1 添加远程服务器
2 配置远程服务器环境
3 升级gdb版本
4 升级CMake版本
5 修改远程服务器文件上传的目录的对应关系
5 配置cmake
7 初始化MySQL
8 启动MySQL
作为DBA工作多年,如果还是停留在运维阶段,很难提高自己的技术水平。阅读 MySQL 及相关工具的源代码,不仅是数据库研发人员的日常,也是 DBA 进阶的必经之路,全方位提高技术水平。
0 准备工作
1 IDE
IDE CLion下载 CLion:JetBrains 出品的 C 和 C++ 跨平台 IDE
使用IDE的目的主要是方便阅读/debug MySQL源码
2 下载MySQL源码
下载地址
MySQL :: MySQL Community Downloads
下载页面有两种源码包 选择下载包含boost的源码包
一 配置CLion
1 添加远程服务器
打开IDE CLion --> Open 本地打开MySQL的源码
点击 Preferences --> Tools
点击 + 添加源端的服务器 填写 host 端口 用户名 密码等信息 --> 点击 Test Connection --> 出现连接成功即可
2 配置远程服务器环境
从上图可以看到 cmake 和 gdb 的版本较低,不满足要求。下面需要升级gdb和cmake的版本。如果你的版本都满足要求 可以跳过第3,4步。
3 升级gdb版本
参考博客 Linux之gdb安装和升级_gdb 升级-CSDN博客
查看目前版本
# 查看当前版本
gdb -v
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1)
# 下载压缩包
wget http://ftp.gnu.org/gnu/gdb/gdb-7.8.tar.gz
# 解压
tar -zxvf gdb-7.8.tar.gz
chown -R root.root gdb-7.8
# 编译安装
cd gdb-7.8
mkdir build
./configure
make
make install
# 二进制命令在 /usr/local/bin/ 下
/usr/local/bin/gdb --version
在 C 语言项目中,预编译时的安装路径通常是由 configure
脚本或 CMake 构建系统生成的。这个路径通常取决于多个因素,包括系统默认路径、用户指定的参数,以及软件包的配置选项。在没有指定 PREFIX
参数的情况下,通常会使用默认路径。
以下是一些方法,你可以查看在没有指定 PREFIX
参数时,预编译时二进制文件会安装到哪里:
1. 查看 Makefile
在 C 语言项目的源代码目录中,可以查看 Makefile
或者 Makefile.in
文件,这些文件中包含了关于预编译时安装路径的信息。查找类似于 prefix
或 DESTDIR
的关键字,这些关键字通常用于指定安装路径。
4 升级CMake版本
wget https://cmake.org/files/v2.8/cmake-2.8.12.2.tar.gz --no-check-certificate
tar -zxvf cmake-2.8.12.2.tar.gz
cd cmake-2.8.12.2
./bootstrap
gmake
gmake install
5 修改远程服务器文件上传的目录的对应关系
默认路径在tmp 随机字符串生成一个目录
修改为自己想放的位置 /home/software/mysql_source_code
5 配置cmake
BuilD type :debug
tooolchain :Remote host
Cmake option: . -DWITH_DEBUG=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=./boost -DCMAKE_INSTALL_PREFIX=build_out -DMYSQL_DATADIR=build_out/data
Built directory : .
参数解释:
-
-DWITH_DEBUG=1
: 启用调试模式。这将编译MySQL服务器和相关的组件,以便在调试时能够获取更多的信息和日志。 -
-DDOWNLOAD_BOOST=1
: 下载并构建Boost库。Boost是一个提供许多用于C++的工具和库的开源项目。这个选项告诉CMake下载Boost库并将其集成到MySQL的构建中。 -
-DWITH_BOOST=./boost
: 指定Boost库的位置。这告诉CMake在当前目录下寻找名为"boost"的目录,并将其用作Boost库的位置。 -
-DCMAKE_INSTALL_PREFIX=build_out
: 指定安装目录的前缀。在构建和安装完成后,MySQL将被安装到"build_out"目录下。 -
-DMYSQL_DATADIR=build_out/data
: 指定MySQL数据目录的位置。MySQL数据目录是存储数据库文件的地方。在这里,它被设置为"build_out/data"。
修改完成之后开始上传 上传需要一些时间 可以在 filetransfer 看到文件上传的详情
报错 1
-- Packaging as: mysql-5.7.28-Linux-x86_64
-- WITH_BOOST=/home/software/mysql_source_code/boost/boost_1_59_0/boost
-- BOOST_INCLUDE_DIR
-- LOCAL_BOOST_DIR LOCAL_BOOST_DIR-NOTFOUND
-- LOCAL_BOOST_ZIP LOCAL_BOOST_ZIP-NOTFOUND
-- Could not find (the correct version of) boost.
-- MySQL currently requires boost_1_59_0
解决 :
这个调整Cmake的配置解决
报错2
-- Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:71 (MESSAGE):
Curses library not found. Please install appropriate package,
解决:
yum install ncurses-devel
7 初始化MySQL
--defaults-file=/etc/my_5306.cnf --initialize --initialize-insecure --user=mysql
参数解释
--defaults-file=/etc/my_5306.cnf 配置文件
--initialize 初始化
--initialize-insecure 不设置初始的密码
--user=mysql 使用用户
将以上命令填写到
点击 edit Configure
左侧选择 mysqld ,将以上命令填写到 Program arguments
初始化 数据目录生成在配置文件配置的目录下
要注意目录是否存在 ,目录的用户等问题
点击run mysqld 进行初始化。相当于安装MySQL时进行初始化,只不过是在本地Clion 上进行了。
8 启动MySQL
--defaults-file=/etc/my_5306.cnf --debug=d,error,warning,info:F:L
启动时加的debug 参数 的含义
官方文档大概讲解
MySQL :: MySQL 8.0 Reference Manual :: 5.1.7 Server Command Options
官方文档详细讲解:
MySQL :: MySQL 8.0 Reference Manual :: 5.9.4 The DBUG Package
在cmake的时候需要加参数 -DWITH_DEBUG=1 ,然后启动MySQL实例的时候加参数--debug才有效
F 显示 每行调试或跟踪输出相关的源码文件名。
L 显示每行debug或trace输出相关的 源码文件的行数
i.显示每行debug或trace输出 相关的进程ID 或 线程ID