起因
公司的用Yearning SQL 用作线上的 DDL 工具,该工具由于关闭支持外键,从而触发 mysql 更改表自动更换外键约束表名的问题,从而导致事故。
原由
先看下这个工具执行 DDL 的原理。
-
- 复制原表,新表命名方式:“_”+原表名+“_new”
-
- 在新表上进行DDL操作
-
- 在原表上创建触发器,将原表上的增删改操作同步至新表
-
- 分批次复制原表数据至新表
-
- 数据追上以后,原表新表互换表名,此处锁表。原表更名为:“_”+原表名+“_old”
-
- 删除原表
-
- 删除触发器
分析
第5步当重命名表名时,mysql 会自动将外键约束表名更改掉。导致这一步不可逆。
总结
当采用一些工具来 DDL 时,如果采用表替代方案,千万记得查看是否有外键约束。否则造成线上事故吃瓜蒌。