mysql windows编译_Windows平台下编译Mysql源码 | 学步园

本文记录了在Windows 2003 SP2上使用VS2010和CMake编译MySQL 5.5.17源码的过程,包括了解压缩、设置编译环境、解决预链接事件错误、调试过程中的问题等关键步骤,帮助读者理解如何从源码编译MySQL。
摘要由CSDN通过智能技术生成

最近由于项目的关系,需要使用到Mysql数据库,而我的工作任务与数据库有很大的关系,所以,决定好好学学Mysql,同时,也把Mysql的源码下载了,希望能有利于对它的学习。这里记录一下windows平台下编译Mysql的过程,与大家分享一下我的经验。

平台环境:

操作系统:windows 2003 sp2

编译环境:VS2010

辅助工具:CMake【windows版本】

编译过程:

1.首先下载Mysql源码,版本community server 5.5.17,地址http://dev.mysql.com/downloads/mysql/,下载 Windows

(x86, 32-bit), ZIP Archive(27.5M)这个;

2.解压Mysq文件,如(D:\mysql-5.5.17),然后使用CMake生成sln解决方案;

1355986342_3523.jpg

配置的时候,选择合适的编译器,我本地有VS2010,故使用VS2010 的 cl 编译。

1355984158_7792.jpg

3.编译之前,先定位到"sql/sql_locale.cc",把该文件另存为utf-8的格式,不然编译时会因为字符问题而出现大量错误。编译的时候遇到一个错误,说的是"Mysqld项目中预链接事件错误"。于是,定位到mysqld项目-->属性-->生成事件-->预链接事件。在右边的命令行选项中,看到有如下文字:

setlocal

cd D:\mysql-5.5.17\sql

if %errorlevel% neq 0 goto :cmEnd

D:

if %errorlevel% neq 0 goto :cmEnd

D:\mysql-5.5.17\client\Debug\echo.exe x86 && cscript //nologo D:\mysql-5.5.17\win\create_def_file.js x86 D:\mysql-5.5.17\sql\$(Configuration)\sql.lib D:\mysql-5.5.17\mysys\$(Configuration)\mysys.lib D:\mysql-5.5.17\dbug\$(Configuration)\dbug.lib

D:\mysql-5.5.17\strings\$(Configuration)\strings.lib > mysqld.def

if %errorlevel% neq 0 goto :cmEnd

:cmEnd

endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone

:cmErrorLevel

exit /b %1

:cmDone

if %errorlevel% neq 0 goto :VCEnd

应该是执行这里的命令时出现了错误,最终查出是红色区域命令的错误,于是在命令行中执行这段命令,并打开"mysqld.def"文件,发现了错误的内容"没有文件扩展".js"的脚本引擎"。这应该是我以前修改了js脚本关联文件导致WSH不能找到js脚本引擎的缘故。解决方法是打开注册表(运行命令中输入regedit),定位到"HKEY_CLASSES_ROOT / .js",把右边的"默认"字符串值设为"JSFile"。

接着编译,编译过程中报"Mysqld.exe 异常",于是在命令行中定位到"D:\mysql-5.5.17\sql\Debug",执行命令:"mysqld -debug",结果如下:

1355984158_2789.jpg

通过定位错误信息中对应的文件,发现原来在"mysqld.cc"文件中有一句"DBUG_ASSERT(0)",如下图,这句代码加入了一个断言,该断言始终为False,抛出了异常,从而导致了编译时候出错。将其去掉,或者修改为"DBUG_ASSERT(1)",再次编译,成功。

1355984158_8419.jpg

4.既然编译已经成功,那么我们就来调试一下代码。首先打开mysql服务,进入命令行,定位到"D:\mysql-5.5.17\sql\Debug",输入命令"mysqld --debug --standalone"。这个时候,mysqld.exe就已经启动了;接着,在VS中附加进程调试中选择"mysqld.exe";然后打开mysql客户端,另外打开一个命令行,定位到"D:\mysql-5.5.17\client\Debug",执行命令"mysql -u

root -p",进入mysql客户端,执行命令"show databases"。现在,我们在vs中为mysql源码打上一个断点(如图),再次执行"show databases"。

1355986116_1387.jpg

1355986116_1128.jpg

5.调试结束后,如何终止Mysqld.exe呢,打开命令行,定位到"D:\mysql-5.5.17\client\Debug",执行命令"mysqladmin shutdown -u root -p",从而完整终止mysqld.exe。

现在,我们就能一步一步的去读Mysql源码了,开源的东东多好啊。

注意:如果你的电脑中正在运行其他Mysql服务,那么在执行调试的时候,最好是把之前的Mysql服务停止的好。因为Mysql服务默认的端口是3306,如果与其他的Mysql服务冲突的话,就不能启动用于调试的Mysql服务了,当然也可以修改相应的端口号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值