简介:
MySQL5.6版本开始引入Online DDL
- 创建临时表:CREATE TABLE tmp_table_table LIKE table_name
- 变更临时表结构: ALTER TABLE tmp_table_table XXXX
- 全量拷贝数据:INSERT IGNORE INTO tmp_table_table (SELECT %s FROM table_name FORCE INDEX (%s) WHERE xxx
- 增量数据Binlog同步: UPDATE/INSERT/DELETE tmp_table_name
- 切换新旧表: RENAME TABLE table_name to old_tmp_table_table, tmp_table_name to table_name
需要注意的是alter语句启动的时候获取MDL写锁,写锁在数据拷贝之前降级成DML锁。也就是说onlineDDL也不是完全不锁表,只不过锁的时间很短。
阿里云官方对无锁结构变更的支持:

以上文档的可信度也是值得怀疑的谁写的代码还能没个bug?
MySQL官方文档摘录:
参考文档:
MySQL Online DDL Operations:
MySQL :: MySQL 8.0 Reference Manual :: 15.12.1 Online DDL Operations
阿里云无锁结构变更文档:
https://help.aliyun.com/document_detail/98373.html?spm=
执行过程思维导图: