MySQL備份與恢復之percona-xtrabackup實現增量備份及恢復

目錄(?)[-]

  1. 一 文章回顧

  2. 二 增量備份示意圖

  3. 三 percona-xtrabackup實現增量備份及恢復原理

  4. 四 percona-xtrabackup實現增量備份及恢復

一 文章回顧

在上一篇文章,我們講到percona-xtrabackup軟件的使用,這一篇文章我們講解percona-xtrabackup實現增量備份及恢復。

 

二 增量備份示意圖


 

三 percona-xtrabackup實現增量備份及恢復原理


      

首先,使用percona-xtrabackup工具對數據庫進行全備,然後再每次數據庫的數據更新後對數據進行增量備份,每次增量備份均在上一次備份的基礎上。恢復時依次把每次增量備份的數據恢復到全備中,最後使用合併的數據進行數據恢復。


四 percona-xtrabackup實現增量備份及恢復

 

第一步,全備

[root@serv01 databackup]# innobackupex --user=root --password=123456 /databackup/

 

第二步,查看數據

mysql> use larrydb;
Database changed
mysql> select * from class;
+------+-------+
| cid  | cname |
+------+-------+
|    1 | linux |
|    2 | dab   |
|    3 | Devel |
+------+-------+
3 rows in set (0.00 sec)

mysql> select * from stu;
+------+----------+------+
| sid  | sname    | cid  |
+------+----------+------+
|    1 | larry007 |    1 |
+------+----------+------+
1 row in set (0.00 sec)

 

第三步,更新數據

mysql> insert into stu values(2,'larry02',1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from stu;
+------+----------+------+
| sid  | sname    | cid  |
+------+----------+------+
|    1 | larry007 |    1 |
|    2 | larry02  |    1 |
+------+----------+------+
2 rows in set (0.00 sec)


第四步,增量備份,進行了全備和第一次增量備份,所以有兩個備份文件夾。我們每次增量備份都是針對上一次備份。

#--incremental:增量備份的文件夾
#--incremental-dir:針對哪個做增量備份
[root@serv01 databackup]# innobackupex --user=root --password=123456 --incremental /databackup/ --incremental-dir /databackup/2013-09-10_22-12-50/

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona Inc 2009-2012.  All Rights Reserved.
……
innobackupex: Backup created in directory '/databackup/2013-09-10_22-15-45'
innobackupex: MySQL binlog position: filename 'mysql-bin.000004', position 353
130910 22:16:04  innobackupex: completed OK!

[root@serv01 databackup]# ll
total 8
drwxr-xr-x. 9 root root 4096 Sep 10 22:13 2013-09-10_22-12-50
drwxr-xr-x. 9 root root 4096 Sep 10 22:16 2013-09-10_22-15-45


第五步,再次插入數據

mysql> insert into stu values(3,'larry03',1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from stu;
+------+----------+------+
| sid  | sname    | cid  |
+------+----------+------+
|    1 | larry007 |    1 |
|    2 | larry02  |    1 |
|    3 | larry03  |    1 |
+------+----------+------+
3 rows in set (0.00 sec)

 

第六步,再次增量備份

[root@serv01 databackup]# ll
total 8
drwxr-xr-x. 9 root root 4096 Sep 10 22:13 2013-09-10_22-12-50
drwxr-xr-x. 9 root root 4096 Sep 10 22:16 2013-09-10_22-15-45
[root@serv01 databackup]# innobackupex --user=root --password=123456 --incremental /databackup/ --incremental-dir /databackup/2013-09-10_22-15-45/

 

第七步,再次插入數據

mysql> insert into stu values(4,'larry04',1);
Query OK, 1 row affected (0.00 sec)

mysql> select * from stu;
+------+----------+------+
| sid  | sname    | cid  |
+------+----------+------+
|    1 | larry007 |    1 |
|    2 | larry02  |    1 |
|    3 | larry03  |    1 |
|    4 | larry04  |    1 |
+------+----------+------+
4 rows in set (0.00 sec)

 

第八步,再次增量備份。一次全備,三次增量備份,所以有四個備份文件夾

[root@serv01 databackup]# innobackupex --user=root --password=123456 --incremental /databackup/ --incremental-dir /databackup/2013-09-10_22-19-21/


[root@serv01 databackup]# ll
total 16
drwxr-xr-x. 9 root root 4096 Sep 10 22:13 2013-09-10_22-12-50
drwxr-xr-x. 9 root root 4096 Sep 10 22:16 2013-09-10_22-15-45
drwxr-xr-x. 9 root root 4096 Sep 10 22:19 2013-09-10_22-19-21
drwxr-xr-x. 9 root root 4096 Sep 10 22:22 2013-09-10_22-21-42


第九步,模擬數據丟失

mysql> drop database larrydb;
Query OK, 2 rows affected (0.02 sec)

 

第十步,對全部的數據進行檢查。可以看到增量備份和全備的文件佔用磁盤大小有很大的差別,顯然全備佔用磁盤空間多,增量備份佔用磁盤空間少

[root@serv01 databackup]# innobackupex --apply-log --redo-only /databackup/2013-09-10_22-12-50/

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona Inc 2009-2012.  All Rights Reserved.
……
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
130910 22:23:35  InnoDB: Starting shutdown...
130910 22:23:36  InnoDB: Shutdown completed; log sequence number 2098700
130910 22:23:36  innobackupex: completed OK!

[root@serv01 databackup]# du -sh ./*
22M ./2013-09-10_22-12-50
1.5M  ./2013-09-10_22-15-45
1.5M  ./2013-09-10_22-19-21
1.5M  ./2013-09-10_22-21-42

 

第十一步,對第一次做的增量備份數據進行合併到全備份中去

[root@serv01 databackup]# innobackupex --apply-log --redo-only --incremental /databackup/2013-09-10_22-12-50/ --incremental-dir=/databackup/2013-09-10_22-15-45/

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona Inc 2009-2012.  All Rights Reserved.
……
innobackupex: Copying '/databackup/2013-09-10_22-15-45/hello/db.opt' to '/databackup/2013-09-10_22-12-50/hello/db.opt'
130910 22:32:26  innobackupex: completed OK!

 

第十二步,對第二次做的增量備份數據進行合併到全備份中去

[root@serv01 databackup]# innobackupex --apply-log --redo-only --incremental /databackup/2013-09-10_22-12-50/ --incremental-dir=/databackup/2013-09-10_22-19-21/

 

第十三步,對第三次做的增量備份數據進行合併到全備份中去

[root@serv01 databackup]# innobackupex --apply-log --redo-only --incremental /databackup/2013-09-10_22-12-50/ --incremental-dir=/databackup/2013-09-10_22-21-42/

 

第十四步,恢復時需要停掉MySQL,所以我們停掉MySQL

[root@serv01 databackup]# /etc/init.d/mysqld stop
 ERROR! MySQL server PID file could not be found!
[root@serv01 databackup]# pkill -9 mysql

 

第十五步,恢復數據。注意這裏指定的文件夾是2013-09-10_22-12-50

[root@serv01 databackup]# innobackupex --copy-back /databackup/2013-09-10_22-12-50/

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

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

IMPORTANT: Please check that the copy-back run completes successfully.
           At the end of a successful copy-back run innobackupex
           prints "completed OK!".

Original data directory is not empty! at /usr/bin/innobackupex line 571.#報以上錯需要刪除數據目錄下的東西[root@serv01 data]# pwd
/usr/local/mysql/data
[root@serv01 data]# ls
game     ib_logfile0  mysql             mysql-bin.000003  performance_schema   test
hello    ib_logfile1  mysql-bin.000001  mysql-bin.000004  serv01.host.com.err  xtrabackup_binlog_pos_innodb
ibdata1  mnt          mysql-bin.000002  mysql-bin.index   serv01.host.com.pid

[root@serv01 data]# rm -rf  *#再次恢復數據,並更改數據庫數據目錄的擁有者和所屬組[root@serv01 databackup]# innobackupex --copy-back /databackup/2013-09-10_22-12-50/

[root@serv01 data]# ll
total 18464
drwxr-xr-x. 2 root root     4096 Sep 10 22:37 game
drwxr-xr-x. 2 root root     4096 Sep 10 22:37 hello
-rw-r-----. 1 root root 18874368 Sep 10 22:33 ibdata1
drwxr-xr-x. 2 root root     4096 Sep 10 22:37 larrydb
drwxr-xr-x. 2 root root     4096 Sep 10 22:37 mnt
drwxr-xr-x. 2 root root     4096 Sep 10 22:37 mysql
drwxr-xr-x. 2 root root     4096 Sep 10 22:37 performance_schema
drwxr-xr-x. 2 root root     4096 Sep 10 22:37 test
-rw-r--r--. 1 root root       24 Sep 10 22:37 xtrabackup_binlog_pos_innodb
  
[root@serv01 data]# chown mysql.mysql /usr/local/mysql/data/ -R

 

第十六步,啓動服務

[root@serv01 data]# /etc/init.d/mysqld start
Starting MySQL.. SUCCESS!

 

第十七步,登錄數據庫,然後查看數據

[root@serv01 data]# mysql -uroot -p123456
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| game               |
| hello              |
| larrydb            |
| mnt                |
| mysql              |
| performance_schema |
| test               |
+--------------------+
8 rows in set (0.00 sec)

mysql> select * from larrydb.class;
+------+-------+
| cid  | cname |
+------+-------+
|    1 | linux |
|    2 | dab   |
|    3 | Devel |
+------+-------+
3 rows in set (0.00 sec)

mysql> select * from larrydb.stu;
+------+----------+------+
| sid  | sname    | cid  |
+------+----------+------+
|    1 | larry007 |    1 |
|    2 | larry02  |    1 |
|    3 | larry03  |    1 |
|    4 | larry04  |    1 |
+------+----------+------+
4 rows in set (0.00 sec)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章