mysql5.7.13+VS3013 源代码阅读调试

2023-11-05


之前写Java,对C++,make,cmake都不是很熟,所以参考了以下这些前辈写的博客,最后成功搭建了mysql5.7.13+VS3013调试环境,自己总结了需要需要注意的几点。

Windows+VS2012环境下编译调试MySQL源码(一)

Windows+VS2012环境下编译调试MySQL源码(二)

Windows+VS2012环境下编译调试MySQL源码(三)

Windows+VS2012环境下编译调试MySQL源码(四) 

MySQL源代码阅读调试 - 1. 环境搭建

在windows下使用vs2013编译和调试mysql源代码

mysql在windows下的编译和调试(vs2008)


1)一定要一切以官网说明为王道,官网说明地址最好下载MySQL 5.7 Reference Manual,这才是MySQL最权威最全面的资料,阅读中文资料可能会有一些困惑,然后阅读MySQL参考手册可以豁然开朗,
 比如(1),很多博客都要求安装Bison,但是我没有安装Bison也没有问题,MySQL5.7参考手册上说的很明白,用Standard Source Distribution来build工程不需要Bison,而用Development Source Tree才需要Bsion,从官网上直接下载的标准版的源码ZIP包就是Standard Source Distribution,而在GitHub下载的最新的开发源码就是Development Source Tree。

        (2),cmake configure可能会遇到如下图片中的错误,查看MySQL源码下的CmakeList.txt文件有“INCLUDE(cmake/boost.cmake)”,然后查看MySQL参考手册有说明,构建MySQL需要Boost libraries,但是不会用它,并给出了图片中的错误的解决方法。

Source Installation System Requirements

• The Boost C++ libraries are required to build MySQL (but not to use it). Boost 1.59.0 or higher must be installed. To obtain Boost and its installation instructions, visit the official site. After Boost is installed, tell the build system where the Boost files are located by defining the WITH_BOOST option。when you invoke CMake. For example:
shell> cmake . -DWITH_BOOST=/usr/local/boost_1_59_0
Adjust the path as necessary to match your installation.

       这里写图片描述


2)在build成功后,C:\mysql-5.7.13-build\sql\Debug\mysqld.exe 启动MySQL服务可能会报如下错误,然后无论如何更改read_buffer_size还是报这个错误,搜索test_lc_time_sz()这个函数,就可以找到解决方法了,其实是一个DEBUG的断言错误,将sql\mysqld.cc第4283行的DBUG_ASSERT(0);改成DBUG_ASSERT(1);就行了。

key_buffer_size=0
read_buffer_size=131072
max_used_connections=0
max_threads=151
thread_count=0
connection_count=0
It is possible that mysqld could use up to
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 59879 K  b
ytes of memory
Hope that's ok; if not, decrease some variables in the equation.
ytes of memory
Hope that's ok; if not, decrease some variables in the equation.
Thread pointer: 0x0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
13ff45385    mysqld.exe!my_sigabrt_handler()[my_thr_init.c:449]
14073f4df    mysqld.exe!raise()[winsig.c:594]
14073c3f0    mysqld.exe!abort()[abort.c:82]
140724d58    mysqld.exe!_wassert()[assert.c:156]
13f1c5177    mysqld.exe!test_lc_time_sz()[mysqld.cc:4283]
13f1c5511    mysqld.exe!win_main()[mysqld.cc:4536]
13f1c6067    mysqld.exe!mysql_service()[mysqld.cc:5035]
13f1c693f    mysqld.exe!mysqld_main()[mysqld.cc:5233]
13f1b803f    mysqld.exe!main()[main.cc:26]
14071f19c    mysqld.exe!__tmainCRTStartup()[crt0.c:255]
14071f2de    mysqld.exe!mainCRTStartup()[crt0.c:165]
76c45a4d    kernel32.dll!BaseThreadInitThunk()
76d7b831    ntdll.dll!RtlUserThreadStart()

还可能会在启动mysqld服务的时候遇到这个错误,http://stackoverflow.com/questions/33691038/issue-when-running-mysqld,解决方法是"To do this right click the
 Command Prompt startup icon and then select Run As Admininistrator.  Then run mysqld and you should no longer see that error."

