http://hongge.blog.51cto.com/
始興網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),始興網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為始興上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的始興做網(wǎng)站的公司定做!
使用xtrabackup進(jìn)行MySQL數(shù)據(jù)庫備份
前面介紹mysqldump備份方式是采用邏輯備份,其最大的缺陷就是備份和恢復(fù)速度都慢,對(duì)于一個(gè)小于50G的數(shù)據(jù)庫而言,這個(gè)速度還是能接受的,但如果數(shù)據(jù)庫非常大,那再使用mysqldump備份就不太適合了。
這時(shí)就需要一種好用又高效的工具,xtrabackup就是其中一款,號(hào)稱免費(fèi)版的InnoDB HotBackup。
Xtrabackup實(shí)現(xiàn)是物理備份,而且是物理熱備
目前主流的有兩個(gè)工具可以實(shí)現(xiàn)物理熱備:ibbackup和xtrabackup;ibbackup是商業(yè)軟件,需要授權(quán),非常昂貴。而xtrabackup功能比ibbackup還要強(qiáng)大,但卻是開源的。因此我們這里就來介紹xtrabackup的使用。
Xtrabackup提供了兩種命令行工具:
xtrabackup:專用于備份InnoDB和XtraDB引擎的數(shù)據(jù);
innobackupex:這是一個(gè)perl腳本,在執(zhí)行過程中會(huì)調(diào)用xtrabackup命令,這樣用該命令即可以實(shí)現(xiàn)備份InnoDB,也可以備份MyISAM引擎的對(duì)象。
Xtrabackup是由percona提供的mysql數(shù)據(jù)庫備份工具,特點(diǎn):
(1)備份過程快速、可靠;
(2)備份過程不會(huì)打斷正在執(zhí)行的事務(wù);
(3)能夠基于壓縮等功能節(jié)約磁盤空間和流量;
(4)自動(dòng)實(shí)現(xiàn)備份檢驗(yàn);
(5)還原速度快。
官方鏈接地址:http://www.percona.com/software/percona-xtrabackup;可以下載源碼編譯安裝,也可以下載適合的RPM包或使用yum進(jìn)行安裝或者下載二進(jìn)制源碼包。
安裝xtrabackup
1)下載xtrabackup
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/tarball/percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz
2)解壓
# tar zxf percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz
3)進(jìn)入解壓目錄
# cd percona-xtrabackup-2.4.4-Linux-x86_64/
4)復(fù)制bin下的所有程序到/usr/bin
[root@localhost percona-xtrabackup-2.4.4-Linux-x86_64]# cp bin/* /usr/bin/
Xtrabackup中主要包含兩個(gè)工具:
xtrabackup:是用于熱備份innodb, xtradb表中數(shù)據(jù)的工具,支持在線熱備份,可以在不加鎖的情況下備份Innodb數(shù)據(jù)表,不過此工具不能操作Myisam引擎表;
innobackupex:是將xtrabackup進(jìn)行封裝的perl腳本,能同時(shí)處理Innodb和Myisam,但在處理Myisam時(shí)需要加一個(gè)讀鎖。
由于操作Myisam時(shí)需要加讀鎖,這會(huì)堵塞線上服務(wù)的寫操作,而Innodb沒有這樣的限制,所以數(shù)據(jù)庫中Innodb表類型所占的比例越大,則越有利。
4)安裝相關(guān)插件
#yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey.x86_64 perl-Digest-MD5 –y
5)下載percona-toolkit并安裝
#wget https://www.percona.com/downloads/percona-toolkit/2.2.19/RPM/percona-toolkit-2.2.19-1.noarch.rpm
# rpm -vih percona-toolkit-2.2.19-1.noarch.rpm
下面就可以啟動(dòng)備份了
方案一:xtrabackup完全備份+binlog增量備份
1、備份
創(chuàng)建備份目錄
# mkdir -p /opt/mysqlbackup/{full,inc}
full:全備存放的目錄;inc:增量備份存放的目錄
1)完全備份
基本語法:# innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/
執(zhí)行下面的命令進(jìn)行完全備份:
# innobackupex --user=root --password=123456 /opt/mysqlbackup/full
注: --defaults-file=/etc/my.cnf 指定mysql的配置文件my.cfg,如果指定則必須是第一個(gè)參數(shù)。
/path/to/BACKUP-DIR/指定備份所存放的目標(biāo)目錄,備份過程會(huì)創(chuàng)建一個(gè)以當(dāng)時(shí)備份時(shí)間命名的目錄存放備份文件。
出現(xiàn)如下提示。表示成功
備份后的文件:
在備份的同時(shí),備份數(shù)據(jù)會(huì)在備份目錄下創(chuàng)建一個(gè)以當(dāng)前日期時(shí)間為名字的目錄存放備份文件:
各文件說明:
(1)xtrabackup_checkpoints —— 備份類型(如完全或增量)、備份狀態(tài)(如是否已經(jīng)為prepared狀態(tài))和LSN(日志序列號(hào))范圍信息;
每個(gè)InnoDB頁(通常為16k大小)都會(huì)包含一個(gè)日志序列號(hào),即LSN。LSN是整個(gè)數(shù)據(jù)庫系統(tǒng)的系統(tǒng)版本號(hào),每個(gè)頁面相關(guān)的LSN能夠表明此頁面最近是如何發(fā)生改變的。
(2)xtrabackup_binlog_info —— mysql服務(wù)器當(dāng)前正在使用的二進(jìn)制日志文件及至備份這一刻為止二進(jìn)制日志事件的位置。
(3)xtrabackup_binlog_pos_innodb —— 二進(jìn)制日志文件及用于InnoDB或XtraDB表的二進(jìn)制日志文件的當(dāng)前position。
(4)xtrabackup_binary —— 備份中用到的xtrabackup的可執(zhí)行文件;
(5)backup-my.cnf —— 備份命令用到的配置選項(xiàng)信息;
在使用innobackupex進(jìn)行備份時(shí),還可以使用--no-timestamp選項(xiàng)來阻止命令自動(dòng)創(chuàng)建一個(gè)以時(shí)間命名的目錄;如此一來,innobackupex命令將會(huì)創(chuàng)建一個(gè)BACKUP-DIR目錄來存儲(chǔ)備份數(shù)據(jù)
注意:相關(guān)選項(xiàng)說明:
其中,--user指定連接數(shù)據(jù)庫的用戶名,--password指定連接數(shù)據(jù)庫的密碼,--defaults-file指定數(shù)據(jù)庫的配置文件,innobackupex要從其中獲取datadir等信息;--database指定要備份的數(shù)據(jù)庫,這里指定的數(shù)據(jù)庫只對(duì)MyISAM表有效,對(duì)于InnoDB 數(shù)據(jù)來說都是全備(所有數(shù)據(jù)庫中的InnoDB數(shù)據(jù)都進(jìn)行了備份,不是只備份指定的數(shù)據(jù)庫,恢復(fù)時(shí)也一樣);/opt/mysqlbackup/full是備份文件的存放位置。
注意:備份數(shù)據(jù)庫的用戶需要具有相應(yīng)權(quán)限,如果要使用一個(gè)最小權(quán)限的用戶進(jìn)行備份,則可基于如下命令創(chuàng)建此類用戶:
mysql> create user 'bkpuser'@'localhost' identified by '123456';
mysql> revoke all privileges,grant option from 'bkpuser'@'localhost';
mysql> grant reload,lock tables,replication client, process on *.* to 'bkpuser'@'localhost';
mysql> flush privileges;
至此全備完全成功,然后向mysql某個(gè)庫插入幾條數(shù)據(jù),然后進(jìn)行增量備份
對(duì)完全備份的后數(shù)據(jù)庫更改進(jìn)行二進(jìn)制日志增量備份:
查看完全備份時(shí)binlog日志位置(position):
模擬數(shù)據(jù)庫修改:
2)增量備份二進(jìn)制文件:
#mysqlbinlog --start-position=2378 /usr/local/mysql/data/mysql-bin.000023 > /opt/mysqlbackup/inc/`date +%F`.sql
2、還原數(shù)據(jù)庫:
模擬數(shù)據(jù)庫損壞:
我這里直接使用刪除數(shù)據(jù)目錄文件來模擬損壞。
# rm -fr /usr/local/mysql/data/*
還原完全備份:
(1)準(zhǔn)備(prepare)一個(gè)完全備份
一般情況下,在備份完成后,數(shù)據(jù)尚且不能用于恢復(fù)操作,因?yàn)閭浞莸臄?shù)據(jù)中可能會(huì)包含尚未提交的事務(wù)或已經(jīng)提交但尚未同步至數(shù)據(jù)文件中的事務(wù)。因此,此時(shí)數(shù)據(jù)文件仍處理不一致狀態(tài)?!皽?zhǔn)備”的主要作用正是通過回滾未提交的事務(wù)及同步已經(jīng)提交的事務(wù)至數(shù)據(jù)文件也使得數(shù)據(jù)文件處于一致性狀態(tài)。
在準(zhǔn)備(prepare)過程結(jié)束后,InnoDB表數(shù)據(jù)已經(jīng)前滾到整個(gè)備份結(jié)束的點(diǎn),而不是回滾到xtrabackup剛開始時(shí)的點(diǎn)。
innobakupex命令的--apply-log選項(xiàng)可用于實(shí)現(xiàn)上述功能。如下面的命令:
--apply-log指明是將日志應(yīng)用到數(shù)據(jù)文件上,完成之后將備份文件中的數(shù)據(jù)恢復(fù)到數(shù)據(jù)庫中:
# innobackupex --apply-log /opt/mysqlbackup/full/2016-09-12_11-29-55/
注:/opt/mysqlbackup/full/2016-09-12_11-29-55/備份文件所在目錄名稱
如果執(zhí)行正確,其最后輸出的幾行信息通常如下:
在實(shí)現(xiàn)“準(zhǔn)備”的過程中,innobackupex通常還可以使用--use-memory選項(xiàng)來指定其可以使用的內(nèi)存的大小,默認(rèn)通常為100M。如果有足夠的內(nèi)存可用,可以多劃分一些內(nèi)存給prepare的過程,以提高其完成速度。
innobackupex命令的--copy-back選項(xiàng)用于執(zhí)行恢復(fù)操作,其通過復(fù)制所有數(shù)據(jù)相關(guān)的文件至mysql服務(wù)器DATADIR目錄中來執(zhí)行恢復(fù)過程。innobackupex通過backup-my.cnf來獲取DATADIR目錄的相關(guān)信息。
(2)還原數(shù)據(jù)庫語法:
# innobackupex --copy-back /opt/mysqlbackup/full/2016-09-12_11-29-55/
這里的--copy-back指明是進(jìn)行數(shù)據(jù)恢復(fù)。數(shù)據(jù)恢復(fù)完成之后,需要修改相關(guān)文件的權(quán)限mysql數(shù)據(jù)庫才能正常啟動(dòng)。
如果執(zhí)行正確,其輸出信息的最后幾行通常如下:
請(qǐng)確保如上信息的最行一行出現(xiàn)“completed OK!”。
修改還原后的數(shù)據(jù)目錄權(quán)限:
當(dāng)數(shù)據(jù)恢復(fù)至DATADIR目錄以后,還需要確保所有數(shù)據(jù)文件的屬主和屬組均為正確的用戶,如mysql,否則,在啟動(dòng)mysqld之前還需要事先修改數(shù)據(jù)文件的屬主和屬組。如:
# chown -R mysql:mysql /usr/local/mysql/data/
重啟動(dòng)MySQL:
# systemctl restart mysqld
驗(yàn)證還原后的數(shù)據(jù):
mysql> select * from tb1;
+----+------+
| id | name |
+----+------+
| 1 | tom1 |
| 2 | tom2 |
+----+------+
(3)還原增量備份:
為了防止還原時(shí)產(chǎn)生大量的二進(jìn)制日志,在還原時(shí)可臨時(shí)關(guān)閉二進(jìn)制日志后再還原:
mysql> set sql_log_bin=0;
mysql> source /opt/mysqlbackup/inc/2016-09-12.sql
重新啟動(dòng)二進(jìn)制日志并驗(yàn)證還原數(shù)據(jù):
mysql> set sql_log_bin=1;
驗(yàn)證數(shù)據(jù)是否恢復(fù)回來
方案二、xtrabackup完全備份+xtrabacup增量備份
前面我們進(jìn)行增量備份時(shí),使用的還是老方法:備份二進(jìn)制日志。其實(shí)xtrabackup還支持進(jìn)行增量備份。
先介紹下xtrabackup的備份原理
在InnoDB內(nèi)部會(huì)維護(hù)一個(gè)redo日志文件,我們也可以叫做事務(wù)日志文件(transaction log,事務(wù)日志)。事務(wù)日志會(huì)存儲(chǔ)每一個(gè)InnoDB表數(shù)據(jù)的記錄修改。當(dāng)InnoDB啟動(dòng)時(shí),InnoDB會(huì)檢查數(shù)據(jù)文件和事務(wù)日志,并執(zhí)行兩個(gè)步驟:它應(yīng)用已經(jīng)提交的事務(wù)日志到數(shù)據(jù)文件,并將修改過但沒有提交的數(shù)據(jù)進(jìn)行回滾操作。
xtrabackup在啟動(dòng)時(shí)會(huì)記住log sequence number(LSN),并且復(fù)制所有的數(shù)據(jù)文件。復(fù)制過程需要一些時(shí)間,所以這期間如果數(shù)據(jù)文件有改動(dòng),那么將會(huì)使數(shù)據(jù)庫處于一個(gè)不同的時(shí)間點(diǎn)。這時(shí),xtrabackup會(huì)運(yùn)行一個(gè)后臺(tái)進(jìn)程,用于監(jiān)視事務(wù)日志,并從事務(wù)日志復(fù)制最新的修改。xtrabackup必須持續(xù)的做這個(gè)操作,是因?yàn)槭聞?wù)日志是會(huì)輪轉(zhuǎn)重復(fù)的寫入,并且事務(wù)日志可以被重用。所以xtrabackup自啟動(dòng)開始,就不停的將事務(wù)日志中每個(gè)數(shù)據(jù)文件的修改都記錄下來。這就是xtrabackup的備份過程
所以每個(gè)InnoDB的頁面都會(huì)包含一個(gè)LSN信息,每當(dāng)相關(guān)的數(shù)據(jù)發(fā)生改變,相關(guān)的頁面的LSN就會(huì)自動(dòng)增長。這正是InnoDB表可以進(jìn)行增量備份的基礎(chǔ)。
xtraBackup基于InnoDB的crash-recovery功能。它會(huì)復(fù)制innodb的data file,由于不鎖表,復(fù)制出來的數(shù)據(jù)是不一致的,在恢復(fù)的時(shí)候使用crash-recovery,使得數(shù)據(jù)恢復(fù)一致。
當(dāng)InnoDB啟動(dòng)的時(shí)候,它會(huì)先去檢查data file和transaction log,并且會(huì)做二步操作:
1.It applies committed transaction logentries to the data files
2.it performs an undo operation on anytransactions that modified data but did not commit.
所以在prepare過程中,XtraBackup使用復(fù)制到的transactions log對(duì)備份出來的innodb data file進(jìn)行crash recovery。
測試環(huán)境準(zhǔn)備
創(chuàng)建一個(gè)測試數(shù)據(jù)庫,并創(chuàng)建一張表輸入幾行數(shù)據(jù)
mysql> create database test;
mysql> use test;
mysql> create table xx(id int,name varchar(20));
mysql> insert into xx values(1,'tom1');
mysql> insert into xx values(2,'tom2');
1、 xtrabacup進(jìn)行備份
執(zhí)行完全備份:
備份命令:
# xtrabackup --defaults-file=/etc/my.cnf --user=root --password="123456" --port=3306 --backup --target-dir=/opt/mysqlbackup/full/full_incre_$(date +%Y%m%d_%H%M%S)
部分顯示信息如下圖所示:
其中,--defaults-file指定數(shù)據(jù)庫的配置文件,如果使用該參數(shù)必須做為第一個(gè)參數(shù);--user指定連接數(shù)據(jù)庫的用戶名;--password指定連接數(shù)據(jù)庫的密碼;--port指定連接數(shù)據(jù)庫的端口號(hào);--backup 實(shí)施備份到target-dir; --target-dir=name 備份文件的存放目錄路徑。innobackupex要從其中獲取datadir等信息;--database指定要備份的數(shù)據(jù)庫,這里指定的數(shù)據(jù)庫只對(duì)MyISAM表和InnoDB表的表結(jié)構(gòu)有效,對(duì)于InnoDB 數(shù)據(jù)來說都是全備(所有數(shù)據(jù)庫中的InnoDB數(shù)據(jù)都進(jìn)行了備份,不是只備份指定的數(shù)據(jù)庫,恢復(fù)時(shí)也一樣);/opt/mysqlbackup/full/是備份文件的存放位置。
查看完全備份文件
[root@localhost ~]# ls /opt/mysqlbackup/full/ -l
drwxr-x---. 8 root root 4096 Sep 12 22:11 full_incre_20160912_221111
xtrabackup進(jìn)行增量備份
先錄入些數(shù)據(jù),實(shí)現(xiàn)第一次增量數(shù)據(jù):
mysql> use test;
mysql> insert into xx values(3,'tom3');
再進(jìn)行增量備份1
備份命令:
# xtrabackup --defaults-file=/etc/my.cnf --user=root --password="123456" --port=3306 --backup --target-dir=/opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/full/full_incre_20160912_221111/
部分顯示信息如下圖所示:
其中,--incremental-basedir指定上次完整備份或者增量備份文件的位置(即如果是第一次增量備份則指向完全備份所在目錄,在執(zhí)行過增量備份之后再一次進(jìn)行增量備份時(shí),其--incremental-basedir應(yīng)該指向上一次的增量備份所在的目錄)。
查看增量備份文件:
[root@localhost ~]# ls -l /opt/mysqlbackup/inc/
drwxr-x---. 8 root root 4096 Sep 12 22:15 incre_20160912_221510
注:
這里的增量備份其實(shí)只針對(duì)的是InnoDB,對(duì)于MyISAM來說,還是完整備份。
向表中再插入幾行數(shù)據(jù),繼續(xù)第二次增量備份
mysql> use test;
mysql> insert into xx values(4,'tom4');
mysql> commit;
進(jìn)行第二次增量備份
備份命令:
# xtrabackup --defaults-file=/etc/my.cnf --user=root --password="123456" --port=3306 --backup --target-dir=/opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/inc/incre_20160912_221510/
部分顯示信息如下圖所示:
注:第二次增量備份--incremental-basedir指向上一次增量備份文件的位置。
查看增量備份文件
[root@localhost ~]# ls -l /opt/mysqlbackup/inc/
drwxr-x---. 8 root root 4096 Sep 12 22:15 incre_20160912_221510
drwxr-x---. 8 root root 4096 Sep 12 22:19 incre_20160912_221916
2、 xtrabacup進(jìn)行增量恢復(fù)
為了驗(yàn)證比對(duì),先刪除兩個(gè)增量備份前表里面的數(shù)據(jù)
mysql> use test;
mysql> delete from xx where id=3;
完整備份恢復(fù):
在進(jìn)行恢復(fù)前,如果完整備份在遠(yuǎn)程主機(jī)上,首先將完整備份復(fù)制到本地主機(jī)上,如果是tar包,則需要先解包,解包命令為:tar –izxf xxx.tar,這里必須使用-i參數(shù)(忽略存檔中的 0 字節(jié)塊(通常意味著文件結(jié)束))。
開始全備份恢復(fù)
命令如下:
# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123456" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20160912_221111/
部分顯示信息如下圖所示:
恢復(fù)到第一次增量的時(shí)刻
增量備份恢復(fù)的步驟和完整備份恢復(fù)的步驟基本一致,只是應(yīng)用日志的過程稍有不同。增量備份恢復(fù)時(shí),是先將所有的增量備份挨個(gè)應(yīng)用到完整備份的數(shù)據(jù)文件中,然后再將完整備份中的數(shù)據(jù)恢復(fù)到數(shù)據(jù)庫中。
恢復(fù)命令:
# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123456" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20160912_221111/ --incremental-dir=/opt/mysqlbackup/inc/incre_20160912_221510/
部分顯示信息如下圖所示:
恢復(fù)到第二次增量備份前面:
恢復(fù)命令:
# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123456" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20160912_221111/ --incremental-dir=/opt/mysqlbackup/inc/incre_20160912_221916/
部分顯示信息如下圖所示:
恢復(fù)整個(gè)庫
恢復(fù)命令:
# xtrabackup --defaults-file=/etc/my.cnf --prepare --user=root --password="123456" --target-dir=/opt/mysqlbackup/full/full_incre_20160912_221111/
部分顯示信息如下圖所示:
然后停止mysql數(shù)據(jù)庫:
[root@localhost ~]# systemctl stop mysqld
開始rsync數(shù)據(jù)文件:
# cd /opt/mysqlbackup/full/full_incre_20160912_221111/
#rsync -rvt --exclude 'xtrabackup_checkpoints' --exclude 'xtrabackup_logfile' ./ /usr/local/mysql/data/
當(dāng)數(shù)據(jù)恢復(fù)至DATADIR目錄以后,還需要確保所有數(shù)據(jù)文件的屬主和屬組均為正確的用戶,如mysql,否則,在啟動(dòng)mysqld之前還需要事先修改數(shù)據(jù)文件的屬主和屬組。
授予mysql訪問權(quán)限:
# chown -R mysql:mysql /usr/local/mysql/data/
啟動(dòng)mysql服務(wù):
# systemctl start mysqld
驗(yàn)證
登錄mysql,看到以前在備份之后刪除的數(shù)據(jù)已經(jīng)通過2次增量備份恢復(fù)過來了,如下所示:
[root@localhost ~]# mysql -uroot -p123456 -e "select * from test.xx"
+------+------+
| id | name |
+------+------+
| 1 | tom1 |
| 2 | tom2 |
| 3 | tom3 |
| 4 | tom4 |
+------+------+
方案三:innobackupex全庫備份+innobackupex增量備份
測試環(huán)境準(zhǔn)備
創(chuàng)建一個(gè)測試數(shù)據(jù)庫,并創(chuàng)建一張表輸入幾行數(shù)據(jù)
mysql> create database test2;
mysql> use test2;
mysql> create table yy(id int,name varchar(20));
mysql> insert into yy values(1,'kim1');
mysql> insert into yy values(2,'kim2');
1、innobackupex先做完全備份
命令如下:
# innobackupex --defaults-file=/etc/my.cnf --user=root --password="123456" /opt/mysqlbackup/full/full_incre_$(date +%Y%m%d_%H%M%S) --no-timestamp
部分顯示信息如下圖所示:
查看完全備份文件
# ll /opt/mysqlbackup/full/
drwxr-x---. 10 root root 4096 Sep 12 23:52 full_incre_20160912_235237
innobackupex做增量備份
做第一次增量備份
先錄入增量數(shù)據(jù)
mysql> use test2;
mysql> insert into yy values(3,'kim3');
再進(jìn)行增量備份,命令如下:
# innobackupex --incremental /opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/full/full_incre_20160912_235237/ --user=root --password="123456" --no-timestamp
部分顯示信息如下圖所示:
查看增量備份文件
# ll /opt/mysqlbackup/inc/
drwxr-x---. 10 root root 4096 Sep 12 23:56 incre_20160912_235636
基于全備和第一個(gè)增量備份來做第二次增量備份
先錄入增量數(shù)據(jù)錄入
mysql> use test2;
mysql> insert into yy values(4,'kim4');
開始進(jìn)行第二次增量備份,備份命令:
# innobackupex --incremental /opt/mysqlbackup/inc/incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/inc/incre_20160912_235636/ --user=root --password="123456" --no-timestamp
部分顯示信息如下圖所示:
查看增量備份文件
# ll /opt/mysqlbackup/inc/
drwxr-x---. 10 root root 4096 Sep 12 23:56 incre_20160912_235636
drwxr-x---. 10 root root 4096 Sep 12 23:59 incre_20160912_235942
2、innobackupex做增量恢復(fù)
先刪除兩次增量數(shù)據(jù),用來查看驗(yàn)證恢復(fù)結(jié)果
mysql> use test2;
mysql> delete from yy where id=3;
開始做恢復(fù),恢復(fù)全備份
命令如下:
# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20160912_235237/
部分顯示信息如下圖所示:
--redo-only 用于準(zhǔn)備增量備份內(nèi)容把數(shù)據(jù)合并到全備份目錄,配合incremental-dir 增量備份目錄使用
基于全備份進(jìn)行第一次增量備份的恢復(fù)
命令如下:
# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20160912_235237/ --incremental-dir=/opt/mysqlbackup/inc/incre_20160912_235636/
基于全備份和第一次增量備份,恢復(fù)第二次增量備份
命令如下:
# innobackupex --apply-log --redo-only /opt/mysqlbackup/full/full_incre_20160912_235237/ --incremental-dir=/opt/mysqlbackup/inc/incre_20160912_235942/
恢復(fù)整個(gè)數(shù)據(jù)庫
停止數(shù)據(jù)庫
# systemctl stop mysqld
清空數(shù)據(jù)目錄下所有文件
# mkdir -p /tmp/mysqldatabak
# mv /usr/local/mysql/data/* /tmp/mysqldatabak/
將恢復(fù)好的數(shù)據(jù)按照配置文件的需求拷貝到相應(yīng)目錄
# innobackupex --defaults-file=/etc/my.cnf --user=root --password="123456" --copy-back /opt/mysqlbackup/full/full_incre_20160912_235237/
當(dāng)數(shù)據(jù)恢復(fù)至DATADIR目錄以后,還需要確保所有數(shù)據(jù)文件的屬主和屬組均為正確的用戶,如mysql,否則,在啟動(dòng)mysqld之前還需要事先修改數(shù)據(jù)文件的屬主和屬組。
賦予mysql賬號(hào)權(quán)限
# chown -R mysql:mysql /usr/local/mysql/data/
啟動(dòng)mysql服務(wù)
# systemctl start mysqld
登錄mysql界面,查看數(shù)據(jù)是否已經(jīng)恢復(fù),如下所示:
mysql> use test2;
mysql> select * from yy;
+------+------+
| id | name |
+------+------+
| 1 | kim1 |
| 2 | kim2 |
| 3 | kim3 |
| 4 | kim4 |
+------+------+
附:Xtrabackup的“流”及“備份壓縮”功能
Xtrabackup對(duì)備份的數(shù)據(jù)文件支持“流”功能,即可以將備份的數(shù)據(jù)通過STDOUT傳輸給tar程序進(jìn)行歸檔,而不是默認(rèn)的直接保存至某備份目錄中。要使用此功能,僅需要使用--stream選項(xiàng)即可。如:
# innobackupex --user=root --password="123456" --stream=tar /opt/mysqlbackup/full/ | gzip >/opt/mysqlbackup/full/full_`date +%F_%H%M%S`.tar.gz
http://hongge.blog.51cto.com/