MySQL之Online DDL

从上面的介绍中我们得知,Copy重建表方式的DDL会阻塞DML操作。那么,不会阻塞DML操作的Online DDL又是怎么工作的,我们一起来揭晓。在MySQL 5.5版本之前,重建表都是通过Copy的方式来实现的。MySQL 5.6版本开始引入的Online DDL,对这个操作流程做了优化。具体的过程如下:

1、建立一个临时文件,扫描源表主键的所有数据页;<br>2、用数据页中源表的记录生成B+树,存储到临时文件中;<br>3、生成临时文件的过程中,将所有对源表的操作记录在一个日志文件(row log)中;<br>4、临时文件生成后,将日志文件中的操作应用到临时文件,得到一个逻辑数据上与源表相同的数据文件;<br>5、用临时文件替换源表的数据文件。
和Copy方式不同,由于日志文件记录和重放操作这个功能的存在,这个方案在重建表的过程中,允许对源表做增删改操作。这也就是Online DDL名字的来源。

MySQL之Online DDL-1