1 简介

    innobackupex工具是使用perl脚本对c程序xtrabackup的一个封装。它是oracle分发的innodb热备工具innobackup perl脚本文件的补丁版本。它通过整合xtrabackup以及其他函数,例如文件拷贝和流具有更多的功能,增加了便利性。它支持innodb/xtradb表,数据库定义,mysiam表的基于时间点的备份。

2 先决条件

    2.1 连接和权限

    当准备一些场景及数据恢复的时候,Percona XtraBackup需要能够连接到数据库服务器并在创建备份的时候能对服务器及data目录执行相关操作。为了做到这些,当它执行的时候,相关权限及许可需求必须满足。

    权限(privileges)是指系统用户允许的对数据库服务器进行的操作,他们通过数据库服务器进行设置,并且仅适用于数据库服务器的用户。

    许可(permissions)是指允许用户在操作系统上执行哪些操作,比如对相关目录进行读,写,执行操作或者启动/停止一个系统服务。它们在系统级别设置,并且仅适用于系统用户。

    当使用xtrabackup或者innobackupex的时候,涉及两个角色:调用程序的用户(系统用户)和在数据库服务器执行操作的用户(数据库用户),这是用在不同地方的两个不同用户,即便他们有相同的用户名。

    2.2 连接到数据库服务:

    2.2.1 权限及许可需求:

    一旦连接到数据库,为了能执行备份,需要如下权限

    操作系统层:

    需要有对data目录有读,写及可执行权限。

    数据库层:

    RELOAD 和 LOCK TABLES:为了在开始拷贝文件前,执行FLUSH TABLES WITH

    READ LOCK操作。

    REPLICATION CLIENT:为了获得binlog日志位置。

    CREATE TABLESPACE:为了导入表,用户表级别的恢复。

    SUPER:为了在复制环境下能够start/stop slave复制线程。

    2.2.2 创建备份用户

    最小权限的用户:

[plain]  view plain copy

  1. mysql> CREATE USER 'backuser'@'%' IDENTIFIED BY 'backpassword';
  2. mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backuser'@'%';
  3. mysql> FLUSH PRIVILEGES;

所有权限的用户:

[sql] view plain copy

  1. mysql> CREATE USER 'backuser'@'%' IDENTIFIED BY 'backpassword';
  2. mysql> GRANT ALL PRIVILEGES ON *.* TO 'backuser'@'%';
  3. mysql> FLUSH PRIVILEGES;

2.2.3 连接到数据库服务

