作者:芬达
《芬达的数据库学习笔记》公众号作者,开源爱好者,擅长 MySQL、ansible。
本文来源:原创投稿
* 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
1前言
大多数研发人员使用 Mac 来调试代码,但我作为不懂研发的 DBA,并且作为 Windows 的粉丝,相信绝大多数运维同学也是使用 Win 的,那我必须使用 Win 了。从这篇文章开始,我尝试摸索 MySQL 源码的学习。
本文中,我们将在 Win11 上安装 VSCode 用于调试 MySQL,安装 VMware,并在 VMware 里部署 CentOS7。在 CentOS7 里,我们将通过 VSCode 调试 MySQL 的 Debug 版本。通过使用安装在 Win11 的 VSCode 的 REMOTE 插件,我们可以访问 CentOS7,并安装 VSCode 的调试插件来调试 MySQL 的 Debug 版。需要注意的是,REMOTE 插件安装在 Win11 里,而调试插件则通过 REMOTE 插件安装在 CentOS7 里,这一点别弄错了。下面,我们正式开始。
图片描述
2环境及软件准备
- Win11
- VMware WorkStation 17 PRO[1]
- CentOS7.5(VMware 虚拟机上部署)
- VSCode 1.81.1[2]
- MySQL 8.0.34 源码包[3]
以上软件版本均为文章编写时的最新版。
3CentOS7 环境准备
实际上如果不是使用 Mac,那么使用 Ubuntu 应该是大多数研发人员的选择,我使用 CentOS7 是因为我更熟悉它,并且它更贴近于生产环境。但有一个大问题主要是 CentOS7 默认 YUM 源的开发依赖包太老旧了,我需要使用 epel-release
的包来安装更加新的 Debug 依赖包。
# 创建存放源码的根目录
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
4编译安装 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
下图这样就算编译安装完了。
参数解释:
cmake3
的参数是被我极限简化的,其他走默认值,减少大家学习的心智负担。
WITH_BOOST=./boost/
我们下载的是带 boost 的源码包,相对路径就是在这里CMAKE_INSTALL_PREFIX=/usr/local/mysql
编译安装后的 MySQL basedirWITH_DEBUG=1
可 Debug 的版本FORCE_INSOURCE_BUILD=1
没研究,可能不是必须的
5MySQL 初始化
# 创建配置文件目录 & 数据目录
mkdir -p /mysql/8.0.34/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.34/data #你可以改这里
log-error=/mysql/8.0.34/data/error.log #你可以改这里
# 初始化数据目录
/usr/local/mysql/bin/mysqld --initialize-insecure
6安装 VSCode 插件
6.1 本地插件安装
在 VSCode 应用商店搜索并安装以下插件:Chinese、Remote(红框所示部分,下面两个是 Remote-SSH 的依赖,自动带出来的)。
接着我们就可以通过 SSH 工具登录到 CentOS 了。
输入远程命令。
点击连接,选择 Linux,选择继续并输入密码。
打开文件夹,两种方法任选。
输入文件夹路径,可以正常显示路径下文件。
6.2 远程插件安装
- C/C++(gdb 插件调试时使用)
装完后,左侧会如图显示:分上下两栏。上栏是你本地 Windows 上装的 VSCode 插件;下栏是你远端 CentOS7 上装的 VSCode 插件。
远端的那个简体中文好像是 SSH 过去时自动安装的,雨我无瓜~~
7调试
7.1 配置 VSCode 插件
cd /root/code/mysql-8.0.34
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
}
]
}
]
}
7.2 启动 gdb
7.3 CentOS 上登录连接 MySQL
/usr/local/mysql/bin/mysql # 无密码登录 MySQL
7.4 VSCode 打断点
连接 MySQL 成功之后,在 MySQL 源码中打个断点,先打开 sql/sql_parse.cc
文件:
7.5 查看断点效果
先在 CentOS 上的 MySQL 终端上执行一条 SQL。
SELECT host, user FROM mysql.user;
程序在断点处暂停之后,就可以查看一系列运行时信息了,查看断点所在函数的局部变量。
查看断点处的调用栈。
也可以在调试控制台中,用命令行执行更多 gdb 命令。
基于 VSCode 的调试,需要在命令之前加上 -exec
,上图中命令 p thd->m_query_string
前面就加上了 -exec
(VSCode 有提示)。
8总结
本文借鉴了操盛春老师的方法《MySQL 调试环境搭建:VSCode + Docker》,并做了相应调整,以适应 Windows 用户并简化 Debug 环境的配置流程,从而使受众更广。通过将 Docker 改为 VMware,我们可以利用 VMware 的快照功能,在任何步骤中都可以创建快照,如果出现错误并且无法找到原因,可以快速回滚到之前的状态,这极大地提高了入门效率。
9扩展阅读
芬达的数据库笔记《手把手教你编译安装 MySQL 8.0.29》
DBA札记《Mac下vscode中mysql源码调试环境搭建》
参考资料
[1]
VMWare 下载地址: https://www.vmware.com/
[2]
VSCode 下载地址: https://code.visualstudio.com/
[3]
MySQL 下载地址: https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.34.tar.gz
本文关键字:#MySQL# #Windows# #源码#
阅读推荐
技术译文 | MySQL 和 MariaDB 版本管理的历史背景及差异
技术译文 | 一文了解 MySQL 全新版本模型
技术译文 | 那些 MySQL 8.0 中的隐藏特性
技术译文 | XtarBackup 8.0.33-28 Prepare 速度提升 20 倍!
故障解析 | MySQL 主从复制遇到 1590 报错
故障解析 | 生产环境遇到 MySQL 数据页损坏问题如何解决?
新特性解读 | MySQL 8.0 字段信息统计机制
OSC 源创会 北京站 第 94 期
未来,大模型技术研究将会向哪个方向发展,又将如何赋能千行百业?身处其中的我们该如何拥抱新变化?为了找寻答案,开源中国联合 WasmEdgeRuntime 共同举办以 “AI 大模型与底层技术探索” 为主题的【源创会】线下技术沙龙,邀请来自业界和学界的专家分享他们在 AI 大模型与底层技术方面的研究成果和实践经验。来自爱可生的向量数据库研发经理 - 苏鹏,将在现场带来《智能运维交互的创新实践》主题演讲,敬请期待。
时间:8 月 26 日 14:00-18:00
地点:北京中关村创业大街 12 号楼 5 层
议题:
智能运维交互的创新实践
议题简介:
随着科技进步和计算能力的不断提高,智能运维逐渐成为了现代 IT 领域的重要组成部分。其中,大模型、向量检索和数据库运维的结合,为我们提供了一种前所未有的运维新方法。本次分享将重点介绍这三者的结合与应用,以及如何借助它们提升运维效率、减少人为错误、并为用户带来更优质的服务体验。
点击原文链接报名或扫码报名:
Qcon 全球开发者大会 北京站
QCon 全球软件开发大会是由极客邦科技旗下 InfoQ 中国主办的综合性技术盛会,每年在伦敦、北京、纽约、圣保罗、上海、旧金山召开。自2007年3月份开始举办以来,已经有超万名有多年从业经验的技术人员参加过QCon大会。QCon 内容源于实践并面向社区,演讲嘉宾依据热点话题,面向5年以上工作经验的技术团队负责人、架构师、工程总监、开发人员分享技术创新和实践。
爱可生开源社区将亮相 Qcon 2023 北京站现场,欢迎社区的小伙伴来到展位线下交流,参与互动,赢取社区周边。
时间:9 月 3 日 - 9 月 5 日
地点:北京 - 富力万丽酒店
关于 SQLE
爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。
SQLE 获取
🔗 Github https://github.com/actiontech/sqle
📚 文档 https://actiontech.github.io/sqle-docs/
💻 官网 https://opensource.actionsky.com/sqle/
👥 微信技术交流群:添加管理员微信 ActionOpenSource