【Mysql】xbackup全量與增量備份恢復

小亮520cl發表於2015-10-10

XtraBackup提供了增量備份和恢復的功能
背景:
實驗是在原部落格的基礎上做的!http://blog.itpub.net/7607759/viewspace-700064/

tom庫下面有張t1表
  1. mysql> create table t1(id int(10));
    Query OK, 0 rows affected (0.03 sec)
    mysql> 
    mysql> insert into t1 values(1);
    Query OK, 1 row affected (0.01 sec)
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)


做個全備

  1. [root@node2 tom]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=ESBecs00 /xback/full/
  2. [root@node2 xback]# ls full/
    2015-10-20_21-04-43

-----用來備份的使用者只需要這些許可權即可,可不用root:grant reload,lock tables,replication client on *.* 


tom下新建表t2

  1. mysql>  create table t2(id int(10));
    Query OK, 0 rows affected (0.06 sec)


    mysql> insert into t1 values(1);
    Query OK, 1 row affected (0.00 sec)


    mysql> insert into t2 values(1);
    Query OK, 1 row affected (0.00 sec)


    mysql> select * from t1;
    +------+
    | id   |
    +------+
    |    1 |
    |    1 |
    +------+
    2 rows in set (0.00 sec)


    mysql> select * from t2;
    +------+
    | id   |
    +------+
    |    1 |
    +------+
    1 row in set (0.00 sec)
做個增量備份
  1. [root@node2 xback]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=ESBecs00 --incremental --incremental-basedir=/xback/full/2015-10-20_21-04-43/ /xback/inc/
  2. [root@node2 xback]# ls inc
    2015-10-20_21-06-04
    --以全備為基礎做一次增量備份





  1. 關庫,創造恢復環境
  1. [root@node2 mysql]# /etc/init.d/mysqld stop
  2. [root@node2 lib]# mv mysql mysql_bak4
  3. [root@node2 lib]# mkdir mysql



兩個實驗都是在以上背景的基礎上做的!
實驗一:全量恢復(此時只是恢復到了t,而t2表示還沒有恢復的)
Prepare完整備份集:
  1. [root@node2 xback]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=ESBecs00 --apply-log /xback/full/2015-10-09_01-09-54/

恢復
  1. [root@node2 xback]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=ESBecs00 --copy-back /xback/full/2015-10-09_01-09-54/
  2. [root@node2 xback]chown mysql:mysql mysql -R
 
啟動檢視資料庫
  1. mysql> show tables
        -> ;
    +---------------+
    | Tables_in_tom |
    +---------------+
    | t             |
    +---------------+
    1 row in set (0.00 sec)


實驗二:增量恢復(恢復到t2)

  1. 直接恢復增量集
  2. [root@node2 xback]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=ESBecs00 --apply-log /xback/full/2015-10-09_01-36-06/ --incremental-dir=/xback/inc/2015-10-09_01-37-32/

  3. InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
  4. and Percona Inc 2009-2011. All Rights Reserved.

  5. This software is published under
  6. the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.

  7. IMPORTANT: Please check that the apply-log run completes successfully.
  8.            At the end of a successful apply-log run innobackupex
  9.            prints "completed OK!".



  10. 151009 01:39:57 innobackupex: Starting ibbackup with command: xtrabackup_55 --defaults-file="/etc/my.cnf" --prepare --target-dir=/xback/full/2015-10-09_01-36-06 --incremental-dir=/xback/inc/2015-10-09_01-37-32/

  11. xtrabackup_55 Ver 1.6 Rev undefined for 5.5.9 Linux (i686)
  12. incremental backup from 0 is enabled.
  13. xtrabackup: cd to /xback/full/2015-10-09_01-36-06
  14. xtrabackup: This target seems to be not prepared yet.
  15. xtrabackup: error: applying incremental backup needs target prepared. --報錯 需要target
  16. innobackupex: Error:
  17. innobackupex: ibbackup failed at /usr/bin/innobackupex line 336.
 
