溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行MySQL 5.6 xtrabackup 全量和增量的備份及恢復(fù)

發(fā)布時(shí)間:2021-11-16 16:19:03 來源:億速云 閱讀:631 作者:柒染 欄目:MySQL數(shù)據(jù)庫(kù)

今天就跟大家聊聊有關(guān)如何進(jìn)行MySQL 5.6 xtrabackup 全量和增量的備份及恢復(fù),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

xtrabackup 備份和恢復(fù)

    較之于MySQL自身的備份mysqldump,類似于Oracle的export。小數(shù)據(jù)量時(shí)效率還行,當(dāng)數(shù)據(jù)量達(dá)到一定規(guī)模時(shí),使用mysqldump執(zhí)行備份的時(shí)間也許還可接受,但恢復(fù)時(shí)間基本就不能忍受了。
這時(shí)就需要一種好用又高效的工具,xtrabackup就是其中一款,號(hào)稱免費(fèi)版的InnoDB HotBackup。
Xtrabackup提供了兩種命令行工具:
xtrabackup:專用于備份InnoDB引擎的數(shù)據(jù);
innobackupex:這是一個(gè)perl腳本,在執(zhí)行過程中會(huì)調(diào)用xtrabackup命令,這樣用該命令即可以實(shí)現(xiàn)備份InnoDB,也可以備份MyISAM引擎的對(duì)象。
 
一、Xtrabackup備份原理
  XtraBackup基于InnoDB的crash-recovery功能。它會(huì)復(fù)制innodb的data file,由于不鎖表,復(fù)制出來的數(shù)據(jù)是不一致的,在恢復(fù)的時(shí)候使用crash-recovery,使得數(shù)據(jù)恢復(fù)一致。
  InnoDB維護(hù)了一個(gè)redo log,又稱為transaction log,事務(wù)日志,它包含了innodb數(shù)據(jù)的所有改動(dòng)情況。當(dāng)InnoDB啟動(dòng)的時(shí)候,它會(huì)先去檢查data file和transaction log,并且會(huì)做二步操作:
  XtraBackup在備份的時(shí)候, 一頁(yè)一頁(yè)地復(fù)制innodb的數(shù)據(jù),而且不鎖定表,與此同時(shí),XtraBackup還有另外一個(gè)線程監(jiān)視著transactions log,一旦log發(fā)生變化,就把變化過的log pages復(fù)制走。為什么要急著復(fù)制走呢? 因?yàn)閠ransactions log文件大小有限,寫滿之后,就會(huì)從頭再開始寫,所以新數(shù)據(jù)可能會(huì)覆蓋到舊的數(shù)據(jù)。在prepare過程中,XtraBackup使用復(fù)制到的transactions log對(duì)備份出來的innodb data file進(jìn)行crash recovery。

注意:xtrabackup只備份數(shù)據(jù)文件,并不備份數(shù)據(jù)表結(jié)構(gòu)(.frm),所以使用xtrabackup恢復(fù)的時(shí)候,你必須有對(duì)應(yīng)表結(jié)構(gòu)文件(.frm)。
所以要手動(dòng)備份一下,以便xtrabackup恢復(fù)的時(shí)候使用。


二、備份操作:
   1 . 全量備份操作:

