成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用實例帶你了解 MySQL 全局鎖

數據庫 MySQL
當數據庫處于全局鎖的狀態時,其他線程的一下語句會被阻塞:數據更新語句(數據的增刪改)、數據定義語句(建表、索引變更、修改表結構等)和更新類事務的提交語句。

 [[404004]]

本文轉載自微信公眾號「架構精進之路」,作者架構精進之路。轉載本文請聯系架構精進之路公眾號。

MySQL全局鎖會申請一個全局的讀鎖,對整個庫加鎖。

全局鎖的一般使用場景是:全局邏輯備份。

全局鎖的實現方式有兩種:

  1. //第一種方法 
  2. Flush tables with read lock(FTWRL) 
  3. //第二種方法 
  4. set global readonly=true 

當數據庫處于全局鎖的狀態時,其他線程的一下語句會被阻塞:數據更新語句(數據的增刪改)、數據定義語句(建表、索引變更、修改表結構等)和更新類事務的提交語句。

釋放全局鎖

  1. unlock tables; 

來個示例吧~

創建數據庫 `test`

  1. CREATE TABLE `test` ( 
  2.   `namevarchar(32) NOT NULL DEFAULT ''
  3.   `bid` int(10) unsigned NOT NULL DEFAULT '0' 
  4. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='測試'

插入數據

  1. insert into test values('A', 1), ('B',2),('C',3); 

查看表數據

  1. select * from test; 
  2. +------+-----+ 
  3. name | bid | 
  4. +------+-----+ 
  5. | A    |   1 | 
  6. | B    |   2 | 
  7. | C    |   3 | 
  8. +------+-----+ 

加鎖

  1. flush tables with read lock; 

新增數據

  1. insert into test values('D', 4); 

執行 insert 操作后,直接返回錯誤結果:

  1. ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock 

執行查詢操作,可以正常返回結果:

  1. select * from test; 
  2.  
  3. #返回結果: 
  4. +------+-----+ 
  5. name | bid | 
  6. +------+-----+ 
  7. | A | 1 | 
  8. | B | 2 | 
  9. | C | 3 | 
  10. +------+-----+ 

可以看到,當我們加上全局鎖的時候,數據及表更新操作都沒辦法執行,但表查詢不受影響。這樣會給我們的業務造成很大的影響(無法修改數據),索性 Innodb 引擎的可重復讀隔離級別可以讓我們不阻塞數據變更的同時導出數據。

官方自帶的邏輯備份工具是 mysqldump。當 mysqldump 使用參數–single-transaction 的時候,導數據之前就會啟動一個事務,來確保拿到一致性視圖。而由于 MVCC 的支持,這個過程中數據是可以正常更新的。

你一定在疑惑,有了這個功能,為什么還需要 FTWRL 呢?

一致性讀是好,但前提是引擎要支持這個隔離級別。

比如,對于 MyISAM 這種不支持事務的引擎,如果備份過程中有更新,總是只能取到最新的數據,那么就破壞了備份的一致性。這時,我們就需要使用 FTWRL 命令了。

single-transaction 方法只適用于所有的表使用事務引擎的庫。

如果有的表使用了不支持事務的引擎,那么備份就只能通過 FTWRL 方法。這往往是 DBA 要求業務開發人員使用 InnoDB 替代 MyISAM 的原因之一。

用 FTWRL 而不用 set global readonly = true

  • 在有些系統中,readonly 的值會被用來做其他邏輯,比如用來判斷一個庫是主庫還是備庫。因此,修改 global 變量的方式影響面更大,我不建議你使用。
  • 在異常處理機制上有差異。如果執行 FTWRL 命令之后由于客戶端發生異常斷開,那么 MySQL 會自動釋放這個全局鎖,整個庫回到可以正常更新的狀態。而將整個庫設置為 readonly 之后,如果客戶端發生異常,則數據庫就會一直保持 readonly 狀態,這樣會導致整個庫長時間處于不可寫狀態,風險較高。

 

責任編輯:武曉燕 來源: 架構精進之路
相關推薦

2020-02-06 10:02:45

MySQL數據庫全局鎖

2024-11-29 07:38:12

MySQL數據庫

2018-03-20 12:48:58

數據庫MySQL變量配置

2018-09-04 16:20:46

MySQ索引數據結構

2018-09-17 16:30:24

數據庫MySQL小技巧

2020-08-31 10:48:11

MySQL數據庫數據庫技巧

2021-05-25 05:25:24

MySQL數據庫

2022-09-26 11:30:40

MQTT協議客戶端協議

2019-09-27 09:40:06

ElvishShellLinux

2010-07-05 16:20:32

NetBEUI協議

2022-07-20 08:06:57

MySQL表鎖Innodb

2022-10-24 00:33:59

MySQL全局鎖行級鎖

2022-10-24 08:02:14

MySQL索引類型

2021-11-26 08:07:16

MySQL SQL 語句數據庫

2020-12-31 12:16:49

SAP云計算SAP產品

2021-02-03 16:22:43

新基建SAP

2021-05-31 14:22:56

物聯網物聯網安全

2010-09-02 16:59:35

資源預留協議

2019-11-05 10:18:04

RPM包RPMLinux

2021-12-10 10:29:07

在線客服系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲黄色网址视频 | 国产免费xxx| 国产高清毛片 | 精品一区二区视频 | 成人在线影视 | 精品国产一区二区三区四区在线 | 91精品国产综合久久福利软件 | 亚洲精品视频在线播放 | 91国产精品在线 | 久久6视频 | 在线观看成人小视频 | 国产精品激情 | 免费福利视频一区二区三区 | 国产成人99久久亚洲综合精品 | 天天澡天天操 | 亚洲精品乱码久久久久久蜜桃 | 久草视频在线播放 | 四虎永久免费在线 | 国产成人精品一区二区三区在线 | 亚洲成网站 | 九九视频网 | 99re| 一区二区精品电影 | 九九av | 日日夜夜精品 | 成人精品一区二区户外勾搭野战 | 国产免费一区二区 | 久久精品久久综合 | 精品国产视频 | 中文字幕视频三区 | 亚洲精品www | 日韩一区二区三区av | 看特级黄色片 | 日韩一区二区三区在线 | 超碰操| 91久久精品一区二区二区 | 国产小视频在线 | 日韩一级免费电影 | 成人av一区 | 欧美一区二 | 91av在线电影 |