首頁  >  文章  >  運維  >  xtrabackup 備份還原、運作原理

xtrabackup 備份還原、運作原理

PHP中文网
PHP中文网原創
2017-06-20 13:14:132071瀏覽

XtraBackup實體備份

Percona XtraBackup是世界上唯一的開源,免費的MySQL熱備份軟體,為InnoDB和XtraDB 資料庫執行非阻塞備份。使用Percona XtraBackup,可以實現以下優勢:

  • 快速可靠地完成的備份

  • 備份期間的不間斷交易處理

  • #節省磁碟空間和網路頻寬

  • 自動備份驗證

  • 建立熱InnoDB備份,而不暫停資料庫

  • 對MySQL進行增量備份

  • 將壓縮的MySQL備份壓縮到另一個伺服器

  • #在MySQL伺服器之間移動表格

  • 輕鬆建立新的MySQL主從

  • 備份MySQL,而不到伺服器新增負載

Percona XtraBackup為所有版本的Percona Server,MySQL和MariaDB進行MySQL熱備份,壓縮和增量MySQL備份。 Percona XtraBackup與MySQL,MariaDB和Percona Server搭配使用。它支援完全非阻塞備份InnoDB,XtraDB和HailDB 儲存引擎。

Percona XtraBackup工作原理

Percona XtraBackup是基於InnoDB的崩潰復原功能。複製InnoDB資料文件,導致內部不一致的資料; 但隨後它對文件執行崩潰恢復,使它們再次成為一致,可用的資料庫。

這是因為InnoDB維護一個重做日誌,也稱為交易日誌。這包含對InnoDB資料的每個變更的記錄。當InnoDB 啟動時,它會檢查資料檔案和交易日誌,並執行兩個步驟。它將提交的交易日誌條目套用至資料文件,並對修改資料但未提交的任何交易執行撤銷操作。

Percona XtraBackup透過記錄日誌序號(LSN)開始運作,然後複製掉資料檔。這需要一小會時間來完成,所以如果檔案正在改變,那麼它們反映了資料庫在不同時間點的狀態。同時,Percona XtraBackup運行一個後台進程,監視事務日誌文件,並從中複製更改。 Percona XtraBackup需要不斷地這樣做,因為交易日誌是以循環方式編寫的,並且可以在一段時間後重複使用。 Percona XtraBackup從資料檔案開始執行以來每次變更都需要交易日誌記錄。

Percona XtraBackup將使用備份鎖定 ,作為一個輕量級替代。此功能在Percona Server 5.6+中可用。 Percona XtraBackup使用這個自動複製非InnoDB數據,以避免阻塞修改InnoDB表的DML查詢。當伺服器支援備份鎖定時,xtrabackup將首先複製InnoDB數據,運行並複製MyISAM表和.frm檔案。一旦完成,文件的備份將開始。它將備份.frm,.MRG,.MYD,.MYI,.TRG,FLUSH TABLES WITH READ LOCKLOCK TABLES FOR BACKUP.par

#注意

鎖定只對InnoDB表和其他非InnoDB表表,只有 在 Percona XtraBackup完成所有InnoDB / XtraDB資料和日誌後備份。 Percona XtraBackup將使用備份鎖 ,作為一個輕量級替代。此功能在Percona Server 5.6+中可用。 Percona XtraBackup使用這個自動複製非InnoDB數據,以避免阻塞修改InnoDB表的DML查詢。 FLUSH TABLES WITH READ LOCK

之後,xtrabackup將使用阻止所有操作,可能更改二進位日誌位置或 或 報告。然後xtrabackup將完成複製REDO日誌檔案和取得二進位日誌座標。在這完成之後xtrabackup將解鎖二進位日誌和表。 LOCK BINLOG FOR BACKUPExec_Master_Log_PosExec_Gtid_SetSHOW MASTER/SLAVE STATUS

最後,二進位日誌位置將被列印到STDERR和xtrabackup 將退出退出如果一切正常。

