MySQL全域性鎖和表鎖

2021-10-04 23:49:43 字數 849 閱讀 8716

對整個資料庫加鎖,語句為:flush tables with read lock (ftwrl),加鎖之後不可以進行增刪改,也不能做ddl,是乙個整庫唯讀的狀態,一般只有在做全庫邏輯備份時才需要全域性鎖。可以看到,如果採用這種方式對庫加鎖的話,雖然保證了一致性,但十分影響業務。所以,應該盡量少採用這種方法,在資料的隔離級別中,可重複讀也保證了在乙個事務中所看到的資料是一致的,mysql官方提供的mysqldump工具中就提供了–single-transaction引數實現一致性讀,但是注意,這是需要儲存引擎支援的~,對於myisam引擎還是只能採用上面的全域性鎖,全域性鎖的核心思想上是讓資料庫唯讀,也可以通過set global readonly=true命令來實現(但是這個命令影響範圍更大,且客戶端異常時並不會自動釋放唯讀狀態)。

一共分為兩種:表鎖和元資料鎖(mdl)

表鎖:lock tables +表名 read/write

元資料鎖:無需顯式使用,自動加上,分為mdl讀鎖、mdl寫鎖,讀鎖之間可以共享,讀鎖與寫鎖互斥,寫鎖之間也互斥。事務中的mdl鎖,在語句執行開始時申請,但是語句結束後並不會馬上釋放,而會等到整個事務提交後再釋放

在對錶結構進行修改時,要十分小心,要先檢視是否有長事務,先kill掉,否則有可能阻塞住表上的查詢。為了避免這一問題,可以在alter t上增加時間限制alter table tbl_name nowait add column ...alter table tbl_name wait n add column ...

mysql實戰45講

表鎖和全域性鎖

目錄 鎖的作用 處理併發問題 鎖的分類 全域性鎖表級鎖 行鎖 命令 flush tables with read lock ftwrl 這個庫處理唯讀狀態 全庫邏輯備份問題 1 主庫備份,業務停擺 2 從庫備份,不能執行binlog,導致主從延遲 在不支援事物的引擎下可以使用 有事務機制的備份 my...

全域性鎖 表鎖和行鎖

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

MySQL 全域性鎖 表鎖以及行鎖

mysql 5.7.25 ubuntu 16.04 全域性鎖即對整個資料庫例項加鎖,使得整個庫處於唯讀狀態,會阻塞dml和ddl語句。使用如下命令 簡稱ftwrl 可為資料庫加全域性鎖 flush tables with read lock 釋放全域性鎖命令如下 unlock tables 此外,在...