數據庫備份還原——mysqlbackup與mysqldump對比測試


1      環境描述

1.1      硬件環境

  服務器類型:華為RH5885

  IP: 10.148.128.100

  內存: 64G

  物理CPU個數:4

  CPU核數:8

  邏輯CPU個數:64

  Intel(R) Xeon(R) CPU E7-4820 v2 @ 2.00GHz

1.2      Mysql版本

  

1.3      數據環境

  生產按照130MW滿規格進行測試。所測試備份的最大數據量為381G。

  由於監控數據量遠小於生產,故重點對生產的備份還原進行了測試。

  監控只測試了數據量較小的情況,可參考生產的備份還原情況對其進行粗略估計。

2      采用的數據庫備份方法

2.1      Mysqlbackup

  Mysqlbackup是物理備份的方式。對innodb的表空間進行物理復制,但是,它是記錄LSN點的。在備份過程中,新增加的輸入直接寫入備份文件的ibbackup_logfile中。同時記錄最后的LSN點。還原的時候,檢測對比ibbackup_logfile文件里面與表空間里面的差值,使ibbackup_logfile里面的數據進入事務日志或表空間。

2.1.1        壓縮備份

備份:

time /opt/mysql/meb-3.11/bin/mysqlbackup --compress --backup-dir=/srv/mytest --socket=/opt/mysql/data/mysql.sock --datadir=/opt/mysql/data -usystem -pHwsystem@com --include-tables="eSCS" backup

說明:--compress 壓縮備份

還原:

1.檢查事務日志,並解壓

time /opt/mysql/meb-3.11/bin/mysqlbackup --uncompress --backup-dir=/srv/mytest apply-log

【說明】:Apply-log之前,數據文件是不一致的,因為它們在不同時間點被備份。因此,apply-log會使所有數據文件的步調達成一致。通過innodb 的crash recovery把已經提交的事務寫入數據文件,把沒有提交的事務進行回滾。apply-log沒有強制在線上或者備份庫上運行。

2. 還原物理文件

time /opt/mysql/meb-3.11/bin/mysqlbackup --defaults-file=/etc/my.cnf --backup-dir=/srv/mytest --datadir=/opt/mysql/data copy-back

【注意】壓縮備份只能應用於全備,不能對增量備份進行壓縮;
壓縮備份不能應用與已經是壓縮格式(Barracuda file format)的innodb 表。

2.1.2        非壓縮備份

備份

time /opt/mysql/meb-3.11/bin/mysqlbackup  --backup-dir=/srv/mytest --socket=/opt/mysql/data/mysql.sock --datadir=/opt/mysql/data -usystem -pHwsystem@com --include-tables="eSCS" backup

說明:--compress 壓縮備份

還原

time /opt/mysql/meb-3.11/bin/mysqlbackup --backup-dir=/srv/mytest apply-log

 

time /opt/mysql/meb-3.11/bin/mysqlbackup --defaults-file=/etc/my.cnf --backup-dir=/srv/mytest --datadir=/opt/mysql/data copy-back

2.2      Mysqldump

Mysqldump是mysql自帶工具。備份出來的文件是一個可以直接倒入的sql腳本。該sql文件中實際上包含了多個CREATE 和INSERT語句,使用這些語句可以重新創建表和插入數據。

2.2.1        壓縮備份

備份

time mysqldump -usystem -pHwsystem@com --databases platform_eSCS910 eSCS | gzip > /opt/mybackupfile.sql.gz ;

還原

time gunzip < /opt/mybackupfile.sql.gz | mysql  -usystem -pHwsystem@com

2.2.2        非壓縮備份

備份

time mysqldump  -usystem -pHwsystem@com --databases platform_eSCS910 eSCS > /opt/mybackupfile.sql

還原

time mysql -usystem -pHwsystem@com < /opt/mybackupfile.sql

 

3      測試結果

3.1      910數據庫備份還原測試

備份方法

原始文件大小

備份文件大小

備份耗時

還原耗時

壓縮

非壓縮

壓縮

非壓縮

壓縮

非壓縮

Mysqldump  

13M  ./eSCS

1.8M    ./mysql

635K  ./performance_schema

2.8M  ./platform_eSCS910

191M    /opt/mysql/data

112K

881K

0.34s

0.32s

2.47s

2.47s

Mysqlbackup

2.8M

(189M)

注1

92M

(189M)注1

4.11s

5.10s

6.00s

(2.94+

3.06)注2

4.13s

(1.039+

3.09)注2

