VS2015编译MYSQL5.5.61源码


由于学习的需要,这几天研究了一下怎么用VS来编译MYSQL源码然后进行调试.网上教程也有一些,但死活没有成功,也不知道是啥原因.最后墨迹了很久,算是弄出来了。
当然,我先提醒一下,我只能说用这种方式能用VS2015成功编译,至于中间某些过程是不是必要的,我没有进行一一的判断,可能有些步骤是非必须的。

编译前的准备

在编译之前,还需要安装一些其他的软件:
1.bison-2.4.1-setup.exe

2.cmake-3.15.5-win64-x64.msi(注意是64位的)

3.strawberry-perl-5.28.2.1-64bit.msi(用activeperl_v5.16.2应该也行)

4.Win64OpenSSL_Light-1_1_1i.exe (我忘记这个要不要了,编译的时候如果提示ssl什么的话就需要安装这个,我在第二次演示的过程中好像没用到,下不下随你们,有问题的话再下也行)

5.boost_1_59_0.tar.gz

6.mysql-5.5.61-winx64.zip (不是源码包,就是官网下的windows的安装包),这个包我在演示的时候发现不是必要的,大家就不需要下这个包了。
7.mysql-5.5.61.zip(源码包,注意是source code包,windows下的源码包)

8.VS2015.

9.my.ini文件(这个后面我会给出来)

bison安装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后等待安装完成.然后将~/GnuWin32/bin目录添加到环境变量PATH中.

cmake安装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
因为这个在安装时勾选了添加环境变量,所以就不用管了.

strawberry安装

这个环境变量是自动添加的,直接一路安装就行了.我就不再卸载一遍然后安装截图了。(狗头)

openssl1.1安装

这个也是一路安装,然后将bin目录添加到环境变量PATH中就行了(可能不需要安装这个?因为我之前编译5.7版本的源码时,就会报错,提示我ssl version at least 1.1.1什么的,安装了openssl1.1.1之前编译就不会报错了,但是后续好像还是有其他问题,5.7之后的版本,具体我也没深究)

boost包

这个包不用安装,也不用设置环境变量啥的,就是在编译的时候需要指定一下这个包.大概意思就是提供一些函数库啥啥的.注意以下Boost包的路径,一会在cmd中输入命令的时候需要指定这个包所在的路径

mysql-5.5.61-winx64包

不用管这一个包了
这个包也不用安装,一定注意不是源码包,是windows下的mysql的安装包.这个的版本一定要和你要编译的源码的版本号一致.不然很有可能出问题.主要是用于my.ini文件的设置,编译的时候还会用到这个包里面的一些内容(这些被需要内容是编译的时候自动找到的,只要在my.ini文件里设置好就行了)

mysql-5.5.61包

源码包暂时先放着

VS2015

假装你安装好了。

my.ini文件

[client]
port = 3306
# 设置客户端默认字符集
default-character-set = utf8mb4

[mysql]  
# 设置mysql客户端默认字符集
default-character-set = utf8mb4

