Xtrabackup之innobackupex备份恢复详解

add by zhj:对于Xtrabackup2.2来说,已经解决了本文结尾提到的那个bug,当使用--copy-back时,同时加--force-non-empty-directories

即可。这样就不用手动去拷贝了。

原文:http://ourlinux.blog.51cto.com/274624/844854

安装配置Xtrabackup

先看看如何安装Xtrabackup,最简单的安装方式是使用RPM包,不过想使用源代码方式安装的话,其安装方式有点古怪,因为它采用的在MySQL

源代码上打补丁构建的方式安装的。这里使用二进制包的安装方式,相对比较灵活。

mkdir /usr/local/xtrabackup

tar -zxvf xtrabackup-1.6.tar.gz –C /usr/local/xtrabackup

cd /usr/local/xtrabackup/bin

ln –s innobackupex-1.5.1 innobackupex

置环境变量:

export PATH=$PATH:/usr/local/xtrabackup/bin

希望永久生效的话,可以加到

echo "export PATH=$PATH:/usr/local/xtrabackup/bin" >> /etc/profile

source /etc/profile

修改mysql配置文件:

添加或修改:datadir =/usr/local/mysql/var(数据库目录)

特别注意:default_table_type = InnoDB(必须改,否则进行增量备份的时候不成功)

经过几天的测试,文档终于可以与大家分享了。使用Xtrabackup能够非常快速地备份与恢复mysql数据库,是mysql dba的首选。Xtrabackup

是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。

Xtrabackup有两个主要的工具:xtrabackup、innobackupex xtrabackup只能备份InnoDB和XtraDB两种数据表,支持在线热备份,不会锁表

innobackupex则封装了xtrabackup,同时可以备份MyISAM数据表,如果你的数据库里有innodb和myisam存储引擎,只能使用innobackupex

备份,以下是线上用的简单脚本

#!/bin/bash

USER=root

PASSWORD=123456

date > /data/scripts/backup.log

echo "begin backup-------------------------------" >> /data/scripts/backup.log

find /data/mysql/backups -mtime +7 |xargs rm -rf

/usr/bin/innobackupex --defaults-file=/opt/mysql5/my.cnf --user=$USER --password=$PASSWORD --databases="test1 test2" /data/mysql/backups >> /data/scripts/backup.log 2>&1

echo "end backup-------------------------------" >> /data/scripts/backup.log

date >> /data/scripts/backup.log



mail -s "backup Passport report" "localhost@localhost" < /data/scripts/backup.log

exit 0

以下是恢复脚本:

#!/bin/bash

USER=root

PASSWORD=123456

/etc/init.d/mysql stop

/usr/bin/innobackupex-1.5.1 --apply-log --defaults-file=/opt/mysql5/my.cnf --user=$USER --password=$PASSWORD /data/mysql/backups/passportdb/`date +%Y-%m-%d`

rm -rf /opt/mysql5/var/test1

rm -rf /opt/mysql5/var/test2

rm -f /opt/mysql5/var/ibdata1

rm -f /opt/mysql5/var/ib_logfile0

rm -f /opt/mysql5/var/ib_logfile1

cd /data/mysql/backups

tar zcvf `date +%Y-%m-%d`.tgz  `date +%Y-%m-%d`

rm -rf `date -d -30day +%Y-%m-%d`.tgz

cp -r /data/mysql/backups/`date +%Y-%m-%d`/ib* /opt/mysql5/var/

cp -r /data/mysql/backups/`date +%Y-%m-%d`/test1 /opt/mysql5/var/

cp -r /data/mysql/backups/`date +%Y-%m-%d`/test2 /opt/mysql5/var/

rm -rf /data/mysql/backups/`date +%Y-%m-%d`/*

chown -R mysql.mysql /opt/mysql5/var/test1

chown -R mysql.mysql /opt/mysql5/var/test2

chown mysql.mysql /opt/mysql5/var/ib*

/etc/init.d/mysql start

恢复的时候执行完/usr/bin/innobackupex-1.5.1 --apply-log后,直接拷贝就可以了,不用使用/usr/bin/innobackupex-1.5.1 --copy-back

命令。如果使用/usr/bin/innobackupex-1.5.1 --copy-back命令后,会报Original data directory is not empty! at

/usr/local/xtrabackup/bin/innobackupex line 538.恢复的目录必须为空。经查官网,这是xtrabackup的一个BUG。

innobackupex did not check that MySQL datadir was empty before –copy-back was run. With this bug fix,innobackupex will

now error out of the –copy-back operation if the destination is not empty, avoiding potential data loss or a strang combination

of a restored backup and previous data. Bug Fixed: #737569(Valentine Gostev)

网上有好多文章恢复使用
/usr/bin/innobackupex-1.5.1 --apply-log 然后
/usr/bin/innobackupex-1.5.1 --copy-back,难道他们恢复的目录都是空目录,还是人云亦云。

你可能感兴趣的:(backup)