通过指定用户名(--user)及密码(--password)选项连接到数据库服务:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword /tmp/backup
  2. [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword --stream=tar /tmp/backup > /tmp/backup_`date +%F_%T`.tar
  3. [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword --stream=tar /tmp/backup | gzip > /tmp/backup_`date +%F_%T`.tar.gz
  4. [root@localhost bin]# ./xtrabackup --user=backuser --password=backpassword --backup --target-dir=/tmp/backup

注:如果不指定--user,Percona XtraBackup会默认使用调用它的用户作为数据库用户名。

其它连接选项:

--port:使用TCP/IP连接到数据库时使用的端口。

--socket:连接到本地数据库时使用的socket文件。

--host:使用TCP/IP连接到数据库时使用的主机名或IP。

3 全量备份还原

3.1 使用innobackupex创建全备

innobackupex使用xtrabackup并结合xbstream 与 xbcrypt工具,提供了备份整个mysql数据库实例的功能。

创建一个全备,需要通过指定合适的选项调用innobackupex脚本连接到数据库,以及一个参数:全备存储的目录。

实例如下:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword /tmp/backup/

查看最后一行输出的确认信息

mysql备份还原-xtrabackup2.2.3工具innobackupex脚本用法详解_mysql

备份文件将会存储在指定路径的以时间戳命名的文件夹下,如:/tmp/backup/2014-12-19_22-56-45/

内部机制:

innobackupex调用xtrabackup备份innodb表的所有数据,对于MyISAM, MERGE, CSV 以及 ARCHIVE 表,拷贝所有的表定义(.frm文件),数据,文件以及触发器和数据库定义信息。存储在指定路径的以时间戳命名的文件夹下。

需要考虑的其它选项

--defaults-file:通过该选项可以指定相应的mysql配置文件信息(需要放在紧跟innobackupex后第一个位置)

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --defaults-file=/etc/my-other.cnf --user=backuser --password=backpassword /tmp/backup

--no-timestamp:将备份文件直接存储在指定目录下,不在该目录下创建以时间戳命名的文件夹。

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword /tmp/backup --no-timestamp

3.2 使用innobackupex准备全备

创建一个备份后,数据并没有准备好直接还原。需要回滚未提交的事务,重放在日志中的事务。这个挂起的操作可以保持数据的一致性,也是准备阶段的目的。一旦这个阶段完成,数据将准备被使用。

命令如下:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --apply-log /tmp/backup/2014-12-20_00-46-25/

查看最后一行输出的确认信息,成功则会输出

mysql备份还原-xtrabackup2.2.3工具innobackupex脚本用法详解_数据_02

这些完成后就为还原数据做好了准备。

内部机制

通过读取备份文件夹中的备份文件,innobackupex重放已提交的事务,回滚未提交的事务,一旦这些完成,所有存在innodb表空间的信息以及日志文件将会被重建。

注:改prepare步骤不适用于增量备份。

需要考虑的其它选项

--use-memory:默认值为100M,可根据服务器内存的配置,增大该参数可加快prepare的速度,例如:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --apply-log --use-memory=2G /tmp/backup/2014-12-20_00-46-25/

3.3 使用innobackupex还原全量备份

innobackupex通过选项--copy-back对备份文件还原到指定mysql数据库的data目录。例如:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword --copy-back /tmp/backup/2014-12-20_00-46-25/

通过配置文件my.cnf,拷贝所有数据相关文件到mysql数据库data目录下,查看最后一行输出的确认信息,成功则会输出

mysql备份还原-xtrabackup2.2.3工具innobackupex脚本用法详解_数据_03

注意:需要还原数据的mysql数据库在还原数据前应该是关闭状态,且data目录为空,因为innobackupex --copy-back不会覆盖已存在的文件。

还原成功后,启动mysql数据库之前还应该更改还原文件的属性。

[plain] view plain copy

  1. [root@localhost bin]# chown -R mysql:mysql /usr/local/mysql/data/

4 增量备份还原

增量备份只备份从上次备份后变化的内容,这样做可以节省存储空间及备份持续时间。

增量备份依赖于innodb页上的LSN(log sequence number),每次对数据库的修改都会导致LSN自增。

一个增量备份会复制指定LSN后的所有页。

创建后续的一系列增量备份前,需要有一个全量备份的基础备份,否则的话创建增量备份是没有意义的。

4.1 创建一个全备

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword /tmp/backup

查看备份文件夹下xtrabackup_checkpoints文件,该文件记录了备份类型,最后的LSN,及是否压缩等信息

[plain] view plain copy

  1. [root@localhost bin]# cat /tmp/backup/2014-12-23_02-17-11/xtrabackup_checkpoints

mysql备份还原-xtrabackup2.2.3工具innobackupex脚本用法详解_数据库_04

全量备份详细介绍参考上面第3小节<全量备份还原>。

4.2 创建一个增备

创建一个增备需要使用--incremental参数,并通过--incremental-basedir指定上次备份(全备或增备)的目录,以及增备需要保存的目录(可与全备保存的目录相同或不同)。

[plain] view plain copy

  1. [root@localhost bin]# innobackupex --incremental /tmp/backup --incremental-basedir=/tmp/backup/2014-12-23_02-17-11/

查看备份,可见生成了增备文件夹2014-12-23_02-40-22

[plain] view plain copy

  1. [root@localhost bin]# ll /tmp/backup/
  2. total 8
  3. drwxr-xr-x. 6 root root 4096 Dec 23 02:17 2014-12-23_02-17-11
  4. drwxr-xr-x. 6 root root 4096 Dec 23 02:40 2014-12-23_02-40-22

查看增备文件夹下xtrabackup-checkpoints文件。

[plain] view plain copy

  1. [root@localhost bin]# cat /tmp/backup/2014-12-23_02-40-22/xtrabackup_checkpoints

mysql备份还原-xtrabackup2.2.3工具innobackupex脚本用法详解_增量备份_05

4.3 再创建一个增备

在第一次设置增量备份时,--incremental-basedir是最近一次的全量备份目录,之后的增量备份就需要设置成前一次增量备份目录。

[plain] view plain copy

  1. [root@localhost bin]# innobackupex --incremental /tmp/backup --incremental-basedir=/tmp/backup/2014-12-23_02-40-22/

查看备份,可见生成了增备文件夹2014-12-23_02-51-30

[plain] view plain copy

  1. [root@localhost bin]# ll /tmp/backup/

mysql备份还原-xtrabackup2.2.3工具innobackupex脚本用法详解_数据库_06

查看增备文件夹下xtrabackup-checkpoints文件。

[plain] view plain copy

  1. [root@localhost bin]# cat /tmp/backup/2014-12-23_02-51-30/xtrabackup_checkpoints

mysql备份还原-xtrabackup2.2.3工具innobackupex脚本用法详解_数据库_07

4.4 增量备份的另一种方法:通过LSN创建增备

使用参数--incremental-lsn代替参数--incremental-basedir,例如

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --incremental /tmp/backup --incremental-lsn=1821776

这种方法非常有用,比如:上一次的增备并不一定总是可用。

注意:这个过程仅适用于基于xtradb及innodb引擎的表。对于其它存储引擎的表,比如myisam,每次增备都会拷贝全量的数据。

4.5 准备增量备份

准备增量备份与准备全备有一些区别:

a.只有已经提交的且需要重放的事务才写进备份,这个过程将会合并基础的全备文件与增备文件。

b.未提交的事务需要回滚,以便获得能够直接使用的备份。

如果我们在基础备份上已经执行了重放已提交的事务,回滚未提交的事务,那么我们将不能再对该基础文件添加增备;如果我们在增备上做这些操作,我们将不能使用该增备以及剩余的增备。

比较直接的正确做法是使用--redo-only选项应用基础备份,只做已提交的事务,不回滚未提交的事务。

语法如下:

[plain] view plain copy

  1. innobackupex --apply-log --redo-only BASE-DIR

具体实例如下:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --apply-log --redo-only /tmp/backup/2014-12-23_02-17-11

成功后我们会得到类似如下输出:

[plain] view plain copy

  1. xtrabackup: starting shutdown with innodb_fast_shutdown = 1
  2. InnoDB: Starting shutdown...
  3. InnoDB: Shutdown completed; log sequence number 1817140
  4. 141223 22:14:03 innobackupex: completed OK!

应用第一个增备到基础备份

基本语法:

[plain] view plain copy

  1. innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1


具体实例:


[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --apply-log --redo-only /tmp/backup/2014-12-23_02-17-11 --incremental-dir=/tmp/backup/2014-12-23_02-40-22



成功后我们会得到类似如下输出:

[plain] view plain copy

  1. InnoDB: Shutdown completed; log sequence number 1819077
  2. .....................................
  3. 141223 22:30:07 innobackupex: completed OK!

注意:注意LSN的变化。

重复上面步骤,顺序应用其余增备到基础备份

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --apply-log --redo-only /tmp/backup/2014-12-23_02-17-11 --incremental-dir=/tmp/backup/2014-12-23_02-51-30
  2. [root@localhost bin]# ./innobackupex --apply-log /tmp/backup/2014-12-23_02-17-11 --incremental-dir=/tmp/backup/2014-12-23_03-04-16

注:准备最后一个增量备份没有必要使用--redo-only,加上也没事,数据依然连续,数据在服务器启动阶段会执行回滚操作。

准备增量备份的时候,需要按照时间顺序从前往后整合到全备,如果顺序搞反会导致备份不可用。如果不确定顺序,可通过查看xtrabackup_checkpoints来确定。

一旦所有的增备都整合到了基础备份,我们就可以回滚所有未提交的事务

语法如下:

[plain] view plain copy

  1. innobackupex --apply-log BASE-DIR

实例如下:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --apply-log /tmp/backup/2014-12-23_02-17-11

prepere完以后,备份文件就准备好可以快速还原了。prepare准备过程是可选的,如果我们忽略这一步,数据库开始的时候也会执行回滚未提交的事务,类似数据库宕机发生后的重启。会延迟数据库服务的启动,如果想要在启动时吧避免延迟,最要提前在进行prepare准备操作。

4.6 还原增量备份

还原增量备份和还原全备一样,详细过程可参考3.3节。

基本语法:

[plain] view plain copy

  1. innobackupex --copy-back BASE-DIR

具体实例:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --copy-back /tmp/backup/2014-12-23_02-17-11

注意:还原前数据库实例为停止状态,且data目录为空。

4.7 使用xbstream 及 tar创建流式增量备份,备份到远端服务器。

4.7.1 前提条件:

a.远程机器要安装xbstream

b.远程机器的目录要存在,同时保证是空目录。远程机器目录非空,备份时报以下错误"xtrabackup: Error writing file 'UNOPENED' (Errcode: 32 - Broken pipe)"

c.ssh要能连接:使用ssh秘钥免密码输入

附:在本机设置免密码登录到远程机器

生成秘钥(公钥和私钥)

[plain] view plain copy

  1. [root@localhost bin]# ssh-keygen -t rsa -P ''
  2. Generating public/private rsa key pair.
  3. Enter file in which to save the key (/root/.ssh/id_rsa):
  4. Your identification has been saved in /root/.ssh/id_rsa.
  5. Your public key has been saved in /root/.ssh/id_rsa.pub.
  6. The key fingerprint is:
  7. 23:a5:a8:32:d7:b4:75:4b:2a:8d:ba:44:00:fe:8d:f0 root@localhost.localdomain
  8. The key's randomart image is:
  9. +--[ RSA 2048]----+
  10. |. |
  11. |o |
  12. |.o . |
  13. | .+ o. o |
  14. | .Eo.+ S |
  15. | . + = = o |
  16. |o + = o . |
  17. | = . . |
  18. | o. |
  19. +-----------------+

查看生成的秘钥。

[plain] view plain copy

  1. [root@localhost bin]# ll /root/.ssh/
  2. total 12
  3. -rw-------. 1 root root 1671 Dec 24 03:32 id_rsa
  4. -rw-r--r--. 1 root root 408 Dec 24 03:32 id_rsa.pub
  5. -rw-r--r--. 1 root root 394 Dec 24 00:58 known_hosts

将公钥传输应用到远程机器

[plain] view plain copy

  1. [root@localhost bin]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.186.23.36
  2. root@10.186.23.36's password:

配置成功!

4.7.2 创建一个基础全备:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword /tmp/backup

4.7.3 创建一个本地增备:

基本语法:

[plain] view plain copy

  1. innobackupex --incremental --incremental-lsn=LSN-number --stream=xbstream --user=backuser --password=backpassword ./ > incremental.xbstream

具体实例:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --incremental --incremental-lsn=1829189 --stream=xbstream --user=backuser --password=backpassword ./ > incremental.xbstream

解包方法:

[plain] view plain copy

  1. [root@localhost bin]# ./xbstream -x < incremental.xbstream

综合步骤(包含上面2个步骤):

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --incremental --incremental-lsn=1829189 --stream=xbstream --tmpdir=/tmp/backup/tmp --user=backuser --password=backpassword ./ | ssh root@10.186.23.36 "cat - | xbstream -x -C /tmp/backup/"

查看远程备份目录

[plain] view plain copy

  1. [root@HA1 backup]# ll

mysql备份还原-xtrabackup2.2.3工具innobackupex脚本用法详解_数据_08

5 部分备份还原

Percona XtraBackup支持部分备份,如只备份指定的表或库。需要备份的表必须有独立的表空间,需要设置mysql选项innodb_file_per_table为1。

注意:部分备份的还原使用导入表的方式,而非使用copy-back。

5.1 创建部分备份:

有三种方式用于指定备份全部数据的哪一部分:

--include:设置正则表达式的格式,匹配的就备份

--table-file:通过枚举,在文件中指定要备份的表

--database:指定数据库列表

使用include方式

使用正则表达式需要完全匹配包含数据库名的表名,格式如databasename.tablename。

格式如下:

[plain] view plain copy

  1. innobackupex --include=’^mydatabase[.]mytable’ /tmp/backup

实例如下:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --include='^test.partial' /tmp/backup

执行完该命令后将会在指定文件夹创建一个以时间戳命名的文件夹,里面包含innobackupex创建的一些文件,以及正则表达式所指定的数据表。

注意:该选项是通过调用xtrabackup --tables命令,匹配每个数据库的每一张表,在备份文件加下,每个数据库文件夹都会被创建,尽管有些是空的。

使用table-file方式

使用text文本文件的方式记录下要备份的对应的数据库的数据表,格式为databasename.tablename,每行一个。

例如:

[plain] view plain copy

  1. [root@localhost bin]# echo "test.table1" > /tmp/tables.txt
  2. [root@localhost bin]# echo "test.table2" >> /tmp/tables.txt
  3. [root@localhost bin]# ./innobackupex --tables-file=/tmp/tables.txt /tmp/backup

执行完该命令后将会在指定文件夹创建一个以时间戳命名的文件夹,里面包含innobackupex创建的一些文件,以及文本文件所指定的数据表。

注意:该选项是通过调用xtrabackup --tables-file命令,不同于--tables选项,仅创建包含数据表的数据库。

使用database方式

备份指定的数据库的数据表,格式为--databases="databasename1[.table_name1] databasename2[.table_name2] . . .".

例如:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --databases="test.table2 testdb" /tmp/backup

执行完该命令后将会在指定文件夹创建一个以时间戳命名的文件夹,里面包含innobackupex创建的一些文件,以及test库下的table2表和整个testdb数据库。

5.2 准备部分备份

准备部分还原的过程同还原单个表类似:应用日志,以及使用--export日志。

例如:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --apply-log --export /tmp/backup/2014-12-30_00-33-57

我们应该会看到为每个备份表创建.exp文件的一些信息

mysql备份还原-xtrabackup2.2.3工具innobackupex脚本用法详解_数据库_09

查看最后一行输出的确认信息,成功则会输出

[plain] view plain copy

  1. InnoDB: Shutdown completed; log sequence number 1891862
  2. 141230 00:47:26 innobackupex: completed OK!

5.3 还原部分备份

将prepare后的备份文件夹中test文件夹拷贝到mysql数据库目录,并将文件件所有者更改为mysql用户即可

6 紧凑备份

对innodb表进行备份的时候我们可以忽略辅助索引页,这将使备份更加紧凑以及占用更少的磁盘空间。缺点就是在对备份文件进行prepare操作时,如果需要重建辅助索引,将会消耗更长的时间。备份文件大小的不同取决于索引页。

注:紧凑备份不支持系统共享表空间,所以备份前要确认innodb-file-per-table为ON。

6.1 创建紧凑备份

例如:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --compact /tmp/backup

6.2 准备(Prepar)紧凑备份

准备紧凑备份需要重建索引,所以--rebuild-indexes选项需要配合--apply-logs选项一起使用。

例如:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --apply-log --rebuild-indexes /tmp/backup/2014-12-30_01-34-41/

对于增量备份的应用可以先不重建索引,在应用最后一个差异备份的时候使用—rebuild-index来创建索引,每次都应用都重建索引太花时间。

可使用--rebuild-threads参数并行重建辅助索引,以加快速度。每个线程在同一时刻只对一个.ibd文件所对应的索引重建。

6.3 还原紧凑备份

通过--copy-back参数,将备份还原至data文件夹。

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --copy-back /tmp/backup/2014-12-30_01-34-41

注意:需要还原数据的mysql数据库在还原数据前应该是关闭状态,且data目录为空,因为innobackupex --copy-back不会覆盖已存在的文件。

还原成功后,启动mysql数据库之前还应该更改还原文件的属性。

[plain] view plain copy

  1. [root@localhost bin]# chown -R mysql:mysql /usr/local/mysql/data/

7 加密备份

Percona XtraBackup支持加密备份,该特性在Percona XtraBackup 2.1版本引入。加密通过libgcrypt库完成。

注:加密相关选项在my.cnf指定的话会被innobackupex忽略。

7.1 创建加密备份

7.1.1 相关参数介绍

创建加密备份需要指定如下参数:

--encryption=algorithm(算法):当前支持的算法,如AES128, AES192 和 AES256。

--encrypt-key=加密秘钥:需要使用的适当长度的加密秘钥。不太推荐使用该选项,因为它通过机器的命令行访问是不受控制的,秘钥可以作为进程信息的一部分被看到。

--encrypt-key-file=秘钥文件:适当长度的原始秘钥可以被读取的文件,该文件是包含正确秘钥的简单的二进制或文本文件。

注:选项--encrypt-key与--encrypt-key-file相互排斥,二者只能选其一。

7.1.2 生成秘钥

加密秘钥可通过如下方式生成:

[plain] view plain copy

  1. [root@localhost bin]# openssl enc -aes-256-cbc -pass pass:Password -P -md sha1

mysql备份还原-xtrabackup2.2.3工具innobackupex脚本用法详解_数据库_10

这种情况下我们可以使用iv作为秘钥。

7.1.3 创建备份

通过--encrypt-key

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --encrypt=AES256 --encrypt-key="B8EEACE100AADB5F3A0D94F3112AAFA5" /tmp/backup

通过--encrypt-key-file

[plain] view plain copy

  1. [root@localhost bin]# echo -n "B8EEACE100AADB5F3A0D94F3112AAFA5" > /tmp/keyfile.txt
  2. [root@localhost bin]# ./innobackupex --encrypt=AES256 --encrypt-key-file=/tmp/keyfile.txt /tmp/backup

7.1.4 优化加密过程

--encrypt-threads:使用多线程进行并行加密。

--encrypt-chunk-size:为每个加密线程指定缓存,默认为64K。

例如:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --encrypt=AES256 --encrypt-key="B8EEACE100AADB5F3A0D94F3112AAFA5" --encrypt-threads=16 --encrypt-chunk-size=256K /tmp/backup

7.1.5 解密备份

备份通过xbcrypt二进制文件进行解密。

Percona XtraBackup 2.1.4引入新的参数--decrypt用于解密备份文件。

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --decrypt=AES256 --encrypt-key="B8EEACE100AADB5F3A0D94F3112AAFA5" /tmp/backup/2014-12-30_03-51-42/

使用innobackupex --decrypt将会删除原有加密文件,将解密后的文件保存在相同的备份目录。--parallel选项可同--decrypt选项一起使用。

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --decrypt=AES256 --encrypt-key="B8EEACE100AADB5F3A0D94F3112AAFA5" --parallel=16 /tmp/backup/2014-12-30_03-51-42/

7.2 准备加密备份

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --apply-log /tmp/backup/2014-12-30_03-51-42/

7.3 还原加密备份

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --copy-back /tmp/backup/2014-12-30_03-51-42/

8 复制环境下进行备份

我们可以从开启主从复制的从机对数据进行备份。

主要有如下两个参数

--slave-info: 加入该参数会打印master主机的二进制文件名称和位置,并以change master的方式将信息写入--safe-slave-backup文件。

--safe-slave-backup: 为了保证复制状态的一致性,该选项会停止从机的SQL线程,并等待直到Slave_open_temp_tables(通过show status查看)为0,以确保没有临时表开启,才开始进行备份。如果在--safe-slave-backup-timeout(默认300秒)所指定的时间内,临时表还没有被完全关闭,备份将不会被开启,从机的SQL线程也会重新启动。

9 加速备份进程

9.1 使用--parallel 与 –compress-threads进行加速:

当进行本地备份或使用xbstream进行流式备份时,使用----parallel 可同时拷贝多个文件,该参数指定了xtrabackup拷贝数据文件的线程数。

利用该选项特性,需要开启独立表空间(innodb_file_per_table =1)或使用共享表空间的或通过innodb_data_file_path参数将ibdata文件存储为多份不同文件。因为该特性的实现在文件级别。

示例如下:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --parallel=16 /tmp/backup

流式备份时使用xbstream可以通过--compress-threads选项加速压缩进程,该选项指定了xtrabackup进行并行压缩时使用的线程数。默认线程数为1。

本地流式压缩备份示例如下:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --stream=xbstream --compress --compress-threads=16 ./ > backup.xbstream

注:对于压缩备份,重放备份前需要解压缩。

9.2 使用--rsync进行加速:

该参数是为了加速备份进程以及减少FLUSH TABLES WITH READ LOCK锁表的时间。指定该参数,innobackupex会调用rsync使用一个cp命令拷贝所有文件,而非每个文件调用一个cp命令,这样对于有大量数据库或表的服务器比较快。innobackupex会调用rsync两次,一次是在执行FLUSH TABLES WITH READ LOCK之前,一次在之后。

例如:

[plain] view plain copy

  1. [root@localhost bin]# ./innobackupex --parallel=16 --rsync /tmp/backup

注:该选项不能和--remote-host 或--stream一起使用。

10 抑制备份进程

尽管innobackupex不阻塞我们对数据库的操作,一些备份操作还是会增加服务器的负担。对于IO能力较低的系统,该参数比较有用,可通过配置【--throttle】参数减少innobackupex读或写innodb数据文件的频率。

--throttle参数直接通过xtrabackup二进制文件,仅作用于 innodb存储引擎的日志及文件。

对操作系统检查当前IO操作可通过iostat命令进行查看。

注:该参数仅作用于备份过程,对于--apply-log及--copy-back过程不适用。

11 恢复单个表



12 时间点恢复



13 改进的 FLUSH TABLES WITH READ LOCK操作



14 存储备份服务器上的历史文件



.

.

.

6 *************************未完待续*************************

****************************************************************************************

****************************************************************************************