[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir =F:\aaa\mysql-5.5.61\mysql-5.5.61
# 设置mysql数据库的数据的存放目录
datadir =F:\aaa\mysql-5.5.61\mysql-5.5.61\data
# 允许最大连接数
max_connections = 200
# 服务端使用的字符集默认为utf8mb4
character-set-server = utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine = INNODB
# 设置sql模型
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

其中basedir就是mysql安装包所在路径, datadir就是数据存放的目录,data这个文件夹可能不存在,直接新建一个就行了。
安装路径直接设置为源码所在路径就行了,datadir就设置为源码所在路径下的data文件夹就行了(data文件夹需要手动创建)
新建一个my.ini文件,然后修改一下basedir和datadir即可.这个文件要放在C盘的根目录下面.C:\my.ini。MYSQL会自动到这里寻找my.ini文件进行加载。

编译

进入mysql源码包,新建bld15文件夹,新建data文件夹.data文件夹用于上一步配置my.ini的datadir,用于存放数据库的某些数据.而bld15用于单独存放编译后的文件,这样比较方便.
在这里插入图片描述

接着我们先修改一下两个文件,避免后续步骤报错.

  • 一个是sql目录下的sql_locale.cc文件.
  • 一个是sql目录下的mysqld.cc文件
    sql_locale.cc文件修改编码格式为UTF-8即可,注意编码格式的时候,要选带DOM的,推荐notepad++,直接选择编码->以UTF-8格式进行编码。还有一种UTF-8+无BOM的,不要选.
    在这里插入图片描述
    mysqld.cc文件,将其编码格式修改为UTF-8格式.然后搜一下,其中有个test_lc_time_sz()函数.这个函数的应该是倒数第二行,有个DBUG_ASSERT(0)改成DBUG_ASSERT(1)就行了;
    在这里插入图片描述
    在这里插入图片描述

在bld15文件夹下进入cmd命令行
在这里插入图片描述

输入以下命令

cmake .. -G "Visual Studio 14 2015 Win64" -DWITH_BOOST="f:\mysql\boost_1_59_0\boost_1_59_0"

在这里插入图片描述

-DWITH_BOOST的值就是之前说的boost_1_59_0文件夹所在路径
如果想在VS2013编译的话,就把-G后面的"Visual Studio 14 2015 Win64"改成"Visual Studio 12 2013 Win64"即可.其他版本的话也简单,只要你把这个"Visual Studio 14 2015 Win64"输错了,他就会提示你可用版本有哪些,看着来就行。

编译过程中可能会有一堆not found和CMake Warning,不用管它.只要出现下面的内容就行了。

在这里插入图片描述

也有可能出现以下错误,我在重现操作的时候遇到的,不用管它,关了cmd重开一遍再执行就好了,也不知道是不是电脑没睡醒。
在这里插入图片描述

编译完成后在运行以下命令:

cmake --build . --config relwithdebinfo --target package

这个命令能将源码再进行打包,不过这不是主要的,我们需要的是打包过程中生成的一些.lib文件,有了这些文件,在VS中生成解决方案时才会成功.

过程中可能会遇到以下的错误:
在这里插入图片描述
说明sql_locale.cc文件格式没改对,再去改一遍,反正就是UTF-8带不带BOM两种情况,换着来吧.我用editplus改编码后运行的时候就报了这个破错误,但是我用notepad++改编码就没报这个错。也没搞懂啥毛病。

命令成功运行以后应该长下面这样
在这里插入图片描述

直此,所有的准备工作就算结束了,可以打开VS2015了.
在bld15目录下,找到MySQL.sln文件.用VS2015打开,等程序加载完,什么都不用动,直接生成解决方案(F7)
生成解决方案后,可能会有这么一个沙雕问题,有一个失败了,那这个失败十有九九是那个 DBUG_ASSERT(0)没有改成 DBUG_ASSERT(1);(我猜是因为我用的editplus,这东西好像不太好使)
在这里插入图片描述
改成 DBUG_ASSERT(1);以后,再F7一下就行了,不用重新生成解决方案
在这里插入图片描述
到此为止,基本上算完成了.当然还有一些后续步骤:
先说一下,后面的步骤顺序我理得不是很清楚,但是也就3.4步,不麻烦。
首先是将mysqld的调试属性添加两个参数:

--console --initialize

在这里插入图片描述

然后右键mysqld并选择启动新实例:
在这里插入图片描述
不管他成功没成功(狗头).下次再启动的时候把–initialize参数取消掉,只留一个–console参数就行了。再次启动后可能会有以下错误
在这里插入图片描述
在任务管理器中找到mysqld.exe关掉就行了,然后它就会自动继续运行,出现下面内容就表示调试程序启动成功了。
在这里插入图片描述
如果出现:can’t not messagefile errmsg.sys错误,就是my.ini文件的datadir没有精确到data目录下的原因。不过只要是按照上面做的,就不会出现这个问题.如果出现了肯定是它没睡醒,重启就对了(o( ̄︶ ̄)o)

进入之前再次打包源码时生成的文件夹的bin目录下,我的是

F:\aaa\mysql-5.5.61\mysql-5.5.61\bld15\_CPack_Packages\win64\ZIP\mysql-5.5.61-winx64\bin

就是

xxxxx\bld15\_CPack_Packages\win64\ZIP\mysql-5.5.61-winx64\bin目录

进入cmd 输入mysql即可连接到数据库,如果用mysql -u root -p连接数据库,默认是没有密码的,直接回车就行了.

到此就算结束了

然后我举个实例调试的例子:
在VS中找到sql目录下的Source Files下的sql_select.cc文件,在handle_select()方法上打上断点:
在这里插入图片描述

再次启动mysqld实例,调试参数只要–console即可:
在这里插入图片描述
在这里插入图片描述
还是进到刚刚的二次打包的bin目录下,输入mysql.
在这里插入图片描述
这个时候发现并没有完整输出,还没有显示出连接上数据库,这是因为打了断点的原因.VS里一路F10直到没有下一步为止.然后就可以看到控制到已经连接到了数据库.
在这里插入图片描述
在这里插入图片描述
如果需要调试哪里,就在哪里打断点.很多命令的文件都在sql目录下,比如sql_show、sql_select等等.

到这里就算彻底结束了,真的是一把辛酸泪。
此外还可以用Benchmarksql来对调试完后,再次打包的mysql数据库进行性能测试,不过BenchMarkSQL的版本必须在2.3.5之前,2.3.5之后好像就没有windows版的了.但是这个windows版本的Benchmarksql用起来我也墨迹了很久,操作比较蠢,就不多说了,如果谁有需要再说吧。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值