點(diǎn)擊(此處)折疊或打開

  1. [root@zhanglin bin]./xtrabackup --backup --log-stream --target-dir=/mysqlbak/xtrabackup/20141022 --datadir=/usr/local/mysql/data

  2. ./xtrabackup version 2.2.3 based on MySQL server 5.6.17 Linux (x86_64) (revision id: )

  3. xtrabackup: uses posix_fadvise().

  4. xtrabackup: cd to /usr/local/mysql/data

  5. xtrabackup: open files limit requested 0, set to 1024

  6. xtrabackup: using the following InnoDB configuration:

  7. xtrabackup: innodb_data_home_dir = ./

  8. xtrabackup: innodb_data_file_path = ibdata1:10M:autoextend

  9. xtrabackup: innodb_log_group_home_dir = ./

  10. xtrabackup: innodb_log_files_in_group = 2

  11. xtrabackup: innodb_log_file_size = 50331648


  12. -------略

  13. [01] Copying ./mdm_pro/org_organ_business_group.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_organ_business_group.ibd

  14. [01] ...done

  15. [01] Copying ./mdm_pro/coding_rule.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/coding_rule.ibd

  16. [01] ...done

  17. [01] Copying ./mdm_pro/org_store_channel.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_store_channel.ibd

  18. [01] ...done

  19. [01] Copying ./mdm_pro/dim_org_store.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/dim_org_store.ibd

  20. [01] ...done

  21. [01] Copying ./mdm_pro/org_organ_region.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_organ_region.ibd

  22. [01] ...done

  23. [01] Copying ./mdm_pro/org_organ_managing_city.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_organ_managing_city.ibd

  24. [01] ...done

  25. [01] Copying ./mdm_pro/pro_barcode.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/pro_barcode.ibd

  26. [01] ...done

  27. [01] Copying ./mdm_pro/type_duibi_back.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/type_duibi_back.ibd

  28. [01] ...done

  29. >> log scanned up to (18573586827)

  30. [01] Copying ./mdm_pro/org_store.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_store.ibd

  31. [01] ...done

  32. >> log scanned up to (18573586827)

  33. xtrabackup: The latest check point (for incremental): \'18573586827\'

  34. xtrabackup: Stopping log copying thread.

  35. .>> log scanned up to (18573586827)


  36. xtrabackup: Transaction log of lsn (18573586258) to (18573586827) was copied.

  37. [root@zhanglin bin]


2. 增量備份概念:

MySQL數(shù)據(jù)庫(kù)本身提供的工具并不支持真正的增量備份,二進(jìn)制日志恢復(fù)是point-in-time(時(shí)間點(diǎn))的恢復(fù)而不是增量備份。Xtrabackup工具支持對(duì)InnoDB存儲(chǔ)引擎的增量備份,工作原理如下:
  (1)首先完成一個(gè)完全備份,并記錄下此時(shí)檢查點(diǎn)的LSN(Log Sequence Number)。
  (2)在進(jìn)程增量備份時(shí),比較表空間中每個(gè)頁(yè)的LSN是否大于上次備份時(shí)的LSN,如果是,則備份該頁(yè),同時(shí)記錄當(dāng)前檢查點(diǎn)的LSN。
  首先,在logfile中找到并記錄最后一個(gè)checkpoint(“l(fā)ast checkpoint LSN”),然后開始從LSN的位置開始拷貝InnoDB的logfile到xtrabackup_logfile;接著,開始拷貝全部的數(shù)據(jù)文件

.ibd;在拷貝全部數(shù)據(jù)文件結(jié)束之后,才停止拷貝logfile。
  因?yàn)閘ogfile里面記錄全部的數(shù)據(jù)修改情況,所以,即時(shí)在備份過程中數(shù)據(jù)文件被修改過了,恢復(fù)時(shí)仍然能夠通過解析xtrabackup_logfile保持?jǐn)?shù)據(jù)的一致。
  在增量備份的目錄下,數(shù)據(jù)文件都是以.delta結(jié)尾的。增量備份只備份上一次全量備份后被修改過的page,所以增量備份只暫用較少的空間。增量備份可以在增量備份的基礎(chǔ)上增量。
增量備份優(yōu)點(diǎn):
  1、數(shù)據(jù)庫(kù)太大沒有足夠的空間全量備份,作增量備份有效節(jié)省空間,且效率高。
  2、支持熱備份。備份過程不鎖表,不受時(shí)間限制,不影響用戶使用。
  3、每日備份只產(chǎn)生少量數(shù)據(jù),遠(yuǎn)程備份傳輸更方便。同時(shí)節(jié)省空間。
  4、備份恢復(fù)基于文件操作,降低直接對(duì)數(shù)據(jù)庫(kù)操作風(fēng)險(xiǎn)。
  5、備份效率更高,恢復(fù)效率更高。

