1.准备工作,下面是需要安装下载的
(1)bison安装使用:下载时候选择“Completepackage exceptsources”,安装路径不要选择默认C:\ProgramFiles\GnuWin32,选 C:\GnuWin32,把C:\Gnuwin32\bin加载到PATH变量。
下载路径:http://gnuwin32.sourceforge.net/packages/bison.htm
(2)Boost下载:https://www.boost.org/users/history/
自己选择版本下载,老师给的版本应该是下载1.73版本最佳
(3)Cmake下载:https://cmake.org/download/
(4)vs2019
(5)mysql源码下载:https://dev.mysql.com/downloads/mysql/(这里用老师给的代码就好了,也可以自己去下载。)
2.接下来在新下载下来的mysql源码里,新建一个boost文件夹,将下载的boost压缩包放入其中,然后再新建一个 brelease 文件夹可用于存放最终生成的MySql.sln。
控制台进入文件夹:输入下列命令:
cmake .. -DDOWNLOAD_BOOST=1 -DWITH_BOOST="E:\University3\summerterm\mysql-8.0.25\boost\boost_1_73_0.tar.gz"
注意:
- -DDOWNLOAD_BOOST=1也可以删除,因为你已经下载了boost的话
- 在这里你可能会发生报错,错误的原因是没有找到对应的资源,这时候你就应该去前面的error那里查找是不是因为自己下载的版本不匹配,比如人家需要的是1.73版本但是你下载的是1.74版本。
执行完成后,差不多是这个样子
这个时候我们vs需要的.sln文件就出来了
3.接下来我们就可以愉快的在VS2019 build solution了(对应生成解决方案),但为了尽可能减少警告或错误,我们首先需要对下述文件进行修改:
源码目录\strings\ctype-czech.c
源码目录\strings\ctype-latin1.
源码目录\strings\decimal.c
源码目录\mysys\thr_mutex.c
源码目录\storage\innobase\include\ut0mem.h
源码目录\sql\sql_locale.cc
修改的方法很简单,就是将这些文件以UTF-8(带BOM头的)格式保存。一般使用Nodepad++工具等。
最后一步就是找到{install}\mysql-8.0.21\sql\mysqld.cc中的test_lc_time_sz()函数,将其中的DBUG_ASSERT(0)改为DBUG_ASSERT(1)即可。
4.至此我们就完成了将源码转换成VS中工程文件的目的。之后我们就可以build solution了。如果没有错误说明就已经没有问题了,一些小的警告可能是因为C++编译器比C编译器严格的缘故
如果有错误,大概率是没有符合UTF-8格式,只需要将错误的代码转下格式即可。
一般错误形式为,C2001,C2044.换行错误之类的。这些你看代码感觉都没问题,只能去修改格式。
接下来就可以愉快的进行调试了
5.找到mysqld(mysqld项目是mysql的启动项目,main函数也在其中),右击点到属性,添 --console --initialize,(初始化会在控制台看到链接数据库的密码):
记得保存数据库的初始密码,待会要用
6.接着继续右击mysqld,选择调试,再选择启动新实例即可
注意:
(1)初始化后获取了密码后,控制台就会报错,这个是没关系的。我们在下次调试之前将–initialize删除重新启动新实例即可
(2)如果这个服务器启动后,用给的初始化密码报错(包含Using Password :Yes)的话
解决办法:–console 后面再加上一个–UPGRADE=FORCE,重新启动新实例,同样会报错(没事的)。再把这个参数删除再启动就可以了。
(3)客户端连接上服务器后还会要求你改密码,你把提示粘贴到百度搜一下就可以找到修改方法改掉。
(4)参数前面都两个-;
(5)使用此方法之前,必须确保你之前的Mysql已经删除干净,否则就会出现下面的错误
这是因为你之前没删掉的Mysql占用了端口号,导致新的Mysql没法用现在的端口。出现这种错误会在VS控制台报一个无法启动Mysql.exe的错误。
解决办法:彻底删除原有的Mysql
(Mysql的删除办法自行百度,不再赘述)
(6)如果出现以下错误:
只需要将出错的目录,比如我这里是data里面的内容全部清空即可。
最终如果没有错误,跑通了的结果如下:
7.最后,在
目录下,启动命令提示符,然后按Mysql启动方式(具体见注意事项第二条),输入密码,即可成功建立。最后成功的结果如下: