Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。
Xtrabackup有两个主要的工具:xtrabackup、innobackupex
(1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
(2)innobackupex-1.5.1则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁
1.安装
访问https://www.percona.com/downloads/XtraBackup/下载最新版本。
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.2/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.2-1.el6.x86_64.rpm
yum -y localinstall percona-xtrabackup-24-2.4.2-1.el6.x86_64.rpm
注:如果报错误,Error: Package: percona-xtrabackup-2.3.4-1.el6.x86_64 (/percona-xtrabackup-2.3.4-1.el6.x86_64)
Requires: libev.so.4()(64bit)
需要安装libev4,在http://rpm.pbone.net/index.php3/stat/3/srodzaj/1/search/libev.so.4()(64bit)下载最新包安装
wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/YaST:/Web/SLE_11_SP3/x86_64/libev4-4.22-30.1.x86_64.rpm
yum -y localinstall libev4-4.22-30.1.x86_64.rpm
2.备份实例
1)完全备份与恢复
1 完整备份
# innobackupex --user=root --password=abc123 ./
会在当前目录生成一个日期的文件夹,即备份数据
2 备份恢复
# innobackupex --defaults-file=/etc/my.cnf --copy-back ./2016-05-07_23-06-04
3 备份文件说明
# ls 2016-05-07_23-06-04
backup-my.cnf:记录innobackup使用到mysql参数
xtrabackup_binary:备份中用到的可执行文件
xtrabackup_checkpoints:记录备份的类型、开始和结束的日志序列号
xtrabackup_logfile:备份中会开启一个log copy线程,用来监控innodb日志文件(ib_logfile),如果修改就会复制到AA这个文件
xtrabackup_binlog_info 文件记录有binlog日志的文件和日志点,可用于slave同步change master配置
2)增量备份与恢复
1 增量备份
第一次
# innobackupex --user=root --password=abc123 --incremental ./ --incremental-basedir=./2016-05-07_23-06-04 #指定上次完整备份目录
第二次
innobackupex --user=root --password=abc123 --incremental ./ --incremental-basedir=./2016-05-07_23-12-29
查看xtrabackup_checkpoints文件,一目了然,可以看到根据日志序号来增量备份2 增量恢复
1 备份恢复思路
将增量备份1、增量备份2...合并到完整备份,加到一起出来一个新的完整备份,将新的完整备份以拷贝的形式到数据库空目录(rm /var/lib/mysql/* -rf)
2 预备完整备份
#xtrabackup把备份过程中可能有尚未提交的事务或已经提交但未同步数据文件的事务,写到xtrabackup_logfile文件,所以要先通过这个日志文件回滚,把未完成的事务同步到备份文件,保证数据文件处于一致性。
# innobackup --apply-log --redo-only 2016-05-07_23-06-04
3 合并第一个增量备份
# innobackupex --apply-log --redo-only ./2016-05-07_23-06-04 --incremental-dir=./2016-05-07_23-12-29
4 合并第二个增量备份
# innobackupex --apply-log --redo-only ./2016-05-07_23-06-04 --incremental-dir=./2016-05-07_23-30-29
5 恢复完整备份(这时2016-05-07_23-06-04完整备份已经包含所有增量备份,可以通过查看checkpoints来核实)
# innobackupex --defaults-file=/etc/my.cnf --copy-back ./2016-05-07_23-06-04
6 修改恢复数据文件权限
# chown -R mysql.mysql /var/lib/mysql
7 启动MySQL,查看数据库恢复情况
# /etc/init.d/mysqld start
3 备份文件归档压缩
归档并发送到备份服务器
# innobackupex --databases=test --user=root --password=abc123 --stream=tar ./ 2>./bak.log |ssh root@192.168.8.25 "cat - > ./`date +%F`.tar"
解压:tar -ixvf `date +%F`.tar
4.2 归档备份
# innobackupex --databases=test --user=root --password=abc123 --stream=tar ./ > ./`date +%F`.tar
解压:tar -ixvf `date +%F`.tar
4.3 压缩归档备份
# innobackupex --databases=test --user=root --password=abc123 --stream=tar ./ |gzip >./`date +%F`.tar.gz
解压:tar -izxvf `date +%F`.tar.gz
3.常用参数
--user= #指定数据库备份用户
--password= #指定数据库备份用户密码
--port= #指定数据库端口
--host= #指定备份主机
--socket= #指定socket文件路径
--databases= #备份指定数据库,多个空格隔开,如--databases="dbname1 dbname2",不加备份所有库
--defaults-file= #指定my.cnf配置文件
--apply-log #日志回滚
--incremental= #增量备份,后跟增量备份路径
--incremental-basedir= #增量备份,指上次增量备份路径
--redo-only #合并全备和增量备份数据文件
--copy-back #将备份数据复制到数据库,数据库目录要为空
--no-timestamp #生成备份文件不以时间戳为目录名
--stream= #指定流的格式做备份,--stream=tar,将备份文件归档
--remote-host=user@ip DST_DIR #备份到远程主机
4.参考文章