【倡议珍藏】Windows 下如何装置最新版 MySQL 源码学习的调试环境步骤。

作者:芬达

《芬达的数据库学习笔记》公众号作者,开源爱好者,善于 MySQL、ansible。

本文起源:原创投稿

  • 爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。

前言

大多数研发人员应用 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 里,这一点别弄错了。上面,咱们正式开始。

环境及软件筹备

  • Win11
  • VMware WorkStation 17 PRO
  • CentOS7.5(VMware 虚拟机上部署)
  • VSCode 1.81.1
  • MySQL 8.0.34 源码包

以上软件版本均为文章编写时的最新版。

CentOS7 环境筹备

实际上如果不是应用 Mac,那么应用 Ubuntu 应该是大多数研发人员的抉择,我应用 CentOS7 是因为我更相熟它,并且它更贴近于生产环境。但有一个大问题次要是 CentOS7 默认 YUM 源的开发依赖包太老旧了,我须要应用 epel-release 的包来装置更加新的 Debug 依赖包。

# 创立寄存源码的根目录mkdir -p /root/code# 进入寄存源码的根目录cd /root/code# 装置 wget、下载源码 & 解压yum install wget -ywget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.34.tar.gztar 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# 装置 gdbyum -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 版

# configcd /root/code/mysql-8.0.34cmake3 . \-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 basedir
  • WITH_DEBUG=1 可 Debug 的版本
  • FORCE_INSOURCE_BUILD=1 没钻研,可能不是必须的

MySQL 初始化

# 创立配置文件目录 & 数据目录mkdir -p /mysql/8.0.34/data  #你能够改这里# 创立用户 & 组groupadd mysqluseradd -g mysql mysql# 创立配置文件vi /etc/my.cnf# 把以下内容笼罩到 my.cnf[mysqld]user=mysqlinnodb_file_per_table=1server_id=100basedir=/usr/local/mysqldatadir=/mysql/8.0.34/data  #你能够改这里log-error=/mysql/8.0.34/data/error.log  #你能够改这里# 初始化数据目录/usr/local/mysql/bin/mysqld --initialize-insecure

装置 VSCode 插件

6.1 本地插件装置

在 VSCode 利用商店搜寻并装置以下插件:ChineseRemote(红框所示局部,上面两个是 Remote-SSH 的依赖,主动带进去的)。

.png)

接着咱们就能够通过 SSH 工具登录到 CentOS 了。

输出近程命令。

.png)

.png)

点击连贯,抉择 Linux,抉择持续并输出明码。

.png)

.png)

.png)

.png)

关上文件夹,两种办法任选。

.png)

.png)

输出文件夹门路,能够失常显示门路下文件。

.png)

6.2 近程插件装置

  • C/C++(gdb 插件调试时应用)

装完后,左侧会如图显示:分高低两栏。上栏是你本地 Windows 上装的 VSCode 插件;下栏是你远端 CentOS7 上装的 VSCode 插件。

.png)

远端的那个简体中文如同是 SSH 过来时主动装置的,雨我无瓜

调试

7.1 配置 VSCode 插件

cd /root/code/mysql-8.0.34mkdir .vscodecd .vscodevi 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

.png)

7.3 CentOS 上登录连贯 MySQL

/usr/local/mysql/bin/mysql  # 无明码登录 MySQL

7.4 VSCode 打断点

连贯 MySQL 胜利之后,在 MySQL 源码中打个断点,先关上 sql/sql_parse.cc 文件:

.png)

.png)

7.5 查看断点成果

先在 CentOS 上的 MySQL 终端上执行一条 SQL。

SELECT host, user FROM mysql.user;

程序在断点处暂停之后,就能够查看一系列运行时信息了,查看断点所在函数的局部变量。

.png)

查看断点处的调用栈。

.png)

也能够在调试控制台中,用命令行执行更多 gdb 命令。

.png)

基于 VSCode 的调试,须要在命令之前加上 -exec,上图中命令 p thd->m_query_string 后面就加上了 -exec (VSCode 有提醒)。

总结

本文借鉴了操盛春老师的办法《MySQL 调试环境搭建:VSCode + Docker》,并做了相应调整,以适应 Windows 用户并简化 Debug 环境的配置流程,从而使受众更广。通过将 Docker 改为 VMware,咱们能够利用 VMware 的快照性能,在任何步骤中都能够创立快照,如果呈现谬误并且无奈找到起因,能够疾速回滚到之前的状态,这极大地提高了入门效率。

更多技术文章,请拜访:https://opensource.actionsky.com/

对于 SQLE

爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,反对多场景审核,反对标准化上线流程,原生反对 MySQL 审核且数据库类型可扩大的 SQL 审核工具。

SQLE 获取

类型地址
版本库https://github.com/actiontech/sqle
文档https://actiontech.github.io/sqle-docs/
公布信息https://github.com/actiontech/sqle/releases
数据审核插件开发文档https://actiontech.github.io/sqle-docs/docs/dev-manual/plugin...