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),例如 INSERT
、UPDATE
、DELETE
等,用于对数据内容进行操作。
🚫 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 算法(传统方式)
操作流程:
- 创建临时表
- 将原表数据复制过去
- 删除原表,重命名临时表
❗缺点:全程加锁,阻塞读写,耗时较长
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 阶段
- 创建临时表结构(frm 文件)
- 加 EXCLUSIVE MDL 锁(禁止读写,时间很短)
- 判断执行方式(COPY、inplace-rebuild、inplace-no-rebuild)
- 分配
row_log
,记录执行过程中的 DML 变更 - 创建临时数据文件(ibd)
🔷 2. Execute 阶段(主要耗时)
- 降级为 SHARED MDL 锁(允许读写)
- 遍历原表记录,处理聚簇和二级索引
- 将索引数据插入排序缓冲区
- 将变更记录同步到新表索引中
- 应用 row_log 中记录的 DML 操作,确保数据一致
🔷 3. Commit 阶段
- 再次加 EXCLUSIVE MDL 锁
- 重新应用最后一批 row_log 中的增量数据
- 更新数据字典
- 重命名临时表文件,完成结构替换
- 提交事务、写入 redo log
- 更新统计信息,释放锁
📊 总结:选择正确的 DDL 算法很重要!
操作类型 | 推荐算法 | 是否重建表 | 是否阻塞 DML |
---|---|---|---|
添加普通索引 | INPLACE | 否 | 否 |
添加列(MySQL 8.0) | INSTANT | 否 | 否 |
删除字段 | inplace-rebuild | 是 | 否(大部分时间) |
修改主键 | COPY 或 inplace-rebuild | 是 | 是(部分时间) |
📌 如果你正在使用香港服务器部署数据库系统,建议优先升级 MySQL 至 8.0+,以支持更多 Online DDL 优化特性,提升变更效率,减少对业务的影响。
版权声明:
作者:后浪云
链接:https://www.idc.net/help/441373/
文章版权归作者所有,未经允许请勿转载。
THE END