完整搭建windows下mysql8.0源码编译调试环境!

news2024/12/24 9:00:03

背景:

前段时间一直在看mysql相关的博客,所以对源码起了浓厚的兴趣,所以尝试通过vmware和vscode在windosw环境中搭建一套编译调试的环境~

看了一下网上的搭建教程基本杂乱无章,想要从零跟着搭建出一个完善的调试环境也不是易事,所以写下了这章搭建教程,系统性梳理好MySQL8.0源码编译调试的详细搭建过程。

注意 vmware提前预留磁盘空间 50G,编译出来的源码最起码占了 30G

如果需要扩容 请参考我的另一篇博客 ubuntu20 vmware硬盘空间不够,进行扩容,实操成功!-CSDN博客

安装依赖,源码编译
# 安装依赖
sudo apt-get install build-essential cmake bison libncurses5-dev libssl-dev pkg-config

# 下载源码
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.16.tar.gz
tar xzv -f mysql-boost-8.0.16.tar.gz

# 进入源码目录
cd mysql-8.0.16/ ; ls

# 开始编译 非常慢的过程,我在虚拟机里搞了快一个小时~
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DWITH_BOOST=boost -DFORCE_INSOURCE_BUILD=ON

# 需要加sudo,否则可能权限不够会报错
# 好在出错后,重新执行命令还能接着执行
sudo make && sudo make install

mysql初始化
# 初始化前准备 权限不够的话 就加上 sudo
groupadd mysql
useradd -g mysql mysql
mkdir -p /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql

# 开始初始化 权限不够的话 就加上 sudo
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

初始化完成,注意找个地方记着生成的临时密码
A temporary password is generated for root@localhost: 3=0&wjy%yW%<

weweaq@ubuntu:/usr/local/mysql$ sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
2024-08-17T16:23:24.516295Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.16) initializing of server in progress as process 19010
2024-08-17T16:23:25.695438Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 3=0&wjy%yW%<
2024-08-17T16:23:26.354597Z 0 [System] [MY-013170] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.16) initializing of server has completed

写命令的时候,由于不是root用户,所以老是需要输入sudo,并且需要输入密码,非常麻烦
所以考虑如何不输入密码?
两个解决方案:

  1. 切root用户
  2. 将用户加入root用户组? 具体就是 sudo visudo, 复制root ALL=(ALL:ALL) ALL,将自己的用户名替换了root,放到之下面
    Ctrl+o 保存 按回车确认保存 Ctrl+x 退出

方法1 参考
VMware _ Ubuntu _ root 密码是什么,怎么进入 root 账户_vmware安装ubuntu22.04完成 root密码-CSDN博客
方法2 参考
ubuntu避免每次都输入sudo_ubuntu取消sudo-CSDN博客

实际方法2并不好用,所以这里使用,切成root用户执行命令 设置root用户的密码为:1111

配置mysql

在/etc目录下新建一个全局用的简单的配置文件


vim /etc/my.cnf

# 然后将以下内容复制进去 #
[client]
socket = /tmp/mysql.sock
 
[mysqld]
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data

将mysql服务注册到系统服务

# 注意看自己mysql的安装目录,如果是按照我的教程话,那就是一样的
# 之前cmake的时候定义了安装目录 /usr/local/mysql
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
update-rc.d mysqld defaults
service mysqld start

mysql/support-files/下的mysql.server复制到 /etc/init.d/下,并且重新命名为mysqld,这是为了后续能够通过 service mysqld start 来方便的控制mysql,start可以替换成/stop/status/restart分别控制mysql关闭,重启,查看状态~

添加path

echo -e '# MySQL PATH\nexport PATH=/usr/local/mysql/bin:$PATH\n' >> /etc/profile
source /etc/profile

连接登录MySQL并修改root账户密码(需要使用之前存的临时密码)。

mysql -uroot -p'3=0&wjy%yW%<`'

# 主要在mysql8.0中已经不可以使用 update mysql.user set password = password('xxx') where user = 'xxx';的写法了
ALTER USER 'root'@'localhost' IDENTIFIED BY '1111';

因为本次安装只是个人使用(非生产环境),所以可以额外的将账户密码信息写入配置文件,以后连接直接使用mysql命令即可,无需再输入账户密码~

vim /etc/my.cnf
[client]
# 把这几行添加到client选项组下面 #
user = root
password = 1111
port = 3306

尝试登陆 直接输入mysql, 并给root用户配置外部所有host均可连接。

