1. 程式人生 > >xtrabackup備份(MySQL備份)與恢復

xtrabackup備份(MySQL備份)與恢復

xtrabackup備份(MySQL備份)與恢復

1. innobackupex引數選項

--no-timestamp: 不建立一個時間戳
--defaults-file=[MY.CNF]    //指定配置檔案:只能從給定的檔案中讀取預設選項。 且必須作為命令列上的第一個選項;必須是一個真實的檔案,它不能是一個符號連結。
--databases=#    //指定備份的資料庫和表,格式為:--database="db1[.tb1] db2[.tb2]" 多個庫之間以空格隔開,如果此選項不被指定,將會備份所有的資料庫。
--include=REGEXP    //用正則表示式的方式指定要備份的資料庫和表,格式為 --include=‘^mydb[.]mytb’ ,對每個庫中的每個表逐一匹配,因此會建立所有的庫,不過是空的目錄。--include 傳遞給 xtrabackup --tables。

--tables-file=FILE    //此選項的引數需要是一個檔名,此檔案中每行包含一個要備份的表的完整名稱,格式為databasename.tablename。該選項傳遞給 xtrabackup --tables-file,與--tables選項不同,只有要備份的表的庫才會被建立。

注意:部分備份(--include、--tables-file、--database)需要開啟 innodb_file_per_table 。

--compact    //建立緊湊型備份,忽略所有輔助索引頁,只備份data page;通過--apply-log中重建索引--rebuild-indexs。

--compress    //此選項指示xtrabackup壓縮備份的InnoDB資料檔案,會生成 *.qp 檔案。

--apply-log    //應用 BACKUP-DIR 中的 xtrabackup_logfile 事務日誌檔案。一般情況下,在備份完成後,資料尚且不能用於恢復操作,因為備份的資料中可能會包含尚未提交的事務或已經提交但尚未同步至資料檔案中的事務。因此,此時資料檔案仍處於不一致狀態。“準備”的主要作用正是通過回滾未提交的事務及同步已經提交的事務至資料檔案使得資料檔案處於一致性狀態。

--use-memory=#    //此選項接受一個字元引數(1M/1MB,1G/1GB,預設100M),僅與--apply-log一起使用,該選項指定prepare時用於崩潰恢復(crash-recovery)的記憶體。

--copy-back    //拷貝先前備份所有檔案到它們的原始路徑。但原路徑下不能有任何檔案或目錄,除非指定 --force-non-empty-directories 選項。

--incremental-basedir=DIRECTORY    //該選項接受一個字串引數,該引數指定作為增量備份的基本資料集的完整備份目錄。它與 --incremental 一起使用。

--incremental-dir=DIRECTORY    //該選項接受一個字串引數,該引數指定了增量備份將與完整備份相結合的目錄,以便進行新的完整備份。它與 --incremental 選項一起使用。

--redo-only    //在“準備基本完整備份” 和 “合併所有的增量備份(除了最後一個增備)”時使用此選項。它直接傳遞給xtrabackup的 xtrabackup --apply-log-only 選項,使xtrabackup跳過"undo"階段,只做"redo"操作。如果後面還有增量備份應用到這個全備,這是必要的。有關詳細資訊,請參閱xtrabackup文件。

--parallel=NUMBER-OF-THREADS    //此選項接受一個整數引數,指定xtrabackup子程序應用於同時備份檔案的執行緒數。請注意,此選項僅適用於檔案級別,也就是說,如果您有多個.ibd檔案,則它們將被並行複製; 如果您的表一起儲存在一個表空間檔案中,它將不起作用。

2.全量備份恢復

建立備份恢復的使用者並賦權

create user [email protected]'localhost' identified by '123456';

grant reload,process,lock tables,replication client on . to [email protected];

建立存放備份檔案的目錄

mkdir -pv /var/data

進行資料庫全量備份:

innobackupex --defaults-file=/etc/my.cnf --user=pxb --password=123456 /var/data/

[[email protected] ~]# ll /var/data/2018-08-28_09-06-39/

