XtraBackup與InnoBackupex 聯機備份

來源:互聯網
上載者:User

XtraBackup與InnoBackupex 聯機備份

XtraBackup聯機備份:

  • 專註於InnoDB、XtraBackup的熱備工具,是C語言開發的程式,專用於備份InnoDB及XtraDB引擎對象
  • 備份組高效、完整、可用
  • 備份任務執行過程中不會阻塞事務
  • 節省磁碟空間,降低網路頻寬佔用
  • 備份組自動驗證機制
  • 恢複更快

[root@mysql1 /]# rpm -ivh percona-xtrabackup-2.2.3-4982.el6.x86_64.rpm

[mysql@mysql1 ~]$ echo "export PATH=/usr/bin:\$PATH" >> /home/mysql/.bash_profile

(system@localhost) [(none)]> create user xtrabk@'localhost' identified by 'onlybackup';

(system@localhost) [(none)]> grant reload,lock tables,Replication client,super on *.* to xtrabk@'localhost';

[mysql@mysql1 ~]$ xtrabackup -help

使用xtrabackup命令進行備份

xtrabackup命令有兩種模式,--backup(備份模式)和--prepara(恢複準備模式)

--backup指定當前的操作模式,backup就是說要建立備份組

--target-dir指定備份組的儲存路徑

--defaults-file從MySQL的選項檔案中讀取參數

[mysql@mysql1 ~]$ xtrabackup --defaults-file=/data/mysqldata/3306/my.cnf --backup --target-dir=/data/mysqldata/backup/full_bak

 

使用innobackupex命令進行備份,還能備份非InnoDB對象,innobackupex內部調用xtrabackup進行備份