提醒一下可能出現(xiàn)的錯(cuò)誤:
(a)、在做增量備份的時(shí)候,如果--target-dir跟全量的一樣,就會(huì)出現(xiàn)下面的報(bào)錯(cuò)
[root@zhanglin bin]# ./xtrabackup --backup --log-stream --target-dir=/mysqlbak/xtrabackup/20141022 --datadir=/usr/local/mysql/data --incremental-

basedir=/mysqlbak/xtrabackup/20141022_full_in
xtrabackup: Error: cannot open /mysqlbak/xtrabackup/20141022_full_in/xtrabackup_checkpoints
xtrabackup: error: failed to read metadata from /mysqlbak/xtrabackup/20141022_full_in/xtrabackup_checkpoints

(b)、 同時(shí)如果--incremental-basedir= 參數(shù)的最后目錄不是base也會(huì)出錯(cuò)。
[root@zhanglin bin]# ./xtrabackup --backup --log-stream --target-dir=/mysqlbak/xtrabackup/20141022_full_in --datadir=/usr/local/mysql/data --incremental-

basedir=/mysqlbak/xtrabackup/20141022-test
xtrabackup: Error: cannot open /mysqlbak/xtrabackup/20141022-test/xtrabackup_checkpoints
xtrabackup: error: failed to read metadata from /mysqlbak/xtrabackup/20141022-test/xtrabackup_checkpoints

增量備份操作:

點(diǎn)擊(此處)折疊或打開

  1. [root@zhanglin bin]# ./xtrabackup --backup --log-stream --target-dir=/mysqlbak/xtrabackup/20141022_full_in --datadir=/usr/local/mysql/data --incremental-basedir=/mysqlbak/xtrabackup/base

  2. ./xtrabackup version 2.2.3 based on MySQL server 5.6.17 Linux (x86_64) (revision id: )

  3. incremental backup from 16888466657 is enabled.

  4. xtrabackup: uses posix_fadvise().

  5. xtrabackup: cd to /usr/local/mysql/data

  6. xtrabackup: open files limit requested 0, set to 1024

  7. xtrabackup: using the following InnoDB configuration:

  8. xtrabackup: innodb_data_home_dir = ./

  9. xtrabackup: innodb_data_file_path = ibdata1:10M:autoextend

  10. xtrabackup: innodb_log_group_home_dir = ./

  11. xtrabackup: innodb_log_files_in_group = 2

  12. xtrabackup: innodb_log_file_size = 50331648

  13. >> log scanned up to (18580258871)

  14. >> log scanned up to (18580258871)

  15. xtrabackup: using the full scan for incremental backup

  16. [01] Copying ./ibdata1 to /mysqlbak/xtrabackup/20141022_full_in/ibdata1.delta


  17. ----略

  18. [01] Copying ./mdm_pro/mid_org_area.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/mid_org_area.ibd.delta

  19. [01] ...done

  20. [01] Copying ./mdm_pro/org_organ_business_group.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_organ_business_group.ibd.delta

  21. [01] ...done

  22. [01] Copying ./mdm_pro/coding_rule.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/coding_rule.ibd.delta

  23. [01] ...done

  24. [01] Copying ./mdm_pro/org_store_channel.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_store_channel.ibd.delta

  25. [01] ...done

  26. [01] Copying ./mdm_pro/dim_org_store.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/dim_org_store.ibd.delta

  27. [01] ...done

  28. [01] Copying ./mdm_pro/org_organ_region.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_organ_region.ibd.delta

  29. [01] ...done

  30. [01] Copying ./mdm_pro/org_organ_managing_city.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_organ_managing_city.ibd.delta

  31. [01] ...done

  32. [01] Copying ./mdm_pro/pro_barcode.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/pro_barcode.ibd.delta

  33. [01] ...done

  34. [01] Copying ./mdm_pro/type_duibi_back.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/type_duibi_back.ibd.delta

  35. >> log scanned up to (18580258871)

  36. [01] ...done

  37. [01] Copying ./mdm_pro/org_store.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_store.ibd.delta

  38. [01] ...done

  39. xtrabackup: The latest check point (for incremental): \'18580258871\'

  40. xtrabackup: Stopping log copying thread.

  41. .>> log scanned up to (18580258871)


  42. xtrabackup: Transaction log of lsn (18580258871) to (18580258871) was copied.

  43. [root@zhanglin bin]#


