華為云計算 云知識 什么是MDL鎖
什么是MDL鎖

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

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

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