【MySQL源码】使用CLion 远程调试MySQL源码

目录

0 准备工作

1 IDE 

2 下载MySQL源码

​编辑

一 配置CLion

1 添加远程服务器

2 配置远程服务器环境

3 升级gdb版本

4 升级CMake版本

5 修改远程服务器文件上传的目录的对应关系 

5 配置cmake

7 初始化MySQL 

8 启动MySQL


作为DBA工作多年,如果还是停留在运维阶段,很难提高自己的技术水平。阅读 MySQL 及相关工具的源代码,不仅是数据库研发人员的日常,也是 DBA 进阶的必经之路,全方位提高技术水平。

0 准备工作

1 IDE 

IDE CLion下载 CLion:JetBrains 出品的 C 和 C++ 跨平台 IDE

使用IDE的目的主要是方便阅读/debug MySQL源码 

2 下载MySQL源码

下载地址

MySQL :: MySQL Community Downloads

 下载页面有两种源码包 选择下载包含boost的源码包

一 配置CLion

1 添加远程服务器

打开IDE CLion  --> Open  本地打开MySQL的源码 

点击 Preferences --> Tools

点击 + 添加源端的服务器 填写 host 端口 用户名 密码等信息 --> 点击 Test Connection --> 出现连接成功即可 

2 配置远程服务器环境

从上图可以看到 cmake  和 gdb 的版本较低,不满足要求。下面需要升级gdb和cmake的版本。如果你的版本都满足要求 可以跳过第3,4步。

3 升级gdb版本

参考博客  Linux之gdb安装和升级_gdb 升级-CSDN博客

查看目前版本

# 查看当前版本
gdb -v
GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6_4.1)# 下载压缩包
wget http://ftp.gnu.org/gnu/gdb/gdb-7.8.tar.gz# 解压 
tar -zxvf gdb-7.8.tar.gz
chown  -R root.root gdb-7.8
# 编译安装
cd  gdb-7.8
mkdir build
./configure
make
make install # 二进制命令在 /usr/local/bin/ 下
/usr/local/bin/gdb --version

在 C 语言项目中,预编译时的安装路径通常是由 configure 脚本或 CMake 构建系统生成的。这个路径通常取决于多个因素,包括系统默认路径、用户指定的参数,以及软件包的配置选项。在没有指定 PREFIX 参数的情况下,通常会使用默认路径。

以下是一些方法,你可以查看在没有指定 PREFIX 参数时,预编译时二进制文件会安装到哪里:

1. 查看 Makefile

在 C 语言项目的源代码目录中,可以查看 Makefile 或者 Makefile.in 文件,这些文件中包含了关于预编译时安装路径的信息。查找类似于 prefixDESTDIR 的关键字,这些关键字通常用于指定安装路径。

4 升级CMake版本

 wget https://cmake.org/files/v2.8/cmake-2.8.12.2.tar.gz --no-check-certificate

 tar -zxvf cmake-2.8.12.2.tar.gz

cd cmake-2.8.12.2

./bootstrap

gmake

 gmake install

5 修改远程服务器文件上传的目录的对应关系 

默认路径在tmp 随机字符串生成一个目录

修改为自己想放的位置 /home/software/mysql_source_code

  

5 配置cmake

BuilD type :debug

tooolchain :Remote host

Cmake option: . -DWITH_DEBUG=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=./boost -DCMAKE_INSTALL_PREFIX=build_out -DMYSQL_DATADIR=build_out/data

Built directory : .

参数解释: 

  1. -DWITH_DEBUG=1: 启用调试模式。这将编译MySQL服务器和相关的组件,以便在调试时能够获取更多的信息和日志。

  2. -DDOWNLOAD_BOOST=1: 下载并构建Boost库。Boost是一个提供许多用于C++的工具和库的开源项目。这个选项告诉CMake下载Boost库并将其集成到MySQL的构建中。

  3. -DWITH_BOOST=./boost: 指定Boost库的位置。这告诉CMake在当前目录下寻找名为"boost"的目录,并将其用作Boost库的位置。

  4. -DCMAKE_INSTALL_PREFIX=build_out: 指定安装目录的前缀。在构建和安装完成后,MySQL将被安装到"build_out"目录下。

  5. -DMYSQL_DATADIR=build_out/data: 指定MySQL数据目录的位置。MySQL数据目录是存储数据库文件的地方。在这里,它被设置为"build_out/data"。

