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

本地(Linux)编译 MySQL 源码

完全理解你的感受!MySQL 源码本地调试确实是一个“坑多”的过程,尤其是当你第一次尝试从源码构建和调试 MySQL 时。但别担心,我来一步步帮你梳理整个流程,并提供一个详细、可操作的指南,让你可以顺利跑起来 MySQL 源码并进行本地调试。


✅ 目标

  • 在本地(Linux)编译 MySQL 源码
  • 支持调试(Debug)
  • 能运行、能打断点、能单步执行

🛠️ 第一步:准备环境

✅ 推荐系统:

本文以 Ubuntu 为例。

📦 安装依赖包:

sudo apt update
sudo apt install build-essential cmake libncurses-dev \libssl-dev libnuma-dev git gdb valgrind \libboost-all-dev libreadline-dev pkg-config

🌐 第二步:下载 MySQL 源码

你可以选择官方分支或某个版本的源码。

👇 下载官方源码(例如 MySQL 8.0):

git clone https://github.com/mysql/mysql-server.git
cd mysql-server
git checkout 8.0  # 切换到你想要的版本分支

如果你觉得太慢,也可以使用镜像站(如 Gitee)克隆一份加速版。


🧱 第三步:配置 CMake 构建参数(关键步骤)

创建 build 目录并进入:

mkdir build && cd build

然后运行如下 支持调试的 CMake 配置命令

cmake .. \-DCMAKE_BUILD_TYPE=Debug \-DFORCE_INSOURCE_BUILD=1 \-DWITH_DEBUG=1 \-DWITH_SSL=system \-DWITH_BOOST=/tmp/mysql_boost \-DDOWNLOAD_BOOST=1 \-DMYSQL_DATADIR=/home/$(whoami)/mysql_data \-DSYSCONFDIR=/home/$(whoami)/mysql_conf \-DDEFAULT_CHARSET=utf8mb4 \-DDEFAULT_COLLATION=utf8mb4_unicode_ci

⚠️ 如果提示 Boost 缺失,请确保 -DDOWNLOAD_BOOST=1 已设置,并等待自动下载。


🔨 第四步:开始编译(耗时较长)

make -j$(nproc)

或者只构建 mysqld 主程序,加快速度:

make mysqld

🗃️ 第五步:初始化数据库

mkdir -p ~/mysql_data ~/mysql_conf
cd ..
scripts/mysqld_pre_systemd_install --basedir=$(pwd) --datadir=~/mysql_data

这会生成默认的配置文件和 root 用户权限。


▶️ 第六步:启动 MySQL 并调试

启动方式一:直接运行(带调试信息)

cd build/sql
gdb ./mysqld

在 GDB 中运行:

run --user=$(whoami) --basedir=$(dirname $PWD) --datadir=~/mysql_data

启动方式二:后台运行

./mysqld --user=$(whoami) --basedir=$(dirname $PWD) --datadir=~/mysql_data &

🪲 第七步:附加调试器(GDB)

如果你已经启动了 mysqld,可以用 GDB 附加进程:

ps aux | grep mysqld
gdb -p <pid>

然后就可以打断点、查看堆栈、变量等。


🧪 常见问题排查

问题解决方案
找不到 OpenSSL确保安装了 libssl-dev,并加上 -DWITH_SSL=system
Boost 报错加上 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp/mysql_boost
初始化失败检查数据目录权限:chmod -R 700 ~/mysql_data
编译很慢只 make mysqld,不要全量 make
CMake 缓存旧删除 build 文件夹重新配置

💡 小技巧

  • 使用 VS Code + Remote 开发插件 + GDB 插件,体验更佳。
  • 设置断点建议从 main() 函数开始,逐步深入。
  • 如果你只想调试某一部分(如 SQL 解析、事务引擎),可以只构建对应模块。
  • 使用 make VERBOSE=1 查看完整编译命令。

📌 总结:跑起来 MySQL 源码的关键点

步骤关键点
环境准备安装所有开发库
获取源码使用 Git 克隆官方仓库
CMake 配置启用 Debug、Boost、SSL
编译使用 -j$(nproc) 加速
初始化创建数据目录并初始化
调试使用 GDB 或 IDE 调试器
报错处理清理缓存、检查依赖路径

问题1 openssl问题

CMake Error at cmake/ssl.cmake:84 (MESSAGE):Please install the appropriate openssl developer package.Call Stack (most recent call first):cmake/ssl.cmake:332 (FATAL_SSL_NOT_FOUND_ERROR)CMakeLists.txt:1826 (MYSQL_CHECK_SSL)

解决:使用的是自定义 OpenSSL(自己编译的)

git clone https://github.com/openssl/openssl.git
cd openssl
git checkout OpenSSL_1_1_1w  # 或其他稳定分支
./Configure linux-x86_64 --prefix=/usr/local/openssl
make -j$(nproc)
sudo make install

如果是macbook执行./Configure linux-x86_64 --prefix=/usr/local/openssl 会报错

