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

MySQL備份原理詳解

數據庫 MySQL
這篇文章主要討論MySQL的備份方案,重點介紹幾種備份方式的原理,包括文件系統快照(LVM),邏輯備份工具Mysqldump,Mydumper,以及物理備份工具Xtrabackup,同時會詳細講解幾種方案的優缺點,以及可能遇到的問題。

備份是數據安全的***一道防線,對于任何數據丟失的場景,備份雖然不一定能恢復***的數據(取決于備份周期),但至少能將損失降到***。衡量備份恢復有兩個重要的指標:恢復點目標(RPO)和恢復時間目標(RTO),前者重點關注能恢復到什么程度,而后者則重點關注恢復需要多長時間。這篇文章主要討論MySQL的備份方案,重點介紹幾種備份方式的原理,包括文件系統快照(LVM),邏輯備份工具Mysqldump,Mydumper,以及物理備份工具Xtrabackup,同時會詳細講解幾種方案的優缺點,以及可能遇到的問題。

冷備份

最簡單的備份方式就是,關閉MySQL服務器,然后將data目錄下面的所有文件進行拷貝保存,需要恢復時,則將目錄拷貝到需要恢復的機器即可。這種方式確實方便,但是在生產環境中基本沒什么作用。因為所有的機器都是要提供服務的,即使是Slave有時候也需要提供只讀服務,所以關閉MySQL停服備份是不現實的。與冷備份相對應的一個概念是熱備份,所謂熱備份是在不影響MySQL對外服務的情況下,進行備份,熱備份是這篇文章討論的重點。

快照備份

首先要介紹的熱備份是快照備份,快照備份是指通過文件系統支持的快照功能對數據庫進行備份。備份的原理是將所有的數據庫文件放在同一分區中,然后對該分區執行快照工作,對于Linux而言,需要通過LVM(Logical Volumn Manager)來實現。LVM使用寫時復制(copy-on-write)技術來創建快照,例如,對整個卷的某個瞬間的邏輯副本,類似于數據庫中的innodb存儲引擎的MVCC,只不過LVM的快照在文件系統層面,而MVCC在數據庫層面,而且僅支持innodb存儲引擎。LVM有一個快照預留區域,如果原始卷數據有變化時,LVM保證在任何變更寫入之前,會復制受影響塊到快照預留區域。簡單來說,快照區域內保留了快照點開始時的一致的所有old數據。對于更新很少的數據庫,快照也會非常小。對于MySQL而言,為了使用快照備份,需要將數據文件,日志文件都放在一個邏輯卷中,然后對該卷快照備份即可。由于快照備份,只能本地,因此,如果本地的磁盤損壞,則快照也就損壞了。快照備份更偏向于對誤操作防范,可以將數據庫迅速恢復到快照產生的時間點,然后結合二進制日志可以恢復到指定的時間點。基本原理如下圖:

邏輯備份

冷備份和快照備份由于其弊端在生產環境中很少使用,使用更多是MySQL自帶的邏輯備份和物理備份工具,這節主要講邏輯備份,MySQL官方提供了Mysqldump邏輯備份工具,雖然已經足夠好,但存在單線程備份慢的問題。在社區提供了更優秀的邏輯備份工具mydumper,它的優勢主要體現在多線程備份,備份速度更快。

Mysqldump

Mysqldump用于備份,不得不提兩個關鍵的參數:

--single-transaction:在開始備份前,執行start transaction命令,以此來獲取一致性備份,該參數僅對innodb存儲引擎有效。

--master-data=2:主要用于記錄一致性備份的位點。

理解Mysqldump工作原理,一定要將事務表(innodb)和非事務表(比如myisam)區別對待,因為備份的流程與此息息相關。而且,到目前為止,我們也無法規避myisam表,即使我們的所有業務表都是innodb,因為mysql庫中系統表仍然采用的myisam表。

備份的基本流程如下:

1.調用FTWRL(flush tables with read lock),全局禁止讀寫

2.開啟快照讀,獲取此時的快照(僅對innodb表起作用)

3.備份非innodb表數據(*.frm,*.myi,*.myd等)

4.非innodb表備份完畢后,釋放FTWRL鎖

5.逐一備份innodb表數據

6.備份完成。

整個過程,可以參考我同事的一張圖,但他的這張圖只考慮innodb表的備份情況,實際上在unlock tables執行完畢之前,非innodb表已經備份完畢,后面的t1,t2和t3實質都是innodb表,而且5.6的mysqldump利用保存點機制,每備份完一個表就將一個表上的MDL鎖釋放,避免對一張表鎖更長的時間。

大家可能有一個疑問,為啥備份innodb表之前,就已經將鎖釋放掉了,這實際上是利用了innodb引擎的MVCC機制,開啟快照讀后,就能獲取那個時間的一致的數據,無論需要備份多長時間,直到整個事務結束(commit)為止。

Mydumper

Mydumper原理與Mysqldump原理類似,***的區別是引入了多線程備份,每個備份線程備份一部分表,當然并發粒度可以到行級,達到多線程備份的目的。這里要解決***一個問題是,如何保證備份的一致性,其實關鍵還是在于FTWRL。對于非innodb表,在釋放鎖之前,需要將表備份完成。對于innodb表,需要確保多個線程都能拿到一致性位點,這個動作同樣要在持有全局鎖期間完成,因為此時數據庫沒有讀寫,可以保證位點一致。所以基本流程如下:

物理備份(Xtrabackup)

