MySQL5.6 CREATE TABLE源码分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL5.6 CREATE TABLE源码分析相关的知识,希望对你有一定的参考价值。

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

从原理流程图中可以看出,create table先创建.frm文件,再调用ha_create_table创建ibd文件,如果创建成功则退出,否则将之前创建的frm文件删除。但是这里就有问题了,如果创建完frm文件后,server挂了,那么frm文件是创建成功了,但是ibd文件没有创建。这就是DDL非原子性导致的后果。

以上是关于MySQL5.6 CREATE TABLE源码分析的主要内容,如果未能解决你的问题,请参考以下文章

SQL 优化经历:从 30248秒到 0.001秒的经历

mysql错误[ERROR] Missing system table mysql.proxies_priv

mysql5.6源码安装

CentOS 6.5 源码安装MySQL5.6.26

mysql5.6占用内存大,通过state优化

mysql5.6占用内存大,通过state优化