UPDATE `mysql`.`user` SET `Host` = '%' WHERE `User` = 'root';
FLUSH PRIVILEGES;

![[Pasted image 20240818181342.png]]

当出现这个界面时,mysql配置成功!

配置ssh

由于我们是利用vscode通过ssh远程登陆虚拟机来调试代码,所以需要先在虚拟机上安装ssh~

# 安装并开启
sudo apt install openssh-server
sudo service ssh restart

# 开启默认端口号和prohibit-password配置项
# 虚拟机默认是不允许root用户登录的
sudo vi /etc/ssh/sshd_config

![[Pasted image 20240818213225.png]]

最后,重启ssh服务

sudo service ssh restart

接下来开始配置vscode进行调试!

vscode配置

vscode配置以及连接vmware虚拟机

首先下载vscode并安装,一路往下点
Visual Studio Code - Code Editing. Redefined

随后,下载必须的插件,c/c++与remote-ssh
![[Pasted image 20240818211317.png]]

![[Pasted image 20240818180258.png]]

![[Pasted image 20240818211240.png]]

随后,利用ssh插件远程连接虚拟机
![[Pasted image 20240818211533.png]]

其中给了具体的填写方式,如 ssh root@xxx, 其中xxx为具体虚拟机的ip,可以通过ifconfig命令来查看,如果没有ifconfig,使用apt-get安装一下即可。

![[Pasted image 20240818211803.png]]

可以看到此时我的虚拟机IP为 192.168.113.129,所以在vscode中填入 ssh root@192.168.113.129

选择第一个配置即可
![[Pasted image 20240818211932.png]]

点击connect! 开始连接!
![[Pasted image 20240818211954.png]]

连接选择Linux,输入密码进行连接
![[Pasted image 20240818213421.png]]

此时ubuntu的命令行已经弹出来了说明我们已经成功连接上了虚拟机
![[Pasted image 20240818213543.png]]

如果连接失败,提供两个思路进行检查

  1. 虚拟机上的ssh是否开启?sshd的配置是否正常?
  2. ssh xxx@xxx 用户密码是否对应的上?

此时再选择需要打开的目录后,就可以在vscode上看到虚拟机上的代码啦!
![[Pasted image 20240818213921.png]]

不出意外的话,就是这样
![[Pasted image 20240818214011.png]]

vscode调试mysql8.0源码

首先给远端安装插件

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

装完后,左侧会如图显示:分上下两栏。上栏是你本地 Windows 上装的 VSCode 插件;下栏是你远端 ubuntu 上装的 VSCode 插件。
![[Pasted image 20240818214526.png]]

随后进入到源码的位置下,配置vscode插件

cd /home/weweaq/sqlcode/mysql-8.0.16
mkdir .vscode 
cd .vscode 
vi launch.json

launch.json中输入

{

  "version": "0.2.0",

  "configurations": [

    {

      "name": "(gdb) 启动",

      "type": "cppdbg",

      "request": "launch",

      "program": "/usr/local/mysql/bin/mysqld",

      "args": [],

      "stopAtEntry": false,

      "cwd": "/home/weweaq/sqlcode/mysql-8.0.16",

      "environment": [],

      "externalConsole": false,

      "MIMode": "gdb",

      "setupCommands": [

        {

          "description": "为 gdb 启用整齐打印",

          "text": "-enable-pretty-printing",

          "ignoreFailures": true

        },

        {

          "description": "将反汇编风格设置为 Intel",

          "text": "-gdb-set disassembly-flavor intel",

          "ignoreFailures": true

        }

      ]

    }

  ]

}

保存退出后,即可尝试调试啦!冲!
![[Pasted image 20240818214930.png]]

不出意外的话应该是会报错~

2024-08-17T18:23:43.533899Z 0 [System] [MY-010116] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.16) starting as process 12916 2024-08-17T18:23:43.538507Z 0 [ERROR] [MY-010123] [Server] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!

说什么mysql不可以通过root用户来启动~ 没想到还有这种限制~

仔细想来,之前我们给mysql配置的时候不是配置了mysql用户组和mysql用户吗?为什么没通过mysql用户把服务起起来?

检查 /etc/my.cnf 配置文件,发现竟然没有配置启动mysql的用户,于是在mysqld栏下配置user=mysql
![[Pasted image 20240818215336.png]]

报错退出后,再次尝试,服务跑起来了,但是不一会又出错了

![[Pasted image 20240818215417.png]]

仔细观察错误发现,一直在提示./ibdata1文件使用不了,提示可能有其他线程在使用