相對于邏輯備份利用查詢提取數據中的所有記錄,物理備份更直接,拷貝數據庫文件和日志來完成備份,因此速度會更快。當然,無論是開源的Mydumper還是官方***的備份工具(5.7.11的mysqlpump)都支持了多線程備份,所以速度差異可能會進一步縮小,至少從目前生產環境來看,物理備份使用還是比較多的。由于Xtrabackup支持備份innodb表,實際生產環境中我們使用的工具是innobackupex,它是對xtrabackup的一層封裝。innobackupex腳本用來備份非 InnoDB 表,同時會調用 xtrabackup命令來備份 InnoDB 表,innobackupex的基本流程如下:

1.開啟redo日志拷貝線程,從***的檢查點開始順序拷貝redo日志;

2.開啟idb文件拷貝線程,拷貝innodb表的數據

3.idb文件拷貝結束,通知調用FTWRL,獲取一致性位點

4.備份非innodb表(系統表)和frm文件

5.由于此時沒有新事務提交,等待redo日志拷貝完成

6.***的redo日志拷貝完成后,相當于此時的innodb表和非innodb表數據都是***的

7.獲取binlog位點,此時數據庫的狀態是一致的。

8.釋放鎖,備份結束。

 

 

Xtrabackup的改進

從前面介紹的邏輯備份和物理備份來看,無論是哪種備份工具,為了獲取一致性位點,都強依賴于FTWRL。這個鎖殺傷力非常大,因為持有鎖的這段時間,整個數據庫實質上不能對外提供寫服務的。此外,由于FTWRL需要關閉表,如有大查詢,會導致FTWRL等待,進而導致DML堵塞的時間變長。即使是備庫,也有SQL線程在復制來源于主庫的更新,上全局鎖時,會導致主備庫延遲。從前面的分析來看,FTWRL這把鎖持有的時間主要與非innodb表的數據量有關,如果非innodb表數據量很大,備份很慢,那么持有鎖的時間就會很長。即使全部是innodb表,也會因為有mysql庫系統表存在,導致會鎖一定的時間。為了解決這個問題,Percona公司對Mysql的Server層做了改進,引入了BACKUP LOCK,具體而言,通過"LOCKTABLES FOR BACKUP"命令來備份非innodb表數據;通過"LOCK BINLOG FOR BACKUP"來獲取一致性位點,盡量減少因為數據庫備份帶來的服務受損。我們看看采用這兩個鎖與FTWRL的區別:

LOCK TABLES FOR BACKUP

作用:備份數據

1.禁止非innodb表更新

2.禁止所有表的ddl

優化點:

1.不會被大查詢堵塞(關閉表)

2.不會堵塞innodb表的讀取和更新,這點非常重要,對于業務表全部是innodb的情況,則備份過程中DML完全不受損

UNLOCKTABLES

LOCK BINLOG FOR BACKUP

作用:獲取一致性位點。

1.禁止對位點更新的操作

優化點:

1.允許DDl和更新,直到寫binlog為止。

UNLOCKBINLOG

以上就是本文的全部內容,希望對大家的學習有所幫助。 

責任編輯:龐桂玉 來源: 程序源
相關推薦

2024-07-04 08:00:24

2009-03-25 09:00:11

Group By排序MySQL

2010-05-21 18:15:41

MySQL 備份

2009-01-06 12:56:25

服務器備份磁軌

2011-08-15 09:48:30

MySQL數據庫完整備份增量備份

2010-08-12 15:30:10

MySQL集群

2011-08-18 16:03:48

數據切分MySQL

2020-09-13 13:26:10

Kafka消費者控制器

2024-01-05 09:00:00

SpringMVC軟件

2021-02-07 09:36:20

LongAdderJDK8開發

2025-03-25 10:00:00

Spring開發Java

2024-11-25 16:29:48

2009-12-24 14:28:29

Linux備份

2009-07-03 09:44:30

Oracle Data

2017-04-17 15:48:15

Cinder備份實踐

2011-08-15 09:19:22

2019-08-12 10:48:24

MySQLMHA架構應用場景

2010-05-31 16:10:30

MySQL備份

2011-05-17 15:02:15

ORACLE數據庫備份

2015-07-10 12:23:05

JsPatch實現原理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产日韩欧美 | 午夜精品一区二区三区在线观看 | 国产精品美女久久久久aⅴ国产馆 | 国产精品美女久久久免费 | 国产在线观看一区二区三区 | 久久ww| 欧美区在线 | 国产在线观 | 午夜免费av| 成人国产在线观看 | 日日操av| 91精品一区二区三区久久久久 | 91大神在线看 | 亚洲成人精选 | 人人干人人干人人干 | 国产在线精品一区二区三区 | 精品一区二区三区在线视频 | 国产精品久久久久一区二区三区 | 国产精品高潮呻吟久久 | 国产色| 欧美激情久久久久久 | 日韩在线免费视频 | 国产传媒在线播放 | 国产在线小视频 | 99亚洲国产精品 | 欧美在线a | 三级成人在线 | 欧美一区二区三区免费在线观看 | 精品三区 | 亚洲精品久久久9婷婷中文字幕 | 色就干| 岛国av免费观看 | 日本免费在线 | 夜夜摸夜夜操 | 日韩亚洲视频在线 | www国产精| 日韩国产欧美 | 久久99久久98精品免观看软件 | 日韩精品一区二区三区中文字幕 | 在线视频91 | av毛片在线免费观看 |