Windows下配置MySQL源码调试环境
- 环境准备
- 编译安装MySQL DeBug版
- MySQL初始化
- 安装VS Code插件
- 调试
参考链接:
https://zhuanlan.zhihu.com/p/651665372
https://zhuanlan.zhihu.com/p/606732848
环境准备
# 创建存放源码的根目录
mkdir -p /root/code
# 进入存放源码的根目录
cd /root/code
# 安装 wget、下载源码 & 解压
yum install wget -y
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.34.tar.gz
tar zxvf mysql-boost-8.0.34.tar.gz
# 用于安装 cmake3 的 yum 源
yum -y install epel-release
# 用于安装高版本 gcc、gcc-c++、make 的 yum 源
yum -y install centos-release-scl
# 安装依赖软件
yum -y install devtoolset-11-gcc \
devtoolset-11-gcc-c++ \
devtoolset-11-make \
cmake3 \
openssl-devel \
ncurses-devel \
bison
# 安装 gdb
yum -y install devtoolset-11-gdb
# 让 scl 环境临时生效
source /opt/rh/devtoolset-11/enable
# 让 scl 环境永久生效
vi /etc/profile.d/scl.sh
# 把以下内容写入 scl.sh,然后保存退出
source /opt/rh/devtoolset-11/enable
编译安装MySQL DeBug版
# config
cd /root/code/mysql-8.0.34
cmake3 . \
-DWITH_BOOST=./boost/ \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DWITH_DEBUG=1 \
-DFORCE_INSOURCE_BUILD=1
## build & install
#这里的 -j2 是并发两核 CPU 去构建,因为我的虚拟机只有两核
#但核数不是越高越好,有可能因为官方的构建文件没有处理好并发,
#导致更高的并发时编译直接报错,反正我 -j8 时报错了
#如果追求安全,不加并发也是个选择,就是慢点
make -j2 && make install
## 查看结果
echo $?
ll /usr/local/mysql/bin/mysql
问题:
collect2: fatal error: ld terminated with signal 9 [Killed]
原因:内存不足,开启了并发编译,加内存或者2改成1
问题:8.0.34和5.7.34都安装不了,mysqld报错
解决:8.0.32安装成功
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.32.tar.gz
tar zxvf mysql-boost-8.0.32.tar.gz
cd /root/code/mysql-8.0.32
cmake3 . \
-DWITH_BOOST=./boost/ \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DWITH_DEBUG=1 \
-DFORCE_INSOURCE_BUILD=1
MySQL初始化
# 创建配置文件目录 & 数据目录
mkdir -p /mysql/8.0.32/data #你可以改这里
# 创建用户 & 组
groupadd mysql
useradd -g mysql mysql
# 创建配置文件
vi /etc/my.cnf
# 把以下内容覆盖到 my.cnf
[mysqld]
user=mysql
innodb_file_per_table=1
server_id=100
basedir=/usr/local/mysql
datadir=/mysql/8.0.32/data #你可以改这里
log-error=/mysql/8.0.32/data/error.log #你可以改这里
# 初始化数据目录
/usr/local/mysql/bin/mysqld --initialize-insecure
安装VS Code插件
安装插件:Chinese、Remote、C/C++
ssh root@172.31.0.10
远程插件安装:C/C++
调试
配置VS Code插件
cd /root/code/mysql-8.0.32
mkdir .vscode
cd .vscode
vi launch.json
内容:
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "/usr/local/mysql/bin/mysqld",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
启动gdb
终端登录mysql
/usr/local/mysql/bin/mysql
打断点
执行语句,查看变量:
SELECT host, user FROM mysql.user;
问题:
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)
解决:先把断点打开,然后打断点,执行登录mysql。
执行顺序:先登录MySQL,再打断点,再执行select语句查询,再看调试界面。