2013年6月10日星期一

Percona的Xtrabackup / innobackupex備份和恢復進程

Original post: http://anothermysqldba.blogspot.com/2013/06/percona-xtrabackupinnobackupex-backup.html

這是一個非常簡單的例子,如何使用Percona的Xtrabackup / innobackupex 

MariaDB的只是在它的世界數據庫作為一個例子數據。 
這一切都可以編寫腳本,但現在它是用於演示目的。 

創建一個完整的備份: 

MariaDB [(none)]> create database Start_Of_Demo; -- Just here for the demo
Query OK, 1 row affected (0.00 sec)


[root@Fedora64 src]# innobackupex --no-lock --parallel=4 --user=root --extra-lsndir=/usr/local/src/incremental_last_checkpoint/ --no-timestamp /usr/local/src/fullbackup/

xtrabackup: Transaction log of lsn (1597964) to (1597964) was copied.

innobackupex: Backup created in directory '/usr/local/src/fullbackup'
130609 15:41:39 innobackupex: Connection to database server closed
130609 15:41:39 innobackupex: completed OK!

[root@Fedora64 src]# ls -al fullbackup/
total 18472
drwxr-xr-x. 6 root root 4096 Jun 9 15:41 .
drwxr-xr-x. 6 root root 4096 Jun 9 15:49 ..
-rw-r--r--. 1 root root 260 Jun 9 15:41 backup-my.cnf
-rw-r-----. 1 root root 18874368 Jun 9 15:41 ibdata1
drwxr-xr-x. 2 root root 4096 Jun 9 15:41 mysql
drwxr-xr-x. 2 root root 4096 Jun 9 15:41 performance_schema
drwxr-xr-x. 2 root root 4096 Jun 9 15:41 Start_Of_Demo
drwxr-xr-x. 2 root root 4096 Jun 9 15:41 world
-rw-r--r--. 1 root root 13 Jun 9 15:41 xtrabackup_binary
-rw-r-----. 1 root root 89 Jun 9 15:41 xtrabackup_checkpoints
-rw-r-----. 1 root root 2560 Jun 9 15:41 xtrabackup_logfile

創建一個增量備份:

MariaDB [(none)]> create database incremental_1; -- Just here for the demo
Query OK, 1 row affected (0.00 sec)

[root@Fedora64 src]#innobackupex --incremental --no-lock --parallel=4 --no-timestamp --user=root --incremental-basedir=/usr/local/src/incremental_last_checkpoint/ --extra-lsndir=/usr/local/src/incremental_last_checkpoint/ /usr/local/src/incremental/

xtrabackup: Transaction log of lsn (1597964) to (1597964) was copied.

innobackupex: Backup created in directory '/usr/local/src/incremental'
130609 15:47:20 innobackupex: Connection to database server closed
130609 15:47:20 innobackupex: completed OK!

[root@Fedora64 src]# ls -al incremental
total 64
drwxr-xr-x. 7 root root 4096 Jun 9 15:47 .
drwxr-xr-x. 6 root root 4096 Jun 9 15:49 ..
-rw-r--r--. 1 root root 260 Jun 9 15:47 backup-my.cnf
-rw-r-----. 1 root root 16384 Jun 9 15:47 ibdata1.delta
-rw-r-----. 1 root root 44 Jun 9 15:47 ibdata1.meta
drwxr-xr-x. 2 root root 4096 Jun 9 15:47 incremental_1
drwxr-xr-x. 2 root root 4096 Jun 9 15:47 mysql
drwxr-xr-x. 2 root root 4096 Jun 9 15:47 performance_schema
drwxr-xr-x. 2 root root 4096 Jun 9 15:47 Start_Of_Demo
drwxr-xr-x. 2 root root 4096 Jun 9 15:47 world
-rw-r--r--. 1 root root 13 Jun 9 15:47 xtrabackup_binary
-rw-r-----. 1 root root 93 Jun 9 15:47 xtrabackup_checkpoints
-rw-r-----. 1 root root 2560 Jun 9 15:47 xtrabackup_logfile 


創建另一個增量備份:

MariaDB [(none)]> create database incremental_2;-- Just here for the demo
Query OK, 1 row affected (0.00 sec)

[root@Fedora64 src]# innobackupex --incremental --no-lock --parallel=4 --no-timestamp --user=root --incremental-basedir=/usr/local/src/incremental_last_checkpoint/ --extra-lsndir=/usr/local/src/incremental_last_checkpoint/ /usr/local/src/incremental_2/

xtrabackup: Transaction log of lsn (1597964) to (1597964) was copied.

innobackupex: Backup created in directory '/usr/local/src/incremental_2'
130609 15:49:49 innobackupex: Connection to database server closed
130609 15:49:49 innobackupex: completed OK!
[root@Fedora64 src]# ls -al incremental_2
total 68
drwxr-xr-x. 8 root root 4096 Jun 9 15:49 .
drwxr-xr-x. 6 root root 4096 Jun 9 15:49 ..
-rw-r--r--. 1 root root 260 Jun 9 15:49 backup-my.cnf
-rw-r-----. 1 root root 16384 Jun 9 15:49 ibdata1.delta
-rw-r-----. 1 root root 44 Jun 9 15:49 ibdata1.meta
drwxr-xr-x. 2 root root 4096 Jun 9 15:49 incremental_1
drwxr-xr-x. 2 root root 4096 Jun 9 15:49 incremental_2
drwxr-xr-x. 2 root root 4096 Jun 9 15:49 mysql
drwxr-xr-x. 2 root root 4096 Jun 9 15:49 performance_schema
drwxr-xr-x. 2 root root 4096 Jun 9 15:49 Start_Of_Demo
drwxr-xr-x. 2 root root 4096 Jun 9 15:49 world
-rw-r--r--. 1 root root 13 Jun 9 15:49 xtrabackup_binary
-rw-r-----. 1 root root 93 Jun 9 15:49 xtrabackup_checkpoints
-rw-r-----. 1 root root 2560 Jun 9 15:49 xtrabackup_logfile 


現在你必須牢記這一點。
  • 數據庫中當然是關閉。
    • 如果你正在做一個還原,它可能是反正它墜毀
  • 數據目錄必須是空的。

確保服務器已關閉,然後清除我們的數據目錄。

[root@Fedora64 src]# ps -ef | grep mysql
root 4538 1940 0 15:54 pts/2 00:00:00 grep --color=auto mysql

[root@Fedora64 src]# ls -al /var/lib/mysql/
total 28724
drwxr-xr-x. 8 mysql mysql 4096 Jun 9 15:53 .
drwxr-xr-x. 43 root root 4096 Jun 8 19:41 ..
-rw-rw----. 1 mysql mysql 16384 Jun 9 15:53 aria_log.00000001
-rw-rw----. 1 mysql mysql 52 Jun 9 15:53 aria_log_control
-rw-r--r--. 1 mysql mysql 18874368 Jun 9 15:53 ibdata1
-rw-rw----. 1 mysql mysql 5242880 Jun 9 15:53 ib_logfile0
-rw-rw----. 1 mysql mysql 5242880 Jun 9 15:17 ib_logfile1
drwx------. 2 mysql mysql 4096 Jun 9 15:43 incremental_1
drwx------. 2 mysql mysql 4096 Jun 9 15:48 incremental_2
drwxr-xr-x. 2 mysql mysql 4096 Jun 9 15:16 mysql
drwxr-xr-x. 2 mysql mysql 4096 Jun 9 15:16 performance_schema
drwx------. 2 mysql mysql 4096 Jun 9 15:40 Start_Of_Demo
drwxr-xr-x. 2 mysql mysql 4096 Jun 9 15:16 world

[root@Fedora64 src]# rm -Rf /var/lib/mysql/*

現在你必須牢記這一點。 當您創建備份和增量備份,你必須先恢復完全備份,然後套用所有增量備份。 所以,不要認為你可以做一個完整備份後剛剛恢復的最後一個增量。 永遠記住,你能承受多少增量備份另一個完全備份之前需要。

要恢復完全備份:

innobackupex --copy-back /usr/local/src/fullbackup/

innobackupex: Starting to copy InnoDB log files
innobackupex: in '/usr/local/src/fullbackup'
innobackupex: back to original InnoDB log directory '/var/lib/mysql'
innobackupex: Finished copying back files.

130609 15:54:57 innobackupex: completed OK!

[root@Fedora64 src]# ls -al /var/lib/mysql/
total 18456
drwxr-xr-x. 6 mysql mysql 4096 Jun 9 15:54 .
drwxr-xr-x. 43 root root 4096 Jun 8 19:41 ..
-rw-r--r--. 1 root root 18874368 Jun 9 15:54 ibdata1
drwxr-xr-x. 2 root root 4096 Jun 9 15:54 mysql
drwxr-xr-x. 2 root root 4096 Jun 9 15:54 performance_schema
drwxr-xr-x. 2 root root 4096 Jun 9 15:54 Start_Of_Demo
drwxr-xr-x. 2 root root 4096 Jun 9 15:54 world


[root@Fedora64 mysql]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.31-MariaDB MariaDB Server


這不完整備份,但在那之後,我提出了增量備份。 因此,將要關閉和清理出來的數據目錄。 為什麼呢? 你必須,申請增量備份的完整,然後將其還原。 如下面的示例所示:



innobackupex --apply-log --redo-only /usr/local/src/fullbackup/
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
130609 15:57:59 InnoDB: Starting shutdown...
130609 15:58:00 InnoDB: Shutdown completed; log sequence number 1597964
130609 15:58:00 innobackupex: completed OK!

現在,讓我們把第一個增量目錄。 你可以看到在下面的例子中,現在應用在fullbackup目錄的incremental_1目錄。 這是沒有的情況下。

innobackupex --apply-log --redo-only /usr/local/src/fullbackup/ --incremental-dir=/usr/local/src/incremental/
130609 15:58:42 innobackupex: completed OK!
[根@ Fedora64 SRC]#LS-AL fullbackup /
共20520
drwxr-XR-X。 7根4096 6月9日15:58。
drwxr-XR-X。 6根4096 6月9日15時49分..
RW-R - R - 。 1根260 6月9日15:41備份的my.cnf
RW-R -----。 1根6月9日15:58 ibdata1的18874368
drwxr-XR-X。 2根4096年6月9 15:58 incremental_1
drwxr-XR-X。 2根4096年6月9 15:41 mysql的
drwxr-XR-X。 2根4096年6月9 15:41 PERFORMANCE_SCHEMA的
drwxr-XR-X。 2根4096年6月9 15:41 Start_Of_Demo
drwxr-XR-X。 2根4096年6月9 15:41 世界
RW-R - R - 。 1根13 6月9日15:41 xtrabackup_binary
RW-R -----。 1根89 6月9日15:58 xtrabackup_checkpoints
RW-R -----。 1根6月9日15:58 xtrabackup_logfile 2097152

現在我們將第二個增量目錄。 你可以看到在下面的例子中,現在應用在fullbackup目錄的incremental_2目錄。 這是沒有的情況下。
innobackupex --apply-log /usr/local/src/fullbackup/ --incremental-dir=/usr/local/src/incremental_2/
innobackupex:複製'/ usr/local/src/incremental_2/Start_Of_Demo/db.opt的'到'/ USR /本地/ SRC / fullbackup / Start_Of_Demo / db.opt'
130609 16:00:09 innobackupex:完成OK!

[根@ Fedora64 SRC]#LS-AL fullbackup /
共20524
drwxr-XR-X。 8根4096 6月9日16:00。
drwxr-XR-X。 6根4096 6月9日15時49分..
RW-R - R - 。 1根260 6月9日15:41備份的my.cnf
RW-R -----。 1根18874368 6月9日16:00的ibdata1
drwxr-XR-X。 2根4096年6月9 15:58 incremental_1
drwxr-XR-X。 2根4096年6月9 16:00 incremental_2
drwxr-XR-X。 2根4096年6月9 15:41 mysql的
drwxr-XR-X。 2根4096年6月9 15:41 PERFORMANCE_SCHEMA的
drwxr-XR-X。 2根4096年6月9 15:41 Start_Of_Demo
drwxr-XR-X。 2根4096年6月9 15:41 世界
RW-R - R - 。 1根13 6月9日15:41 xtrabackup_binary
RW-R -----。 1根89 6月9日16:00 xtrabackup_checkpoints
RW-R -----。 1根6月9日15:58 xtrabackup_logfile 2097152


現在我們將完全備份目錄。 你可以看到在下面的例子中,現在應用在fullbackup目錄的incremental_2目錄。 這是沒有的情況下。

[root@Fedora64 src]# rm -Rf /var/lib/mysql/*
[根@ Fedora64 SRC]#innobackupex - 複製回的/ usr /本地/ SRC / fullbackup /
[根@ Fedora64 SRC]#喬敦-R的mysql:mysql的的/ var / lib / mysql的中

現在一切都恢復和可供選擇:

[root@Fedora64 mysql]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 1
Server version: 5.5.31-MariaDB MariaDB Server

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
Start_Of_Demo |
incremental_1 |
incremental_2 |
| mysql |
| performance_schema |
world |
+--------------------+

可供參考的鏈接。