自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MYSQLdump備份時(shí)如何保持?jǐn)?shù)據(jù)的一致性

數(shù)據(jù)庫 MySQL
下面主要講解一下mysqldump備份時(shí)如何保持?jǐn)?shù)據(jù)的一致性。mysqldump對(duì)不同類型的存儲(chǔ)引擎,內(nèi)部實(shí)現(xiàn)也不一樣。主要是針對(duì)兩種類型的存儲(chǔ)引擎:支持事務(wù)的存儲(chǔ)引擎(如InnoDB)和不支持事務(wù)的存儲(chǔ)引擎(如MyISAM),下面分別看看這兩種存儲(chǔ)引擎的實(shí)現(xiàn)。

[[195032]]

1、對(duì)mysql數(shù)據(jù)進(jìn)行備份,常見的方式如以下三種,可能有很多人對(duì)備份時(shí)數(shù)據(jù)一致性并不清楚1、直接拷貝整個(gè)數(shù)據(jù)目錄下的所有文件到新的機(jī)器。優(yōu)點(diǎn)是簡單、快速,只需要拷貝;缺點(diǎn)也很明顯,在整個(gè)備份過程中新機(jī)器處于完全不可用的狀態(tài),且目的無法釋放源數(shù)據(jù)文件中因?yàn)樗槠瑢?dǎo)致的空間浪費(fèi)和無法回收已發(fā)生擴(kuò)展的innodb表空間。

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

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

以上幾種方法相信大家也都很熟悉,就不再詳細(xì)介紹。下面主要講解一下mysqldump備份時(shí)如何保持?jǐn)?shù)據(jù)的一致性。mysqldump對(duì)不同類型的存儲(chǔ)引擎,內(nèi)部實(shí)現(xiàn)也不一樣。主要是針對(duì)兩種類型的存儲(chǔ)引擎:支持事務(wù)的存儲(chǔ)引擎(如InnoDB)和不支持事務(wù)的存儲(chǔ)引擎(如MyISAM),下面分別看看這兩種存儲(chǔ)引擎的實(shí)現(xiàn):

1、對(duì)于支持事務(wù)的引擎如InnoDB,參數(shù)上是在備份的時(shí)候加上--single-transaction保證數(shù)據(jù)一致性

--single-transaction實(shí)際上通過做了下面兩個(gè)操作:

①、在開始的時(shí)候把該session的事務(wù)隔離級(jí)別設(shè)置成repeatable read;

②、然后啟動(dòng)一個(gè)事務(wù)(執(zhí)行bigin),備份結(jié)束的時(shí)候結(jié)束該事務(wù)(執(zhí)行commit)

有了這兩個(gè)操作,在備份過程中,該session讀到的數(shù)據(jù)都是啟動(dòng)備份時(shí)的數(shù)據(jù)(同一個(gè)點(diǎn))??梢岳斫鉃閷?duì)于innodb引擎來說加了該參數(shù),備份開始時(shí)就已經(jīng)把要備份的數(shù)據(jù)定下來了,備份過程中的提交的事務(wù)時(shí)是看不到的,也不會(huì)備份進(jìn)去。

2、對(duì)于不支持事務(wù)的引擎如MyISAM,只能通過鎖表來保證數(shù)據(jù)一致性,這里分三種情況:

①、導(dǎo)出全庫:加--lock-all-tables參數(shù),這會(huì)在備份開始的時(shí)候啟動(dòng)一個(gè)全局讀鎖(執(zhí)行flush tables with read lock),其他session可以讀取但不能更新數(shù)據(jù),備份過程中數(shù)據(jù)沒有變化,所以最終得到的數(shù)據(jù)肯定是完全一致的;

②、導(dǎo)出單個(gè)庫:加--lock-tables參數(shù),這會(huì)在備份開始的時(shí)候鎖該庫的所有表,其他session可以讀但不能更新該庫的所有表,該庫的數(shù)據(jù)一致;

③、導(dǎo)出單個(gè)表:加--lock-tables參數(shù),這會(huì)在備份開始的時(shí)候鎖該表,其他表不受影響,該表數(shù)據(jù)一致。

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

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

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

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

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

說明:

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

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

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

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

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

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

從這個(gè)圖可以看出,對(duì)于不支持事務(wù)的存儲(chǔ)引擎如MyISAM如果備份過程中不鎖表,不同表開始備份時(shí)對(duì)應(yīng)的binlog和pos是不一致的,這時(shí)候所有表都從備份開始的點(diǎn)應(yīng)用binlog,有很大肯會(huì)出現(xiàn)數(shù)據(jù)不一致(備份過程中所有表均無數(shù)據(jù)更新除外)。

責(zé)任編輯:武曉燕 來源: 皮皮博客
相關(guān)推薦

2022-02-17 21:04:27

數(shù)據(jù)庫MysqlRedis

2023-09-07 08:11:24

Redis管道機(jī)制

2020-09-10 16:50:32

mysqldump數(shù)據(jù)庫熱備

2022-04-06 15:19:32

數(shù)據(jù)庫MySQL一致性

2020-04-01 15:50:17

TiDBMySQL數(shù)據(jù)庫

2023-09-24 14:35:43

Redis數(shù)據(jù)庫

2019-08-30 12:46:10

并發(fā)扣款查詢SQL

2025-03-27 08:20:54

2017-07-25 14:38:56

數(shù)據(jù)庫一致性非鎖定讀一致性鎖定讀

2021-07-26 06:33:42

CRDT數(shù)據(jù)CAP

2021-03-04 06:49:53

RocketMQ事務(wù)

2024-12-26 15:01:29

2022-12-14 08:23:30

2022-10-19 12:22:53

并發(fā)扣款一致性

2023-07-27 08:29:09

2017-08-25 10:16:00

2021-12-14 07:15:57

MySQLRedis數(shù)據(jù)

2024-10-16 09:53:07

2024-10-28 12:41:25

2022-03-29 10:39:10

緩存數(shù)據(jù)庫數(shù)據(jù)
點(diǎn)贊
收藏

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