MySQL全局鎖庫鎖表

      網友投稿 876 2025-04-03

      1、全局讀鎖定:

      FLUSH TABLES WITH READ LOCK ;

      執行了命令之后所有庫所有表都被鎖定只讀,一般用在數據庫聯機備份,這個時候數據庫的寫操作將被阻塞,讀操作順利進行。

      解鎖:

      UNLOCK TABLES ;

      2、全局表級別鎖定:

      LOCK TABLES tbl_name ; #不影響其他表的寫操作

      解鎖也是:

      UNLOCK TABLES ;

      MySQL全局鎖庫鎖表

      這兩個語句在執行的時候都需要注意個特點,就是隱式提交的語句,在退出Mysql終端的時候都會隱式的執行unlock tables,也就是如果要讓表鎖定生效就必須一直保持對話。

      read-lock: 允許其他并發的讀請求,但阻塞寫請求,即可以同時讀,但不允許任何寫。也叫共享鎖

      write-lock: 不允許其他并發的讀和寫請求,是排他的(exclusive)。也叫獨占鎖

      設置Mysql為只讀模式

      在MySQL數據庫中,在進行數據遷移和從庫只讀狀態設置時,都會涉及到只讀狀態和Master-slave的設置和關系。

      對于MySQL單實例數據庫和master庫,如果需要設置為只讀狀態,需要進行如下操作和設置:

      mysql> show global variables like "%read_only%";

      mysql> flush tables with read lock;

      mysql> set global read_only=1;

      mysql> show global variables like "%read_only%";

      將MySQL從只讀設置為讀寫狀態的命令:

      mysql> unlock tables;

      mysql> set global read_only=0;

      mysql> set global read_only=1;

      將salve庫從只讀狀態變為讀寫狀態,需要執行的命令是:

      mysql> set global read_only=0;

      對于數據庫讀寫狀態,主要靠 “read_only”全局參數來設定;默認情況下,數據庫是用于讀寫操作的,所以read_only參數也是0或faluse狀態,這時候不論是本地用戶還是遠程訪問數據庫的用戶,都可以進行讀寫操作;如需設置為只讀狀態,將該read_only參數設置為1或TRUE狀態,但設置 read_only=1 狀態有兩個需要注意的地方:

      1.read_only=1只讀模式,不會影響slave同步復制的功能,所以在MySQL slave庫中設定了read_only=1后,通過 show slave statusG 命令查看salve狀態,可以看到salve仍然會讀取master上的日志,并且在slave庫中應用日志,保證主從數據庫同步一致;

      2.read_only=1只讀模式,可以限定普通用戶進行數據修改的操作,但不會限定具有super權限的用戶的數據修改操作;在MySQL中設置read_only=1后,普通的應用用戶進行insert、update、delete等會產生數據變化的DML操作時,都會報出數據庫處于只讀模式不能發生數據變化的錯誤,但具有super權限的用戶,例如在本地或遠程通過root用戶登錄到數據庫,還是可以進行數據變化的DML操作;

      為了確保所有用戶,包括具有super權限的用戶也不能進行讀寫操作,就需要執行給所有的表加讀鎖的命令

      flush tables with read lock;

      這樣使用具有super權限的用戶登錄數據庫,想要發生數據變化的操作時,也會提示表被鎖定不能修改的報錯。

      這樣通過 設置

      read_only=1;

      flush tables with read lock;

      兩條命令,就可以確保數據庫處于只讀模式,不會發生任何數據改變,在MySQL進行數據庫遷移時,限定master主庫不能有任何數據變化,就可以通過這種方式來設定。

      但同時由于加表鎖的命令對數據庫表限定非常嚴格,如果再slave從庫上執行這個命令后,slave庫可以從master讀取binlog日志,但不能夠應用日志,slave庫不能發生數據改變,當然也不能夠實現主從同步了,這時如果使用

      unlock tables;

      解除全局的表讀鎖,slave就會應用從master讀取到的binlog日志,繼續保證主從庫數據庫一致同步。

      為了保證主從同步可以一直進行,在slave庫上要保證具有super權限的root等用戶只能在本地登錄,不會發生數據變化,其他遠程連接的應用用戶只按需分配為select,insert,update,delete等權限,保證沒有super權限,則只需要將salve設定

      set global read_only=1;

      模式,即可保證主從同步,又可以實現從庫只讀。

      相對的,設定“read_only=1”只讀模式開啟的解鎖命令為設定

      set global read_only=0;

      設定全局鎖

      flush tables with read lock;

      對應的解鎖模式命令為:

      unlock tables;

      當然設定了

      set global read_only=1;

      后,所有的select查詢操作都是可以正常進行的。

      MySQL 數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:SUBSTITUTE是什么函數(substitute函數什么意思)
      下一篇:頁眉頁腳距離(頁眉頁腳距離邊界怎么設置
      相關文章
      亚洲精品午夜无码专区| 亚洲精品美女久久久久99| 久久精品蜜芽亚洲国产AV| 亚洲中文字幕无码一区二区三区| 亚洲jizzjizz少妇| 亚洲第一成年网站视频| 中文有码亚洲制服av片| 亚洲最大天堂无码精品区| 亚洲影院天堂中文av色| 亚洲人AV在线无码影院观看| 亚洲精品久久无码av片俺去也 | 亚洲中文字幕乱码熟女在线| 最新国产精品亚洲| 亚洲色www永久网站| 亚洲av无码专区在线电影 | 亚洲AV无码资源在线观看| 久久精品国产亚洲AV天海翼| 亚洲AV成人无码网站| 国产亚洲精品欧洲在线观看| 亚洲国产精品丝袜在线观看| 狠狠亚洲狠狠欧洲2019| 亚洲精品夜夜夜妓女网| 亚洲精品自产拍在线观看动漫| 亚洲a在线视频视频| 亚洲精品乱码久久久久久下载| 亚洲日韩乱码中文无码蜜桃 | 国产日产亚洲系列| 亚洲av无码一区二区三区网站| 香蕉视频在线观看亚洲| 亚洲理论片在线中文字幕| 亚洲三级在线视频| 亚洲精品欧美综合四区| 亚洲av无码不卡私人影院| 亚洲尤码不卡AV麻豆| 亚洲va在线va天堂va888www| 亚洲人成日本在线观看| 亚洲色大成WWW亚洲女子| 亚洲国产精品成人一区| 亚洲AV无码专区国产乱码电影| 亚洲综合色一区二区三区小说| 亚洲一卡2卡3卡4卡国产网站|