Mysqldump  

419M   ./eSCS

25M    ./mysql

635K   ./performance_schema

2.8M   ./platform_eSCS910

619M   /opt/mysql/data

2M

25M

1m18.723s

1m19.123s

1m9.389s

1m9.736s

Mysqlbackup

58M

(596M)

499M

(596M)

45.969s

45.92s

1m11.64s

(22.600s

+49.038s)

47.13s

(1.955s

+45.173s)

 

注1:執行檢查事務日志(apply-log)后,備份文件目錄大小為:189M

注2:backup還原耗時為:apply-log + copy-back的總和。

3.2      710數據庫備份還原測試

備份方法

原始文件大小

備份文件大小

備份耗時

還原耗時

壓縮

非壓縮

壓縮

非壓縮

壓縮

非壓縮

Mysqldump  

5.8G   ./ePMS

419M     ./eSCS

14M    ./mysql

635K   ./performance_schema

2.9M   ./platform_ePMS710

2.8M   ./platform_eSCS910

6.9G   .

90M

2.7G

1m11.39s

54.59s

8m7.24s

8m3.01s

Mysqlbackup

569M

 (6.4G)注1

6.3G

(6.4G)   

注1

41.56s

41.59s

1m15.53s

(28.694s+   46.832s)

47.38s

(1.189s

+46.189s)

Mysqldump

27G    ./ePMS

28G      /opt/mysql/data

(此數據環境為43G Mysqldump恢復之后的環境)

---

---

---

---

---

---

Mysqlbackup

3.0G

(28G)

(壓縮率89.20%)

27G

(28G)

3m18.77s

3m4.86s

6m30.01s

(2m42.407s+ 3m47.713s)

3m47.99S

(1.163s+

3m46.839s)

Mysqldump

43G    ./ePMS

44G    /opt/mysql/data

770M

21G

9m26.54s

7m12.97s

64m44.67s

62m48.03s

Mysqlbackup

---

---

---

---

---

---

Mysqldump

381G      ./ePMS

13M     ./eSCS

11M     ./mysql

635K   ./performance_schema

2.9M    ./platform_ePMS710

2.8M    ./platform_eSCS910

381G      /opt/mysql/data

3.4G

203G

4h44m31.66s

 

備注*2

4h45m10.09s

  11h45m20.86s

注:

恢復完成后數據僅223G!(磁盤空間足夠)

11h35m33.76s

注:

恢復完成后數據僅238G!(磁盤空間足夠)

備注*1

Mysqlbackup

24G

 (壓縮率93.90%)

381G

46m19.47s

40m46.95s

解壓到223G(耗時16m38.9s),磁盤滿,還原失敗。

52m8.423s

Mysqldump

238G   ./ePMS

238G   /opt/mysql/data

(此數據環境為381G Mysqldump恢復之后的環境)

3.4G

---

1h41m0.22s

---

---

---

Mysqlbackup

17G

---

30m36.27s

---

---

---

備注1*: mysqldunp方式還原后,文件占用大小與備份前數據大小不一致。對比備份前后數據庫表記錄條數:發現是一致的!

具體而言,文件大小減少的是某些數據文件(*.ibd),由於還原時對數據文件進行了重新整理而節約了空間。

   圖:測試dump還原后數據量變小

備注2* :此處Mysqldump耗時可能會更高一些。這個第二次測試的數據,第一次測試耗時128m41s才備份完1.1G。覺得遙遙無期故手動中斷。按照備份完3.4G計算,備份大概需要6-7小時,高於表中所示數據。

 

  圖:dump備份耗時可能會更久,估計與系統運行狀態有關

 

4     總結與分析

4.1      時間消耗

  1. 共部署情況,710/910備份及還原耗時情況,只與本網元數據庫數據量有關,基本不受共部署另一網元影響。
  2. 數據還原的耗時大於備份的耗時。
  3. Mysqlbackup耗時情況:

            

         圖1.  Mysqlbackup耗時情況

 

1) Mysqlbackup物理備份方式主要是進行文件的拷貝。其備份耗時與數據量大小呈較穩定的線性關系。在該測試環境下,基本滿足:y=7.3x

2) 壓縮耗時差異:

Mysqlbackup方法,壓縮與否的備份耗時基本相同。

但還原時,壓縮情況要比非壓縮耗時長,約為非壓縮情況的1-2倍(執行copyback的時間與備份時間相當,時間多在執行apply-log解壓上)。還原的時間統計圖暫未列出。

  1. Mysqldump耗時情況:

   

  圖2.  Mysqldump耗時情況 及Mysqlbackup對比

