MySQL5.6 create table原理分析

yzs87發表於2018-05-13

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非原子性導致的後果。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31493717/viewspace-2154424/,如需轉載,請註明出處,否則將追究法律責任。

相關文章