E:\Softwares\mysql-5.7.9-winx64\bin>mysqld
mysqld: Could not create or access the registry key needed for the MySQL application
to log to the Windows EventLog. Run the application with sufficient
privileges once to create the key, add the key manually, or turn off
logging for that application.
3)启动mysqld服务时,注意:
mysqld --initialize
这个命令初始化你指定的数据目录下的数据(就是一些预设表),mysql参考手册里也有详细说明mysql到底初始化了些什么,并且在C:\mysql-5.7.13-build\sql\data目录下的.err文件中告诉你初始密码。

从这一段可以知道,--initialize-insecure选项不会生成随机的密码,mysql.exe可以使用无密码登录MySQL, mysql -u root --skip-password。而--initialize必须使用密码登录。

Regardless of platform, use --initialize for “secure by default” installation (that is, including
generation of a random initial root password). In this case, the password is marked as expired and
you will need to choose a new one. With the --initialize-insecure option, no root password is
generated; it is assumed that you will assign a password to the account in timely fashion before putting
the server into production use.

然后启动mysql.exe,C:\mysql-5.7.13-build\client\Debug\mysql.exe 使用命令mysql -u root -p 登录。如果觉得初始密码太复杂,可以改成自己熟悉的密码,ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

4)关于my.ini文件需要注意一点,当时我在更改read_buffer_size这个参数时,就是无法生效。mysql默认查找配置文件的路径:程序首先会分别收集windows系统目录、C:\根目录、执行码所在的父目录,如果配置了环境变量MYSQL_HOME,这个目录也会被搜集,然后在这些目录下进行查找my.ini文件。所以C:\mysql-5.7.13-build\sql\Debug是mysqld的目录,而my.ini一定要放在他的父目录下,就是C:\mysql-5.7.13-build\sql\这个目录下,放在C:\mysql-5.7.13-build还是C:\mysql-5.7.13-build\sql\Debug都是无效的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql5.7.13+VS3013 源代码阅读调试 的相关文章