于是直接kill掉所有mysql相关的线程,重启一下mysql服务

ps aux |grep mysql  
kill  mysql进程

cd /var/lib/mysql  
删除 mysql.sock.lock 文件

 # 重启mysql
service mysqld restart

再次点击gdb调试,好像没有报错了~

小小试试看能否调试

在vscode中按下快捷键ctrl+p搜索文件sql_parse.cc
![[Pasted image 20240818215915.png]]

在2946行打上断点

![[Pasted image 20240818220531.png]]

咱们去服务器上执行一条select语句,看看是不是真的调试起来了

![[Pasted image 20240818220724.png]]

![[Pasted image 20240818220810.png]]

可以看到真的停下来啦!!

说明我们的调试环境配置完毕!!!

XDM安心去看源码吧 :)

(同时通过前一张图可以看到,在进mysql的时候,断点也停了,其实是说明在进库时,mysql也会执行select语句检查输入的账户与密码是否和库中存的相等,这也说明mysql其实默默帮我们做了很多事情我是还要学还需要学)*

后续我会开一个系列专门记录我的mysql学习过程,xdm可以关注一波,一起学习!!!

参考
Ubuntu Linux系统MySQL8.0源码编译安装笔记_ubuntu please install the appropriate openssl deve-CSDN博客
技术分享 | Windows 下 MySQL 源码学习环境搭建步骤【建议收藏】-腾讯云开发者社区-腾讯云 (tencent.com)

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

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

相关文章

redis I/O复用机制

I/O复用模型 传统阻塞I/O模型 串行化处理&#xff0c;就是要等&#xff0c;假如进行到accept操作&#xff0c;cpu需要等待客户端发送的数据到tcp接收缓冲区才能进行read操作&#xff0c;而在此期间cpu不能执行任何操作。 I/O复用 用一个进程监听大量连接&#xff0c;当某个连…

国产大模型领域跳槽:收入潜力解析

夏尽秋来&#xff0c;2024年国产大模型看似喧闹已止&#xff0c;进入稳定竞争期。 作为一种新的IT解决方案&#xff0c;国产大模型一出生便伴随着激烈竞争。 外有GPT4&#xff0c;内有多家公司角逐“中国版ChatGPT”。 据我所知&#xff0c;就国内某家头部大模型创业公司的收…

0817(持久层框架:JDBC,MyBatis)

三层架构&#xff08;表现层&#xff0c;业务层&#xff0c;持久层&#xff09; java中框架的概述&#xff08;表现层、业务层、持久层的关系&#xff09;_控制层业务层持久层的关系-CSDN博客 框架&#xff1a;框架一般处在低层应用平台&#xff08;如J2EE&#xff09;和高层…

利用keepalived达成服务高可用

官方网站Keepalived for Linux 1.keepalived简介 vrrp 协议的软件实现&#xff0c;原生设计目的为了 高可用 ipvs 服务 功能&#xff1a; 基于 vrrp 协议完成地址流动 为 vip 地址所在的节点生成 ipvs 规则 ( 在配置文件中预先定义 ) 为 ipvs 集群的各 RS 做健康状态检测 …

【Linux网络】NAT技术

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 引言 随着互联网的飞速发展&#xff0c;IP地址资源日益紧张&#xff0c;这促使了NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;技术的诞生与发展。NAT技术不仅解决了IPv4…

webshell免杀--免杀入门

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要整理webshell免杀的一些基础思路 入门级&#xff0c;不是很深入&#xff0c;主要是整理相关概念 免杀对象 1.各类杀毒软件 类似360&#xff0c;火绒等&#xff0c;查杀己方webshell的软件。 2.各类流量…

计算机网络系统速成

Http与Https Http与Https是两种重要的网络通信协议&#xff0c;它们在Web通信中扮演着关键角色。以下是对Http与Https的详细解析&#xff1a; 一、Http&#xff08;超文本传输协议&#xff09; 1. 定义与功能 定义&#xff1a;Http&#xff08;HyperText Transfer Protocol…

打卡学习Python爬虫第三天|电影天堂案例

一、明确需求 目标&#xff1a;爬取最新更新的电影的豆瓣链接 观察网页和页面源代码&#xff0c;每部电影都有一个超链接去到子页面&#xff0c;我们需要的内容在子页面&#xff0c;如果我们一个一个子页面的去爬取会比较麻烦&#xff0c;可以尝试先通过首页爬取子页面的超链…

指针初阶(指针类型转换的使用、指针数组)

