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 创建备份用户
最小权限的用户:
所有权限的用户:
2.2.3 连接到数据库服务
通过指定用户名(--user)及密码(--password)选项连接到数据库服务:
注:如果不指定--user,Percona XtraBackup会默认使用调用它的用户作为数据库用户名。
其它连接选项:
--port:使用TCP/IP连接到数据库时使用的端口。
--socket:连接到本地数据库时使用的socket文件。
--host:使用TCP/IP连接到数据库时使用的主机名或IP。
3 全量备份还原
3.1 使用innobackupex创建全备
innobackupex使用xtrabackup并结合xbstream 与 xbcrypt工具,提供了备份整个mysql数据库实例的功能。
创建一个全备,需要通过指定合适的选项调用innobackupex脚本连接到数据库,以及一个参数:全备存储的目录。
实例如下:
查看最后一行输出的确认信息
备份文件将会存储在指定路径的以时间戳命名的文件夹下,如:/tmp/backup/2014-12-19_22-56-45/
内部机制:
innobackupex调用xtrabackup备份innodb表的所有数据,对于MyISAM, MERGE, CSV 以及 ARCHIVE 表,拷贝所有的表定义(.frm文件),数据,文件以及触发器和数据库定义信息。存储在指定路径的以时间戳命名的文件夹下。
需要考虑的其它选项
--defaults-file:通过该选项可以指定相应的mysql配置文件信息(需要放在紧跟innobackupex后第一个位置)
--no-timestamp:将备份文件直接存储在指定目录下,不在该目录下创建以时间戳命名的文件夹。
3.2 使用innobackupex准备全备
创建一个备份后,数据并没有准备好直接还原。需要回滚未提交的事务,重放在日志中的事务。这个挂起的操作可以保持数据的一致性,也是准备阶段的目的。一旦这个阶段完成,数据将准备被使用。
命令如下:
查看最后一行输出的确认信息,成功则会输出
这些完成后就为还原数据做好了准备。
内部机制
通过读取备份文件夹中的备份文件,innobackupex重放已提交的事务,回滚未提交的事务,一旦这些完成,所有存在innodb表空间的信息以及日志文件将会被重建。
注:改prepare步骤不适用于增量备份。
需要考虑的其它选项
--use-memory:默认值为100M,可根据服务器内存的配置,增大该参数可加快prepare的速度,例如:
3.3 使用innobackupex还原全量备份
innobackupex通过选项--copy-back对备份文件还原到指定mysql数据库的data目录。例如:
通过配置文件my.cnf,拷贝所有数据相关文件到mysql数据库data目录下,查看最后一行输出的确认信息,成功则会输出
注意:需要还原数据的mysql数据库在还原数据前应该是关闭状态,且data目录为空,因为innobackupex --copy-back不会覆盖已存在的文件。
还原成功后,启动mysql数据库之前还应该更改还原文件的属性。
4 增量备份还原
增量备份只备份从上次备份后变化的内容,这样做可以节省存储空间及备份持续时间。
增量备份依赖于innodb页上的LSN(log sequence number),每次对数据库的修改都会导致LSN自增。
一个增量备份会复制指定LSN后的所有页。
创建后续的一系列增量备份前,需要有一个全量备份的基础备份,否则的话创建增量备份是没有意义的。
4.1 创建一个全备
查看备份文件夹下xtrabackup_checkpoints文件,该文件记录了备份类型,最后的LSN,及是否压缩等信息
全量备份详细介绍参考上面第3小节<全量备份还原>。
4.2 创建一个增备
创建一个增备需要使用--incremental参数,并通过--incremental-basedir指定上次备份(全备或增备)的目录,以及增备需要保存的目录(可与全备保存的目录相同或不同)。
查看备份,可见生成了增备文件夹2014-12-23_02-40-22
查看增备文件夹下xtrabackup-checkpoints文件。
4.3 再创建一个增备
在第一次设置增量备份时,--incremental-basedir是最近一次的全量备份目录,之后的增量备份就需要设置成前一次增量备份目录。
查看备份,可见生成了增备文件夹2014-12-23_02-51-30
查看增备文件夹下xtrabackup-checkpoints文件。
4.4 增量备份的另一种方法:通过LSN创建增备
使用参数--incremental-lsn代替参数--incremental-basedir,例如
这种方法非常有用,比如:上一次的增备并不一定总是可用。
注意:这个过程仅适用于基于xtradb及innodb引擎的表。对于其它存储引擎的表,比如myisam,每次增备都会拷贝全量的数据。
4.5 准备增量备份
准备增量备份与准备全备有一些区别:
a.只有已经提交的且需要重放的事务才写进备份,这个过程将会合并基础的全备文件与增备文件。
b.未提交的事务需要回滚,以便获得能够直接使用的备份。
如果我们在基础备份上已经执行了重放已提交的事务,回滚未提交的事务,那么我们将不能再对该基础文件添加增备;如果我们在增备上做这些操作,我们将不能使用该增备以及剩余的增备。
比较直接的正确做法是使用--redo-only选项应用基础备份,只做已提交的事务,不回滚未提交的事务。
语法如下:
具体实例如下:
成功后我们会得到类似如下输出:
应用第一个增备到基础备份
基本语法:
注意:注意LSN的变化。
重复上面步骤,顺序应用其余增备到基础备份
注:准备最后一个增量备份没有必要使用--redo-only,加上也没事,数据依然连续,数据在服务器启动阶段会执行回滚操作。
准备增量备份的时候,需要按照时间顺序从前往后整合到全备,如果顺序搞反会导致备份不可用。如果不确定顺序,可通过查看xtrabackup_checkpoints来确定。
一旦所有的增备都整合到了基础备份,我们就可以回滚所有未提交的事务
语法如下:
实例如下:
prepere完以后,备份文件就准备好可以快速还原了。prepare准备过程是可选的,如果我们忽略这一步,数据库开始的时候也会执行回滚未提交的事务,类似数据库宕机发生后的重启。会延迟数据库服务的启动,如果想要在启动时吧避免延迟,最要提前在进行prepare准备操作。
4.6 还原增量备份
还原增量备份和还原全备一样,详细过程可参考3.3节。
基本语法:
具体实例:
注意:还原前数据库实例为停止状态,且data目录为空。
4.7 使用xbstream 及 tar创建流式增量备份,备份到远端服务器。
4.7.1 前提条件:
a.远程机器要安装xbstream
b.远程机器的目录要存在,同时保证是空目录。远程机器目录非空,备份时报以下错误"xtrabackup: Error writing file 'UNOPENED' (Errcode: 32 - Broken pipe)"
c.ssh要能连接:使用ssh秘钥免密码输入
附:在本机设置免密码登录到远程机器
生成秘钥(公钥和私钥)
查看生成的秘钥。
将公钥传输应用到远程机器
配置成功!
4.7.2 创建一个基础全备:
4.7.3 创建一个本地增备:
基本语法:
具体实例:
解包方法:
综合步骤(包含上面2个步骤):
查看远程备份目录
5 部分备份还原
Percona XtraBackup支持部分备份,如只备份指定的表或库。需要备份的表必须有独立的表空间,需要设置mysql选项innodb_file_per_table为1。
注意:部分备份的还原使用导入表的方式,而非使用copy-back。
5.1 创建部分备份:
有三种方式用于指定备份全部数据的哪一部分:
--include:设置正则表达式的格式,匹配的就备份
--table-file:通过枚举,在文件中指定要备份的表
--database:指定数据库列表
使用include方式
使用正则表达式需要完全匹配包含数据库名的表名,格式如databasename.tablename。
格式如下:
实例如下:
执行完该命令后将会在指定文件夹创建一个以时间戳命名的文件夹,里面包含innobackupex创建的一些文件,以及正则表达式所指定的数据表。
注意:该选项是通过调用xtrabackup --tables命令,匹配每个数据库的每一张表,在备份文件加下,每个数据库文件夹都会被创建,尽管有些是空的。
使用table-file方式
使用text文本文件的方式记录下要备份的对应的数据库的数据表,格式为databasename.tablename,每行一个。
例如:
执行完该命令后将会在指定文件夹创建一个以时间戳命名的文件夹,里面包含innobackupex创建的一些文件,以及文本文件所指定的数据表。
注意:该选项是通过调用xtrabackup --tables-file命令,不同于--tables选项,仅创建包含数据表的数据库。
使用database方式
备份指定的数据库的数据表,格式为--databases="databasename1[.table_name1] databasename2[.table_name2] . . .".
例如:
执行完该命令后将会在指定文件夹创建一个以时间戳命名的文件夹,里面包含innobackupex创建的一些文件,以及test库下的table2表和整个testdb数据库。
5.2 准备部分备份
准备部分还原的过程同还原单个表类似:应用日志,以及使用--export日志。
例如:
我们应该会看到为每个备份表创建.exp文件的一些信息
查看最后一行输出的确认信息,成功则会输出
5.3 还原部分备份
将prepare后的备份文件夹中test文件夹拷贝到mysql数据库目录,并将文件件所有者更改为mysql用户即可
6 紧凑备份
对innodb表进行备份的时候我们可以忽略辅助索引页,这将使备份更加紧凑以及占用更少的磁盘空间。缺点就是在对备份文件进行prepare操作时,如果需要重建辅助索引,将会消耗更长的时间。备份文件大小的不同取决于索引页。
注:紧凑备份不支持系统共享表空间,所以备份前要确认innodb-file-per-table为ON。
6.1 创建紧凑备份
例如:
6.2 准备(Prepar)紧凑备份
准备紧凑备份需要重建索引,所以--rebuild-indexes选项需要配合--apply-logs选项一起使用。
例如:
对于增量备份的应用可以先不重建索引,在应用最后一个差异备份的时候使用—rebuild-index来创建索引,每次都应用都重建索引太花时间。
可使用--rebuild-threads参数并行重建辅助索引,以加快速度。每个线程在同一时刻只对一个.ibd文件所对应的索引重建。
6.3 还原紧凑备份
通过--copy-back参数,将备份还原至data文件夹。
注意:需要还原数据的mysql数据库在还原数据前应该是关闭状态,且data目录为空,因为innobackupex --copy-back不会覆盖已存在的文件。
还原成功后,启动mysql数据库之前还应该更改还原文件的属性。
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 生成秘钥
加密秘钥可通过如下方式生成:
这种情况下我们可以使用iv作为秘钥。
7.1.3 创建备份
通过--encrypt-key
通过--encrypt-key-file
7.1.4 优化加密过程
--encrypt-threads:使用多线程进行并行加密。
--encrypt-chunk-size:为每个加密线程指定缓存,默认为64K。
例如:
7.1.5 解密备份
备份通过xbcrypt二进制文件进行解密。
Percona XtraBackup 2.1.4引入新的参数--decrypt用于解密备份文件。
使用innobackupex --decrypt将会删除原有加密文件,将解密后的文件保存在相同的备份目录。--parallel选项可同--decrypt选项一起使用。
7.2 准备加密备份
7.3 还原加密备份
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文件存储为多份不同文件。因为该特性的实现在文件级别。
示例如下:
流式备份时使用xbstream可以通过--compress-threads选项加速压缩进程,该选项指定了xtrabackup进行并行压缩时使用的线程数。默认线程数为1。
本地流式压缩备份示例如下:
注:对于压缩备份,重放备份前需要解压缩。
9.2 使用--rsync进行加速:
该参数是为了加速备份进程以及减少FLUSH TABLES WITH READ LOCK锁表的时间。指定该参数,innobackupex会调用rsync使用一个cp命令拷贝所有文件,而非每个文件调用一个cp命令,这样对于有大量数据库或表的服务器比较快。innobackupex会调用rsync两次,一次是在执行FLUSH TABLES WITH READ LOCK之前,一次在之后。
例如:
注:该选项不能和--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 *************************未完待续*************************
****************************************************************************************
原文地址: http://blog.csdn.net/jesseyoung/article/details/42046111
博客主页: http://blog.csdn.net/jesseyoung
****************************************************************************************
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 创建备份用户
最小权限的用户:
- mysql> CREATE USER 'backuser'@'%' IDENTIFIED BY 'backpassword';
- mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backuser'@'%';
- mysql> FLUSH PRIVILEGES;
- mysql> CREATE USER 'backuser'@'%' IDENTIFIED BY 'backpassword';
- mysql> GRANT ALL PRIVILEGES ON *.* TO 'backuser'@'%';
- mysql> FLUSH PRIVILEGES;
通过指定用户名(--user)及密码(--password)选项连接到数据库服务:
- [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword /tmp/backup
- [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword --stream=tar /tmp/backup > /tmp/backup_`date +%F_%T`.tar
- [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword --stream=tar /tmp/backup | gzip > /tmp/backup_`date +%F_%T`.tar.gz
- [root@localhost bin]# ./xtrabackup --user=backuser --password=backpassword --backup --target-dir=/tmp/backup
其它连接选项:
--port:使用TCP/IP连接到数据库时使用的端口。
--socket:连接到本地数据库时使用的socket文件。
--host:使用TCP/IP连接到数据库时使用的主机名或IP。
3 全量备份还原
3.1 使用innobackupex创建全备
innobackupex使用xtrabackup并结合xbstream 与 xbcrypt工具,提供了备份整个mysql数据库实例的功能。
创建一个全备,需要通过指定合适的选项调用innobackupex脚本连接到数据库,以及一个参数:全备存储的目录。
实例如下:
- [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword /tmp/backup/
备份文件将会存储在指定路径的以时间戳命名的文件夹下,如:/tmp/backup/2014-12-19_22-56-45/
内部机制:
innobackupex调用xtrabackup备份innodb表的所有数据,对于MyISAM, MERGE, CSV 以及 ARCHIVE 表,拷贝所有的表定义(.frm文件),数据,文件以及触发器和数据库定义信息。存储在指定路径的以时间戳命名的文件夹下。
需要考虑的其它选项
--defaults-file:通过该选项可以指定相应的mysql配置文件信息(需要放在紧跟innobackupex后第一个位置)
- [root@localhost bin]# ./innobackupex --defaults-file=/etc/my-other.cnf --user=backuser --password=backpassword /tmp/backup
- [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword /tmp/backup --no-timestamp
创建一个备份后,数据并没有准备好直接还原。需要回滚未提交的事务,重放在日志中的事务。这个挂起的操作可以保持数据的一致性,也是准备阶段的目的。一旦这个阶段完成,数据将准备被使用。
命令如下:
- [root@localhost bin]# ./innobackupex --apply-log /tmp/backup/2014-12-20_00-46-25/
这些完成后就为还原数据做好了准备。
内部机制
通过读取备份文件夹中的备份文件,innobackupex重放已提交的事务,回滚未提交的事务,一旦这些完成,所有存在innodb表空间的信息以及日志文件将会被重建。
注:改prepare步骤不适用于增量备份。
需要考虑的其它选项
--use-memory:默认值为100M,可根据服务器内存的配置,增大该参数可加快prepare的速度,例如:
- [root@localhost bin]# ./innobackupex --apply-log --use-memory=2G /tmp/backup/2014-12-20_00-46-25/
innobackupex通过选项--copy-back对备份文件还原到指定mysql数据库的data目录。例如:
- [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword --copy-back /tmp/backup/2014-12-20_00-46-25/
注意:需要还原数据的mysql数据库在还原数据前应该是关闭状态,且data目录为空,因为innobackupex --copy-back不会覆盖已存在的文件。
还原成功后,启动mysql数据库之前还应该更改还原文件的属性。
- [root@localhost bin]# chown -R mysql:mysql /usr/local/mysql/data/
增量备份只备份从上次备份后变化的内容,这样做可以节省存储空间及备份持续时间。
增量备份依赖于innodb页上的LSN(log sequence number),每次对数据库的修改都会导致LSN自增。
一个增量备份会复制指定LSN后的所有页。
创建后续的一系列增量备份前,需要有一个全量备份的基础备份,否则的话创建增量备份是没有意义的。
4.1 创建一个全备
- [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword /tmp/backup
- [root@localhost bin]# cat /tmp/backup/2014-12-23_02-17-11/xtrabackup_checkpoints
全量备份详细介绍参考上面第3小节<全量备份还原>。
4.2 创建一个增备
创建一个增备需要使用--incremental参数,并通过--incremental-basedir指定上次备份(全备或增备)的目录,以及增备需要保存的目录(可与全备保存的目录相同或不同)。
- [root@localhost bin]# innobackupex --incremental /tmp/backup --incremental-basedir=/tmp/backup/2014-12-23_02-17-11/
- [root@localhost bin]# ll /tmp/backup/
- total 8
- drwxr-xr-x. 6 root root 4096 Dec 23 02:17 2014-12-23_02-17-11
- drwxr-xr-x. 6 root root 4096 Dec 23 02:40 2014-12-23_02-40-22
- [root@localhost bin]# cat /tmp/backup/2014-12-23_02-40-22/xtrabackup_checkpoints
4.3 再创建一个增备
在第一次设置增量备份时,--incremental-basedir是最近一次的全量备份目录,之后的增量备份就需要设置成前一次增量备份目录。
- [root@localhost bin]# innobackupex --incremental /tmp/backup --incremental-basedir=/tmp/backup/2014-12-23_02-40-22/
- [root@localhost bin]# ll /tmp/backup/
查看增备文件夹下xtrabackup-checkpoints文件。
- [root@localhost bin]# cat /tmp/backup/2014-12-23_02-51-30/xtrabackup_checkpoints
4.4 增量备份的另一种方法:通过LSN创建增备
使用参数--incremental-lsn代替参数--incremental-basedir,例如
- [root@localhost bin]# ./innobackupex --incremental /tmp/backup --incremental-lsn=1821776
注意:这个过程仅适用于基于xtradb及innodb引擎的表。对于其它存储引擎的表,比如myisam,每次增备都会拷贝全量的数据。
4.5 准备增量备份
准备增量备份与准备全备有一些区别:
a.只有已经提交的且需要重放的事务才写进备份,这个过程将会合并基础的全备文件与增备文件。
b.未提交的事务需要回滚,以便获得能够直接使用的备份。
如果我们在基础备份上已经执行了重放已提交的事务,回滚未提交的事务,那么我们将不能再对该基础文件添加增备;如果我们在增备上做这些操作,我们将不能使用该增备以及剩余的增备。
比较直接的正确做法是使用--redo-only选项应用基础备份,只做已提交的事务,不回滚未提交的事务。
语法如下:
- innobackupex --apply-log --redo-only BASE-DIR
- [root@localhost bin]# ./innobackupex --apply-log --redo-only /tmp/backup/2014-12-23_02-17-11
- xtrabackup: starting shutdown with innodb_fast_shutdown = 1
- InnoDB: Starting shutdown...
- InnoDB: Shutdown completed; log sequence number 1817140
- 141223 22:14:03 innobackupex: completed OK!
基本语法:
- innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-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
成功后我们会得到类似如下输出:
- InnoDB: Shutdown completed; log sequence number 1819077
- .....................................
- 141223 22:30:07 innobackupex: completed OK!
重复上面步骤,顺序应用其余增备到基础备份
- [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
- [root@localhost bin]# ./innobackupex --apply-log /tmp/backup/2014-12-23_02-17-11 --incremental-dir=/tmp/backup/2014-12-23_03-04-16
准备增量备份的时候,需要按照时间顺序从前往后整合到全备,如果顺序搞反会导致备份不可用。如果不确定顺序,可通过查看xtrabackup_checkpoints来确定。
一旦所有的增备都整合到了基础备份,我们就可以回滚所有未提交的事务
语法如下:
- innobackupex --apply-log BASE-DIR
- [root@localhost bin]# ./innobackupex --apply-log /tmp/backup/2014-12-23_02-17-11
4.6 还原增量备份
还原增量备份和还原全备一样,详细过程可参考3.3节。
基本语法:
- innobackupex --copy-back BASE-DIR
- [root@localhost bin]# ./innobackupex --copy-back /tmp/backup/2014-12-23_02-17-11
4.7 使用xbstream 及 tar创建流式增量备份,备份到远端服务器。
4.7.1 前提条件:
a.远程机器要安装xbstream
b.远程机器的目录要存在,同时保证是空目录。远程机器目录非空,备份时报以下错误"xtrabackup: Error writing file 'UNOPENED' (Errcode: 32 - Broken pipe)"
c.ssh要能连接:使用ssh秘钥免密码输入
附:在本机设置免密码登录到远程机器
生成秘钥(公钥和私钥)
- [root@localhost bin]# ssh-keygen -t rsa -P ''
- Generating public/private rsa key pair.
- Enter file in which to save the key (/root/.ssh/id_rsa):
- Your identification has been saved in /root/.ssh/id_rsa.
- Your public key has been saved in /root/.ssh/id_rsa.pub.
- The key fingerprint is:
- 23:a5:a8:32:d7:b4:75:4b:2a:8d:ba:44:00:fe:8d:f0 root@localhost.localdomain
- The key's randomart image is:
- +--[ RSA 2048]----+
- |. |
- |o |
- |.o . |
- | .+ o. o |
- | .Eo.+ S |
- | . + = = o |
- |o + = o . |
- | = . . |
- | o. |
- +-----------------+
- [root@localhost bin]# ll /root/.ssh/
- total 12
- -rw-------. 1 root root 1671 Dec 24 03:32 id_rsa
- -rw-r--r--. 1 root root 408 Dec 24 03:32 id_rsa.pub
- -rw-r--r--. 1 root root 394 Dec 24 00:58 known_hosts
- [root@localhost bin]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.186.23.36
- root@10.186.23.36's password:
4.7.2 创建一个基础全备:
- [root@localhost bin]# ./innobackupex --user=backuser --password=backpassword /tmp/backup
基本语法:
- innobackupex --incremental --incremental-lsn=LSN-number --stream=xbstream --user=backuser --password=backpassword ./ > incremental.xbstream
- [root@localhost bin]# ./innobackupex --incremental --incremental-lsn=1829189 --stream=xbstream --user=backuser --password=backpassword ./ > incremental.xbstream
- [root@localhost bin]# ./xbstream -x < incremental.xbstream
- [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/"
- [root@HA1 backup]# ll
5 部分备份还原
Percona XtraBackup支持部分备份,如只备份指定的表或库。需要备份的表必须有独立的表空间,需要设置mysql选项innodb_file_per_table为1。
注意:部分备份的还原使用导入表的方式,而非使用copy-back。
5.1 创建部分备份:
有三种方式用于指定备份全部数据的哪一部分:
--include:设置正则表达式的格式,匹配的就备份
--table-file:通过枚举,在文件中指定要备份的表
--database:指定数据库列表
使用include方式
使用正则表达式需要完全匹配包含数据库名的表名,格式如databasename.tablename。
格式如下:
- innobackupex --include=’^mydatabase[.]mytable’ /tmp/backup
- [root@localhost bin]# ./innobackupex --include='^test.partial' /tmp/backup
注意:该选项是通过调用xtrabackup --tables命令,匹配每个数据库的每一张表,在备份文件加下,每个数据库文件夹都会被创建,尽管有些是空的。
使用table-file方式
使用text文本文件的方式记录下要备份的对应的数据库的数据表,格式为databasename.tablename,每行一个。
例如:
- [root@localhost bin]# echo "test.table1" > /tmp/tables.txt
- [root@localhost bin]# echo "test.table2" >> /tmp/tables.txt
- [root@localhost bin]# ./innobackupex --tables-file=/tmp/tables.txt /tmp/backup
注意:该选项是通过调用xtrabackup --tables-file命令,不同于--tables选项,仅创建包含数据表的数据库。
使用database方式
备份指定的数据库的数据表,格式为--databases="databasename1[.table_name1] databasename2[.table_name2] . . .".
例如:
- [root@localhost bin]# ./innobackupex --databases="test.table2 testdb" /tmp/backup
5.2 准备部分备份
准备部分还原的过程同还原单个表类似:应用日志,以及使用--export日志。
例如:
- [root@localhost bin]# ./innobackupex --apply-log --export /tmp/backup/2014-12-30_00-33-57
查看最后一行输出的确认信息,成功则会输出
- InnoDB: Shutdown completed; log sequence number 1891862
- 141230 00:47:26 innobackupex: completed OK!
将prepare后的备份文件夹中test文件夹拷贝到mysql数据库目录,并将文件件所有者更改为mysql用户即可
6 紧凑备份
对innodb表进行备份的时候我们可以忽略辅助索引页,这将使备份更加紧凑以及占用更少的磁盘空间。缺点就是在对备份文件进行prepare操作时,如果需要重建辅助索引,将会消耗更长的时间。备份文件大小的不同取决于索引页。
注:紧凑备份不支持系统共享表空间,所以备份前要确认innodb-file-per-table为ON。
6.1 创建紧凑备份
例如:
- [root@localhost bin]# ./innobackupex --compact /tmp/backup
准备紧凑备份需要重建索引,所以--rebuild-indexes选项需要配合--apply-logs选项一起使用。
例如:
- [root@localhost bin]# ./innobackupex --apply-log --rebuild-indexes /tmp/backup/2014-12-30_01-34-41/
可使用--rebuild-threads参数并行重建辅助索引,以加快速度。每个线程在同一时刻只对一个.ibd文件所对应的索引重建。
6.3 还原紧凑备份
通过--copy-back参数,将备份还原至data文件夹。
- [root@localhost bin]# ./innobackupex --copy-back /tmp/backup/2014-12-30_01-34-41
还原成功后,启动mysql数据库之前还应该更改还原文件的属性。
- [root@localhost bin]# chown -R mysql:mysql /usr/local/mysql/data/
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 生成秘钥
加密秘钥可通过如下方式生成:
- [root@localhost bin]# openssl enc -aes-256-cbc -pass pass:Password -P -md sha1
这种情况下我们可以使用iv作为秘钥。
7.1.3 创建备份
通过--encrypt-key
- [root@localhost bin]# ./innobackupex --encrypt=AES256 --encrypt-key="B8EEACE100AADB5F3A0D94F3112AAFA5" /tmp/backup
- [root@localhost bin]# echo -n "B8EEACE100AADB5F3A0D94F3112AAFA5" > /tmp/keyfile.txt
- [root@localhost bin]# ./innobackupex --encrypt=AES256 --encrypt-key-file=/tmp/keyfile.txt /tmp/backup
--encrypt-threads:使用多线程进行并行加密。
--encrypt-chunk-size:为每个加密线程指定缓存,默认为64K。
例如:
- [root@localhost bin]# ./innobackupex --encrypt=AES256 --encrypt-key="B8EEACE100AADB5F3A0D94F3112AAFA5" --encrypt-threads=16 --encrypt-chunk-size=256K /tmp/backup
备份通过xbcrypt二进制文件进行解密。
Percona XtraBackup 2.1.4引入新的参数--decrypt用于解密备份文件。
- [root@localhost bin]# ./innobackupex --decrypt=AES256 --encrypt-key="B8EEACE100AADB5F3A0D94F3112AAFA5" /tmp/backup/2014-12-30_03-51-42/
- [root@localhost bin]# ./innobackupex --decrypt=AES256 --encrypt-key="B8EEACE100AADB5F3A0D94F3112AAFA5" --parallel=16 /tmp/backup/2014-12-30_03-51-42/
- [root@localhost bin]# ./innobackupex --apply-log /tmp/backup/2014-12-30_03-51-42/
- [root@localhost bin]# ./innobackupex --copy-back /tmp/backup/2014-12-30_03-51-42/
我们可以从开启主从复制的从机对数据进行备份。
主要有如下两个参数
--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文件存储为多份不同文件。因为该特性的实现在文件级别。
示例如下:
- [root@localhost bin]# ./innobackupex --parallel=16 /tmp/backup
本地流式压缩备份示例如下:
- [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之前,一次在之后。
例如:
- [root@localhost bin]# ./innobackupex --parallel=16 --rsync /tmp/backup
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 *************************未完待续*************************
****************************************************************************************
原文地址: http://blog.csdn.net/jesseyoung/article/details/42046111
博客主页: http://blog.csdn.net/jesseyoung
****************************************************************************************