文章目錄
- mysql按照鎖的粒度分類
- 全局鎖
- 概念:
- 全局鎖使用場景:
- 全局鎖備份案例:
mysql按照鎖的粒度分類
全局鎖
概念:
全局鎖就是對整個數據庫實例加鎖
。MySQL 提供了一個加全局讀鎖的方法,命令是:
Flush tables with read lock (FTWRL)。
當你需要讓整個庫處于只讀狀態的時候
,可以使用這個命令,之后其他線程的以下語句會被阻塞:數據更新語句(數據的增刪改)、數據定義語句(包括建表、修改表結構等)和更新類事務的提交語句。
,通俗的來說只能讀取,不能寫入,
解鎖命令:
unlock tables
全局鎖使用場景:
全局鎖的典型使用場景是,做全庫邏輯備份(mysqldump),對所有表進行鎖定,從而獲取一致性視圖,保證數據的完整性,一致性
全局鎖備份案例:
第一步:
使用命令
Flush tables with read lock
進行全局鎖表;
全局鎖表成功
:當所有所有表被鎖后,只能讀,無法寫
:
多個session測試:
第二步:
當全局鎖時,進行邏輯備份數據:
數據備份成功,
第三步:解鎖
解鎖命令:
unlock tables
解鎖成功后,數據庫就可以恢復正常的讀寫狀態
特點:
數據庫中加全局鎖,是一個比較重的操作,存在以下問題:
1、如果在主庫上備份,備份期間都不能執行更新。業務基本停止了
2、如果從庫上備份,備份期間從庫不能執行主庫同步過來的二進制日志會導致主從延遲
在innodb存儲引擎重,可以在備份的時候加上參數--single-transaction參數來完成不加鎖的一致性數據備份