windows下编译mysql5.7.25

-


-

个人笔记,如有描述不当,欢迎留言指出~

环境

使用cmake生成vs解决方案

打开cmake-gui.exe
Alt text
填好目录后
Alt text
正常情况下会报下面的错误
Alt text
cmake检测不到boost的位置

找到WITH_BOOST参数,输入本地安装的boost目录,再次点击configure,等待配置完成,最后点击generate,等待初始化完成。
Alt text
打开开始build目录可以看到,cmake给我们生成了MySQL.sln解决方案
Alt text

vs2019编译mysql

vs2019打开MySQL.sln后,可以看到一共生成了128个方案,全部编译非常耗时,所以我先只编译mysqld
Alt text

如果你是跟着我的步骤一步步做下来,那你会得到下面的错误
Alt text

一共105个错误,总结一下就两种错误

  • 没有lex_hash.h文件
  • sql_locale.cc文件格式有问题,有乱码

先解决第二种,根据提示进入报错文件
打开sql_locale.cc,好多乱码
Alt text
找到文件位置,重新保存为utf-8格式
Alt text

第一种问题,我之前没搞懂出错原因,就用笨办法手动生成缺失文件,这里就不说了这种解决思路了,太笨
后来偶然在网上发现一篇文章
经过一番摸索,我才发现,虽然bison安装的路径里没有空格没有中文,可是bison加入了开始菜单,导致bison找不到m4.exe,进而无法生成lex_hash.h文件
我也懒得重装bison,直接把m4.exe复制到编译后的sql目录下,然后重新编译下
Alt text

调试mysqld

初始化数据文件

随便创建data目录,比如E:\Downloads\mysql\data
然后找到编译后的mysqld.exe文件,我这里是
Alt text
进入cmd模式输入初始文件命令

1
E:\Downloads\mysql\build\sql\Debug>mysqld.exe --initialize-insecure --datadir=E:\Downloads\mysql\data

Alt text
断言错误,根据提示来到mysqld.cc第4406行
Alt text
把DBUG_ASSERT(0)改成DBUG_ASSERT(1)
重新编译一遍,重复执行
再次打开data目录,已经生成相应文件

下面开始调试mysqld
Alt text
右键->属性
Alt text
命令参数中写上mysql的配置文件路径
my.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[mysqld]

port=3307

#basedir=D:\Environment\mysql-8.0.16-winx64

datadir=E:\Downloads\mysql\data

max_connections=200

max_connect_errors=10

character-set-server=utf8

default-storage-engine=INNODB
explicit_defaults_for_timestamp=true

#default_authentication_plugin=mysql_native_password
[mysql]

default-character-set=utf8

入口函数上打个断点
Alt text

右键->调试->进入并单步执行新实例
Alt text
已经进入断点了,接下来慢慢探索吧…

请博主喝咖啡