当前位置: 首页 > news >正文

Windows 下 MySQL 源码学习环境搭建步骤【建议收藏】

【建议收藏】Windows 下如何安装最新版 MySQL 源码学习的调试环境步骤。

作者:芬达

《芬达的数据库学习笔记》公众号作者,开源爱好者,擅长 MySQL、ansible。

本文来源:原创投稿

  • 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

前言

大多数研发人员使用 Mac 来调试代码,但我作为不懂研发的 DBA,并且作为 Windows 的粉丝,相信绝大多数运维同学也是使用 Win 的,那我必须使用 Win 了。从这篇文章开始,我尝试摸索 MySQL 源码的学习。

本文中,我们将在 Win11 上安装 VSCode 用于调试 MySQL,安装 VMware,并在 VMware 里部署 CentOS7。在 CentOS7 里,我们将通过 VSCode 部署和调试 MySQL 的 Debug 版本。通过使用安装在 Win11 的 VSCode 的 REMOTE 插件,我们可以访问 CentOS7,并安装 VSCode 的调试插件来调试 MySQL 的 Debug 版。需要注意的是,REMOTE 插件安装在 Win11 里,而调试插件则通过 REMOTE 插件安装在 CentOS7 里,这一点别弄错了。下面,我们正式开始。

图片描述

环境及软件准备

  • Win11
  • VMware WorkStation 17 PRO
  • CentOS7.5(VMware 虚拟机上部署)
  • VSCode 1.81.1
  • MySQL 8.0.34 源码包

以上软件版本均为文章编写时的最新版。

CentOS7 环境准备

实际上如果不是使用 Mac,那么使用 Ubuntu 应该是大多数研发人员的选择,我使用 CentOS7 是因为我更熟悉它,并且它更贴近于生产环境。但有一个大问题主要是 CentOS7 默认 YUM 源的开发依赖包太老旧了,我需要使用 epel-release 的包来安装更加新的 Debug 依赖包。

# 创建存放源码的根目录
mkdir -p /root/code# 进入存放源码的根目录
cd /root/code# 安装 wget、下载源码 & 解压
yum install wget -y
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.34.tar.gz
tar zxvf mysql-boost-8.0.34.tar.gz# 用于安装 cmake3 的 yum 源
yum -y install epel-release# 用于安装高版本 gcc、gcc-c++、make 的 yum 源
yum -y install centos-release-scl# 安装依赖软件
yum -y install devtoolset-11-gcc \devtoolset-11-gcc-c++ \devtoolset-11-make \cmake3 \openssl-devel \ncurses-devel \bison# 安装 gdb
yum -y install devtoolset-11-gdb# 让 scl 环境临时生效
source /opt/rh/devtoolset-11/enable# 让 scl 环境永久生效
vi /etc/profile.d/scl.sh# 把以下内容写入 scl.sh,然后保存退出
source /opt/rh/devtoolset-11/enable

编译安装 MySQL Debug 版

# config
cd /root/code/mysql-8.0.34
cmake3 . \
-DWITH_BOOST=./boost/ \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DWITH_DEBUG=1 \
-DFORCE_INSOURCE_BUILD=1## build & install
#这里的 -j2 是并发两核 CPU 去构建,因为我的虚拟机只有两核
#但核数不是越高越好,有可能因为官方的构建文件没有处理好并发,
#导致更高的并发时编译直接报错,反正我 -j8 时报错了
#如果追求安全,不加并发也是个选择,就是慢点
make -j2 && make install

下图这样就算编译安装完了。

参数解释:

cmake3 的参数是被我极限简化的,其他走默认值,减少大家学习的心智负担。

  • WITH_BOOST=./boost/ 我们下载的是带 boost 的源码包,相对路径就是在这里
  • CMAKE_INSTALL_PREFIX=/usr/local/mysql 编译安装后的 MySQL basedir
  • WITH_DEBUG=1 可 Debug 的版本
  • FORCE_INSOURCE_BUILD=1 没研究,可能不是必须的

MySQL 初始化

