MySQL 源码贡献 · 完整手册(终极版)
·
1. 完整贡献流程(从 Fork 到合并)
1.1 Fork 官方仓库
- 打开:https://github.com/mysql/mysql-server
- 右上角 Fork → 到你自己 GitHub
1.2 克隆到本地
git clone https://github.com/你的用户名/mysql-server.git
cd mysql-server
1.3 添加上游仓库(同步官方)
git remote add upstream https://github.com/mysql/mysql-server.git
git remote -v
1.4 每次开发前:同步最新代码
git fetch upstream
git checkout main
git merge upstream/main
git push origin main
1.5 创建开发分支(必须开新分支)
git checkout -b fix/bug-12345-memory-leak
命名规范:
fix/xxx修复 bugfeat/xxx新增功能refactor/xxx重构docs/xxx文档
1.6 开发、修复、测试
1.7 提交
git add .
git commit -m "Fix #12345: 修复 XXXX 问题"
1.8 推送到你的仓库
git push origin fix/bug-12345-memory-leak
1.9 提交 PR
GitHub 页面点 Compare & pull request
1.10 处理 Review 修改
# 修改后
git add .
git commit --amend
git push -f origin 你的分支名
1.11 官方合并后,同步回自己 main
git checkout main
git fetch upstream
git merge upstream/main
git push origin main
2. 本地编译一键脚本(Linux)
2.1 安装依赖(Ubuntu/Debian)
sudo apt update
sudo apt install -y build-essential cmake bison libncurses5-dev libssl-dev libboost-all-dev git
2.2 编译脚本 build.sh
#!/bin/bash
set -e
cd $(dirname $0)
mkdir -p build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=../install \
-DMYSQL_DATADIR=../data \
-DSYSCONFDIR=../etc \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DWITH_BOOST=../boost \
-DWITH_SSL=system \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=all
make -j$(nproc)
make install
echo "编译完成!产物在 ../install"
使用:
chmod +x build.sh
./build.sh
3. PR 描述模板(直接复制)
## Summary
Fix #Bug编号: 一句话说明本次修复
## Problem
- 问题场景
- 复现步骤
- 影响范围
## Root Cause
- 根本原因(逻辑/边界/内存/并发等)
## Solution
- 修改了哪些函数/文件
- 修复逻辑
- 不影响原有功能
## Test Case
- 本地编译通过
- 相关测试用例通过
- 手动验证修复生效
## Related
- Bug #:
- Related PR:
4. Git 贡献速查表(收藏)
日常开发
git status
git add .
git commit -m "信息"
git push origin 分支名
同步上游
git fetch upstream
git checkout main
git merge upstream/main
git push origin main
修改后合并提交
git commit --amend
git push -f origin 分支名
放弃本地修改
git checkout -- 文件
git reset --hard HEAD
查看日志
git log --oneline
5. MySQL 源码目录结构(快速定位)
mysql-server/
├── build/ # 编译目录
├── client/ # 客户端命令(mysql、mysqldump)
├── sql/ # 核心服务端(最常改)
│ ├── sql_parse.cc
│ ├── sql_executor.cc
│ ├── handler.cc
│ └── lock.cc
├── storage/ # 存储引擎(InnoDB、MyISAM)
│ └── innobase/
├── include/ # 头文件
├── scripts/ # 脚本
├── unittest/ # 单元测试
└── Docs/ # 文档
新手优先改:
sql/语法、执行器、权限client/命令行工具- 简单 bug、日志、边界判断
6. GDB 调试 MySQL 常用命令
启动调试
cd build
gdb ../install/bin/mysqld
GDB 常用
run # 启动
break main # 断点
break sql_parse.cc:1234
next # 下一步
step # 进入函数
print 变量 # 查看变量
backtrace # 栈
continue # 继续
quit # 退出
7. 新手如何找适合修复的 Bug
- 打开:https://bugs.mysql.com/
- 筛选:
- Verified 已确认
- Open 开放
- Small / Trivial 轻度问题
- 优先选:
- 内存泄漏
- 越界访问
- 空指针
- 语法解析小问题
- 错误提示不友好
- 测试用例缺失
8. PR 被打回常见原因(避坑指南)
- 一个 PR 只做一件事
不要混:修复 + 格式化 + 加功能 - Commit 信息必须规范
Fix #12345: xxxx - 必须签 CLA
第一次 PR 会自动提示 - 必须通过 CI
编译失败、测试失败直接驳回 - 不要改无关代码
不要乱改空格、换行、注释 - 要有测试
能加单测尽量加 - 编码风格一致
缩进、命名、括号风格
9. 完整贡献一句话总结
Fork → 克隆 → 添加上游 → 同步最新 → 开分支 → 修 Bug → 编译测试 → 提交推送 → 提 PR → 处理 Review → 合并 → 同步主分支。
更多推荐




所有评论(0)