随机推荐

  • 字节的对齐方式

    VC对结构的存储的特殊处理确实提高CPU存储变量的速度 但是有时候也带来了一些麻烦 我们也屏蔽掉变量默认的对齐方式 自己可以设定变量的对齐方式 重要规则 1 复杂类型中各个成员按照它们被声明的顺序在内存中顺序存储 第一个成员的地址和整个类型
  • 【k8s】k8s部署网络插件Calico、创建网络策略

    一 简介 01 calico简介 calico官网 flannel实现的是网络通信 calico的特性是在pod之间的隔离 通过BGP路由 但大规模端点的拓扑计算和收敛往往需要一定的时间和计算资源 纯三层的转发 中间没有任何的NAT和ove
  • String、StringBuffer与StringBuilder之间区别

    String StringBuffer StringBuilder String的值是不可变的 这就导致每次对String的操作都会生成新的String对象 不仅效率低下 而且浪费大量优先的内存空间 StringBuffer是可变类 和线程
  • Σ-Δ ADC的高精度数模转化,是如何实现的?

    以前接触过 ADC24位采样芯片 一直对其原理没有搞清楚 最近看到有对其原理讲解的文章 因此收集下来作为参考 我们在了解Delta Sigma ADC原理之前 先明确几个概念 1 量化噪声 下图中 蓝色斜线是连续的模拟信号 阶梯状波形是经过
  • Flask学习笔记_异步CMS(五)

    Flask学习笔记 异步CMS 五 1 环境 1 安装nvm 2 安装node 2 使用vue cli创建项目 3 安装相关插件 4 后台CMS开发 1 页面结构 1 app vue搭建结构 2 element icon组件的使用 3 ic
  • matlab rand randn 每次生成的随机数都一样的解决方案

    文章目录 问题说明 解决方案 例子 生成不重复的随机数 生成重复的随机数 结论 参考文献 问题说明 在Matlab应用中 我们经常需要用到随机数 比如rand randn 等函数 都是生成某一类随机数的函数 对于rand 函数来说 每一次启
  • HDR到底是什么?

    此文章转发自互联网 先感谢论坛好友 xiaoyuer520的耐心讲解及推荐这篇文章给我 我愿意分享给大家一起共同进步 谢谢 大家如果有像我一样的 看到文字多的帖子就看不下去 但又很想知道HDR是什么Dolby Vision和HDR10的区别
  • MySQL入门篇之Xtrabackup备份与恢复

    一 Xtrabackup介绍 MySQL冷备 mysqldump MySQL热拷贝都无法实现对数据库进行增量备份 在实际生产环境中增量备份是非常实用的 如果数据大于50G或100G 存储空间足够的情况下 可以每天进行完整备份 如果每天产生的
  • Vue2.7.14、vuecli@5.0.8 升级 vite@4.4.8

    项目背景 Vue2 7 14 vuecli 5 0 8 element ui 2 15 13 node14 18 3 本项目内部项目 不涉及CDN加速 vite安装 pnpm add vite 4 4 8 D 入口文件index html
  • Qt自定义窗口圆角

    Qt设置圆角 在Qt中一般设置窗口圆角有两种方式 QSS 通过paintEvent自绘窗口 QSS 设置圆角 这种设置圆角的方式相对来说比较灵活 但我们设置基类窗口 最外层窗口 用qss就很不方便 会收到后续qss的影响 另外当圆角设置大小
  • Docker 安装教程

    目录 一 离线安装 一 CentOS 离线安装 一 下载地址 1 选择系统的型号 选择linux CentOS 2 上传文件到CentOS 服务器 二 开始安装 1 解压压缩包 2 解压得到的文件复制到 usr bin目录下 3 注册doc
  • 想要好看的壁纸图片,用这个网站一键解决,不用爬虫也能实现爬虫效果,一键爬取图片网站所有的图片

    想要好看的壁纸图片 用这个网站一键解决 不用爬虫也能实现爬虫效果 一键爬取图片网站所有的图片 网站的地址 https extract pics 演示例子 图片网站 https www sohu com a 582693827 1211239
  • eclipse创建maven项目报Could not calculate build plan: Plugin org.apache.maven.plugins:maven-war-plugin:2.

    创建maven项目eclipse报下面错误 Could not calculate build plan Plugin org apache maven plugins maven war plugin 2 2 or one of its
  • 宋浩高等数学笔记(十二)无穷级数

    完结 宋浩笔记系列的最后一更 之后会出一些武忠祥老师的错题 笔记总结 10月份就要赶紧做真题了
  • C++多态----虚函数初级剖析

    多态说白了就是多种形态 在C 中不少的函数都可以实现多种形态 例如函数重载 运算符重载等等 这种重载一般都是在编译阶段时就已经确定了形态 这种多态 我们一般称之为静态多态 那么既然静态多态是在编译阶段就已经确定好了形态 那么动态多态 自然也
  • 项目有大量的spring日志,log配置level无效的解决方案

    思路 log配置文件的level无效 是因为启动spring的时候 log尚未加载 解决方案 1 web xml中的log监听器的启动顺序早于spring监听器 2 log配置文件生效后 可根据日志种类设置level进行拦截 参考 web
  • 黑暗精灵修改为国内源

    第1步 修改 etc pacman d mirrorlist vim etc pacman d mirrorlist 1 第2步 修改 etc pacman d blackarch mirrorlist vim etc pacman d b
  • python 安装whl文件

    python 安装whl文件 使用场景 在terminal中 通过 pip install 命令进行第三方模块安装时 由于网络获其他原因会使得第三方模块下载失败 导致安装失败 此时 我们可以先通过下载网址将第三方模块包手动下载到本地 再手动
  • Linux系统下 查找已安装软件的命令

    1 find 使用find查找文件的所在路径 find 查找路径 查找参数 在根目录下查找以 conf结尾的文件 find name conf 2 ps 通过查找进程的方法找到对应的包的路径 ps ef grep mongo 也可以简写成
  • mysql5.7.13+VS3013 源代码阅读调试

    之前写Java 对C make cmake都不是很熟 所以参考了以下这些前辈写的博客 最后成功搭建了mysql5 7 13 VS3013调试环境 自己总结了需要需要注意的几点 Windows VS2012环境下编译调试MySQL源码 一 W