什么是MDL鎖

MDL鎖(Metadata Lock),即元數(shù)據(jù)鎖。元數(shù)據(jù)指的是描述數(shù)據(jù)的數(shù)據(jù),對(duì)數(shù)據(jù)及信息資源的描述性信息,在 數(shù)據(jù)庫(kù) 中元數(shù)據(jù)即數(shù)據(jù)字典信息,包括db,table,function,procedure,trigger,event等。

MySQL從 5.5版本開始引入MDL鎖,MDL鎖主要為了保證元數(shù)據(jù)的一致性(主要是保證DDL操作與DML操作之間的一致性),用于處理不同線程操作同一元數(shù)據(jù)對(duì)象的同步與互斥問題,在各個(gè)業(yè)務(wù)場(chǎng)景中會(huì)十分頻繁地使用到。

具體而言,MySQL引入MDL鎖可以解決如下問題:一是事務(wù)隔離問題,比如在可重復(fù)讀隔離級(jí)別下,會(huì)話A在2次查詢期間,會(huì)話B對(duì)表結(jié)構(gòu)做了修改,2次查詢結(jié)果就會(huì)不一致,無法滿足可重復(fù)讀的要求。二是 數(shù)據(jù)復(fù)制 問題,比如會(huì)話A執(zhí)行了多條更新語句期間,另外一個(gè)會(huì)話B做了表結(jié)構(gòu)變更并且先提交,就會(huì)導(dǎo)致slave在重做時(shí),先重做alter,再重做update時(shí)就會(huì)出現(xiàn)復(fù)制錯(cuò)誤的現(xiàn)象。