一、下载
下载地址: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的备份,
完成
######################################################################################################