MySql備份時怎么保持?jǐn)?shù)據(jù)一致性-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)MySql備份時怎么保持?jǐn)?shù)據(jù)一致性,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

成都創(chuàng)新互聯(lián)是一家專業(yè)從事網(wǎng)站制作、網(wǎng)站設(shè)計的網(wǎng)絡(luò)公司。作為專業(yè)網(wǎng)站建設(shè)公司,成都創(chuàng)新互聯(lián)依托的技術(shù)實力、以及多年的網(wǎng)站運(yùn)營經(jīng)驗,為您提供專業(yè)的成都網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷推廣及網(wǎng)站設(shè)計開發(fā)服務(wù)!

1、直接拷貝整個數(shù)據(jù)目錄下的所有文件到新的機(jī)器。優(yōu)點(diǎn)是簡單、快速,只需要拷貝;缺點(diǎn)也很明顯,在整個備份過程中新機(jī)器處于完全不可用的狀態(tài),且目的無法釋放源數(shù)據(jù)文件中因為碎片導(dǎo)致的空間浪費(fèi)和無法回收已發(fā)生擴(kuò)展的innodb表空間。

2、用xtrabackup進(jìn)行熱備。優(yōu)點(diǎn)是備份過程中可繼續(xù)提供服務(wù);缺點(diǎn)和第一種方法差不多,目的分區(qū)無法釋放源數(shù)據(jù)文件中因為碎片導(dǎo)致的空間浪費(fèi)和無法回收已發(fā)生擴(kuò)展的innodb表空間。

3、使用官方自帶的mysqldump邏輯重做。優(yōu)點(diǎn)是在整個備份過程中可以向外提供服務(wù),最重要的一點(diǎn)是可以解決碎片浪費(fèi)。

以上幾種方法相信大家也都很熟悉,就不再詳細(xì)介紹。下面主要講解一下mysqldump備份時如何保持?jǐn)?shù)據(jù)的一致性。

mysqldump對不同類型的存儲引擎,內(nèi)部實現(xiàn)也不一樣。主要是針對兩種類型的存儲引擎:支持事務(wù)的存儲引擎(如InnoDB)和不支持事務(wù)的存儲引擎(如MyISAM),下面分別看看這兩種存儲引擎的實現(xiàn):

1、對于支持事務(wù)的引擎如InnoDB,參數(shù)上是在備份的時候加上--single-transaction保證數(shù)據(jù)一致性
--single-transaction實際上通過做了下面兩個操作:
①、在開始的時候把該session的事務(wù)隔離級別設(shè)置成repeatable read;
②、然后啟動一個事務(wù)(執(zhí)行bigin),備份結(jié)束的時候結(jié)束該事務(wù)(執(zhí)行commit)
有了這兩個操作,在備份過程中,該session讀到的數(shù)據(jù)都是啟動備份時的數(shù)據(jù)(同一個點(diǎn))??梢岳斫鉃閷τ趇nnodb引擎來說加了該參數(shù),備份開始時就已經(jīng)把要備份的數(shù)據(jù)定下來了,備份過程中的提交的事務(wù)時是看不到的,也不會備份進(jìn)去。

2、對于不支持事務(wù)的引擎如MyISAM,只能通過鎖表來保證數(shù)據(jù)一致性,這里分三種情況:
①、導(dǎo)出全庫:加--lock-all-tables參數(shù),這會在備份開始的時候啟動一個全局讀鎖(執(zhí)行flush tables with read lock),其他session可以讀取但不能更新數(shù)據(jù),備份過程中數(shù)據(jù)沒有變化,所以最終得到的數(shù)據(jù)肯定是完全一致的;
②、導(dǎo)出單個庫:加--lock-tables參數(shù),這會在備份開始的時候鎖該庫的所有表,其他session可以讀但不能更新該庫的所有表,該庫的數(shù)據(jù)一致;
③、導(dǎo)出單個表:加--lock-tables參數(shù),這會在備份開始的時候鎖該表,其他表不受影響,該表數(shù)據(jù)一致。

上面只是展示了對不同引擎來講加的參數(shù)只是為了讓數(shù)據(jù)保持一致性,但在備份中業(yè)務(wù)并沒有停止,時刻可能有新的數(shù)據(jù)進(jìn)行寫入,為了讓我們知道備份時是備份了哪些數(shù)據(jù),或者截止到那個指針(二進(jìn)制日志),我們可以再加入 --master-data參數(shù),備份好的sql文件就會記錄從備份截至到哪個指針,指針之后的數(shù)據(jù)更新我們可以通過二進(jìn)制日志進(jìn)行恢復(fù)。

# mysqldump -u root -p --single-transaction --master-data --flush-log --database test > test.sql                             --> --flush-log 表示備份開始之后的更行都切到下一個二進(jìn)制日志

可以在備份的test.sql文件中前幾行看到記錄著備份當(dāng)時的二進(jìn)制日志信息

# vim test.sql --CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=436263492; ---- Current Database: `test` ..... # mysqlbinlog --start-position=436263492 mysql-bin.000004 > 00004.sql                     -->在全備恢復(fù)之后,我們可以通過之后的二進(jìn)制日志進(jìn)行恢復(fù)

另外解釋下mysqldump備份時為什么要鎖表才能保持?jǐn)?shù)據(jù)的一致性:

MySql備份時怎么保持?jǐn)?shù)據(jù)一致性

說明:

1、在t1時間點(diǎn),用mysqldump啟動不鎖表備份;

2、先導(dǎo)出a表,共耗時5分鐘,因為沒有鎖表,在這5分鐘內(nèi)b表insert了10行數(shù)據(jù);

3、到了t2時間點(diǎn),a表導(dǎo)出完成,開始導(dǎo)出b表;

4、導(dǎo)出b表耗時10分鐘,在導(dǎo)出b表的過程中,a、b表均沒有數(shù)據(jù)變化;

5、到了t3時間點(diǎn),b表導(dǎo)出完成,全部備份結(jié)束;

6、然后備機(jī)從t1時間點(diǎn)的binlog位置開始應(yīng)用binlog,最后備機(jī)中b表的數(shù)據(jù)比主機(jī)多10行,數(shù)據(jù)不一致。

上述就是小編為大家分享的MySql備份時怎么保持?jǐn)?shù)據(jù)一致性了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

文章名稱:MySql備份時怎么保持?jǐn)?shù)據(jù)一致性-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://bm7419.com/article20/igico.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器手機(jī)網(wǎng)站建設(shè)、定制開發(fā)微信公眾號、網(wǎng)站導(dǎo)航電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計