修改完成之后开始上传  上传需要一些时间 可以在 filetransfer 看到文件上传的详情

报错 1

-- Packaging as: mysql-5.7.28-Linux-x86_64
-- WITH_BOOST=/home/software/mysql_source_code/boost/boost_1_59_0/boost
-- BOOST_INCLUDE_DIR 
-- LOCAL_BOOST_DIR LOCAL_BOOST_DIR-NOTFOUND
-- LOCAL_BOOST_ZIP LOCAL_BOOST_ZIP-NOTFOUND
-- Could not find (the correct version of) boost.
-- MySQL currently requires boost_1_59_0

解决 :

这个调整Cmake的配置解决 

报错2 

-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH) 
CMake Error at cmake/readline.cmake:71 (MESSAGE):
  Curses library not found.  Please install appropriate package,

 解决:

yum install ncurses-devel

7 初始化MySQL 

--defaults-file=/etc/my_5306.cnf --initialize --initialize-insecure --user=mysql

参数解释 

--defaults-file=/etc/my_5306.cnf  配置文件

--initialize 初始化

--initialize-insecure 不设置初始的密码

--user=mysql 使用用户

将以上命令填写到 

点击 edit  Configure 

左侧选择 mysqld ,将以上命令填写到 Program arguments 

初始化 数据目录生成在配置文件配置的目录下 

要注意目录是否存在 ,目录的用户等问题

点击run mysqld 进行初始化。相当于安装MySQL时进行初始化,只不过是在本地Clion 上进行了。

8 启动MySQL

--defaults-file=/etc/my_5306.cnf --debug=d,error,warning,info:F:L

启动时加的debug 参数 的含义

官方文档大概讲解

MySQL :: MySQL 8.0 Reference Manual :: 5.1.7 Server Command Options

官方文档详细讲解:

MySQL :: MySQL 8.0 Reference Manual :: 5.9.4 The DBUG Package

在cmake的时候需要加参数 -DWITH_DEBUG=1 ,然后启动MySQL实例的时候加参数--debug才有效

F 显示 每行调试或跟踪输出相关的源码文件名。

L 显示每行debug或trace输出相关的 源码文件的行数

i.显示每行debug或trace输出 相关的进程ID 或 线程ID

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/181876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

48个代码大模型汇总,涵盖原始、改进、专用、微调4大类

代码大模型具有强大的表达能力和复杂性,可以处理各种自然语言任务,包括文本分类、问答、对话等。这些模型通常基于深度学习架构,如Transformer,并使用预训练目标(如语言建模)进行训练。 在对大量代码数据的…

Leetcode(面试题 08.01.)三步问题

文章目录 前言一、题目分析二、算法原理1.状态表示2.状态转移方程3.初始化4.填表顺序5.返回值是什么 三、代码实现总结 前言 在本文章中,我们将要详细介绍一下Leetcode(面试题 08.01.)三步问题相关的内容 一、题目分析 1.小孩可以上一阶,两阶&#xff…

Shell脚本编程案例 – 批量创建特殊要求账户

Shell脚本编程案例 – 批量创建特殊要求账户 Shell Scripting Cases – Create a Bunch of accounts with special requests By JacksonML 本文简要介绍批量执行Shell脚本命令的基本思路,以检验shell脚本知识掌握情况。希望对读者有所帮助。 案例要求&#xff1a…

GO 集成Prometheus

一、Prometheus介绍 Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便…

初刷leetcode题目(10)——数据结构与算法

😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️Take your time ! 😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️…

PyQt6 QLCDNumber液晶数字显示控件

​锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计29条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话…

(Spring学习06)Spring之循环依赖底层源码解析

什么是循环依赖? 很简单,就是A对象依赖了B对象,B对象依赖了A对象。 比如: // A依赖了B class A{public B b; }// B依赖了A class B{public A a; }那么循环依赖是个问题吗? 如果不考虑Spring,循环依赖并不…

day31_servlet

今日内容 零、 复习昨日 一、请求转发 二、重定向 三、Session 四、Filter 零、 复习昨日 一、请求转发 1.1 现有问题 响应的代码与接收请求代码在一起查询全部的代码与登录的代码在一起,考虑一下后续删除完,更新完要查全部怎么办?这也没有遵循单一职责,不便于后期维护ps: 开…