# 创建配置文件目录 & 数据目录
mkdir -p /mysql/8.0.34/data  #你可以改这里# 创建用户 & 组
groupadd mysql
useradd -g mysql mysql# 创建配置文件
vi /etc/my.cnf# 把以下内容覆盖到 my.cnf
[mysqld]
user=mysql
innodb_file_per_table=1
server_id=100
basedir=/usr/local/mysql
datadir=/mysql/8.0.34/data  #你可以改这里
log-error=/mysql/8.0.34/data/error.log  #你可以改这里# 初始化数据目录
/usr/local/mysql/bin/mysqld --initialize-insecure

安装 VSCode 插件

6.1 本地插件安装

在 VSCode 应用商店搜索并安装以下插件:ChineseRemote(红框所示部分,下面两个是 Remote-SSH 的依赖,自动带出来的)。

接着我们就可以通过 SSH 工具登录到 CentOS 了。

输入远程命令。

点击连接,选择 Linux,选择继续并输入密码。

打开文件夹,两种方法任选。

输入文件夹路径,可以正常显示路径下文件。

6.2 远程插件安装

  • C/C++(gdb 插件调试时使用)

装完后,左侧会如图显示:分上下两栏。上栏是你本地 Windows 上装的 VSCode 插件;下栏是你远端 CentOS7 上装的 VSCode 插件。

远端的那个简体中文好像是 SSH 过去时自动安装的,雨我无瓜

调试

7.1 配置 VSCode 插件

cd /root/code/mysql-8.0.34
mkdir .vscode
cd .vscode
vi launch.json

内容如下:

