xtrabackup 備份恢復(fù)、工作原理

XtraBackup物理備份

Percona XtraBackup是世界上唯一的開(kāi)源,免費(fèi)的MySQL熱備份軟件,為InnoDB和XtraDB?數(shù)據(jù)庫(kù)執(zhí)行非阻塞備份。使用Percona XtraBackup,可以實(shí)現(xiàn)以下優(yōu)勢(shì):

  • 快速可靠地完成的備份

  • 備份期間的不間斷事務(wù)處理

  • 節(jié)省磁盤(pán)空間和網(wǎng)絡(luò)帶寬

  • 自動(dòng)備份驗(yàn)證

  • 創(chuàng)建熱InnoDB備份,而不暫停數(shù)據(jù)庫(kù)

  • 對(duì)MySQL進(jìn)行增量備份

  • 將壓縮的MySQL備份壓縮到另一個(gè)服務(wù)器

  • 在MySQL服務(wù)器之間移動(dòng)表

  • 輕松創(chuàng)建新的MySQL主從

  • 備份MySQL,而不向服務(wù)器添加負(fù)載

Percona XtraBackup為所有版本的Percona Server,MySQL和MariaDB進(jìn)行MySQL熱備份,壓縮和增量MySQL備份。Percona XtraBackup與MySQL,MariaDB和Percona Server配合使用。它支持完全非阻塞備份InnoDB,XtraDB和HailDB?存儲(chǔ)引擎。

Percona XtraBackup工作原理

Percona XtraBackup是基于InnoDB的崩潰恢復(fù)功能。復(fù)制InnoDB數(shù)據(jù)文件,導(dǎo)致內(nèi)部不一致的數(shù)據(jù);?但隨后它對(duì)文件執(zhí)行崩潰恢復(fù),使它們?cè)俅纬蔀橐恢拢捎玫臄?shù)據(jù)庫(kù)。

這是因?yàn)镮nnoDB維護(hù)一個(gè)重做日志,也稱(chēng)為事務(wù)日志。這包含對(duì)InnoDB數(shù)據(jù)的每個(gè)更改的記錄。當(dāng)InnoDB?啟動(dòng)時(shí),它會(huì)檢查數(shù)據(jù)文件和事務(wù)日志,并執(zhí)行兩個(gè)步驟。它將提交的事務(wù)日志條目應(yīng)用于數(shù)據(jù)文件,并對(duì)修改數(shù)據(jù)但未提交的任何事務(wù)執(zhí)行撤銷(xiāo)操作。

Percona XtraBackup通過(guò)記錄日志序列號(hào)(LSN)開(kāi)始工作,然后復(fù)制掉數(shù)據(jù)文件。這需要一小會(huì)時(shí)間來(lái)完成,所以如果文件正在改變,那么它們反映了數(shù)據(jù)庫(kù)在不同時(shí)間點(diǎn)的狀態(tài)。同時(shí),Percona XtraBackup運(yùn)行一個(gè)后臺(tái)進(jìn)程,監(jiān)視事務(wù)日志文件,并從中復(fù)制更改。Percona XtraBackup需要不斷地這樣做,因?yàn)槭聞?wù)日志是以循環(huán)方式編寫(xiě)的,并且可以在一段時(shí)間后重復(fù)使用。Percona XtraBackup從數(shù)據(jù)文件開(kāi)始執(zhí)行以來(lái)每次更改都需要事務(wù)日志記錄。

Percona XtraBackup將使用備份鎖?,作為一個(gè)輕量級(jí)替代。此功能在Percona Server?5.6+中可用。Percona XtraBackup使用這個(gè)自動(dòng)復(fù)制非InnoDB數(shù)據(jù),以避免阻塞修改InnoDB表的DML查詢(xún)。當(dāng)服務(wù)器支持備份鎖時(shí),xtrabackup將首先復(fù)制InnoDB數(shù)據(jù),運(yùn)行并復(fù)制MyISAM表和.frm文件。一旦完成,文件的備份將開(kāi)始。它將備份.frm,.MRG,.MYD,.MYI,.TRG,F(xiàn)LUSH?TABLES?WITH?READ?LOCKLOCK?TABLES?FOR?BACKUP.par

注意

鎖定只對(duì)MyISAM和其他非InnoDB表,只有?在?Percona XtraBackup完成所有InnoDB / XtraDB數(shù)據(jù)和日志后備份。Percona XtraBackup將使用備份鎖?,作為一個(gè)輕量級(jí)替代。此功能在Percona Server?5.6+中可用。Percona XtraBackup使用這個(gè)自動(dòng)復(fù)制非InnoDB數(shù)據(jù),以避免阻塞修改InnoDB表的DML查詢(xún)。FLUSH?TABLES?WITH?READ?LOCK

之后,xtrabackup將使用阻止所有操作,可能更改二進(jìn)制日志位置或?或 報(bào)告。然后xtrabackup將完成復(fù)制REDO日志文件和獲取二進(jìn)制日志坐標(biāo)。在這完成之后xtrabackup將解鎖二進(jìn)制日志和表。LOCK?BINLOG?FOR?BACKUPExec_Master_Log_PosExec_Gtid_SetSHOW?MASTER/SLAVE?STATUS

最后,二進(jìn)制日志位置將被打印到STDERR和xtrabackup?將退出返回0如果一切正常。

需要注意的是STDERR的xtrabackup不是寫(xiě)在任何文件中。您必須將其重定向到一個(gè)文件,例如,。xtrabackup?OPTIONS2>?backupout.log

它還將在備份的目錄中創(chuàng)建以下文件。

在準(zhǔn)備階段,Percona XtraBackup使用復(fù)制的事務(wù)日志文件對(duì)復(fù)制的數(shù)據(jù)文件執(zhí)行崩潰恢復(fù)。完成此操作后,數(shù)據(jù)庫(kù)就可以恢復(fù)和使用。

備份的MyISAM和InnoDB表最終將彼此一致,因?yàn)樵跍?zhǔn)備(恢復(fù))過(guò)程之后,InnoDB的數(shù)據(jù)會(huì)前滾到備份完成的點(diǎn),而不會(huì)回滾到該點(diǎn)開(kāi)始。這個(gè)時(shí)間點(diǎn)匹配所采取的位置,因此MyISAM數(shù)據(jù)和準(zhǔn)備的?InnoDB數(shù)據(jù)是同步的。FLUSH?TABLES?WITHREAD?LOCK

簡(jiǎn)而言之,這些工具允許您通過(guò)復(fù)制數(shù)據(jù)文件,復(fù)制日志文件以及將日志應(yīng)用到數(shù)據(jù)的各種組合來(lái)執(zhí)行流式和增量備份等操作。

還原備份

要使用xtrabackup恢復(fù)備份,您可以使用?或選項(xiàng)。xtrabackup?–copy-backxtrabackup?–move-back

xtrabackup將從my.cnf變量datadir,?innodb_data_home_dir,innodb_data_file_path,innodb_log_group_home_dir中讀取,?并檢查目錄是否存在。

這將復(fù)制MyISAM表,索引等(.FRM,.MRG,?.MYD,.MYI,.TRG,.TRN,.ARM,?.ARZ,.CSM,.CSV,par和.opt的文件)首先,InnoDB的下一步是表和索引,最后是日志文件。它將在復(fù)制文件時(shí)保留文件的屬性,mysql在啟動(dòng)數(shù)據(jù)庫(kù)服務(wù)器之前可能需要將文件的所有權(quán)更改為,因?yàn)樗鼈儗⒂蓜?chuàng)建備份的用戶(hù)擁有。

或者,該選項(xiàng)可用于恢復(fù)備份。此選項(xiàng)?與唯一的區(qū)別是,它不是復(fù)制文件,而是將其移動(dòng)到目標(biāo)位置。由于此選項(xiàng)刪除備份文件,因此必須謹(jǐn)慎使用。在沒(méi)有足夠的可用磁盤(pán)空間來(lái)保存這兩個(gè)數(shù)據(jù)文件及其備份副本的情況下,此功能非常有用。xtrabackup?–move-backxtrabackup?–copy-back

安裝XtraBackup

安裝XtraBackup?源

[root@ZHENGDA ~]# uname -r
3.10.0-327.el7.x86_64

yum -y install

安裝

yum -y install percona-xtrabackup-24

創(chuàng)建連接用戶(hù)并受權(quán)

mysql> CREATE USER 'zhengda'@'localhost' IDENTIFIED BY 'goyun.org';  mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'zhengda'@'localhost';  mysql> FLUSH PRIVILEGES;

完整備份

(1)xtrabackup只能備份innodb和xtradb兩種引擎的表,而不能備份myisam引擎的表;
(2)innobackupex是一個(gè)封裝了xtrabackup的Perl腳本,支持同時(shí)備份innodb和myisam,但在對(duì)myisam備份時(shí)需要加一個(gè)全局的讀鎖。還有就是myisam不支持增量備份。

