表鎖和全域性鎖

2021-09-24 10:54:37 字數 757 閱讀 7066

目錄

鎖的作用:處理併發問題

鎖的分類:

全域性鎖表級鎖 行鎖

命令:flush tables with read lock (ftwrl) ,這個庫處理唯讀狀態

全庫邏輯備份問題:1、主庫備份,業務停擺  2、從庫備份,不能執行binlog,導致主從延遲(在不支援事物的引擎下可以使用)

有事務機制的備份:mysqldump single-transaction會先拿到一致性檢視

set global readonly=true,1、影響面更大  2、ftwrl如果客戶端發生異常斷開,mysql會釋放這個全域性鎖,set global會一直讓資料庫保持readonly狀態

表鎖 lock tables  表名 read/write 與ftwrl類似,可以用unlock tables釋放鎖。

元資料鎖(meta data lock mdl) 讀鎖不互斥,讀寫鎖之間、寫鎖之間互斥,給表加字段導致寫鎖,後面的事物(執行緒)被阻塞

小技巧:可以在information_schema中的表innodb_trx檢視執行的事物

拿不到mdl寫鎖就先放棄 alter table tbl_name nowait/wait add colum

兩階段鎖,事物中的sql語句的鎖,等到事物執行完畢才會釋放

死鎖:事物a等待事物b,事物b在等待事物a

死鎖檢測:innodb_deadlock_detect

死鎖自動釋放:innodb_lock_wait_timeout

全域性鎖 表鎖和行鎖

全域性鎖就是對整個資料庫例項加鎖,mysql提供了乙個加全域性讀鎖的方法,命令是flush tables with read lock。讓你需要讓整個庫處於唯讀狀態的時候,可以使用這個命令,之後其他執行緒的以下語句會被阻塞 a 資料更新語句 b 資料定義語句 c 更新類事務的提交語句 mysql裡面...

MySQL全域性鎖和表鎖

對整個資料庫加鎖,語句為 flush tables with read lock ftwrl 加鎖之後不可以進行增刪改,也不能做ddl,是乙個整庫唯讀的狀態,一般只有在做全庫邏輯備份時才需要全域性鎖。可以看到,如果採用這種方式對庫加鎖的話,雖然保證了一致性,但十分影響業務。所以,應該盡量少採用這種方...

全域性鎖和表鎖(6)

資料庫鎖的初衷 處理併發問題 全域性鎖 對整個資料庫例項加鎖。mysql提供了乙個加全域性讀鎖的方法 ftwrl flush tables with read lock,之後整個資料庫處於讀鎖狀態。使用場景 全庫邏輯備份,就是說把整庫每個表都select出來存成文字。這個庫變成唯讀狀態後 排他鎖,能...