您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(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)擊(此處)折疊或打開
[root@zhanglin bin]./xtrabackup --backup --log-stream --target-dir=/mysqlbak/xtrabackup/20141022 --datadir=/usr/local/mysql/data
./xtrabackup version 2.2.3 based on MySQL server 5.6.17 Linux (x86_64) (revision id: )
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /usr/local/mysql/data
xtrabackup: open files limit requested 0, set to 1024
xtrabackup: using the following InnoDB configuration:
xtrabackup: innodb_data_home_dir = ./
xtrabackup: innodb_data_file_path = ibdata1:10M:autoextend
xtrabackup: innodb_log_group_home_dir = ./
xtrabackup: innodb_log_files_in_group = 2
xtrabackup: innodb_log_file_size = 50331648
-------略
[01] Copying ./mdm_pro/org_organ_business_group.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_organ_business_group.ibd
[01] ...done
[01] Copying ./mdm_pro/coding_rule.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/coding_rule.ibd
[01] ...done
[01] Copying ./mdm_pro/org_store_channel.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_store_channel.ibd
[01] ...done
[01] Copying ./mdm_pro/dim_org_store.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/dim_org_store.ibd
[01] ...done
[01] Copying ./mdm_pro/org_organ_region.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_organ_region.ibd
[01] ...done
[01] Copying ./mdm_pro/org_organ_managing_city.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_organ_managing_city.ibd
[01] ...done
[01] Copying ./mdm_pro/pro_barcode.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/pro_barcode.ibd
[01] ...done
[01] Copying ./mdm_pro/type_duibi_back.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/type_duibi_back.ibd
[01] ...done
>> log scanned up to (18573586827)
[01] Copying ./mdm_pro/org_store.ibd to /mysqlbak/xtrabackup/20141022/mdm_pro/org_store.ibd
[01] ...done
>> log scanned up to (18573586827)
xtrabackup: The latest check point (for incremental): \'18573586827\'
xtrabackup: Stopping log copying thread.
.>> log scanned up to (18573586827)
xtrabackup: Transaction log of lsn (18573586258) to (18573586827) was copied.
[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)擊(此處)折疊或打開
[root@zhanglin bin]# ./xtrabackup --backup --log-stream --target-dir=/mysqlbak/xtrabackup/20141022_full_in --datadir=/usr/local/mysql/data --incremental-basedir=/mysqlbak/xtrabackup/base
./xtrabackup version 2.2.3 based on MySQL server 5.6.17 Linux (x86_64) (revision id: )
incremental backup from 16888466657 is enabled.
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /usr/local/mysql/data
xtrabackup: open files limit requested 0, set to 1024
xtrabackup: using the following InnoDB configuration:
xtrabackup: innodb_data_home_dir = ./
xtrabackup: innodb_data_file_path = ibdata1:10M:autoextend
xtrabackup: innodb_log_group_home_dir = ./
xtrabackup: innodb_log_files_in_group = 2
xtrabackup: innodb_log_file_size = 50331648
>> log scanned up to (18580258871)
>> log scanned up to (18580258871)
xtrabackup: using the full scan for incremental backup
[01] Copying ./ibdata1 to /mysqlbak/xtrabackup/20141022_full_in/ibdata1.delta
----略
[01] Copying ./mdm_pro/mid_org_area.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/mid_org_area.ibd.delta
[01] ...done
[01] Copying ./mdm_pro/org_organ_business_group.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_organ_business_group.ibd.delta
[01] ...done
[01] Copying ./mdm_pro/coding_rule.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/coding_rule.ibd.delta
[01] ...done
[01] Copying ./mdm_pro/org_store_channel.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_store_channel.ibd.delta
[01] ...done
[01] Copying ./mdm_pro/dim_org_store.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/dim_org_store.ibd.delta
[01] ...done
[01] Copying ./mdm_pro/org_organ_region.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_organ_region.ibd.delta
[01] ...done
[01] Copying ./mdm_pro/org_organ_managing_city.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_organ_managing_city.ibd.delta
[01] ...done
[01] Copying ./mdm_pro/pro_barcode.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/pro_barcode.ibd.delta
[01] ...done
[01] Copying ./mdm_pro/type_duibi_back.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/type_duibi_back.ibd.delta
>> log scanned up to (18580258871)
[01] ...done
[01] Copying ./mdm_pro/org_store.ibd to /mysqlbak/xtrabackup/20141022_full_in/mdm_pro/org_store.ibd.delta
[01] ...done
xtrabackup: The latest check point (for incremental): \'18580258871\'
xtrabackup: Stopping log copying thread.
.>> log scanned up to (18580258871)
xtrabackup: Transaction log of lsn (18580258871) to (18580258871) was copied.
[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è)資訊頻道,感謝大家的支持。
免責(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)容。