天天看点

CentOS 6.5下Percona Xtrabackup的安装及使用

一.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>&gt; </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

继续阅读