Windows10编译MySQL8.0.28源码

版本信息

操作系统:windows10 x64
Visual Studio版本:Visual Studio2022 17.2
cmake版本:cmake-3.24.0-rc2-windows-x86_64
openssl版本:Win64OpenSSL-1_1_1p
MySQL版本:8.0.28

软件下载与安装

1,Visual Studio
(1)下载地址:https://visualstudio.microsoft.com/zh-hans/ 选择Community 2022版本
(2)安装:按照步骤一步一步执行即可。

2,cmake
(1)下载地址:https://cmake.org/download/ 选择cmake-3.24.0-rc2-windows-x86_64版本
(2)安装:
在这里插入图片描述
这一步最好选择将环境变量添加到当前用户,如果不选的话需要手动添加环境变量。

3,openssl
(1)下载地址:http://slproweb.com/products/Win32OpenSSL.html 选择Win64 OpenSSL v1.1.1q版本,如下图所示:
在这里插入图片描述
不要选择上方的Ligth版本。
(2)安装:按照步骤一步一步执行即可。
(3)配置环境变量:桌面->右击我的电脑->属性->->右上角选择高级系统设置->高级->环境变量
在系统变量Path中添加C:\Program Files\OpenSSL-Win64\bin,如下图所示:
在这里插入图片描述
在用户变量中添加如下三个变量:
OPENSSL_CRYPTO_LIBRARY:C:\Program Files\OpenSSL-Win64\lib
OPENSSL_INCLUDE_DIR:C:\Program Files\OpenSSL-Win64\include
OPENSSL_ROOT_DIR:C:\Program Files\OpenSSL-Win64
在这里插入图片描述
注意:上述目录根据自己的安装目录取值。

源码编译

1,下载mysql源码
(1)下载地址:https://downloads.mysql.com/archives/community/
在这里插入图片描述
(2)这里选择带boost版本,可以不用下载boost库。

2,cmake编译
(1)在解压包mysql-8.0.28中创建文件夹build。
(2)打开命令提示符,进入到build文件下,执行以下命令:

cmake ..  -DDOWNLOAD_BOOST=1 -DWITH_BOOST="D:\Documents\VS2022\mysql-8.0.28\boost" -DWITH_DEBUG=1

-DDOWNLOAD_BOOST=1如果已经有boost库可以不加,如果没有加上这个参数可以下载匹配的boost版本。
-DWITH_BOOST参数根据自己的目录配置。
(3)错误解决:
在这里插入图片描述
在这里插入图片描述
cmake编译如果报上述错误,是由于openssl导致的,按照上面所说的步骤配置openssl即可解决。

3,Visual Studio编译
(1)打开Visual Studio软件,打开项目,选择mysql-8.0.28\build文件下的MySQL.sln文件,加载项目。
(2)修改mysql-8.0.28\sql/mysqld.cc文件中test_lc_time_sz(),将assert(0)改为assert(1)。
(3)选择ALL_BUILD,右击选择生成,编译源码。

4,错误解决
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中主要有以下几种错误:
(1)C2001:常量中有换行符;
(2)C2220:以下警告被视为错误;
(3)LNK118:无法打开输入文件。

(4)其中LNK118错误可以不用管。
(5)C2220错误可以通过修改编译参数解决,以innobase模块为例:
在Visual Studio中选中innobase模块,右击选择属性,把”将警报视为错误“改为否,如下图所示:
在这里插入图片描述
有同样错误的模块用同样的办法即可解决。
我这是三个模块有这样的问题:innobase innodb_zipdecompress merge_innodb_tests-t,仅供参考。

(6)C2001错误是由于字符编码不同导致的,修改方法是将报错的文件用Notepad++打开,选择UTF-8-BOM保存。
我这需要修改的文件如下:
mysql-8.0.28\components/example/test_string_service_charset.cc
mysql-8.0.28\sql/sql_locale.cc
mysql-8.0.28\unittest/gunit/strings_strnxfrm-t.cc
mysql-8.0.28\unittest/gunit/strings_utf8-t.cc
mysql-8.0.28\unittest/gunit/strings_valid_check-t.cc
mysql-8.0.28\build\scripts\sql_commands_help_data.h
注意:其中sql_commands_help_data.h文件是在编译的过程中生成的文件,所以即使修改也会被覆盖,先保存一份。
经过分析,该文件是由mysql-8.0.28\scripts\CMakeLists.txt文件生成,将其中生成sql_commands_help_data.h的代码注释,如下图所示:
在这里插入图片描述
然后将保存的sql_commands_help_data.h文件以UTF-8-BOM保存,再拷贝到相应目录mysql-8.0.28\build\scripts,即可解决。
其他错误基本是由于C2001,也就是字符编码方式不同引起的,解决C2001的错误基本就可以了。
上述错误改完之后,再重新编译。
在这里插入图片描述
如图所示,或者只有LNK118错误,表示编译成功。

5,启动mysql服务
(1)找到mysqld,选中,右击属性,添加启动参数–console --initialize,如下所示:
在这里插入图片描述
(2)选中mysqld,右击,选择调试->启动新实例,在此过程中会生成一个密码,需要记住,后面会用到
在这里插入图片描述

(3)关闭窗口,将启动参数改为–console,再次启动,如图所示
在这里插入图片描述
6,登录数据库
(1)cmd到mysql-8.0.28\build\runtime_output_directory\Debug目录下:

mysql -u root -p

输入上述生成的随机密码,登录数据库。
提示:如果忘记初始化密码,删除mysql-8.0.28\build\data目录,重新初始化即可。

(2)如果登录报错,则在启动参数加上–UPGRADE=FORCE,再次启动,然后删除–UPGRADE=FORCE参数,再次启动。

(3)登录之后,提示需要更改密码,先修改密码,再次登录即可,如下图所示:

ALTER USER 'root'@'localhost' IDENTIFIED BY '1';
flush privileges;

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