{"version": "0.2.0","configurations": [{"name": "(gdb) 启动","type": "cppdbg","request": "launch","program": "/usr/local/mysql/bin/mysqld","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}]}]
}

7.2 启动 gdb

7.3 CentOS 上登录连接 MySQL

/usr/local/mysql/bin/mysql  # 无密码登录 MySQL

7.4 VSCode 打断点

连接 MySQL 成功之后,在 MySQL 源码中打个断点,先打开 sql/sql_parse.cc 文件:

7.5 查看断点效果

先在 CentOS 上的 MySQL 终端上执行一条 SQL。

SELECT host, user FROM mysql.user;

程序在断点处暂停之后,就可以查看一系列运行时信息了,查看断点所在函数的局部变量。

查看断点处的调用栈。

也可以在调试控制台中,用命令行执行更多 gdb 命令。

基于 VSCode 的调试,需要在命令之前加上 -exec,上图中命令 p thd->m_query_string 前面就加上了 -exec (VSCode 有提示)。

总结

本文借鉴了操盛春老师的方法《MySQL 调试环境搭建:VSCode + Docker》,并做了相应调整,以适应 Windows 用户并简化 Debug 环境的配置流程,从而使受众更广。通过将 Docker 改为 VMware,我们可以利用 VMware 的快照功能,在任何步骤中都可以创建快照,如果出现错误并且无法找到原因,可以快速回滚到之前的状态,这极大地提高了入门效率。

更多技术文章,请访问:https://opensource.actionsky.com/

关于 SQLE

爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。

SQLE 获取

类型地址
版本库https://github.com/actiontech/sqle
文档https://actiontech.github.io/sqle-docs/
发布信息https://github.com/actiontech/sqle/releases
数据审核插件开发文档https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse

相关文章:

Windows 下 MySQL 源码学习环境搭建步骤【建议收藏】

【建议收藏】Windows 下如何安装最新版 MySQL 源码学习的调试环境步骤。 作者:芬达 《芬达的数据库学习笔记》公众号作者,开源爱好者,擅长 MySQL、ansible。 本文来源:原创投稿 爱可生开源社区出品,原创内容未经授权不…...

redis总复习

springboot基于redisson实现看门狗锁:Springboot基于Redisson实现Redis分布式可重入锁【案例到源码分析】_springboot redission lock_AP0906424的博客-CSDN博客 springboot基于redis实现设置缓存和过期时间的代码?包括key的设计 https://mbd.baidu.com/ug_share…...

[LeetCode - Python]844. 比较;含退格的字符串(Easy);415. 字符串相加(Easy)

1.题目 844. 比较含退格的字符串(Easy) 1.代码: class Solution:def backspaceCompare(self, s: str, t: str) -> bool:# 暴力法s list(s)t list(t)M 0N 0for i in range(len(s)):i -M if s[i] # :if i > 0 :s.pop(i)s.pop(i-…...

机器学习深度学习——NLP实战(自然语言推断——注意力机制实现)

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——NLP实战(自然语言推断——数据集) 📚订阅专栏:机器学习&…...

mac垃圾清理软件有哪些

随着使用时间的增加,mac系统会产生一些垃圾文件,影响系统的性能和稳定性。为了保持mac系统的高效,用户需要定期使用mac垃圾清理软件来清理系统缓存、日志、语言包等无用文件。CleanMyMac是一款功能强大的mac垃圾清理软件,它可以帮…...

8.18 校招 内推 面经

绿泡泡: neituijunsir 交流裙,内推/实习/校招汇总表格 1、校招 | 小米集团2024届全球校园招聘正式启动(内推) 校招 | 小米集团2024届全球校园招聘正式启动(内推) 2、2023校招总结--软件测试岗位 - 2 2…...

docker的web管理平台docker.ui

docker.ui安装 docker run --name docker.ui \ -p 8999:8999 \ --restartalways \ -v /var/run/docker.sock:/var/run/docker.sock \ -d joinsunsoft/docker.ui参数说明: docker run:启动container–name:容器命名–restartalways&#xff…...

20230822 Windows上使用find_package引入OpenCV报错

报错信息 打开Cmake项目时,find_package 报错: Found OpenCV Windows Pack but it has no binaries compatible with yourconfiguration.You should manually point CMake variable OpenCV_DIR to your build of OpenCVlibrary.原因 大概率原项目是在 …...

MySQL下载安装配置

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

3D WEB轻量化引擎HOOPS产品助力NAPA打造船舶设计软件平台

NAPA(Naval Architectural PAckage,船舶建筑包),来自芬兰的船舶设计软件供应商,致力于提供世界领先的船舶设计、安全及运营的解决方案和数据分析服务。NAPA拥有超过30年的船舶设计经验,年营业额超过2560万欧…...

lesson9: C++多线程

1.线程库 1.1 thread类的简单介绍 C11 中引入了对 线程的支持 了&#xff0c;使得 C 在 并行编程时 不需要依赖第三方库 而且在原子操作中还引入了 原子类 的概念。要使用标准库中的线程&#xff0c;必须包含 < thread > 头文件 函数名 功能 thread() 构造一个线程对象…...

安卓修改SwitchCompat色值

SwitchCompat控件色值跟系统设置的主题有关&#xff0c;但是主题效果不是能轻易就能改的&#xff0c;因为涉及到整个APP的样式。网上方案基本都是通过修改style文件来改变色值&#xff0c;经过多次尝试修改最终觉得单独修改控件色值比较好。 一、控件属性 //修改开关色值就是最…...

pytorch内存泄漏

问题描述&#xff1a; 内存泄漏积累过多最终会导致内存溢出&#xff0c;当内存占用过大&#xff0c;进程会被killed掉。 解决过程&#xff1a; 在代码的运行阶段输出内存占用量&#xff0c;观察在哪一块存在内存剧烈增加或者显存异常变化的情况。但是在这个过程中要分级确认…...

20230821-字符串相乘-给树命名(unordered_map)

字符串相乘 有两个非负整数字符串num1&#xff0c;num2&#xff0c;计算num1和num2所表达整数的乘积&#xff0c;结果以字符串形式存储。注意:不能通过强制转换方法解题。 示例1&#xff1a; 输入&#xff1a; "4", "3" 输出&#xff1a; "12" …...

[Go版]算法通关村第十二关黄金——字符串冲刺题

目录 题目&#xff1a;最长公共前缀解法1&#xff1a;纵向对比-循环内套循环写法复杂度&#xff1a;时间复杂度 O ( n ∗ m ) O(n*m) O(n∗m)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 解法2&#xff1a;横向对比-两两对比&#xff08;类似合并K个数组、合并K个链表&#xff09;复…...

neovim为工作区添加本地clangd配置

1 背景 尝试使用neovim开发stm32&#xff0c;使用clangd作为LSP提供代码补全等功能。 2 思路 使用stm32cubeMX生成一个基于makefile的stm32工程。 使用bear或compiledb基于makefile生成compile_commands.json文件。 为clangd配置--query-driver选项&#xff0c;使其使用arm…...

信号处理--基于EEG脑电信号的眼睛状态的分析

本实验为生物信息学专题设计小项目。项目目的是通过提供的14导联EEG 脑电信号&#xff0c;实现对于人体睁眼和闭眼两个状态的数据分类分析。每个脑电信号的时长大约为117秒。 目录 加载相关的库函数 读取脑电信号数据并查看数据的属性 绘制脑电多通道连接矩阵 绘制两类数据…...

Redis高可用:主从复制详解

目录 1.什么是主从复制&#xff1f; 2.优势 3.主从复制的原理 4.全量复制和增量复制 4.1 全量复制 4.2 增量复制 5.相关问题总结 5.1 当主服务器不进行持久化时复制的安全性 5.2 为什么主从全量复制使用RDB而不使用AOF&#xff1f; 5.3 为什么还有无磁盘复制模式&#xff…...

[Flutter]有的时候调用setState(() {})报错?

先看FlutterSDK的原生类State中有一个变量mounted。 abstract class State<T extends StatefulWidget> with Diagnosticable {/// mounted的作用是&#xff0c;此State对象当前是否在树中。/// 在创建State对象之后&#xff0c;在调用initState之前&#xff0c;框架通过…...

利用屏幕水印学习英语单词,无打扰英语单词学习

1、利用屏幕水印学习英语单词&#xff0c;不影响任何鼠标键盘操作&#xff0c;不影响工作 2、利用系统热键快速隐藏&#xff08;ALT1键 隐藏与显示&#xff09; 3、日积月累单词会有进步 4、软件下载地址: 免安装&#xff0c;代码未加密&#xff0c;安全的屏幕水印学习英语…...

开学必备物品清单!这几款优先考虑!

​马上就要开学了&#xff0c;同学们也要准备一系列开学用品&#xff0c;方便我们的学习生活&#xff0c;那有哪些数码物品可以在开学前准备的呢&#xff0c;接下来给大家安利几款很不错很实用的数码好物&#xff01; 推荐一&#xff1a;南卡00压开放式蓝牙耳机 南卡00压开放式…...

聊聊调制解调器

目录 1.什么是调制解调器 2.调制解调器的工作原理 3.调制解调器的作用 4.调制解调器未来发展 1.什么是调制解调器 调制解调器&#xff08;Modem&#xff09;是一种用于在数字设备和模拟设备之间进行数据传输的设备。调制解调器将数字数据转换为模拟信号进行传输&#xff0c;…...

Go语言入门指南:基础语法和常用特性(下)

上一节&#xff0c;我们了解Go语言特性以及第一个Go语言程序——Hello World&#xff0c;这一节就让我们更深入的了解一下Go语言的**基础语法**吧&#xff01; 一、行分隔符 在 Go 程序中&#xff0c;一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ;…...

【MFC常用问题记录】

MFC 记录 MFC的edit control控件显示1.控件添加变量M_edit后&#xff1a;2.控件ID为IDC_EDIT1: 线程函数使用 MFC的edit control控件显示 1.控件添加变量M_edit后&#xff1a; CString str; int x 10; str.Format(_T("%d"),x); M_edit.SetWindowText(str)2.控件ID…...

ThreadLocal内存泄漏问题

引子&#xff1a; 内存泄漏&#xff1a;是指本应该被GC回收的无用对象没有被回收&#xff0c;导致内存空间的浪费&#xff0c;当内存泄露严重时会导致内存溢出。Java内存泄露的根本原因是&#xff1a;长生命周期的对象持有短生命周期对象的引用&#xff0c;尽管短生命周期对象已…...

微服务基础概念【内含图解】

目录 拓展补充&#xff1a; 单体架构 分布式架构 面向服务的体系结构 云原生 微服务架构 什么是微服务&#xff1f; 微服务定义 拓展补充&#xff1a; 单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;最终打成一个包部署 优点&#x…...

Dockerfile创建 LNMP 服务+Wordpress 网站平台

文章目录 一.环境及准备工作1.项目环境2.服务器环境3.任务需求 二.Linux 系统基础镜像三.docker构建Nginx1.建立工作目录上传安装包2.编写 Dockerfile 脚本3.准备 nginx.conf 配置文件4.生成镜像5.创建自定义网络6.启动镜像容器7.验证 nginx 四.docker构建Mysql1. 建立工作目录…...

消息中间件篇

消息中间件篇 RabbitMQ 如何保证消息不丢失 面试官&#xff1a; RabbitMQ如何保证消息不丢失 候选人&#xff1a; 嗯&#xff01;我们当时MYSQL和Redis的数据双写一致性就是采用RabbitMQ实现同步的&#xff0c;这里面就要求了消息的高可用性&#xff0c;我们要保证消息的不…...

基本定时器

1.简介 1. 基本定时器 TIM6 和 TIM7 包含一个 16 位自动重载计数器 2. 可以专门用于驱动数模转换器 (DAC), 用于触发 DAC 的同步电路 3. 16 位自动重载递增计数器 4. 16 位可编程预分频器 5. 计数器溢出时, 会触发中断/DMA请求 从上往下看 1.开始RCC供给定时器的时钟 RCC_APB1…...

MySQL 中文全文检索

创建索引&#xff08;MySQL 5.7.6后全文件索引可用WITH PARSER ngram&#xff0c;针对中文&#xff0c;日文&#xff0c;韩文&#xff09; ALTER TABLE 表 ADD FULLTEXT 索引名 (字段) WITH PARSER ngram;或者CREATE FULLTEXT INDEX 索引名 ON 表 (字段) WITH PARSER ngram; …...

如今做哪个网站能致富/视频外链在线生成

http://www.opengpu.org/forum.php?modviewthread&tid7164&extrapage%3D1火影忍者鸣人 疾风传 终级风暴2以超越动画作为目标的游戏视觉效果。去年&#xff0c;被看作达到动画般的画面品质的[火影忍者鸣人终级风暴]&#xff0c;与其说是震惊了游戏界&#xff0c;不如说…...

加盟营销型网站制作/百度首页纯净版怎么设置

Bootstrap中关闭第二个模态框时出现的问题和解决办法参考文章&#xff1a; &#xff08;1&#xff09;Bootstrap中关闭第二个模态框时出现的问题和解决办法 &#xff08;2&#xff09;https://www.cnblogs.com/XiaoyangBoke/p/5439169.html 备忘一下。...

网站建设安全需求/百度安装免费下载

【广东最美的山】&#xff1a;肇庆鼎湖山点评&#xff1a;鼎湖山自然环境、历史沉淀、规模、各方面综合条件较好&#xff0c;最能代表广东山的美。【广东最美的峡谷】&#xff1a;乳源大峡谷点评&#xff1a;广东最大的峡谷&#xff0c;对驴友来说&#xff0c;最吸引人的是&…...

陕西省建设厅网站ca验证失败/百度指数怎么看城市

——人类最倚重的是自己的“以往经验”。—— 我们直接看一下在corePlot 类库和iOS自带类中为一个控件设置文本显示格式的实现。 * corePlot 类库中&#xff0c;为一个对象设置标题显示格式 //创建一个“图表坐标系” &#xff08;估且称它为一个控件吧&#xff09;CPTXYGraph…...

韶关市网站建设公司/江阴百度推广公司

您可能经常需要访问远程服务器来进行管理&#xff0c;管理和故障排除&#xff0c;并且有几种方法可以执行此操作。您可以使用telnet登录到远程服务器。 FTP允许在不同服务器之间传输文件。但是&#xff0c;这些程序不够安全&#xff0c;无法连接到关键服务器。 SSH&#xff0c;…...

java做购物网站/什么是搜索引擎营销

文章目录 1. 网页的相关概念2. 常用的游览器及内核3. web标准4. HTML语法规范4.1 基本语法概述4.2 标签关系5. HTML基本结构标签6. DOCTYPE和lang以及字符集的作用6.1 文档类型声音标签6. 2 lang语言种类6.3 字符集7. 标签语义8. 标题标签9. 段落标签和换行标签10. HTML格式化1…...