• windows下使用visual studio编译调试MySQL


    windows下使用visual studio编译调试MySQL

    MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。(本段话摘抄自百科)

    作为一个开源的系统,源码当然是最权威的资料。本文详细的描述如何在wndows平台下使用visual studio对MySQL进行编译调试。网上关于这类的文章比较少,而且基本都是调试的MySQL5的文章。我从决定调试MySQL8开始,断断续续用了两周的时间,一度想放弃。好在最终阴差阳错的给弄出来了,本文详细的介绍了在调试MySQL8的过程中遇到的坑。话不多说,正文开始:

    环境准备

    1、windows10 x64 操作系统

    2、Microsoft Visual Studio 2019

    3、cmake

    4、bison-2.4.1-setup.exe  

    5、boost_1_72_0

    6、mysql-8.0.21.zip

    简单介绍一下上述的几个软件。windows10建议用配置好一点的电脑,否则编译会很慢。Microsoft Visual Studio 2019从微软官网下载安装即可,cmake可以是免安装版的或者安装版的,请注意需要配置环境变量。bison是一个解析生成器,许多文档都说需要安装bison。但是好像不装也没问题,反正我已经装了,就暂且把它写进去吧,bison安装完也是需要配置环境变量的。MySQL参考手册上说的很明白,用Standard Source Distribution来build工程不需要Bison,而用Development Source Tree才需要Bsion,从官网上直接下载的标准版的源码ZIP包就是Standard Source Distribution,而在GitHub下载的最新的开发源码就是Development Source Tree。不装bison能不能成功我也懒得去测试了,毕竟编译一次也是要很久的。boost是必须要有的,不同版本的MySQL对应不同版本的boots库。如果不知道用哪个版本,可以先执行cmake,cmake会提示下载相应版本的boost。MySQL源码建议从官网下载。

    cmake编译

    上述的软件都准备好了,就可以开始用cmake编译MySQL了。

    解压mysql-8.0.21.zip。我解压的路径为 F:IDEvs2019MySQLSC。 在源码的解压路径下创建两个文件夹, boost 和 bld。

    将boost_1_72_0.tar.gz拷贝到boost文件夹一份,就可以开始编译了。在命令提示符(或powershell)执行如下命令:

    cmake ..  -DDOWNLOAD_BOOST=1 -DWITH_BOOST="F:IDEvs2019MySQLSCoostoost_1_72_0.tar.gz" -DWITH_DEBUG=1
    -- Building for: Visual Studio 16 2019

     如果boost库有问题或者版本不对。cmake会自动下载正确的版本,可能因为网络问题下载失败(cmake的服务器在国外),此处会报错,并提示正确版本boost库的下载地址。手动下载boost库后,换进去重新cmake编译即可。

     当看到 Bulid files have been written to ...  这句话时,说明已经编译完成了。进入到 F:/IDE/vs2019/MySQLSC/bld文件夹,你会看到熟悉的 MySQL.sln。就可以用vs2019来构建MySQL服务了。

     构建前准备

    vs工程都已经生成了,还需要准备什么?当然是我踩过的坑了,能避免的肯定要提前避免了。要不编译了那么久,一大堆报错还要重新编译。

    1、打开调试模式,F:IDEvs2019MySQLSCsqlmysqld.cc中的 test_lc_time_sz方法中的 DBUG_ASSERT(0); 改成 DBUG_ASSERT(1);

    2、F:IDEvs2019MySQLSCsqlsql_locale.cc 用 [utf-8 + BOM] 格式保存一下,可以使用notepad++打开修改编码。

    3、F:IDEvs2019MySQLSCpluginxsrcmysql_function_names.cc  头文件添加   #include <iterator>

    4、F:IDEvs2019MySQLSCcomponentsexample est_string_service_charset.cc  编码修改为[utf-8 + BOM]  存在中文

    用VS构建MySQL服务

    打开vistul studio 2019。打开MySQL.sln。选择ALL_BULID项目,右键 生成 开始编译。

    查看失败的项,然后按个处理一下:

    其中常量中有换行符,打开该文件。高级保存选项,保存为UNICODE (UTF-8 带签名)。其他无法打开输入文件的报错,不用理会,在调试的时候会自动生成这些库文件。

    启动MySQL服务

    到现在编译已经完成了,可以启动MySQL服务了。第一次启动MySQL需要初始化,在启动增加启动参数 --console --initialize 。mysqld项目是MySQL的启动项目,在解决方案资源管理器中找到mysqld项目,设置为启动项目。点击属性,增加启动参数。

     然后就可以开始调试了,按 F5 或者右键 mysqld 调试 启动新实例。

    如图所示,数据库初始化完成了。并生成了一个随机密码,该密码作为初次登录MySQL服务器的密码。初始化完成之后报错,数据库停止了。原因目前还不知道,但是不影响数据库的最终运行,暂且就不管它了。

    把启动参数中把 --initialize 删掉,重新启动MySQL服务。

    可以看到,3306端口已经开启了,处于等待连接状态。编译的客户端工具都位于 F:IDEvs2019MySQLSCld untime_output_directoryDebug路径下。

    登录并访问数据库

    cmd进入到  F:IDEvs2019MySQLSCld untime_output_directoryDebug 路径。执行mysql -u root -p , 密码用上文中随机生成的密码:

     初次登录之后,执行一条语句,提示必须修改密码。我们通过以下命令来修改root用户的密码:

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

    修改完密码之后再次登录数据库,执行 show databases;语句。再次报错:

    ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist

    据查资料说是,低版本升级会报这个错误。我们好像没有升级诶,不管原因了,先把错误处理了再说。停掉数据库。再次修改启动参数,添加 --upgrade=FORCE。重新启动。

     再次报错,升级失败。但是虽然失败了,上一个问题已经解决了,原因再次不明。依然先不管它,数据库跑起来再说。删掉启动参数 --upgrade,再次启动数据库。

     

    可算是成功了,现在可以去打断点,调试MySQL了哦!!!。

    最后:

    本文中遇到的一些坑,虽然解决了,但是原因还没弄明白。有了解的大神可以一起探讨一下。

    本文参考博文  https://www.cnblogs.com/huangxincheng/p/13084736.html  按照该博客编译MySQL5.7可以成功。没有MySQL8那么多的坑,可参考。

  • 相关阅读:
    ASP.NET WebAPI Get和Post 传参总结
    关于EF第一次加载慢或过一段时间不访问时再次访问加载慢问题的总结
    jqthumb.js缩略图插件-让缩略图正常显示而不变形
    解决kindeditor编辑器中使用百度地图时不能拖动坐标的问题
    Jzoj3591 数据
    Jzoj3590 珠链
    Jzoj3590 珠链
    C++蜂鸣器歌曲1
    C++蜂鸣器歌曲1
    Jzoj2309 辽哥游戏
  • 原文地址:https://www.cnblogs.com/jkin/p/13552306.html
Copyright © 2020-2023  润新知