#1、安装 ###1.下载源码: wget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.5/source/percona-xtrabackup-2.1.5.tar.gz ###2.安装依赖包: yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses-devel zlib-devel ###3.解压源码包: tar -zxvf percona-xtrabackup-2.1.5.tar.gz cd percona-xtrabackup-2.1.5 ###4.编译安装 目录中的./utils/build.sh脚本会根据指定的引擎版本,自动解压缩适当的MySQL源码包并进行编译,这是最简单的安装方式。 直接执行:mysql
./utils/build.sh
出现以下提示:c++
[root@test1 percona-xtrabackup-2.1.5]# ./utils/build.sh Build an xtrabackup binary against the specified InnoDB flavor. Usage: build.sh CODEBASE where CODEBASE can be one of the following values or aliases: innodb51 | plugin build against InnoDB plugin in MySQL 5.1 innodb55 | 5.5 build against InnoDB in MySQL 5.5 innodb56 | 5.6,xtradb56, build against InnoDB in MySQL 5.6 | mariadb100 xtradb51 | xtradb,mariadb51 build against Percona Server with XtraDB 5.1 | mariadb52,mariadb53 xtradb55 | galera55,mariadb55 build against Percona Server with XtraDB 5.5
根据上面提示和你使用的存储引擎及版本,选择相应的参数便可。由于我用的是MySQL 5.6.28,因此执行以下语句安装sql
./utils/build.sh innodb56
以上语句执行成功后,表示安装完成。最后,把生成的二进制文件拷贝到一个自定义目录下(本例中为/var/lib/mysql/percona-xtrabackup-2.1.5),并把该目录放到环境变量PATH中。vim
cp ./innobackupex /var/lib/mysql/percona-xtrabackup-2.1.5 cp ./src/xtrabackup_56 ./src/xbstream /var/lib/mysql/percona-xtrabackup-2.1.5 vim /root/.bashrc (末行加入export PATH=$PATH:/var/lib/percona-xtrabackup-2.1.5/bin/) source /root/.bashrc
#2、全备及其恢复 ###1.全备: 执行以下语句进行全备bash
innobackupex --defaults-file=/etc/my.cnf --user=admin --password=admin /backup/mysql/data
该语句将拷贝数据文件(由my.cnf里的变量datadir指定)至备份目录下(/backup/mysql/data),若不指定--defaults-file,默认值为/etc/my.cnf。 备份成功后,将在备份目录下建立一个时间戳目录(本例建立的目录为/backup/mysql/data/2016-03-24_01-14-19),在该目录下存放备份文件。 ###2.恢复:app
innobackupex --user=root --password=123456 --apply-log /backup/mysql/data/2016-03-24_01-14-19 innobackupex --user=root --password=123456 --copy-back /backup/mysql/data/2016-03-24_01-14-19
从上面能够看出,恢复分为两个步骤,第1步是apply-log,为了加快速度,通常建议设置--use-memory(因为本虚拟机的屌丝配置,因此没有大内存分配给这个命令专用,全部没有加上这个选项),这个步骤完成以后,目录/backup/mysql/data/2016-03-24_00-43-24下的备份文件已经准备就绪。
第2步是copy-back,即把备份文件拷贝至原数据目录下。 恢复完成以后,必定要记得!!检查数据目录的全部者和权限!!是否正确。性能
#3、增量备份及其恢复
注意:innobackupex 增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备。ui
###1.增量备份 增量备份须要基于全备,先假设咱们已经有了一个全备(/backup/mysql/data/2016-03-24_01-14-19),在该全表的基础上作增量备份。.net
innobackupex --user=root --password=123456 --incremental-basedir=/backup/mysql/data/2016-03-24_01-14-19 --incremental /backup/mysql/data
其中--incremental-basedir指向全备目录,--incremental指向增量备份的目录。
上面语句执行成功以后,会在--incremental执行的目录下建立一个时间戳子目录(本例中为:/backup/mysql/data/2016-03-24_02-30-35),在该目录下存放着增量备份的全部文件。
在备份目录下,有一个文件xtrabackup_checkpoints记录着备份信息,全备的信息以下:日志
[root@test1 2016-03-24_01-14-19]# more xtrabackup_checkpoints backup_type = full-prepared from_lsn = 0 to_lsn = 1665331 last_lsn = 1665331 compact = 0
基于该全备的增量备份的信息以下:
[root@test1 2016-03-24_02-30-35]# more xtrabackup_checkpoints backup_type = incremental from_lsn = 1665331 to_lsn = 1673129 last_lsn = 1673129 compact = 0
从上面能够看出,增量备份的from_lsn正好等于全备的to_lsn。
咱们还能够在增量备份的基础上再作增量备份,只要把--incremental-basedir执行上一次增量备份的目录便可,以下所示:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental-basedir=/backup/mysql/data/2016-03-24_02-30-35 --incremental /backup/mysql/data
它的xtrabackup_checkpoints记录着备份信息以下:
[root@test1 2016-03-24_02-34-28]# more xtrabackup_checkpoints backup_type = incremental from_lsn = 1673129 to_lsn = 1673129 last_lsn = 1673129 compact = 0
能够看到,该增量备份的from_lsn是从上一次增量备份的to_lsn开始的。
###2.恢复: 增量备份的恢复比全备要复杂不少,第一步是在全部备份目录下重作已提交的日志,如:
innobackupex --apply-log --redo-only BASE-DIR innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1 innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
其中BASE-DIR是指全备目录,INCREMENTAL-DIR-1是指第一次的增量备份,INCREMENTAL-DIR-2是指第二次的增量备份,以此类推。
这里要注意的是:最后一步的增量备份并无--redo-only选项!还有,可使用--use_memory提升性能。 以上语句执行成功以后,最终数据在BASE-DIR(即全备目录)下。 第一步完成以后,咱们开始第二步:回滚未完成的日志:
innobackupex --apply-log BASE-DIR
上面执行完以后,BASE-DIR里的备份文件已彻底准备就绪,最后一步是拷贝:
innobackupex --copy-back BASE-DIR
一样地,拷贝结束以后,记得检查下数据目录的权限是否正确。
#4、常见错误及解决方法 ###错误1: 出现"Can't locate Time/HiRes.pm in @INC"错误提示没法进行,检测是出现缺乏perl Time HiRes组件形成的 解决方法:
yum -y install perl-Time-HiRes
###错误2:
innobackupex: Error: Original data directory '/var/lib/mysql' is not empty! at /var/lib/percona-xtrabackup-2.1.5/bin/innobackupex line 2098.报错
解决方法:
清空/var/lib/mysql/这个目录
参考文章:http://blog.csdn.net/heizistudio/article/details/23937935