[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password='onlybackup' /data/mysqldata/backup/

建立增量備份:

在上一步全量備份完成後,修改InnoDB表的資料,進行第一次增量備份

[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password='onlybackup' --incremental --incremental-basedir=/data/mysqldata/backup/2014-07-10_09-29-32 /data/mysqldata/backup_inc

1)在做完第一次增量備份後,繼續修改InnoDB表的資料,進行第二次增量備份

[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password='onlybackup' --incremental --incremental-basedir=/data/mysqldata/backup/2014-07-10_09-29-32 /data/mysqldata/backup_inc

此種方式對應Oracle的累積增量備份

2)在做完第一次增量備份後,繼續修改InnoDB表的資料,進行第二次增量備份

[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password='onlybackup' --incremental --incremental-basedir=/data/mysqldata/backup_inc/2014-07-10_09-31-36 /data/mysqldata/backup_inc

此種方式對應Oracle的差異增量備份

--incremental:告訴xtrabackup這次是要建立增量備份

--incremental-basedir:指定一個全量備份的路徑,作為增量備份的基礎

--incremental-lsn:指定備份開始時的LSN

 

InnoDB的Log Sequence Number記錄序號LSN。InnoDB的每個頁(Page)都儲存有LSN,這個序號能夠標識該頁最後修改時間,增量備份正是根據這個LSN來的,因為每次備份(含xtrabackup和innobackupex),XtraBackup都會在備份組中建立一個xtrabackup_checkpoints檔案,這個檔案中的內容就記錄了最後修改的LSN序號。建立增量備份集時,只需要從上次的備份組中找到xtrabackup_checkpoints檔案,讀取最新的LSN,而後在建立增量是,選擇LSN大於這個序號的頁,以及這期間產生的二進位日誌就可以了,甚至不需要對比全量備份組和當前資料庫的資料檔案

 

XtraBackup備份工作機制:

XtraBackup本質是基於InnoDB的故障恢複(crash-recovery)機制,先複製InnoDB的資料檔案,複製的時候資料仍有可能正在讀寫,複製出的檔案可能是不一致的狀態,所以在備份過程中,需要定時掃描日誌並作記錄,而後通過備份的記錄檔執行故障恢複,使檔案恢複到一個一致的狀態,使資料庫達到可用狀態。核心就是InnoDB維護的重做日誌(redo log)。XtraBackup會在啟動時先記錄下當前的記錄序號(LSN),然後開始複製資料檔案,同時XtraBackup運行一個後台進程,監控著交易記錄,並複製新發生的修改。這項操作會在XtraBackup備份執行過程中一直執行,就是log scanned up to資訊,以確保記錄下所有備份期間資料庫發生的修改。接下來是準備進程(prepare process),在這一步中,XtraBackup對複製的資料檔案執行故障恢複,將資料庫恢複到可用狀態

 

執行恢複:全量恢複和增量恢複:

準備恢複(prepare):就是為恢複做準備。備份組沒有辦法直接拿來用,所有需要一個對備份組做準備的過程

對於xtrabackup對應的參數是--prepare,對於innobackupex對應的參數是--apply-log

執行恢複(copy-back):備份組準備好以後,可以執行恢複了

對於xtrabackup沒有特殊說明,簡單cp/mv過程,對於innobackupex對應的參數是--copy-back,它的功能是將制定的備份組,恢複到指定的路徑下

 

首先對全量備份做恢複的準備工作

[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log --redo-only /data/mysqldata/backup/2014-07-10_09-29-32/

--apply-log從指定的選項檔案中讀取配置資訊並應用日誌等,表示要做的是對備份組做恢複的準備工作

--redo-only如果進行準備工作的備份組操作完成後,還有其他增量備份集待處理,那麼就必須指定本參數

 

繼續執行innobackupex命令,應用增量備份,這次要操作的備份組不是最後一份,需要再指定--redo-only參數

[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log /data/mysqldata/backup/2014-07-10_09-29-32/ --incremental-dir=/data/mysqldata/backup_inc/2014-07-10_09-31-36 /

 

繼續執行innobackupex命令,應用增量備份,這次要操作的備份組就是最後一份,不需要再指定--redo-only參數

[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log /data/mysqldata/backup/2014-07-10_09-29-32/ --incremental-dir=/data/mysqldata/backup_inc/2014-07-10_09-35-13/

注意在備份組進行恢複的準備過程中,不要隨意中斷該任務,否則有可能導致備份組處於不一致狀態。由於XtraBackup是直接在備份組中進行準備,一旦有異常,搞不好想恢複都沒辦法。建議操作之前,將備份組備份一次。

建議再執行一遍innobackupex --apply-log

[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log  /data/mysqldata/backup/2014-07-10_09-29-32/

執行檔案的恢複

[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --copy-back /data/mysqldata/backup/2014-07-10_09-29-32/

 

恢複操作可以在任意機器上執行,只要您擁有完整備份集,可以把XtraBackup當做資料庫遷移工具

 

打包和壓縮備份組

XtraBackup支援流(stream)模式,能夠直接將備份輸出到指定的格式進行處理,比如tar或xbstream

 

[mysql@mysql1 ~]$ innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password=onlybackup --stream=tar /tmp | gzip -> /data/mysqldata/backup/xtra_fullbackup.tar.gz

全備

innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password='onlybackup' /data/mysqldata/backup/

 

修改資料

(system@localhost) [mysql]> create table mytable(a int);

Query OK, 0 rows affected (0.06 sec)

(system@localhost) [mysql]> insert into mytable values (1);

Query OK, 1 row affected (0.04 sec)

(system@localhost) [mysql]> insert into mytable values (2);

Query OK, 1 row affected (0.01 sec)

(system@localhost) [mysql]> insert into mytable values (3);

Query OK, 1 row affected (0.00 sec)

(system@localhost) [mysql]> insert into mytable values (4);

Query OK, 1 row affected (0.00 sec)

(system@localhost) [mysql]> insert into mytable values (5);

Query OK, 1 row affected (0.01 sec)

 

進行第一增量備份

innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password='onlybackup' --incremental --incremental-basedir=/data/mysqldata/backup/2015-02-14_19-08-11 /data/mysqldata/backup_inc

 

修改資料

(system@localhost) [mysql]> insert into mytable values (6);

Query OK, 1 row affected (0.01 sec)

(system@localhost) [mysql]> insert into mytable values (7);

Query OK, 1 row affected (0.01 sec)

(system@localhost) [mysql]> insert into mytable values (8);

Query OK, 1 row affected (0.00 sec)

(system@localhost) [mysql]> insert into mytable values (9);

Query OK, 1 row affected (0.00 sec)

(system@localhost) [mysql]> insert into mytable values (10);

Query OK, 1 row affected (0.00 sec)

 

(system@localhost) [mysql]> select * from mytable;

+------+

| a    |

+------+

|    1 |

|    2 |

|    3 |

|    4 |

|    5 |

|    6 |

|    7 |

|    8 |

|    9 |

|  10 |

+------+

10 rows in set (0.00 sec)

 

進行第二次增量備份

innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --user=xtrabk --password='onlybackup' --incremental --incremental-basedir=/data/mysqldata/backup_inc/2015-02-14_19-10-14 /data/mysqldata/backup_inc

 

進行恢複

對全量恢複做處理

innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log --redo-only /data/mysqldata/backup/2015-02-14_19-08-11/

 

進行第一次增量備份恢複

innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log --redo-only /data/mysqldata/backup/2015-02-14_19-08-11/ --incremental-dir=/data/mysqldata/backup_inc/2015-02-14_19-10-14/

 

進行第二次增量備份恢複

innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log --redo-only /data/mysqldata/backup/2015-02-14_19-08-11/ --incremental-dir=/data/mysqldata/backup_inc/2015-02-14_19-12-21/

 

建議再執行一遍innobackupex --apply-log

innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --apply-log /data/mysqldata/backup/2015-02-14_19-08-11/

執行copy操作

innobackupex --defaults-file=/data/mysqldata/3306/my.cnf --copy-back /data/mysqldata/backup/2015-02-14_19-08-11/

進行資料驗證

MySQL管理之使用XtraBackup進行熱備

MySQL開源備份工具Xtrabackup備份部署

MySQL Xtrabackup備份和恢複

用XtraBackup實現MySQL的主從複製快速部署【主不鎖表】

安裝和使用 Percona 推出的 Xtrabackup 備份 MySQL

XtraBackup 的詳細介紹:請點這裡
XtraBackup 的:請點這裡

本文永久更新連結地址:

相關關鍵詞:
相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.