1、xtrabackup使用范围
xtrabackup:用于热备份innodb, xtradb引擎的数据表,不能备份其他类型的表,也不能备份数据表结构;
innobackupex:将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力(主要应用该脚本)。
2、xtrabackup的安装
wget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.2/RPM/rhel6/i686/percona-xtrabackup-2.1.2-612.rhel6.i686.rp
rpm -ivh percona-xtrabackup-2.1.2-612.rhel6.i686.rpm
说明:rpm安装的依赖包根据提醒安装既可。
3、安装好软件后,就可以直接使用
eg1:完整备份数据库
innobackupex --user=root --password=xxxxx --defaults-file=/etc/my.cnf --database=phpcms /mybak/
说明:
/etc/my.cnf,需要配置datadir路径
[mysqld]
datadir = /usr/local/mysql/data #在[mysqld]单元末尾中添加数据库存放的文件
---------------------------------------------------------------------------
--database=phpcms #表示需要备份的数据库,如果不加表示备份所有数据库(既完整备份)
/tmp/ #备份的目标位置
---------------------------------------------------------------------------
[root@mysql 2015-10-19_21-06-56]# ll #备份的信息
total 18468
-rw-r--r-- 1 root root 260 Oct 19 21:06 backup-my.cnf
-rw-r----- 1 root root 18874368 Oct 19 21:06 ibdata1
drwxr-xr-x 2 root root 16384 Oct 19 21:06 phpcms
-rw-r--r-- 1 root root 13 Oct 19 21:06 xtrabackup_binary
-rw-r--r-- 1 root root 23 Oct 19 21:06 xtrabackup_binlog_info
-rw-r----- 1 root root 89 Oct 19 21:06 xtrabackup_checkpoints
-rw-r----- 1 root root 2560 Oct 19 21:06 xtrabackup_logfile
eg2:备份打包
innobackupex --user=root --password=xxxxxxx --defaults-file=/etc/my.cnf --database=phpcms --stream=tar /mybak > /mybak/phpcms.tar
说明:
--stream=tar #表示打包方式
eg3:完整备份并打包压缩
innobackupex --user=root --password=xxxxxxx --defaults-file=/etc/my.cnf --database=phpcms --stream=tar /mybak/ | gzip > /mybak/phpcms.tar.gz
eg4:远程备份打包
innobackupex --user=root --password=xxxxxx --defaults-file=/etc/my.cnf --database=phpcms --stream=tar /mybak/ | ssh [email protected] cat ">" /tmp/phpcms.tar
说明:
[email protected]'s password: >> log scanned up to (1668412)
[01] Streaming ./ibdata1
>> log scanned up to (1668412)
>> log scanned up to (1668412)
>> log scanned up to (1668412) #一直在不断扫描,在这期间需输入远程备份主机的密码(现实环境还是通过证书验收)
eg5:增量备份
innobackupex --user=root --password=xxxxxx --database=phpcms --incremental
--incremental-basedir=/mybak/2015-10-19_21-06-56/ /mybak/add/
#增量备份主要是通过lsn的表示进行判断(针对innodb引擎)
[root@mysql 2015-10-19_21-06-56]# cat xtrabackup_checkpoints
backup_type = full-prepared #全局备份
from_lsn = 0
to_lsn = 1668412
last_lsn = 1668412 #结束位置
compact = 0
[root@mysql 2015-10-19_21-48-20]# cat xtrabackup_checkpoints
backup_type = incremental #增量备份
from_lsn = 1668412 #“开始位置”和上面“结束位置”一致
to_lsn = 1768416
last_lsn =1768416
compact = 0
说明:
注意:innobackupex 增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备。
4、数据还原
eg1:完整备份恢复:
第一步:删除需要恢复得数据库
/etc/init.d/mysql stop
mv /usr/local/mysql/data/ /usr/local/mysql/data/
mkdir /usr/local/mysql/data/ #恢复得时候,该目录必须为空
第二步:然后将备份文件中的日志应用到备份文件中的数据文件上
innobackupex --user=root --password=xxxxxx --defaults-file=/etc/my.cnf --apply-log /mybak/2015-10-19_21-06-56/
这里的--apply-log指明是将日志应用到数据文件上,完成之后将备份文件中的数据恢复到数据库中:
--defaults-file:数据还原的目标位置
innobackupex --user=root --password=xxxxxx --defaults-file=/etc/my.cnf --copy-back /mybak/2015-10-19_21-06-56/
--copy-back指明是进行数据恢复。数据恢复完成之后,需要修改相关文件的权限mysql数据库才能正常启动。
chown -R mysql:mysql /usr/local/mysql/data/
service mysql start
注意:如果数据在远程主机上,首先将完整备份复制到本地主机上,如果是tar包,则需要先解包,解包命令为:tar �Cizxvf dbbackup20110809.tar,这里必须使用-i参数。然后执行恢复操作。
eg2:恢复单个数据库
1、cp /etc/my.cnf /mybak/
2、vim /mybak/my.cnf
3、vim /mybak/my.cnf
datadir = /usr/local/mysql/data/phpcms #确保该目录为空
4、然后执行如下操作
innobackupex --user=root --password=xxxxxx --defaults-file=/mybak/my.cnf --apply-log /mybak/2015-10-19_21-06-56/
innobackupex --user=root --password=xxxxxx --defaults-file=/mybak/my.cnf --copy-back /mybak/2015-10-19_21-06-56/
5、将恢复后的数据,copy到指定的目录即可
eg3:增量备份恢复:
增量备份恢复的步骤和完整备份恢复的步骤基本一致,只是应用日志的过程稍有不同。增量备份恢复时,是先将所有的增量备份挨个应用到完整备份的数据文件中,然后再将完整备份中的数据恢复到数据库中。命令如下:
应用第一个增量备份
innobackupex --user=root --password=xxxxxx --defaults-file=/etc/my.cnf --apply-log /mybak/2015-10-19_21-06-56/ --incremental-dir=/mybak/add/2015-10-19_21-48-20/
应用第二个增量备份
innobackupex --user=root --password=xxxxxx --defaults-file=/etc/my.cnf --apply-log /mybak/2015-10-19_21-06-56/ --incremental-dir=/mybak/add/2015-10-19_21-48-54/
将完整备份中的数据恢复到数据库中
innobackupex --user=root --password=xxxxxx --defaults-file=/etc/my.cnf --copy-back /mysqlbackup/full/2015-10-19_21-06-56/
其中,--incremental-dir指定要恢复的增量备份的位置