真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

mysqldump與innobackupex備份過(guò)程你知多少(二)

沃趣科技  羅小波


創(chuàng)新互聯(lián)公司"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營(yíng)銷(xiāo),產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動(dòng)網(wǎng)絡(luò)一網(wǎng)打盡,滿(mǎn)足企業(yè)的營(yíng)銷(xiāo)需求!創(chuàng)新互聯(lián)公司具備承接各種類(lèi)型的成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)項(xiàng)目的能力。經(jīng)過(guò)10余年的努力的開(kāi)拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶(hù)的一致好評(píng)。

1.2.3. 使用WITH CONSISTENT SNAPSHOT子句的作用

START TRANSACTION語(yǔ)句使用WITH CONSISTENT SNAPSHOT子句時(shí),會(huì)為事務(wù)啟動(dòng)一致性讀(該子句僅適用于InnoDB)。其行為與執(zhí)行START TRANSACTION語(yǔ)句之后+一個(gè)SELECT語(yǔ)句效果相同(會(huì)獲取一個(gè)事務(wù)號(hào),在read view中占個(gè)坑,但是不會(huì)請(qǐng)求任何鎖)。WITH CONSISTENT SNAPSHOT子句不會(huì)自動(dòng)修改當(dāng)前的事務(wù)隔離級(jí)別,由于WITH CONSISTENT SNAPSHOT子句要求必須RR隔離級(jí)別下才會(huì)自動(dòng)啟用,因此只有當(dāng)前隔離級(jí)別為RR時(shí)才會(huì)啟用一致性快照,非RR隔離級(jí)別下,會(huì)忽略WITH CONSISTENT SNAPSHOT子句。從MySQL 5.7.2起,當(dāng)WITH CONSISTENT SNAPSHOT子句被忽略時(shí),會(huì)產(chǎn)生一個(gè)警告(類(lèi)似上一篇mysqldump與innobackupex備份過(guò)程你知多少(一)提到的警告信息)。

為了使得更清晰地了解mysqldump在備份過(guò)程中使用WITH CONSISTENT SNAPSHOT子句的作用,下面咱們來(lái)演示一下帶與不帶WITH CONSISTENT SNAPSHOT子句會(huì)發(fā)生什么?

  • 開(kāi)啟兩個(gè)會(huì)話(huà),操作同一張表

mysqldump與innobackupex備份過(guò)程你知多少(二)

mysqldump與innobackupex備份過(guò)程你知多少(二)

mysqldump與innobackupex備份過(guò)程你知多少(二)

mysqldump與innobackupex備份過(guò)程你知多少(二)

mysqldump與innobackupex備份過(guò)程你知多少(二)

mysqldump與innobackupex備份過(guò)程你知多少(二)

mysqldump與innobackupex備份過(guò)程你知多少(二)

從上面的表格對(duì)比結(jié)果中可以看到:

  • WITH CONSISTENT SNAPSHOT子句的作用就相當(dāng)于START TRANSACTION+ SELECT語(yǔ)句,目地是為了在開(kāi)啟事務(wù)的那一刻往mvcc的read view中立即加入這個(gè)事務(wù),就好像read view在事務(wù)一開(kāi)始就被固定了一樣,使得后續(xù)其他事務(wù)的DML不會(huì)影響到該事務(wù)的查詢(xún)結(jié)果,這就是所說(shuō)的一致性讀

  • 如果不使用WITH CONSISTENT SNAPSHOT子句,在使用START TRANSACTION語(yǔ)句顯式開(kāi)啟一個(gè)事務(wù)之后,在執(zhí)行SELECT語(yǔ)句之前,這段時(shí)間內(nèi)如果有別的事務(wù)發(fā)起了DML操作,就會(huì)導(dǎo)致該事務(wù)查詢(xún)?cè)摫淼臅r(shí)候讀取的數(shù)據(jù)與事務(wù)開(kāi)始時(shí)間點(diǎn)不一致。

1.2.4. 使用savepoint來(lái)設(shè)置回滾點(diǎn)的作用

大家都知道,設(shè)置SAVEPOINT是為了回滾在設(shè)置這個(gè)點(diǎn)時(shí)候發(fā)生變更的數(shù)據(jù),但是mysqldump備份只是使用select語(yǔ)句做查詢(xún),為什么要使用savepoint呢?需要回滾什么呢?請(qǐng)看下文分析:

  • SAVEPOINT 'identifier' 語(yǔ)句,為事務(wù)設(shè)置一個(gè)命名的事務(wù)保存點(diǎn)(回滾點(diǎn)),該字符串為事務(wù)保存點(diǎn)的標(biāo)識(shí)符。

  • ROLLBACK TO SAVEPOINT 語(yǔ)句的作用是將事務(wù)回滾到指定的保存點(diǎn)的位置,而不終止事務(wù)。當(dāng)前事務(wù)在回滾點(diǎn)之后的修改的行數(shù)據(jù)將被撤銷(xiāo)(注:InnoDB不會(huì)釋放這些發(fā)生修改且被撤銷(xiāo)行的行鎖,注意是修改,不是新插入,這些發(fā)生修改的數(shù)據(jù)行行鎖被存儲(chǔ)在內(nèi)存中),對(duì)于設(shè)置了保存點(diǎn)之后,新插入的行數(shù)據(jù)也會(huì)被撤銷(xiāo)(注:這些鎖信息被存儲(chǔ)在行數(shù)據(jù)中的事務(wù)ID上,這些行鎖不會(huì)單獨(dú)存儲(chǔ)在內(nèi)存中,在這種情況下,這些新插入的行數(shù)據(jù)在被回滾之后,對(duì)應(yīng)的行鎖將被釋放)。另外,回滾到某個(gè)保存點(diǎn)之后,比這個(gè)保存點(diǎn)在時(shí)間上更晚設(shè)置的保存點(diǎn)將被刪除。

  • ROLLBACK TO SAVEPOINT 語(yǔ)句還有一個(gè)作用,可以釋放在設(shè)置保存點(diǎn)之后事務(wù)持有的MDL鎖,這點(diǎn)便是mysqldump需要使用保存點(diǎn)的關(guān)鍵點(diǎn)。