total 18460

-rw-r----- 1 root root 417 Aug 28 09:06 backup-my.cnf

-rw-r----- 1 root root 18874368 Aug 28 09:06 ibdata1

drwxr-x--- 2 root root 4096 Aug 28 09:06 mysql

drwxr-x--- 2 root root 4096 Aug 28 09:06 performance_schema

drwxr-x--- 2 root root 4096 Aug 28 09:06 test

-rw-r----- 1 root root 113 Aug 28 09:06 xtrabackup_checkpoints

-rw-r----- 1 root root 454 Aug 28 09:06 xtrabackup_info

-rw-r----- 1 root root 2560 Aug 28 09:06 xtrabackup_logfile

全量備份恢復

systemctl stop mariadb

rm /var/lib/mysql -rf

mkdir /var/lib/mysql

準備一個完全備份: --apply-log,執行之後 xtrabackup_checkpoints 檔案中的 backup_type = full-prepared

innobackupex --apply-log /var/data/2018-08-28_09-06-39/

執行恢復操作:

innobackupex --defaults-file=/etc/my.cnf --copy-back /var/data/2018-08-28_09-06-39/

更改data目錄許可權並啟動mysql:

chown -R mysql:mysql /var/lib/mysql

systemctl start mariadb

3. 增量備份恢復

所謂增量備份恢復就是在全量的基礎上進行增量備份。

增量備份1:以全量為基準

innobackupex --defaults-file=/etc/my.cnf --user=pxb --password=123456 --incremental /var/data/inc --incremental-basedir=/var/data/2018-08-28_10-01-53/ --parallel=2

中途進行了資料新增操作。

增量備份2:以增量備份1為基準

innobackupex --defaults-file=/etc/my.cnf --user=pxb --password=123456 --incremental /var/data/inc/ --incremental-basedir=/var/data/inc/2018-08-28_10-04-22/ --parallel=2

增量備份的恢復:
步驟:

  1. 恢復完全備份
  2. 恢復增量備份到完全備份(開始恢復的增量備份要新增--redo-only引數,到最後一次增量備份要去掉--redo-only)
  3. 對整體的完全備份進行恢復,回滾提交的資料

準備一個全備:

innobackupex --apply-log --redo-only /var/data/2018-08-28_10-01-53/

將增量1應用到完全備份

innobackupex --apply-log --redo-only /var/data/2018-08-28_10-01-53 --incremental-dir=/var/data/inc/2018-08-28_10-04-22/

將增量2應用到完全備份,不用加--redo-only引數

innobackupex --apply-log /var/data/2018-08-28_10-01-53 --incremental-dir=/var/data/inc/2018-08-28_10-07-40/

把所有的完全備份合併到一起進行一次apply操作,回滾提交的資料

innobackupex --apply-log /var/data/2018-08-28_10-01-53/

模擬:將資料庫裡的內容刪除

systemctl stop mariadb

mv /var/lib/mysql /var/lib/mysql.bak

mkdir /var/lib/mysql

恢復:

innobackupex --defaults-file=/etc/my.cnf --copy-back /var/data/2018-08-28_10-01-53/

chown -R mysql:mysql /var/lib/mysql

systemctl start maraidb

流備份以及壓縮備份

Xtrabackup對備份的資料檔案支援“流”功能,即可以將備份的資料通過STDOUT傳輸給tar程式進行歸檔,而不是預設的直接儲存至某備份目錄中。要使用此功能,僅需要使用--stream選項即可。如:

innobackupex --stream=tar /data/backup/|gzip >/data/backup/`date +%F`.tar.gz

也可以使用如下命令將資料備份至其他伺服器

innobackupex --default-file=/etc/my.cnf --stream=tar /backup | ssh [email protected] " cat -> /backups/date +%F_%H-%M-%S.tar"

同時也可將備份的資料檔案儲存到遠端的主機,使用--remote-host來實現

innobackupex [email protected] /path/IN/REMOTE/HOST/to/backup