MySQL · 源码分析 · 原子DDL的实现过程

  1. 云栖社区>
  2. 阿里云数据库ApsaraDB>
  3. 博客>
  4. 正文

MySQL · 源码分析 · 原子DDL的实现过程

db匠 2018-03-22 09:00:03 浏览1598
展开阅读全文

众所周知,MySQL8.0之前的版本DDL是非原子的。也就是说对于复合的DDL,比如DROP TABLE t1, t2;执行过程中如果遇到server crash,有可能出现表t1被DROP掉了,但是t2没有被DROP掉的情况。即便是一条DDL,比如CREATE TABLE t1(a int);也可能在server crash的情况下导致建表不完整,有可能在建表失败的情况下遗留.frm或者.ibd文件。

上面情况出现的主要原因就是MySQL不支持原子的DDL。从图1可以看出,MySQL8.0以前,metadata在Server layer是存储在MyISAM引擎的系统表里,对于事务型引擎Innodb则自己存储一份metadata。这也导致MySQL存在如下一些弊端:

  1. metadata由于存储在Server layer以及存储引擎(这里

网友评论

登录后评论
0/500
评论
db匠
+ 关注
所属团队号: 阿里云数据库ApsaraDB