MySQL Online DDL 详解:香港服务器如何做到业务不中断的数据库修改?

日常数据库管理中,DDL(数据定义语言)是不可或缺的一部分,尤其在使用 香港服务器 搭建高可用数据库时,掌握 DDL 对性能的影响尤为重要。本文将带你系统了解 DDL 的分类、Online DDL 的原理及注意事项。


📌 什么是 DDL?

DDL(Data Definition Language) 主要用于定义数据库结构,如:

  • 表(Table)
  • 索引(Index)
  • 视图(View)
  • 约束(Constraint)

常见命令包括:

CREATE / ALTER / DROP / TRUNCATE

与之相对的是 DML(Data Manipulation Language),例如 INSERTUPDATEDELETE 等,用于对数据内容进行操作。


🚫 MySQL 5.6 之前:DDL 会锁表!

MySQL 5.6 之前,所有的 ALTER TABLE 操作都会阻塞 DML 操作,也就是说:

  • 添加/删除字段
  • 添加/删除索引

都会锁表,影响线上业务的稳定性。


✅ MySQL 5.6 起:引入 Online DDL

Online DDL 是从 MySQL 5.6 开始引入的一种优化机制,目标是尽量在不阻塞 DML 操作的情况下完成 DDL 变更。

不过要注意:

“尽量不阻塞” ≠ “完全不阻塞”

  • Online DDL 的开始和结束阶段仍然会短暂加锁(MDL)
  • 如果表上存在未提交事务,仍可能导致 DDL 阻塞
  • 长时间运行的 Online DDL 可能带来主从延迟
  • 如果操作失败,回滚成本高

📌 所以,即使是 Online DDL,也不建议在业务高峰期进行表结构变更!


⚙️ MySQL 支持的 DDL 算法一览

可以通过如下方式为 ALTER 操作显式指定算法:

ALTER TABLE 表名 ADD COLUMN 字段名 类型, ALGORITHM=INPLACE, LOCK=NONE;

1️⃣ COPY 算法(传统方式)

操作流程:

  1. 创建临时表
  2. 将原表数据复制过去
  3. 删除原表,重命名临时表

❗缺点:全程加锁,阻塞读写,耗时较长


2️⃣ INPLACE 算法(MySQL 5.5 引入)

  • 利用“原地修改”方式进行表结构变更,尽量避免复制表
  • 对索引操作特别高效

细分为两类:

  • inplace-no-rebuild:如添加普通索引、修改字段名
  • inplace-rebuild:如添加主键、删除字段、修改字符集(仍需重建表)

3️⃣ INSTANT 算法(MySQL 8.0.12 引入)

  • 最新最优的算法,支持即时变更元数据
  • 无需重建表,无需复制数据

目前支持的操作较少,如:

  • 添加列
  • 修改列默认值

📌 未指定 ALGORITHM 时,MySQL 默认优先选择: INSTANT → INPLACE → COPY


🔍 Online DDL 的完整执行流程

Online DDL 执行可分为三个阶段:

🔷 1. Prepare 阶段

  1. 创建临时表结构(frm 文件)
  2. 加 EXCLUSIVE MDL 锁(禁止读写,时间很短)
  3. 判断执行方式(COPY、inplace-rebuild、inplace-no-rebuild)
  4. 分配 row_log,记录执行过程中的 DML 变更
  5. 创建临时数据文件(ibd)

🔷 2. Execute 阶段(主要耗时)

  1. 降级为 SHARED MDL 锁(允许读写)
  2. 遍历原表记录,处理聚簇和二级索引
  3. 将索引数据插入排序缓冲区
  4. 将变更记录同步到新表索引中
  5. 应用 row_log 中记录的 DML 操作,确保数据一致

🔷 3. Commit 阶段

  1. 再次加 EXCLUSIVE MDL 锁
  2. 重新应用最后一批 row_log 中的增量数据
  3. 更新数据字典
  4. 重命名临时表文件,完成结构替换
  5. 提交事务、写入 redo log
  6. 更新统计信息,释放锁

📊 总结:选择正确的 DDL 算法很重要!

操作类型 推荐算法 是否重建表 是否阻塞 DML
添加普通索引 INPLACE
添加列(MySQL 8.0) INSTANT
删除字段 inplace-rebuild 否(大部分时间)
修改主键 COPY 或 inplace-rebuild 是(部分时间)

📌 如果你正在使用香港服务器部署数据库系统,建议优先升级 MySQL 至 8.0+,以支持更多 Online DDL 优化特性,提升变更效率,减少对业务的影响。

THE END