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

MYSQLdump備份時如何保持數據的一致性

數據庫 MySQL
下面主要講解一下mysqldump備份時如何保持數據的一致性。mysqldump對不同類型的存儲引擎,內部實現也不一樣。主要是針對兩種類型的存儲引擎:支持事務的存儲引擎(如InnoDB)和不支持事務的存儲引擎(如MyISAM),下面分別看看這兩種存儲引擎的實現。

[[195032]]

1、對mysql數據進行備份,常見的方式如以下三種,可能有很多人對備份時數據一致性并不清楚1、直接拷貝整個數據目錄下的所有文件到新的機器。優點是簡單、快速,只需要拷貝;缺點也很明顯,在整個備份過程中新機器處于完全不可用的狀態,且目的無法釋放源數據文件中因為碎片導致的空間浪費和無法回收已發生擴展的innodb表空間。

2、用xtrabackup進行熱備。優點是備份過程中可繼續提供服務;缺點和***種方法差不多,目的分區無法釋放源數據文件中因為碎片導致的空間浪費和無法回收已發生擴展的innodb表空間。

3、使用官方自帶的mysqldump邏輯重做。優點是在整個備份過程中可以向外提供服務,最重要的一點是可以解決碎片浪費。

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

1、對于支持事務的引擎如InnoDB,參數上是在備份的時候加上--single-transaction保證數據一致性

--single-transaction實際上通過做了下面兩個操作:

①、在開始的時候把該session的事務隔離級別設置成repeatable read;

②、然后啟動一個事務(執行bigin),備份結束的時候結束該事務(執行commit)

有了這兩個操作,在備份過程中,該session讀到的數據都是啟動備份時的數據(同一個點)。可以理解為對于innodb引擎來說加了該參數,備份開始時就已經把要備份的數據定下來了,備份過程中的提交的事務時是看不到的,也不會備份進去。

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

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

②、導出單個庫:加--lock-tables參數,這會在備份開始的時候鎖該庫的所有表,其他session可以讀但不能更新該庫的所有表,該庫的數據一致;

③、導出單個表:加--lock-tables參數,這會在備份開始的時候鎖該表,其他表不受影響,該表數據一致。

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

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

可以在備份的test.sql文件中前幾行看到記錄著備份當時的二進制日志信息

  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.                      -->在全備恢復之后,我們可以通過之后的二進制日志進行恢復  

另外解釋下mysqldump備份時為什么要鎖表才能保持數據的一致性:

說明:

1、在t1時間點,用mysqldump啟動不鎖表備份;

2、先導出a表,共耗時5分鐘,因為沒有鎖表,在這5分鐘內b表insert了10行數據;

3、到了t2時間點,a表導出完成,開始導出b表;

4、導出b表耗時10分鐘,在導出b表的過程中,a、b表均沒有數據變化;

5、到了t3時間點,b表導出完成,全部備份結束;

6、然后備機從t1時間點的binlog位置開始應用binlog,***備機中b表的數據比主機多10行,數據不一致。

從這個圖可以看出,對于不支持事務的存儲引擎如MyISAM如果備份過程中不鎖表,不同表開始備份時對應的binlog和pos是不一致的,這時候所有表都從備份開始的點應用binlog,有很大肯會出現數據不一致(備份過程中所有表均無數據更新除外)。

責任編輯:武曉燕 來源: 皮皮博客
相關推薦

2022-02-17 21:04:27

數據庫MysqlRedis

2023-09-07 08:11:24

Redis管道機制

2020-09-10 16:50:32

mysqldump數據庫熱備

2022-04-06 15:19:32

數據庫MySQL一致性

2023-09-24 14:35:43

Redis數據庫

2020-04-01 15:50:17

TiDBMySQL數據庫

2019-08-30 12:46:10

并發扣款查詢SQL

2025-03-27 08:20:54

2017-07-25 14:38:56

數據庫一致性非鎖定讀一致性鎖定讀

2022-10-19 12:22:53

并發扣款一致性

2021-03-04 06:49:53

RocketMQ事務

2024-12-26 15:01:29

2022-12-14 08:23:30

2021-07-26 06:33:42

CRDT數據CAP

2023-07-27 08:29:09

2020-08-05 08:46:10

NFS網絡文件系統

2021-12-14 07:15:57

MySQLRedis數據

2017-08-25 10:16:00

2022-09-15 10:37:46

MySQLRedis數據一致性

2022-03-29 10:39:10

緩存數據庫數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九热精品在线 | 亚洲va欧美va人人爽午夜 | 久久久久国产成人精品亚洲午夜 | 国产精品欧美日韩 | 午夜精品一区二区三区在线视频 | 国产精品久久久久久久免费大片 | 在线视频一区二区三区 | 国产成人小视频 | 欧美4p| 国产精品视频网址 | 成人免费一区二区三区视频网站 | 99精品国产一区二区青青牛奶 | 亚洲欧美日韩精品久久亚洲区 | 国产一区二区三区 | 久久精品欧美一区二区三区不卡 | 91夜色在线观看 | 午夜影院网站 | 91久久精品国产91久久性色tv | 欧美11一13sex性hd | 婷婷综合久久 | 亚洲国产高清高潮精品美女 | 日韩av成人在线 | 久久精品视频一区二区三区 | 国产精品成人一区二区 | 国产精品久久久久不卡 | 久久九九免费 | 国产精品一区二区在线 | 国产在线看片 | av一区二区三区 | 国产一区精品 | 国产精品一区二区福利视频 | 久久国内精品 | 免费黄色的视频 | 91久久精品国产免费一区 | 日韩在线播放中文字幕 | www.男人天堂.com | 日韩欧美国产精品 | 爱综合| 伊人久久在线 | 色综合视频 | 婷婷开心激情综合五月天 |