為了更清晰地了解mysqldump在備份過(guò)程中使用SAVEPOINT sp + ROLLBACK TO SAVEPOINT sp語(yǔ)句的作用,下面使用兩個(gè)會(huì)話(huà)演示一下使用與不使用保存點(diǎn)會(huì)發(fā)生什么?

mysqldump與innobackupex備份過(guò)程你知多少(二)

mysqldump與innobackupex備份過(guò)程你知多少(二)

mysqldump與innobackupex備份過(guò)程你知多少(二)

mysqldump與innobackupex備份過(guò)程你知多少(二)

mysqldump與innobackupex備份過(guò)程你知多少(二)

mysqldump與innobackupex備份過(guò)程你知多少(二)

從上面的對(duì)比結(jié)果中可以得知:

  • mysqldump使用savepoint的作用就是,當(dāng)一個(gè)顯式開(kāi)啟的事務(wù)回滾到保存點(diǎn)時(shí),除了回滾數(shù)據(jù)變更之外,還會(huì)釋放保存點(diǎn)之后select語(yǔ)句獲取的MDL鎖,使得其他會(huì)話(huà)的DDL語(yǔ)句可以正常執(zhí)行。對(duì)于mysqldump來(lái)說(shuō),select 語(yǔ)句執(zhí)行完成之后就代表著該表的數(shù)據(jù)已經(jīng)備份完成,無(wú)需再繼續(xù)持有MDL鎖,使用savepoint就實(shí)現(xiàn)了在select 執(zhí)行完成之后釋放MDL鎖的目的(注:在事務(wù)內(nèi),執(zhí)行select *語(yǔ)句雖然不會(huì)有數(shù)據(jù)行鎖,但是會(huì)持有表的MDL鎖)。

  • with consistent snapshot子句對(duì)應(yīng)mysqldump實(shí)現(xiàn)一致性備份來(lái)說(shuō)至關(guān)重要,不僅僅是數(shù)據(jù)的一致性,使用該子句時(shí),表定義也保持事務(wù)開(kāi)啟的那一刻,所以,從上面的對(duì)比結(jié)果中可以看到,使用了with consistent snapshot子句開(kāi)啟一個(gè)一致性快照事務(wù)之后,如果一旦表結(jié)構(gòu)定義發(fā)生改變,事務(wù)將無(wú)法重復(fù)查詢(xún)表。

  • 從上面的演示過(guò)程中,我們也可以看到,使用 with consistent snapshot子句顯式開(kāi)啟一個(gè)事務(wù)之后,如果該事務(wù)沒(méi)有對(duì)任何表做任何操作時(shí),此時(shí)是沒(méi)有獲得任何鎖的,所以,如果在該事務(wù)對(duì)某表執(zhí)行操作之前其他事務(wù)對(duì)該表執(zhí)行了DDL操作之后,將導(dǎo)致該事務(wù)無(wú)法再對(duì)表執(zhí)行查詢(xún),會(huì)報(bào)表結(jié)構(gòu)發(fā)生變化的錯(cuò)誤;當(dāng)然,如果顯式開(kāi)啟事務(wù)后立即對(duì)某表執(zhí)行查詢(xún),那么其他會(huì)話(huà)的DDL是會(huì)發(fā)生阻塞的;當(dāng)在該事務(wù)使用savepoint實(shí)現(xiàn)方式釋放表的MDL鎖之后,其他會(huì)話(huà)允許執(zhí)行DDL,但是執(zhí)行了DDL語(yǔ)句之后,該事務(wù)就無(wú)法再對(duì)該表執(zhí)行查詢(xún)。當(dāng)然,如果不使用 with consistent snapshot子句,則其他會(huì)話(huà)執(zhí)行的DDL對(duì)表定義的變更不會(huì)影響到該事務(wù)重復(fù)對(duì)表執(zhí)行查詢(xún)。

下一篇"mysqldump與innobackupex備份過(guò)程你知多少(三)"我們將接著介紹"關(guān)于mysqldump的那些坑”,精彩內(nèi)容不容錯(cuò)過(guò),敬請(qǐng)期待?。?



新聞名稱(chēng):mysqldump與innobackupex備份過(guò)程你知多少(二)
本文來(lái)源:http://weahome.cn/article/pjcods.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部