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 修复 bug
  • feat/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

  1. 打开:https://bugs.mysql.com/
  2. 筛选:
    • Verified 已确认
    • Open 开放
    • Small / Trivial 轻度问题
  3. 优先选:
    • 内存泄漏
    • 越界访问
    • 空指针
    • 语法解析小问题
    • 错误提示不友好
    • 测试用例缺失

8. PR 被打回常见原因(避坑指南)

  1. 一个 PR 只做一件事
    不要混:修复 + 格式化 + 加功能
  2. Commit 信息必须规范
    Fix #12345: xxxx
  3. 必须签 CLA
    第一次 PR 会自动提示
  4. 必须通过 CI
    编译失败、测试失败直接驳回
  5. 不要改无关代码
    不要乱改空格、换行、注释
  6. 要有测试
    能加单测尽量加
  7. 编码风格一致
    缩进、命名、括号风格

9. 完整贡献一句话总结

Fork → 克隆 → 添加上游 → 同步最新 → 开分支 → 修 Bug → 编译测试 → 提交推送 → 提 PR → 处理 Review → 合并 → 同步主分支。


Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