1)在數據量較小時(10-100M數據量,如初始安裝狀態),Mysqldump耗時較少,低於Mysqlbackup方法。

2) 粗略估計:400M數據情況下,Mysqldump、Mysqlbackup耗時相當。

3)當數據量增加時(1G數據量以上),Mysqldump耗時增長較快。且隨着數據量的增加,耗時遠遠大於Mysqlbackup方法。

可參考以上測試結果,估算大概耗時情況。

4)對於Mysqldump方法,壓縮與否的耗時基本相同(包括備份、還原)。

5)Mysqldump備份耗時與原數據存儲的緊湊程度有較大的關系。

【其他說明】:以上測試結果都在第1.1節說明的環境下進行。若在E9000虛擬機上測試(分配20G內存,4 CPU),根據實際耗時:備份耗時比此環境下測試結果高1-2倍,還原耗時比此環境高3-7倍。(僅測試了mysqldump方式,且不夠充分,這里是粗略總結。)  

4.2      空間占用

  1. 壓縮率

    Mysqldump :壓縮率約為:96.5%。

    Mysqlbackup:壓縮率也在90%以上。二者壓縮效率都很可觀!

    之前說了壓縮與否耗時基本相當。故采用壓縮的方式進行備份和還原是比較划算的。

  1. Mysqldump與Mysqlbackup比較:

    壓縮情況下Mysqldump與Mysqlbackup備份文件占用空間都不大。其次,Mysqldump邏輯備份的方式,其備份文件比Mysqlbackup的小。Mysqldump還原操作后,數據文件占用空間與原數據文件相比要小。

    Mysqlbackup還原操作時,檢查事務文件並解壓,解壓完成后空間占用與原始文件(/opt/mysql/data/下)大小一致。

4.3      對系統性能影響

    1.  數據量較大時,Mysqldump方法會消耗大量內存和CPU資源,也直接影響了自身的備份性能,導致在數據量大時備份速度更慢。

    

    2. Mysqlbackup方法系統資源占用較少,基本不造成影響。這也從另一方面反映了其耗時呈線性狀態的原因。

    3. Mysqlbackup還原時,請首先停掉數據庫!否則,還原結束后,重啟mysql服務會有異常。

    4. Mysqlbackup還原時,第一步時檢查事務文件並解壓。請注意檢查磁盤空間,確保備份所在目錄空間足夠!否則解壓失敗后無法繼續進行還原操作:

4.4      備份還原注意事項

  1. 我們采用的存儲引擎是innodb,默認是共享表空間,即數據庫所有表數據、索引文件都放在/opt/mysql/data/ibdata1文件。共部署情況下Mysqlbackup還原可能存在問題,執行還原成功后數據庫可能無法正常使用。

 

===================================================

附錄  其他數據備份還原方式

  其實,在mysqldump使用手冊上已經說明了,在數據量大的時候,並不適合采用mysqldump方式,其推薦采用的是物理備份的方式。然而Mysqlbackup物理備份的方式對共部署環境並不太適用(或者我們還不是很會用)。其他InnoDB 表備份/恢復策略小結:

  1. 使用商業的在線熱備份工具 Hotbackup

    Hotbackup可以在InnoDB數據庫運行之時備份你的InnoDB數據庫,並且它不設置任何鎖定或干擾你正常的數據庫處理。缺點:付費。

  2. Xtrabackup

    Xtrabackup是一個對InnoDB做數據備份的工具,支持在線熱備份(備份時不影響數據讀寫),據說是商業備份工具InnoDB Hotbackup較好的替代品。

  3. 使用sql 語句備份

     select into 熱備份單個/多個表。與mysqldump很相似,同樣是把數據庫備份到一個指定的文件中。常用於創建表的備份復件或者用於對記錄進行存檔。

  4. 拷貝文件

    直接備份數據文件較為直接、快速、方便。缺點是基本上不能實現增量備份。
    為了保證數據的一致性,需要在拷貝文件前,執行以下 SQL 語句: FLUSH TABLES WITH READ LOCK;把內存中的數據都刷新到磁盤中,同時鎖定數據表,以保證拷貝過程中不會有新的數據寫入。
    注意,對於 Innodb 類型表來說,還需要備份其日志文件,即 ib_logfile* 文件。總的來說,直接拷貝的方式可靠性低。

  5. Navicat工具備份

     

    優缺點:使用方便,但是備份和還原時間都比較長。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM