xtrabackup特性:
1、支持热备份
2、支持对InnoDB、MyISAM,xtradb存储引擎的备份
3、备份过程快速、可靠
4、备份过程不会打断正在执行的事务
5、能够基于压缩等功能节约磁盘空间和流量
6、自动实现备份检验
7、还原速度快
(一)安装:
官网:https://www.percona.com/doc/percona-xtrabackup/LATEST/installation/yum_repo.html
ubuntu:
wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb
dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb
apt-get update
apt-get install percona-xtrabackup-24
centos:
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
yum install percona-xtrabackup-24
(二)备份:
1完全备份
# innobackupex --user=<用户名> --password=<密码> /path/to/backup
使用innobackupex备份时,其会调用xtrbackup备份所有的InnoDB表(*.frm, *.ibd),复制所有关于表结构定义的相关文件、以及MyISAM(*.MYD,*.MYI,*.frm),MERGE, CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命名的目录中
在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。
2、准备(prepare)一个完全备份
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步到数据文件中的事务。因此,此时数据文件仍处于不一致状态。准备的主要作用正是通过回滚未提交的事务及同步已经提交的事务到数据文件也使得数据文件处于一致状态。
innobackupex命令的--apply-log选项可用于实现此功能。如下面的命令:
# innobackupex --apply-log <完全备份的目录名称>
准备完成后,最后几行会出现以下几行信息:
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
160303 11:25:31 InnoDB: Starting shutdown...
160303 11:25:36 InnoDB: Shutdown completed; log sequence number 0 1617932
160303 11:25:36 innobackupex: completed OK!
在实现"准备"的过程中,innobackupex通常还可以使用--use-memory选项来指定其可以使用的内存的大小,默认通常为100M。如果有足够的内存可用,可以多划分一些内存给Pprepare的过程,以提高其完成速度。
3、从一个完全备份中恢复数据
innobackupex命令的--copy-back选项用于执行恢复操作,其通过复制所有数据相关的文件到mysql服务器的DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。
# innobackupex --defaults-file=/etc/my.cnf --copy-back <完全备份目录>
注意,在实现恢复时,需要关闭MySQL,并且删除/mydata/data下的所有东西
如果执行成功,其输出信息的最后几行通常如下:
innobackupex: Starting to copy InnoDB log files
innobackupex: in '/backup/2016-03-03_11-21-31'
innobackupex: back to original InnoDB log directory '/mydata/data'
innobackupex: Finished copying back files.
160303 11:38:02 innobackupex: completed OK!
确保如上信息的最后一行出现"innobackupex: completed ok!"
当数据恢复到数据目录后,还需要确保所有数据文件的所属均为正确的用户,如mysql;否则,在启动mysqld前还需要事先修改数据文件的所属
# chown -R mysql.mysql /mydata/data
4、使用innobackupex进行增量备份
要实现第一次增量备份,可以使用下面的命令:
# innobackupex --incremental /backup --incremental-basedir=<完全备份目录>
其中,BASEDIR指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在/backup目录中创建一个以新的时间命名的目录及存放所有的增量备份数据。另外,在执行过增量备份后再一次进行增量备份时,其--incremental-basedir应该指向上一次增量备份所在的目录
需要注意的是,增量备份仅能应用于InnoDB或xtrDB表,对于MyISAM表而言,执行增量备份其实进行的是完全备份。
准备增量备份与准备完全备份有着一些不同,尤其要注意的是:
1)需要在每个备份(包括完全和增量备份上),将已经提交的事务进行重放。重放后,所有的备份数据将合并到完全备份上
2)基于所有的备份将未提交的事务进行回滚
于是,操作就变成了:
# innobackupex --apply-log --redo-only BASEDIR
接着执行:
# innobackupex --apply-log --redo-only BASEDIR --incremental-dir=INCREMENTAL-DIR-1
而后是第二个增量备份:
# innobackupex --apply-log --redo-only BASEDIR --incremental-dir=INCREMENTAL-DIR-2
恢复时,直接使用第1次的完全备份即可