crypto/aes/aesni-mb-x86_64.s:289:8: error: invalid alignment value
.align 32^
crypto/aes/aesni-mb-x86_64.s:387:8: error: invalid alignment value
.align 32^
crypto/aes/aesni-mb-x86_64.s:494:8: error: invalid alignment value
.align 32^
crypto/aes/aesni-mb-x86_64.s:558:1: error: unknown directive
.size aesni_multi_cbc_decrypt,.-aesni_multi_cbc_decrypt
^
crypto/aes/aesni-mb-x86_64.s:559:1: error: unknown directive
.type aesni_multi_cbc_encrypt_avx,@function
^
crypto/aes/aesni-mb-x86_64.s:560:8: error: invalid alignment value
.align 32^
crypto/aes/aesni-mb-x86_64.s:716:8: error: invalid alignment value
.align 32^
crypto/aes/aesni-mb-x86_64.s:1012:1: error: unknown directive
.size aesni_multi_cbc_encrypt_avx,.-aesni_multi_cbc_encrypt_avx
^
crypto/aes/aesni-mb-x86_64.s:1014:1: error: unknown directive
.type aesni_multi_cbc_decrypt_avx,@function
^
crypto/aes/aesni-mb-x86_64.s:1015:8: error: invalid alignment value
.align 32^
crypto/aes/aesni-mb-x86_64.s:1190:8: error: invalid alignment value
.align 32^
crypto/aes/aesni-mb-x86_64.s:1507:1: error: unknown directive
.size aesni_multi_cbc_decrypt_avx,.-aesni_multi_cbc_decrypt_avx
^
make[1]: *** [crypto/aes/aesni-mb-x86_64.o] Error 1
make: *** [all] Error 2

这是在编译 OpenSSL 源码时,汇编文件 aesni-mb-x86_64.s 出现了问题。这类错误通常发生在 不同平台或工具链(Assembler / 编译器)对汇编语法的支持不一致 的情况下。
可以禁用所有汇编优化,使用纯 C 实现:

./Configure --prefix=/usr/local/openssl darwin64-arm64-cc no-asm
make -j$(nproc)
sudo make install

有时旧配置干扰会导致问题,请先执行:

make clean
make -j$(nproc)
sudo make install

然后设置环境变量:

export PATH="/usr/local/openssl/bin:$PATH"
export LDFLAGS="-L/usr/local/openssl/lib"
export CPPFLAGS="-I/usr/local/openssl/include"

问题2

CMake Error at cmake/bison.cmake:137 (MESSAGE):Please update to version 3.0.4 or higher
Call Stack (most recent call first):CMakeLists.txt:1967 (INCLUDE)

说明:项目在构建时检测到你的 bison 版本低于 3.0.4,而该项目(很可能是 MySQL、MariaDB 或其他数据库项目)要求至少使用 bison 3.0.4 或更高版本。

cd /tmp
curl -O http://ftp.gnu.org/gnu/bison/bison-3.8.2.tar.gz
tar zxpf bison-3.8.2.tar.gz
cd bison-3.8.2
./configure --prefix=/usr/local/bison
make -j$(nproc)
sudo make install
export PATH="/usr/local/bison/bin:$PATH"# 清理构建目录
rm -rf build/
mkdir build && cd build

有些项目会显式指定 BISON_EXECUTABLE,你也可以这样强制使用新版(非必须):

cmake .. -DBISON_EXECUTABLE=/usr/local/bin/bison

相关文章:

  • 三、zookeeper 常用shell命令
  • 触控精灵 ADB运行模式填写电脑端IP教程
  • Linux基础 -- Linux 启动调试之深入理解 `initcall_debug` 与 `ignore_loglevel`
  • 从零到一选择AI自动化平台:深度解析n8n、Dify与Coze
  • Axure项目实战:运输统计页引入echarts实现高保真设计(JS代码ctrl+c ctrl+v懂得来)
  • 配置vscode中java.configuration.runtimes
  • 贪心算法实战篇2
  • 2262 1527的解码实验程序
  • 弥散制氧机工作机制:高原低氧环境的氧浓度重构技术
  • FPGA实现CNN卷积层:高效窗口生成模块设计与验证
  • 在 Ubuntu 上挂载其他硬盘的步骤
  • docker-记录一次容器日志<container_id>-json.log超大问题的处理
  • Redis--缓存穿透与缓存雪崩详解及解决方案
  • 基于MATLAB的二维圆形随机骨料生成程序
  • 深入解析 CountDownLatch、Semaphore 和CyclicBarrier
  • 微服务FallbackFactory和FallbackClass
  • ROS2学习(16)------ URDF 机器人建模方法
  • ChatGPT + 知网 + 知乎,如何高效整合信息写出一篇专业内容?
  • 逛网站看到个场景题,如何防止重复下单
  • 一招解决 win10 安装 Abobe PR/AE 打不开或闪退
  • 淘宝客网站模板下载/引流推广
  • 青岛迅优网站建设/seo网站排名优化价格
  • 怎么可以找到做公益的网站/宁波seo快速优化课程
  • 织梦网站怎样做锚文本/游戏加盟
  • 网站建设 昆明/外贸网站建设优化推广
  • 中国建设银行企业信息门户网站/微信小程序开发流程