1. 程式人生 > 其它 >mysql備份之xtrabackup

mysql備份之xtrabackup

1、xtrabackup介紹

percona提供的mysql資料庫備份工具,惟一開源的能夠對innodb和xtradb資料庫進行熱備的工具,xtrabackup 是用來備份 InnoDB 表的,不能備份非 InnoDB 表,和 MySQLServer 沒有互動

1.0、特點

1、備份還原過程快速、可靠
2、備份過程不會打斷正在執行的事務
3、能夠基於壓縮等功能節約磁碟空間和流量
4、自動實現備份檢驗
5、開源,免費

1.1、xtrabackup的新版變化

1、xtrabackup版本升級到2.4後,相比之前的2.1有了比較大的變化:innobackupex 功能全部整合到 xtrabackup 裡面,只有一個 binary程式,另 外為了相容考慮,innobackupex作為 xtrabackup 的軟連結,即xtrabackup現在支援非Innodb表備份,並且 Innobackupex 在下一版本中移除,建議通過xtrabackup替換innobackupex 2、xtrabackup安裝: yum install percona-xtrabackup 在EPEL源中 最新版本下載安裝:

https://www.percona.com/downloads/XtraBackup/LATEST/

1.2、xtarbackup的用法以及選項

1.2.0、備份 nnobackupex [option] BACKUP-ROOT-DIR

--user:該選項表示備份賬號
--password:該選項表示備份的密碼
--host:該選項表示備份資料庫的地址
--databases:該選項接受的引數為資料庫名,如果要指定多個數據庫,彼此間需要以空格隔開;如:"xtra_test dba_test",同時,在指定某資料庫時,也可以只指定其中的某張表。如:"mydatabase.mytable"。該選項對innodb引擎表無效,還是會備份所有innodb表
--defaults-file:該選項指定從哪個檔案讀取MySQL配置,必須放在命令列第一個選項位置
--incremental:該選項表示建立一個增量備份,需要指定--incremental-basedir
--incremental-basedir:該選項指定為前一次全備份或增量備份的目錄,與--incremental同時使用 --incremental-dir:該選項表示還原時增量備份的目錄
--include=name:指定表名,格式:databasename.tablename

1.2.1、Prepare:innobackupex --apply-log [option] BACKUP-DIR

--apply-log:一般情況下,在備份完成後,資料尚且不能用於恢復操作,因為備份的資料中可能會包含尚未提交的事務或已經提交但尚未同步至資料檔案中的事務。因此,此時資料檔案仍處理不一致狀態。此選項作用是通過回滾未提交的事務及同步已經提交的事務至資料檔案使資料檔案處於一致性狀態
--use-memory:和--apply-log選項一起使用,當prepare 備份時,做crash recovery分配的記憶體大小,單位位元組,也可1MB,1M,1G,1GB等,推薦1G
--export:表示開啟可匯出單獨的表之後再匯入其他Mysql中
--redo-only:此選項在prepare base full backup,往其中合併增量備份時候使 用,但不包括對最後一個增量備份的合併

1.2.2、還原:innobackupex --copy-back [選項] BACKUP-DIR

innobackupex --move-back [選項] [--defaults-group=GROUP-NAME] BACKUP-DIR

--copy-back:做資料恢復時將備份資料檔案拷貝到MySQL伺服器的datadir

--move-back:這個選項與--copy-back相似,唯一的區別是它不拷貝檔案,而是移動檔案到目的地。這個選項移除backup檔案,用時候必須小心。使用場景:沒有足夠的磁碟空間同事保留資料檔案和Backup副本

1.2.3、還原注意事項

1.datadir 目錄必須為空。除非指定innobackupex --force-non-emptydirectorires選項指定,否則--copy-back選項不會覆蓋

2、在restore之前,必須shutdown MySQL例項,不能將一個執行中的例項restore到datadir目錄中

3、由於檔案屬性會被保留,大部分情況下需要在啟動例項之前將檔案的屬主改為mysql,這些檔案將屬於建立備份的使用者
chown -R mysql:mysql /data/mysql
以上需要在使用者呼叫innobackupex之前完成

4、--force-non-empty-directories:指定該引數時候,使得innobackupex - -copy-back或--move-back選項轉移檔案到非空目錄,已存在的檔案不會被覆蓋。如果--copy-back和--move-back檔案需要從備份目錄拷貝一個在datadir已經存在的檔案,會報錯失敗

1.3、備份生成的相關檔案

1、 使用innobackupex備份時,其會呼叫xtrabackup備份所有的InnoDB表,複製所有關於表結構定義的相關檔案(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關檔案,同時還會備份觸發器和資料庫配置資訊相關的檔案。這些檔案會被儲存至一個以時間命名的目錄中,在備份時,innobackupex還會在備份目錄中建立如下檔案:

(1)xtrabackup_info:innobackupex工具執行時的相關資訊,包括版本,備份選項,備份時長,備份LSN(log sequence number日誌序列號),BINLOG的位置

(2)xtrabackup_checkpoints:備份型別(如完全或增量)、備份狀態(如是否已經為prepared狀態)和LSN範圍資訊,每個InnoDB頁(通常為16k大小)都會包含一個日誌序列號LSN。LSN是整個資料庫系統的系統版本號,每個頁面相關的LSN能夠表明此頁面最近是如何發生改變的

(3)xtrabackup_binlog_info:MySQL伺服器當前正在使用的二進位制日誌檔案及至備份這一刻為止二進位制日誌事件的位置,可利用實現基於binlog的恢復

(4)backup-my.cnf:備份命令用到的配置選項資訊

(5)xtrabackup_logfile:備份生成的日誌檔案

2、xtrabackup完全,增量備份及還原

1、下載工具
[root@centos_8 ~]# yum install -y percona-xtrabackup
2、完全備份
[root@centos_8 ~]# xtrabackup --backup --target-dir/backup/base
3、第一次修改資料
4、第一次增量備份
xtrabackup --backup --target-dir=/backup/inc1 --incremental-dir=/backup/base
5、第二次修改資料
6、第二次增量
xtrabackup --backup --target-dir=/backup/inc2 --incremental-dir=/backup/inc1
7、備份過程生成三個備份目錄
/backup/{base,inc1,inc2}
8、還原過程
1)預準備完成備份,此選項--apply-log-only 阻止回滾未完成的事務

xtrabackup --prepare --apply-log-only --target-dir=/backup/base
2)合併第1次增量備份到完全備份,

xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1
3)合併第2次增量備份到完全備份:最後一次還原不需要加選項--apply-log-only

xtrabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/inc2
4)複製到資料庫目錄,注意資料庫目錄必須為空,MySQL服務不能啟動

xtrabackup --copy-back --target-dir=/backup/base

5)還原屬性:chown -R mysql:mysql /var/lib/mysql

6)啟動服務:systemctl start mariadb