$ xtrabackup --user=zhengda --password=goyun.org --backup      --target-dir=/data/backup    $ innobackupex --user=zhengda --password=goyun.org /path/ to /backup/dir/   $ innobackupex --user=zhengda --password=goyun.org --stream=tar ./ | bzip2 -

備份到/data/backup下

備份所有庫(kù):$ innobackupex --defaults-file=/etc/my.cnf--user=zhengda              --password=goyun.org --socket=/tmp/mysql.sock /data/backup               備份兩個(gè)庫(kù):$ innobackupex --databases="db1 db2"--defaults-file=/etc/my.cnf--user=zhengda               --password=goyun.org --socket=/tmp/mysql.sock /data/backup

增量備份

注:第一次增量備份要建立在完整備份之上才可以
–incremental /data/backup1 指定增量備份存放的目標(biāo)目錄
–incremental-basedir=/data/backup 指定完整備份的目錄

$ innobackupex  --defaults-file=etc/my.cnf --user=zhengda --password=goyun.org   --socket=/tmp/mysql.sock --incremental /data/backuup1 --incremental-basedir=/data/backup/#會(huì)根據(jù)當(dāng)天時(shí)間生成個(gè)目錄

進(jìn)行第二次增量備份,需要指定上一次增量備份的目錄
–incremental /data/backup2 指定這次增量備份目錄
–incremental-basedir=/data/backup1 指定上次增量備份目錄

$ innobackupex --defaults-file=/etc/my.cnf --user=zhengda --password=goyun.org   --socket=/tmp/mysql.sock --incremental /data/backup2 --incremental-basedir=/data/backup1/(....)

還原備份

–apply-log 準(zhǔn)備還原備份的選項(xiàng)
–use-memory=8G 設(shè)置準(zhǔn)備還原數(shù)據(jù)時(shí)使用的內(nèi)存,可以提高準(zhǔn)備所花費(fèi)的時(shí)間

$ innobackupex --apply-log --use-memory=8G /data/backup  #還原如下  $ innobackupex  --defaults-file=/etc/my.cnf --user= --password= --copy-back /data/backup  #或  $ xtrabackup --user=zhengda --password=goyun.org --copy-back --target-dir=/data/backup

使用Mysqldump進(jìn)行邏輯備份

mysqldump作為重要的MySQL備份工具,功能相當(dāng)強(qiáng)大。備份參數(shù)、恢復(fù)策略,需要仔細(xì)研究。

備份數(shù)據(jù)庫(kù):

備份單個(gè)數(shù)據(jù)庫(kù)或單個(gè)數(shù)據(jù)庫(kù)中的指定表:

mysqldump [OPTIONS] database [tb1] [tb2]…

備份多個(gè)數(shù)據(jù)庫(kù):

mysqldump [OPTIONS] –databases [OPTIONS] DB1 [DB2 DB3…]

備份所有數(shù)據(jù)庫(kù):

mysqldump [OPTIONS] –all-databases [OPTIONS]

添加此選項(xiàng)備份時(shí)不鎖表

--single-transaction

案例:本地備份所有庫(kù)

mysqldump -u root -p密碼 --all-databases > ./all.sql

案例:本地恢復(fù)所有庫(kù)

mysql -u root -p密碼  < ./all.sql

案例:備份本地db1,db2兩個(gè)庫(kù)

mysqldump -u root -p密碼 --databases db1 db2 > ./db1_2.sql

案例:恢復(fù)本地db1,db2兩個(gè)庫(kù)

mysql -u root -p密碼 db1 db2 < ./db1_2.sql

案例:在B主機(jī)上執(zhí)行將A主機(jī)的yun庫(kù)備份到B主機(jī)上 ,在B主機(jī)上需要?jiǎng)?chuàng)建yun庫(kù)

-C表示主機(jī)間的數(shù)據(jù)傳輸使用數(shù)據(jù)壓縮

mysqldump --host=192.168.6.108(A) -u root -p密碼 --opt yun | mysql --host=localhost(B) -u root -p密碼 -C yun

案例:在 B主機(jī) 上執(zhí)行將 A主機(jī) 上的所有數(shù)據(jù)庫(kù)備份到本地

mysqldump --host=192.168.6.108(A) -u root -p密碼 --all-databases > all.sql(B)

案例:恢復(fù)在B主機(jī)上執(zhí)行

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊13 分享