那好,那先恢復全量再恢復增量
  1. [root@node2 xback]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=ESBecs00 --apply-log  --redo-only
    1.  /xback/full/2015-10-09_01-36-06/       ---Prepare全量備份集:
  2. [root@jonn xback]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=ESBecs00 --apply-log  --redo-only /xback/full/2015-10-20_21-04-43/ --incremental-dir=/xback/inc/2015-10-20_21-06-04/ Prepare增量備份(其實到這後面的都可以不用做了,直接用mv的方式即可)
  3. [root@node2 xback]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=ESBecs00 --apply-log  /xback/full/2015-10-09_01-36-06/    ---回滾那些未提交的事務,這一步中innobackupex也會自動建立innodb日誌檔案:
  4. [root@node2 xback]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=ESBecs00 --copy-back  /xback/full/2015-10-09_01-36-06/    ---恢復完成




開啟mysql檢視
  1. chown mysql:mysql mysql -R
  2. mysql> show tables;
    +---------------+
    | Tables_in_hhh |
    +---------------+
    | t1            |
    +---------------+
    1 row in set (0.00 sec)

  3. mysql> select * from t1;
    +------+
    | id   |
    +------+
    |    1 |
    |    1 |
    +------+
    2 rows in set (0.00 sec)


    mysql> select * from t2;
    +------+
    | id   |
    +------+
    |    1 |
    +------+
    1 row in set (0.00 sec)
    恢復成功


--提示:一定要使用高版本的percona-xtrabackup-2.2.12-1.el6.x86_64  最好是2.2版本或以上啊。。我用的2.2以下的TM的t2怎麼都恢復不出來~~~~一個bug....我做了好多遍實驗


完整備份並打包:

[plain] view plain copy
  1. innobackupex --user=root --password=MySQLPASSWORD --defaults-file=/etc/my.cnf --database=test --stream=tar /mysqlbackup > /mysqlbackup/dbbackup20110809.tar  

其中,--stream指定流的格式,目前只支援tar。

完整備份並打包壓縮:

[plain] view plain copy
  1. innobackupex --user=root --password=MySQLPASSWORD --defaults-file=/etc/my.cnf --database=test --stream=tar /mysqlbackup/ | gzip /mysqlbackup/dbbackup20110809.tar.gz  

完整備份到遠端主機: 

[plain] view plain copy
  1. innobackupex --user=root --password= MySQLPASSWORD --defaults-file=/etc/my.cnf --database=test --stream=tar /mysqlbackup | ssh root@remote-host cat ">"   /mysqlbackup/dbbackup20110809.tar  

更快的方式:可參考:http://mp.weixin.qq.com/s/TxveGZK9o2QBEJbx1Vd9MA
  1. 安裝lz4這個壓縮工具,這個工具號稱壓縮能達到300M+/s,解壓能達到1G/s。配合xtrabackup自帶的--stream=[tar|xbstream]引數,該引數可以把備份的資料輸出到標準輸出,而lz4支援標準輸出,這樣也可以實現和測試(3)一樣的效果。由於lz4的壓縮效能比諸如gzip、bzip2之流快太多,這裡就不對比了,留給讀者做gzip和bzip2的測試,會發現慢太多
  2. [root@hostnfsd :/root]$ innobackupex --defaults-file=/data/mydata/my_3307.cnf --user=root --password=dkhfdt#@Ladl123 --parallel=4 --stream=xbstream . | lz4 -B4 > bak
  解壓:
 [root@hostnfsd :/root]$ cat bak | lz4 -d -B7 | xbstream -x  -C ./bbk/


在上面的基礎上透過ssh傳輸
  1. [root@hostnfsd :/tmp]$ innobackupex --defaults-file=/data/mydata/my_3307.cnf  --user=root --password=dkhfdt#@Ladl123  --parallel=4 --stream=xbstream . | lz4 -B4 |ssh 218.78.186.162 "cat - > /soft/back.0110"



補充,
概念/多個增量備份等可以看下面的這篇部落格~~~
http://blog.csdn.net/heizistudio/article/details/23937935

一篇比較好的部落格
http://www.itpub.net/thread-1612540-1-1.html


FAQ:啟動過程中報告InnoDB資料頁發生損






來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29096438/viewspace-1813711/,如需轉載,請註明出處,否則將追究法律責任。

相關文章