偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

用實(shí)例帶你了解 MySQL 全局鎖

數(shù)據(jù)庫(kù) MySQL
當(dāng)數(shù)據(jù)庫(kù)處于全局鎖的狀態(tài)時(shí),其他線程的一下語(yǔ)句會(huì)被阻塞:數(shù)據(jù)更新語(yǔ)句(數(shù)據(jù)的增刪改)、數(shù)據(jù)定義語(yǔ)句(建表、索引變更、修改表結(jié)構(gòu)等)和更新類事務(wù)的提交語(yǔ)句。

 [[404004]]

本文轉(zhuǎn)載自微信公眾號(hào)「架構(gòu)精進(jìn)之路」,作者架構(gòu)精進(jìn)之路。轉(zhuǎn)載本文請(qǐng)聯(lián)系架構(gòu)精進(jìn)之路公眾號(hào)。

MySQL全局鎖會(huì)申請(qǐng)一個(gè)全局的讀鎖,對(duì)整個(gè)庫(kù)加鎖。

全局鎖的一般使用場(chǎng)景是:全局邏輯備份。

全局鎖的實(shí)現(xiàn)方式有兩種:

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

當(dāng)數(shù)據(jù)庫(kù)處于全局鎖的狀態(tài)時(shí),其他線程的一下語(yǔ)句會(huì)被阻塞:數(shù)據(jù)更新語(yǔ)句(數(shù)據(jù)的增刪改)、數(shù)據(jù)定義語(yǔ)句(建表、索引變更、修改表結(jié)構(gòu)等)和更新類事務(wù)的提交語(yǔ)句。

釋放全局鎖

  1. unlock tables; 

來個(gè)示例吧~

創(chuàng)建數(shù)據(jù)庫(kù) `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='測(cè)試'

插入數(shù)據(jù)

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

查看表數(shù)據(jù)

  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; 

新增數(shù)據(jù)

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

執(zhí)行 insert 操作后,直接返回錯(cuò)誤結(jié)果:

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

執(zhí)行查詢操作,可以正常返回結(jié)果:

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

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

官方自帶的邏輯備份工具是 mysqldump。當(dāng) mysqldump 使用參數(shù)–single-transaction 的時(shí)候,導(dǎo)數(shù)據(jù)之前就會(huì)啟動(dòng)一個(gè)事務(wù),來確保拿到一致性視圖。而由于 MVCC 的支持,這個(gè)過程中數(shù)據(jù)是可以正常更新的。

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

一致性讀是好,但前提是引擎要支持這個(gè)隔離級(jí)別。

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

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

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

用 FTWRL 而不用 set global readonly = true

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

 

責(zé)任編輯:武曉燕 來源: 架構(gòu)精進(jìn)之路
相關(guān)推薦

2020-02-06 10:02:45

MySQL數(shù)據(jù)庫(kù)全局鎖

2018-03-20 12:48:58

數(shù)據(jù)庫(kù)MySQL變量配置

2018-09-04 16:20:46

MySQ索引數(shù)據(jù)結(jié)構(gòu)

2024-11-29 07:38:12

MySQL數(shù)據(jù)庫(kù)

2022-09-26 11:30:40

MQTT協(xié)議客戶端協(xié)議

2019-09-27 09:40:06

ElvishShellLinux

2010-07-05 16:20:32

NetBEUI協(xié)議

2018-09-17 16:30:24

數(shù)據(jù)庫(kù)MySQL小技巧

2020-08-31 10:48:11

MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)技巧

2021-05-25 05:25:24

MySQL數(shù)據(jù)庫(kù)

2020-12-31 12:16:49

SAP云計(jì)算SAP產(chǎn)品

2021-02-03 16:22:43

新基建SAP

2021-05-31 14:22:56

物聯(lián)網(wǎng)物聯(lián)網(wǎng)安全

2010-09-02 16:59:35

資源預(yù)留協(xié)議

2021-12-10 10:29:07

在線客服系統(tǒng)

2019-11-05 10:18:04

RPM包RPMLinux

2022-10-24 00:33:59

MySQL全局鎖行級(jí)鎖

2022-07-20 08:06:57

MySQL表鎖Innodb

2021-11-26 08:07:16

MySQL SQL 語(yǔ)句數(shù)據(jù)庫(kù)

2022-10-24 08:02:14

MySQL索引類型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)