要注意的是STDERR的xtrabackup不是寫在任何檔案中。您必須將其重定向到一個文件,例如,。 xtrabackup OPTIONS2> backupout.log

它也會在備份的目錄中建立以下檔案。

在準備階段,Percona XtraBackup使用複製的交易日誌檔案對複製的資料檔案執行崩潰復原。完成此操作後,資料庫就可以復原和使用。

備份的MyISAM和InnoDB表最終將彼此一致,因為在準備(還原)過程之後,InnoDB的資料會前滾到備份完成的點,而不會回滾到該點開始。這個時間點匹配所採取的位置,因此MyISAM資料和已準備好的 InnoDB資料是同步的。 FLUSH TABLES WITHREAD LOCK

簡而言之,這些工具允許您透過複製資料文件,複製日誌檔案以及將日誌應用到資料的各種組合來執行串流和增量備份等操作。

還原備份

要使用xtrabackup還原備份,您可以使用 或選項。 xtrabackup –copy-backxtrabackup –move-back

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

這將複製MyISAM表,索引等(.FRM,.MRG, .MYD,.MYI,.TRG,.TRN,.ARM, .ARZ,.CSM,.CSV,par和.opt的檔案)首先,InnoDB的下一步是表格和索引,最後是日誌檔案。它將在複製檔案時保留檔案的屬性,mysql在啟動資料庫伺服器之前可能需要將檔案的所有權更改為,因為它們將由建立備份的使用者擁有。

或者,該選項可用於還原備份。此選項 與唯一的區別是,它不是複製文件,而是將其移動到目標位置。由於此選項刪除備份文件,因此必須謹慎使用。在沒有足夠的可用磁碟空間來保存這兩個資料檔案及其備份副本的情況下,此功能非常有用。 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
建立連線使用者並受權

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是一個封裝了xtrabackup的Perl腳本,支援同時備份innodb和myisam,但在對myisam備份時需要加一個全域的讀鎖。還有就是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下

备份所有库:$ innobackupex --defaults-file=/etc/my.cnf--user=zhengda \
           --password=goyun.org --socket=/tmp/mysql.sock /data/backup
           
备份两个库:$ innobackupex --databases="db1 db2"--defaults-file=/etc/my.cnf--user=zhengda \
            --password=goyun.org --socket=/tmp/mysql.sock /data/backup
增量備份

#:第一次增量備份要建立在完整備份之上才可以

–incremental /data/backup1 指定增量備份存放的目標目錄
–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/#会根据当天时间生成个目录
進行第二次增量備份,需要指定上一次增量備份的目錄

–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 準備還原備份的選項

–use-memory=8G 設定準備還原資料時使用的內存,可以提高準備所花費的時間

$ 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進行邏輯備份

mysqldump作為重要的MySQL備份工具,功能相當強大。備份參數、恢復策略,需要仔細研究。

備份資料庫:

備份單一資料庫或單一資料庫中的指定表:

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

#備份多個資料庫:

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

備份所有資料庫:

mysqldump [OPTIONS] –all-databases [OPTIONS]

新增此選項備份時不鎖定表

--single-transaction
案例:本機備份所有庫

mysqldump -u root -p密码 --all-databases > ./all.sql
案例:本機還原所有程式庫

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

案例:備份本機db1,db2兩個庫

mysqldump -u root -p密码 --databases db1 db2 > ./db1_2.sql
案例:恢復本機db1,db2兩個庫

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

案例:在B主機上執行將A主機的yun庫備份到B主機上,在B主機上需要建立yun庫

-C表示主機間的資料傳輸使用資料壓縮

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

案例:在B主機上執行將A主機上的所有資料庫備份到本機

mysqldump --host=192.168.6.108(A) -u root -p密码 --all-databases > all.sql(B)
案例:恢復在B主機上執行

以上是xtrabackup 備份還原、運作原理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn