visual studio调试mysql_windows下使用visual studio编译调试MySQL

本文详细介绍了如何在Windows10环境下使用Visual Studio 2019编译和调试MySQL8.0.21。文章涵盖环境准备、cmake编译过程、解决编译时的坑及启动和调试MySQL服务的步骤,旨在帮助开发者顺利进行MySQL源码级调试。
摘要由CSDN通过智能技术生成

windows下使用visual studio编译调试MySQL

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。(本段话摘抄自百科)

作为一个开源的系统,源码当然是最权威的资料。本文详细的描述如何在wndows平台下使用visual studio对MySQL进行编译调试。网上关于这类的文章比较少,而且基本都是调试的MySQL5的文章。我从决定调试MySQL8开始,断断续续用了两周的时间,一度想放弃。好在最终阴差阳错的给弄出来了,本文详细的介绍了在调试MySQL8的过程中遇到的坑。话不多说,正文开始:

环境准备

1、windows10 x64 操作系统

2、Microsoft Visual Studio 2019

3、cmake

4、bison-2.4.1-setup.exe

5、boost_1_72_0

6、mysql-8.0.21.zip

简单介绍一下上述的几个软件。windows10建议用配置好一点的电脑,否则编译会很慢。Microsoft Visual Studio 2019从微软官网下载安装即可,cmake可以是免安装版的或者安装版的,请注意需要配置环境变量。bison是一个解析生成器,许多文档都说需要安装bison。但是好像不装也没问题,反正我已经装了,就暂且把它写进去吧,bison安装完也是需要配置环境变量的。MySQL参考手册上说的很明白,用Standard Source Distribution来build工程不需要Bison,而用Development Source Tree才需要Bsion,从官网上直接下载的标准版的源码ZIP包就是Standard Source Distribution,而在GitHub下载的最新的开发源码就是Development Source Tree。不装bison能不能成功我也懒得去测试了,毕竟编译一次也是要很久的。boost是必须要有的,不同版本的MySQL对应不同版本的boots库。如果不知道用哪个版本,可以先执行cmake,cmake会提示下载相应版本的boost。MySQL源码建议从官网下载。

cmake编译

上述的软件都准备好了,就可以开始用cmake编译MySQL了。

解压mysql-8.0.21.zip。我解压的路径为 F:\IDE\vs2019\MySQLSC。 在源码的解压路径下创建两个文件夹, boost 和 bld。

将boost_1_72_0.tar.gz拷贝到boost文件夹一份,就可以开始编译了。在命令提示符(或powershell)执行如下命令:

cmake .. -DDOWNLOAD_BOOST=1 -DWITH_BOOST="F:\IDE\vs2019\MySQLSC\boost\boost_1_72_0.tar.gz" -DWITH_DEBUG=1

-- Building for: Visual Studio 16 2019

5d96e8048c4fecde633635f02e8b2bcd.png

如果boost库有问题或者版本不对。cmake会自动下载正确的版本,可能因为网络问题下载失败(cmake的服务器在国外),此处会报错,并提示正确版本boost库的下载地址。手动下载boost库后,换进去重新cmake编译即可。

094f7766d6a654d7718c0767b3c35175.png

当看到 Bulid files have been written to ...  这句话时,说明已经编译完成了。进入到 F:/IDE/vs2019/MySQLSC/bld文件夹,你会看到熟悉的 MySQL.sln。就可以用vs2019来构建MySQL服务了。

构建前准备

vs工程都已经生成了,还需要准备什么?当然是我踩过的坑了,能避免的肯定要提前避免了。要不编译了那么久,一大堆报错还要重新编译。

1、打开调试模式,F:\IDE\vs2019\MySQLSC\sql\mysqld.cc中的 test_lc_time_sz方法中的 DBUG_ASSERT(0); 改成 DBUG_ASSERT(1);

2、F:\IDE\vs2019\MySQLSC\sql\sql_locale.cc 用 [utf-8 + BOM] 格式保存一下,可以使用notepad++打开修改编码。

3、F:\IDE\vs2019\MySQLSC\plugin\x\src\mysql_function_names.cc  头文件添加   #include

4、F:\IDE\vs2019\MySQLSC\components\example\test_string_service_charset.cc  编码修改为[utf-8 + BOM]  存在中文

用VS构建MySQL服务

打开vistul studio 2019。打开MySQL.sln。选择ALL_BULID项目,右键 生成 开始编译。

2b182eb3ad626f7d6478cc5550c610ea.png

查看失败的项,然后按个处理一下:

d4bc21a5bd887cef646207c68b8673db.png

其中常量中有换行符,打开该文件。高级保存选项,保存为UNICODE (UTF-8 带签名)。其他无法打开输入文件的报错,不用理会,在调试的时候会自动生成这些库文件。

启动MySQL服务

到现在编译已经完成了,可以启动MySQL服务了。第一次启动MySQL需要初始化,在启动增加启动参数 --console --initialize 。mysqld项目是MySQL的启动项目,在解决方案资源管理器中找到mysqld项目,设置为启动项目。点击属性,增加启动参数。

77e0b3b76e0700dbf15582710258e3a3.png

然后就可以开始调试了,按 F5 或者右键 mysqld 调试 启动新实例。

381ca66351896977c95c0e4d22e95971.png

如图所示,数据库初始化完成了。并生成了一个随机密码,该密码作为初次登录MySQL服务器的密码。初始化完成之后报错,数据库停止了。原因目前还不知道,但是不影响数据库的最终运行,暂且就不管它了。

把启动参数中把 --initialize 删掉,重新启动MySQL服务。

242bfb87b1156f9954b5d956508ca5da.png

可以看到,3306端口已经开启了,处于等待连接状态。编译的客户端工具都位于 F:\IDE\vs2019\MySQLSC\bld\runtime_output_directory\Debug\路径下。

登录并访问数据库

cmd进入到  F:\IDE\vs2019\MySQLSC\bld\runtime_output_directory\Debug\ 路径。执行mysql -u root -p , 密码用上文中随机生成的密码:

78ea0029aa4ac5d29ece5061fc0ecef4.png

初次登录之后,执行一条语句,提示必须修改密码。我们通过以下命令来修改root用户的密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '111111';

flushprivileges;

修改完密码之后再次登录数据库,执行 show databases;语句。再次报错:

ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist

598380a73e422cb8fe20341ee62ce2b2.png

据查资料说是,低版本升级会报这个错误。我们好像没有升级诶,不管原因了,先把错误处理了再说。停掉数据库。再次修改启动参数,添加 --upgrade=FORCE。重新启动。

b6539f72d3cff1d7939105a3eef99f38.png

再次报错,升级失败。但是虽然失败了,上一个问题已经解决了,原因再次不明。依然先不管它,数据库跑起来再说。删掉启动参数 --upgrade,再次启动数据库。

b7949b9ded370601c05258a2386f6ef1.png

可算是成功了,现在可以去打断点,调试MySQL了哦!!!。

最后:

本文中遇到的一些坑,虽然解决了,但是原因还没弄明白。有了解的大神可以一起探讨一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值