vue3 setup语法糖,常用的几个:defineProps、defineEmits、defineExpose、

vue3和vue2组件之间传参的不同 <script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖。 <script setup> 中的代码会在每次组件实例被创建的时候执行。 任何在 <script setup> 声明的顶层的绑定 (包括变量&#xff0c;函数声明&#xff0…

卓越进行时 | 赛宁联合国家一流网络安全学院探索校企合作新模式

为进一步探索网络安全教育技术产业融合发展的新机制新模式&#xff0c;全方位培养适应行业企业需求的复合型、创新型高素质网络安全人才。11月28日&#xff0c;南京赛宁信息技术有限公司&#xff08;赛宁网安&#xff09;与东南大学以优化产教融合发展原则&#xff0c;决定加强…

C++设计模式——Bridge模式(下)

在上篇 《C设计模式——Bridge模式&#xff08;上&#xff09;》中我们对于桥接模式做了一些介绍。介于桥接模式在实际项目开发中使用广泛&#xff0c;而且也是面试中常问常新的话题。在本篇&#xff0c;我们专注bridge模式在具体的项目开发中的应用&#xff0c;举几个例子来说…

服务器修复

服务器修复 主要服务器漏洞展示未禁用sync、shutdown、halt默认账户。未创建系统管理员、审计管理员、安全管理员账户设置系统管理员设置安全管理员 设置审计管理员配置PASS_MAX_DAYS 99999、PASS_MIN_LEN 5未配置TMOUT值配置HISTSIZE0未配置登录失败/密码复杂度策略umask值022…

2021年2月18日 Go生态洞察:Go 1.16中的新模块变化

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

数字时代的表演艺术:TikTok如何重新定义舞台

在数字时代的潮流中&#xff0c;TikTok崭露头角&#xff0c;重新定义了表演艺术的舞台。这款短视频应用不仅改变了用户与内容的互动方式&#xff0c;也为艺术家和创作者提供了全新的表达平台。本文将深入探讨TikTok如何在数字时代重新定义舞台&#xff0c;以及它对表演艺术的深…

基于FPGA的五子棋游戏设计

基于FPGA的五子棋游戏设计 本文基于FPGA设计五子棋游戏&#xff0c;使用按键输入&#xff0c;使用VGA接口输出。五子棋的棋具与围棋相同&#xff0c;棋子分为黑白两色&#xff0c;棋盘为1010&#xff0c;棋子放置于棋盘线交叉点上。两人对局&#xff0c;各执一色&#xff0c;轮…

【IEEE出版】2024年第四届消费电子与计算机工程国际学术会议(ICCECE 2024)

2024年第四届消费电子与计算机工程国际学术会议&#xff08;ICCECE 2024&#xff09; 2024 4th International Conference on Consumer Electronics and Computer Engineering 进入21世纪以来&#xff0c;计算机技术的高速发展带来了消费电子产品的快速更迭。在技术迅速发展历…

关于免费SSL证书

JoySSL是一家提供免费SSL证书的服务商&#xff0c;它的免费SSL证书不仅包括单域名&#xff0c;还包括多域名和通配符的免费证书。这意味着&#xff0c;无论您是只有一个网站的个人用户&#xff0c;还是拥有多个子域名的企业用户&#xff0c;都可以在JoySSL找到适合您的免费SSL证…

\n\r:解析java中的\r、\n、\r\n、\n\r的区别

1 \r 1.1 内容 回车符,将光标定义到当前行行首 1.2 在idea中测试 1.2.1 表现形式 在\r后有新内容时,会先删除之前以前存在过的文本,即只打印\r后面的内容 1.2.2 示例代码 package Work; public class Test05 { public static void main(String[] args) { System.…

windows环境下载安装Nginx并配置防火墙

1、下载Nginx Nginx官网 下载稳定版 2、下载之后&#xff0c;解压 3、启动Nginx&#xff0c;命令&#xff1a;start nginx 最小化该窗口 主要&#xff0c;不要关闭&#xff0c;如果关闭&#xff0c;表示nginx服务关闭了 4、测试是否启动成功 在浏览器中输入http://localhos…

2021年09月 Scratch图形化(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 程序中要使用不确定的数值,这时要用到的是?( ) A、图章 B、变量 C、广播 D、随机数 答案:D 第2题 执行下列程序后,角色会说?( ) A、3 B、6 C、10 D、15 答案:D 第3题…