作為一名DBA,對數(shù)據(jù)庫進(jìn)行DDL操作非常多,如添加索引,添加字段等等。對于MySQL數(shù)據(jù)庫,DDL支持的并不是很好,一不留心就導(dǎo)致了全表被鎖,經(jīng)常搞得剛?cè)腴T小伙伴很郁悶又無辜,不是說MySQL支持Online DDL么,不是說不會(huì)鎖表的么?是的,令人高興的是從MySQL5.6開始就支持部分DDL Online操作了,但并不是全部喔,今天這里就對我們常用的DDL進(jìn)行總結(jié)和說明,讓操作DDL的小伙伴從此做到心中有數(shù),得心應(yīng)手,讓老板們再也不用擔(dān)心我們做DDL咯。
我自己遵守的一條黃金準(zhǔn)則:DDL永遠(yuǎn)不要在業(yè)務(wù)高峰期間執(zhí)行。
環(huán)境說明:本次的測試服務(wù)器配置如下
CPU:32 cores MEM:128G DISK: SSD(固態(tài)硬盤) MySQL版本:5.6.27以上
一、MySQL執(zhí)行DDL原理
MySQL各版本,對于DDL的處理方式是不同的,主要有三種:
Copy Table方式: 這是InnoDB最早支持的方式。顧名思義,通過臨時(shí)表拷貝的方式實(shí)現(xiàn)的。新建一個(gè)帶有新結(jié)構(gòu)的臨時(shí)表,將原表數(shù)據(jù)全