一、下载

下载地址:http://www.percona.com/downloads/XtraBackup/

注:官方分4种包,二进制、源码、deb、rpm,这里直接下载二进制,解压后直接添加PATH变量使用即可



二、安装(二进制包)

tar zxf percona-xtrabackup-2.0.2-461.tar.gz

mv percona-xtrabackup-2.0.2 /usr/local/xtrabackup

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

source /etc/profile



三、备份(只介绍完整备份)

1、开始备份前的检查:

   确认my.cnf中指定了datadir。


2、开始备份

#创建备份目录

mkdir /data/backup/

#备份到本地目录(备份discuz库)

innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --databases="discuz" --slave-info /data/backup/

注:--slave-info用来产生配置主从需要的:change语句(添加从节点时有用),如下:

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000025', MASTER_LOG_POS=98


#备份到本地目录(不指定--databases选项备份所有库)

innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --slave-info /data/backup/


#备份到本地目录(备份scm库,打包)

innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --databases="scm" --slave-info --stream=tar /data/backup/ >/data/backup/xtrabackup_scm.$(date +%Y%m%d-%H%M%S).tar


#备份到本地目录(备份discuz、scm库,打包,压缩)

innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --databases="discuz scm" --slave-info --stream=tar /data/backup/ | gzip >/data/backup/xtrabackup_scm_discuz.$(date +%Y%m%d-%H%M%S).tgz


#备份到远程服务器(备份discuz、scm库,打包,压缩 ,远程服务器)

innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --databases="discuz scm" --slave-info --stream=tar /data/backup/ | gzip | ssh -p51022 [email protected] cat ">" /data/backup/xtrabackup_scm_discuz.tgz

注:不推荐把备份到远程服务器的命令用作计划任务,查找相关资料为BUG,会经常挂起,如下:

[01] Streaming ./ibdata1

>> log scanned up to (0 3648378)

>> log scanned up to (0 3648378)

>> log scanned up to (0 3648378)

>> log scanned up to (0 3648378)



四、恢复(把拷贝的日志应用到拷贝的表数据文件的过程)

innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --apply-log /data/backup/2014-02-26_20-36-49



五、还原(注:直接拷贝;不使用--copy-back)

#如果为压缩包先解压缩:

tar -izxf xtrabackup_scm_discuz.tgz


#进入解压后的目录

cd ...


#修改数据库目录和表文件权限;修改属主、组(mysql不需要还原,不用修改)

目录权限: chmod 700 discuz scm

文件权限: chmod 660 discuz/* scm/*

属主、组: chown -R mysql.mysql *


#停止服务

/etc/init.d/mysqld stop


#datadir下有同名数据库目录删除;拷贝库到datadir;覆盖datadir中的ibdata1 ib_logfile0 ib_logfile1

mv discuz scm ibdata1 ib_logfile0 ib_logfile1 /data/mysql


#启动服务

/etc/init.d/mysqld start


注:不使用官方的--copy-back选项还原是因为执行后会有一个BUG报错:Original data directory is not empty!


(完成)



################################################################################

补充:

1、xtrabackup_slave_info:为该从库的主库添加新从库使用。

xtrabackup_binlog_info:为该从库添加从库使用。



################################################################################


总结:

1、优点:

   如果要备份的库ENGINE为MYISAM,数据库比较大,使用该工具备份、还原速度比mysqldump快很多;实现不停止数据库即可配置mysql复制。

2、缺点:

   不能单独还原单个innodb的库(在一个生产服务数据库器添加新业务数据库时),解决办法一般是在一个空服务器中,还原备份再mysqldump导出单个库。

3、增量备份这里没有介绍,增量备份只是相对于innodb的表,MyISAM表的数据库还是完全备份。

4、即使要备份的服务器使用独立表空间innodb_file_per_table=1,也无法单独还原innodb库。

5、表空间只会增长,不会缩小,可以使用dump导出,然后删除ibdata表空间文件,再使用mysqldump工具导入 。



######################################################################################################


附:独立表空间配置步骤

mysqldump备份所有库

关闭服务

修改配置文件,添加

innodb_file_per_table=1

启动服务

使用以下命令查看是否成功开启

show variables like '%per_table%';

导入mysqldump的备份,

完成


######################################################################################################