一.指针基础 0.指针的大小 指针指向的是一块地址&#xff0c;所以指针存储的是地址&#xff0c;例如在32位系统中。定义了一个int32_t类型的变量。使用int32_t *定义一个指针&#xff0c;使其指向该变量。 设该变量存储在地址为00000000000000000000000000000001&#xff08;3…

远程调用-OpenFeign(一)

目录 1.RestTemplate存在问题 2.OpenFeign介绍 一、主要特点 二、应用场景 3.OpenFeign快速上手 3.1引入依赖 3.2添加注解 3.3编写OpenFeign的客户端 3.4远程调用 ​编辑3.5测试 4.OpenFeign参数传递 4.1传递单个参数 4.2传递多个参数 4.3传递对象 4.4传递JSO…

编程修炼之Hibernate--- springboot启动初始化ddl过程

文章目录 跟踪Springboot整合hibernate的启动代码&#xff1a; 开始初始化 entityManagerFactory 创建方言 dialect 继续排查

Koa商城项目-轮播图模块(后端)

前言 通过这次独自做前后端发现有很多需要提升的地方&#xff0c;很多细节处理不到位。下面简单看一下本人自己做的效果吧~~ Git地址 https://gitee.com/ah-ah-bao/koa_system 效果图 后端逻辑分析 首先编写route->banner.router.js /*** author: zxb* date: 2024-08-06…

Socket编程TCP 基础

一.什么是Socket(套接字&#xff09; 定义&#xff1a;就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端&#xff0c;提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲&#xff0c;套接字上联应用进程&#x…

【文献阅读】A Comprehensive Review of Multimodal Large Language Models

一、回顾 MLLMs 在语言、图像、视频和音频处理等多模态任务中表现出色。这些模型通过整合多模态信息来增强多模态任务的有效性。 在自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;如文本生成和机器翻译&#xff0c;MLLMs 利用图像、视频和音频提供上下文支持&am…

C#开发实验--卫星星历的计算、空间直角坐标和大地坐标的转换、ArcGIS Engine开发的简单实例

前不久在公众号GIS研发看到了暑假公益C#开发教程&#xff0c;教大家ArcGIS Engine开发。 想到了自己本科阶段也学习了C#开发和AE开发&#xff0c;学习了使用C#添加空间等&#xff0c;进行卫星星历的计算、空间直角坐标和大地坐标的转换、ArcGIS Engine开发的简单实例。 下面的…

数据结构与算法--插入排序与选择排序

文章目录 回顾提要排序基本概念排序的分类排序算法的稳定性排序算法的性能指标内排序 排序方法直接插入排序直接插入排序的要点直接插入排序的实现直接插入排序性能分析直接插入排序的适用情景 简单选择排序简单选择排序的要点简单选择排序的执行过程简单选择排序的实现简单选择…

虚幻5|布料模拟

打开骨骼网格体 1.Mass Prooerties 如果给角色施加风力&#xff0c;密度越大越难飘&#xff0c;相反密度越小飘动浮度也小 2.Material Proerties Edge Stiffness,对衣服的折痕处的调整&#xff0c;其值越大就越能维持原本的折痕&#xff0c;相反折痕就会变小&#xff0c;但…

【Mudo】实战项目之应用层模块

文章目录 前言正文1. Util1.1 File1.2 Url1.3 Str1.4 Infor 2. Http2.1 Request2.2 Response2.3 Context2.4 Server 尾序 前言 在上一篇文章当中&#xff0c;博主从代码的层面介绍了服务器模块的实现&#xff0c;最终封装出了一个传输层的TcpServer模块&#xff0c;那么在本篇…

中国篆刻艺术孙溟㠭凿木《未来之门》

孙溟㠭凿木《未来之门》 每人都有着自己对未来的期盼&#xff0c;未来并不遥远&#xff0c;下一秒就是未来&#xff0c;当下的一切好和一切的恶是暂时的&#xff0c;都会随着时间一秒一秒过去&#xff0c;走向未来&#xff0c;希望每人都能尽早打开未来之门&#xff0c;到达自己…

Arduino开源四足蜘蛛机器人制作教程

视频教程&#xff1a;手把手叫你做四足蜘蛛机器人——1零件介绍_哔哩哔哩_bilibili 一、项目介绍 1.1 项目介绍 Arduino主控&#xff0c;图形化编程&#xff0c;趣味学习 Arduino nano开发板舵机扩展底板 4.8V可充电电池&#xff0c;支持Arduino C语言编程和米思齐图形化编程…