3、xtrabackup 參數(shù)介紹:

--defaults-file=#
默認(rèn)配置文件的路徑,如果不該參數(shù),xtrabackup將從依次從以下位置查找配置文件/etc/my.cnf、/etc/mysql/my.cnf、/usr/local/etc/my.cnf、~/.my.cnf,并讀取配置文件中的[mysqld]和

[xtrabackup]配置段。[mysqld]中只需要指定datadir、innodb_data_home_dir、innodb_data_file_path、innodb_log_group_home_dir、innodb_log_files_in_group、innodb_log_file_size

6個(gè)參數(shù)即可讓xtrabackup正常工作。

--defaults-extra-file=# 如果使用了該參數(shù),在讀取了全局配置文件之后,會(huì)再讀取這里指定的配置文件
--target-dir=name 備份文件的存放目錄路徑
--backup 實(shí)施備份到target-dir
--prepare 實(shí)施對(duì)備份文件進(jìn)行恢復(fù)前的準(zhǔn)備(生成InnoDB log file)
--print-param 打印備份或恢復(fù)時(shí)需要的參數(shù)
--use-memory=# 該參數(shù)在 prepare 的時(shí)候使用,控制prepare時(shí)innodb實(shí)例使用的內(nèi)存量
--suspend-at-end 在target-dir目錄下產(chǎn)生一個(gè)xtrabackup_suspended文件,將xtrabackup進(jìn)程掛起,不停地將數(shù)據(jù)文件的變化同步到備份文件,直到用戶手工刪除

xtrabackup_suspended文件
--throttle=# 每秒IO次數(shù),限制backup時(shí)使用的I/O操作量,使備份對(duì)數(shù)據(jù)庫(kù)正常業(yè)務(wù)的影響最小化
--log-stream 該參數(shù)在backup的時(shí)候使用,將xtrabackup_logfile的內(nèi)容標(biāo)準(zhǔn)輸出,使用該參數(shù)時(shí)會(huì)自動(dòng)使用suspend-at-end參數(shù),innobackupex腳本的stream 模式會(huì)使用該參數(shù)。
--incremental-lsn=name 增量備份時(shí)只拷貝LSN比該參數(shù)指定值新的ibd pages,前次備份到了哪個(gè)LSN可以看前次備份集的xtrabackup_checkpoints文件
--incremental-basedir=name 該參數(shù)在backup的時(shí)候使用,備份比該參數(shù)指定位置的備份集新的idb pages
--incremental-dir=name 該參數(shù)在prepare的時(shí)候使用,指定prepare時(shí)產(chǎn)生的.delta 文件和日志文件的存放路徑
--tables=name 在備份file-per-table類型的數(shù)據(jù)文件時(shí)使用,使用正則表達(dá)式指定需要備份的innodb表
--datadir=name MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù)文件目錄。


三、全量和增量恢復(fù):
我們需要分別對(duì)全量、增量備份各做一次prepare操作。如果只是做全量恢復(fù),就只需要執(zhí)行一次你之前的全量就可以了,這里給出命令。
./xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/mysqlbak/xtrabackup/20141022

./xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/mysqlbak/xtrabackup/20141022_full_in --incremental-basedir=/mysqlbak/xtrabackup/base

提醒:xtrabackup只備份InnoDB數(shù)據(jù)文件,表結(jié)構(gòu)是不備份的,所以恢復(fù)的時(shí)候,你必須有對(duì)應(yīng)表結(jié)構(gòu)文件(.frm)。

看完上述內(nèi)容,你們對(duì)如何進(jìn)行MySQL 5.6 xtrabackup 全量和增量的備份及恢復(fù)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI