一.Xtrabackup的安裝
1.下載下傳最新版的Xtracbackup
1
<code>[root@Web1 ~]</code><code># wget http://www.percona.com/redir/downloads/XtraBackup/LATEST/binary/redhat/6/x86_64/percona-xtrabackup-2.2.3-4982.el6.x86_64.rpm</code>
2.安裝
2
3
4
5
6
7
8
9
10
<code>[root@Web1 ~]</code><code># rpm -ivh percona-xtrabackup-2.2.3-4982.el6.x86_64.rpm</code>
<code>warning: percona-xtrabackup-2.2.3-4982.el6.x86_64.rpm: Header V4 DSA</code><code>/SHA1</code> <code>Signature, key ID cd2efd2a: NOKEY</code>
<code>error: Failed dependencies:</code>
<code> </code><code>libaio.so.1()(64bit) is needed by percona-xtrabackup-2.2.3-4982.el6.x86_64</code>
<code> </code><code>libaio.so.1(LIBAIO_0.1)(64bit) is needed by percona-xtrabackup-2.2.3-4982.el6.x86_64</code>
<code> </code><code>libaio.so.1(LIBAIO_0.4)(64bit) is needed by percona-xtrabackup-2.2.3-4982.el6.x86_64</code>
<code> </code><code>perl(DBD::mysql) is needed by percona-xtrabackup-2.2.3-4982.el6.x86_64</code>
<code> </code><code>perl(Time::HiRes) is needed by percona-xtrabackup-2.2.3-4982.el6.x86_64</code>
<code>安裝以下依賴包:</code>
<code>[root@Web1 ~]</code><code># yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL</code>
再重新安裝一下
二.Xtrabackup的使用
1.完全備份
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<code>[root@Web1 ~]</code><code># innobackupex --user=root --password=123456 /data/backup</code>
<code>InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy</code>
<code>and Percona LLC and</code><code>/or</code> <code>its affiliates 2009-2013. All Rights Reserved.</code>
<code>This software is published under</code>
<code>the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.</code>
<code>Get the latest version of Percona XtraBackup, documentation, and help resources:</code>
<code>http:</code><code>//www</code><code>.percona.com</code><code>/xb/p</code>
<code>140630 09:14:48 innobackupex: Connecting to MySQL server with DSN </code><code>'dbi:mysql:;mysql_read_default_group=xtrabackup'</code> <code>as </code><code>'root'</code> <code>(using password: YES).</code>
<code>140630 09:14:48 innobackupex: Connected to MySQL server</code>
<code>140630 09:14:48 innobackupex: Executing a version check against the server...</code>
<code>140630 09:14:48 innobackupex: Done.</code>
<code>IMPORTANT: Please check that the backup run completes successfully.</code>
<code> </code><code>At the end of a successful backup run innobackupex</code>
<code> </code><code>prints </code><code>"completed OK!"</code><code>.</code>
<code>innobackupex: Using mysql server version 10.0.10-MariaDB-log</code>
<code>Warning: Using unique option prefix open_files instead of open_files_limit is deprecated and will be removed </code><code>in</code> <code>a future release. Please use the full name instead.</code>
<code>innobackupex: Created backup directory </code><code>/data/backup/2014-06-30_09-14-48</code>
<code>140630 09:14:48 innobackupex: Starting ibbackup with </code><code>command</code><code>: xtrabackup --defaults-group=</code><code>"mysqld"</code> <code>--backup --suspend-at-end --target-</code><code>dir</code><code>=</code><code>/data/backup/2014-06-30_09-14-48</code> <code>--tmpdir=</code><code>/tmp</code> <code>--extra-lsndir=</code><code>'/tmp'</code>
<code>innobackupex: Waiting </code><code>for</code> <code>ibbackup (pid=3844) to suspend</code>
<code>innobackupex: Suspend </code><code>file</code> <code>'/data/backup/2014-06-30_09-14-48/xtrabackup_suspended_2'</code>
<code>xtrabackup version 2.2.3 based on MySQL server 5.6.17 Linux (x86_64) (revision </code><code>id</code><code>: )</code>
<code>xtrabackup: uses posix_fadvise().</code>
<code>xtrabackup: </code><code>cd</code> <code>to</code>
<code>xtrabackup: </code><code>open</code> <code>files limit requested 65535, </code><code>set</code> <code>to 65535</code>
<code>xtrabackup: using the following InnoDB configuration:</code>
<code>xtrabackup: innodb_data_home_dir = ./</code>
<code>xtrabackup: innodb_data_file_path = ibdata1:10M:autoextend</code>
<code>xtrabackup: innodb_log_group_home_dir = ./</code>
<code>xtrabackup: innodb_log_files_in_group = 2</code>
<code>xtrabackup: innodb_log_file_size = 50331648</code>
<code>2014-06-30 09:14:48 7f0abfdd0720 InnoDB: Operating system error number 2 </code><code>in</code> <code>a </code><code>file</code> <code>operation.</code>
<code>InnoDB: The error means the system cannot </code><code>find</code> <code>the path specified.</code>
<code>InnoDB: File .</code><code>/ib_logfile0</code><code>: </code><code>'open'</code> <code>returned OS error 71. Cannot </code><code>continue</code> <code>operation</code>
<code>innobackupex: Error: The xtrabackup child process has died at </code><code>/usr/bin/innobackupex</code> <code>line 2672.</code>
從以上可以看出備份失敗,出現檔案不能打開錯誤,因為是編譯安裝,innobackupex未帶參數預設尋找/etc/my.cnf配置檔案,/etc/my.cnf檔案未指定basedir及datadir
在[mysqld]下面增加
<code>basedir = </code><code>/data/mysql</code>
<code>datadir = </code><code>/data/mysql/data</code>
再重新進行備份,備份成功。(basedir就是mysql安裝所在的目錄,datadir是資料檔案所在的目錄)
<code>innobackupex: Backup created </code><code>in</code> <code>directory </code><code>'/data/backup/2014-06-30_11-33-24'</code>
<code>innobackupex: MySQL binlog position: filename </code><code>'mysql-bin.000003'</code><code>, position 312</code>
<code>140630 09:51:59 innobackupex: Connection to database server closed</code>
<code>140630 09:51:59 innobackupex: completed OK!</code>
但是一般情況下,這個備份是不能用于恢複的,因為備份的資料中可能會包含尚未送出的事務或已經送出但尚未同步至資料檔案中的事務。是以,此時資料檔案處于不一緻的狀态,我們現在就是要通過復原未送出的事務及同步已經送出的事務至資料檔案也使得資料檔案處于一緻性狀态。
<code> </code><code>[root@Web1 ~]</code><code># innobackupex --apply-log /data/backup/2014-06-30_11-33-24</code>
從上面可以看出,隻是對innobackupex加--apply-log參數應用日志,然後加上備份的目錄
2.完全恢複資料
先停止mysqld服務,然後清空資料檔案目錄,恢複完成後再設定權限
<code>[root@Web1 ~]</code><code># service mysqld stop</code>
<code>[root@Web1 ~]</code><code># mv /data/mysql/data /data/mysql/data_old</code>
<code>[root@Web1 ~]</code><code># mkdir -p /data/mysql/data</code>
<code>[root@Web1 ~]</code><code># innobackupex --copy-back /data/backup/2014-06-30_11-33-24</code>
<code>[root@Web1 ~]</code><code># chown -R mysql.mysql /data/mysql/data</code>
<code>[root@Web1 ~]</code><code># service mysqld start</code>
innobackup的--copy-back選項用于執行恢複操作,它是通過複制所有資料相關檔案至MySQL資料目錄,是以,需要清空資料目錄。我這裡是将其重命名,然後再重建目錄。最主要一步是将其權限更改
3.增量備份
<code>[root@Web1 ~]</code><code># innobackupex --user=root --password=123456 --incremental /data/backup --incremental-basedir=/data/backup/2014-06-30_11-33-24</code>
其中,--incremental-basedir指的是完全備份所在的目錄,此指令執行結束後,innobackupex指令會在/data/backup目錄中建立一個新的以時間命名的目錄以存放所有的增量備份資料。另外,在執行過增量備份之後再一次進行增量備份時,其--incremental-basedir應該指向上一次的增量備份所在的目錄。
需要注意的是,增量備份僅能應用于InnoDB或XtraDB表,對于MyISAM表而言,執行增量備份時其實進行的是完全備份。
增量備份,如果需要恢複的話需要做如下操作
<code>[root@Web1 ~]</code><code># innobackupex --apply-log --redo-only /data/backup/2014-06-30_11-33-24</code>
<code>[root@Web1 ~]</code><code># innobackupex --apply-log --redo-only /data/backup/2014-06-30_11-33-24 --incremental-dir=/data/backup/2014-06-30_13-06-25</code>
如果存在多次增量備份的話,就需要多次執行.如
<code>innobackupex --apply-log --redo-only BACKUPDIR </code>
<code>innobackupex --apply-log --redo-only BACKUPDIR --incremental-</code><code>dir</code><code>=INCREMENTDIR-1</code>
<code>innobackupex --apply-log --redo-only BACKUPDIR --incremental-</code><code>dir</code><code>=INCREMENTDIR-2</code>
BACKUP是全備目錄,INCREMENTDIR是增量備份目錄,上面是有2次增量備份,如果存在多次增量備份,則需要多次運作如上的指令
4.Xtrabackup的備份壓縮
Xtrabackup對備份的資料檔案支援“流”功能,即可以将備份的資料通過STDOUT傳輸給tar程式進行歸檔,而不是預設的直接儲存至某備份目錄中。要使用此功能,僅需要使用--stream選項即可。如:
<code>innobackupex --user=root --password=123456 --stream=</code><code>tar</code> <code>/data/backup</code> <code>| </code><code>gzip</code> <code>> </code><code>/data/backup/</code><code>`</code><code>date</code> <code>+%F_%H-%M-%S`.</code><code>tar</code><code>.gz</code>
本文轉自 rong341233 51CTO部落格,原文連結:http://blog.51cto.com/fengwan/1432347