一.安装包
下载XtraBackup:
http://www.percona.com/mysql/xtrabackup/0.8/source/
这里下载的是0.8版本的源码包
下载MySQL源码包:
http://dev.mysql.com/downloads/mysql/5.0.html#source
因为是编译安装XtraBackup,需要使用MySQL的源代码
对于64位的系统,可以直接下载编译好的包:
http://www.percona.com/mysql/xtrabackup/0.8/Linux/xtrabackup-0.8.tar.gz
二、 编译安装
测试发现在mysql4.1下面编译XtraBackup会出错,使用mysql5.0编译就可以,生成的可执行文件对mysql4.1同样适用
你也可以下载对应平台的二进制版本XtraBackup,免去编译安装的步骤,不过目前二进制版本支持的平台并不多,所以这里列出编译的步骤。
#如果使用的是MySQL5.1,目录改为/mysql-5.1.*/ storage/innobase/
cd mysql-5.0.85/ innobase #进入源代码目录
patch –p2 < . /xtrabackup-0.8-src/fix_innodb_for_backup.patch #给InnoDB源码打上补丁
#如果使用的是MySQL5.1,使用fix_innodb_for_backup51.patch
cd .. #进入目录mysql-5.0.85
./configure
make #我们只需要Make就可以了,不需要Make install
cd innobase/xtrabackup-0.8-src
make #编译XtraBackup;MySQL5.1必须要使用XtraBackup0.9
编译成功后,我们会获得可执行文件xtrabackup、innobackupex。为了方便使用,分别将其拷贝到某个$PATH路径下。(我这里/u01/mysql/bin/是$PATH路径的一部分)
cp xtrabackup /usr/local/bin/
cp innobackupex-1.5.1 /usr/local/bin/
此步必须否则运行innobackupex-1.5.1会报错,找不到xtrabackup.
安装中要注意的问题:
编译XtraBackup;MySQL5.1必须要使用XtraBackup0.9。
另外,使用MySQL5.1编译,需要简单的修改一下XtraBackup的Makefile:
#MySQL 5.0
#INC= -I. -I.. -I./../include -I./../../include
#INNODBOBJS=
#MySQL 5.1
INC= ……
MYSQLOBJS=
安装完成后,我们就可以使用命令innobackupex来备份我们的数据库了。
三、 备份
XtraBackup使用脚本innobackupx-1.5.1来备份你的数据库。关于innobackupx-1.5.1的详细参数,请参考http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual。这里列出比较常用的备份命令:普通备份、打包(Tar)备份、压缩(Tar gzip)备份。
需要注意的是,innobackupex-1.5.1会根据你的/etc/my.cnf配置,来确定你的MySQL数据位置(datadir),所以你并不需要告诉innobackupex-1.5.1你的MySQL数据在哪儿。注意my.cnf里面必须指定datadir,innodb_data_home_dir,innodb_data_file_path,innodb_log_group_home_dir,innodb_log_arch_dir等信息
1. 普通备份
innobackupex-1.5.1 --user=root --password=123 /data/innobackup/ 2>/data/1.log
备份时间3分38秒;3G的表空间,InnoDB Free 2595840 Kb。
这里我们使用mysql的root用户备份,密码为123。备份的目标目录(target dir)是/data/innobackup/,innobackupex-1.5.1将在该目录下生成备份。例如/data/innobackup/2009-09-01_11-59-29就是我执行脚本后生成的备份,所有的备份文件都在该./2009-09-01_11-59-29目录下。
这里的2>/data/1.log,是将备份过程中的输出信息重定向到1.log。另外innobackupex-1.5.1还支持增量备份,这里并没有测试使用。
那如何恢复呢?为了模拟恢复过程,我先将MySQL停止,并删除MySQL的data目录下所有数据文件。
cd mysql/data/ ;rm --rf *;
innobackupex-1.5.1 --apply-log /data/innobackup/2009-09-01_11-59-29
innobackupex-1.5.1 --copy-back /data/innobackup/2009-09-01_11-59-29
cd /usr/local/mysql/data/
chown -R mysql:dba . #(这时候可能还需要修改datadir修改文件的所有者)
命令innobackupex-1.5.1需要指定具体哪个备份目录,先应用备份log,然后copy back。这里的备份目录是/data/innobackup/2009-09-01_11-59-29。恢复时间约3分钟。
值得一提的是,默认innobackupex-1.5.1会将二进制日志信息存放在文件xtrabackup_binlog_info中发(方便做Slave)。
innobackupex-1.5.1会根据/et/my.cnf来确定MySQL的数据位置。
恢复数据到其他机器:
首先将备份的目录rsync或者scp到目标机器,同步保证目标机器的my.cnf和源机器一样,然后执行和上面相同的操作,同时还可以使用
innobackupex-1.5.1的--remote-host参数直接将数据备份到远程机器上面.
在远程机器上面恢复数据之后,就可以备份目录里面xtrabackup_binlog_info 信息来修改master的日志名和position
CHANGE MASTER TO MASTER_LOG_FILE='recorded_log_file_name', MASTER_LOG_POS=recorded_log_position;
2. 打包(Tar)备份
这里基本和前面的普通备份类似,就不做详细说明了,之列出对应的命令。值得一提的是,恢复解压缩时,必须使用-i参数。
innobackupex-1.5.1 --user=root --password=123 --stream=tar /data/backup/ 2>/data/backup/2.log 1>/data/backup/2.tar
大约2分55秒。这里使用1>做标准输出重定向。
数据恢复:
tar --ixvf 2.tar #解压压缩 这里-i参数是必须的。
innobackupex-1.5.1 --apply-log /data/backup/innobackup
innobackupex-1.5.1 --copy-back /data/backup/innobackup
cd /usr/local/mysql/data/
chown -R mysql:mysql * . #(这时候可能还需要修改datadir修改文件的所有者
mysqld_safe --user=mysql &
3. 压缩(tar gzip)备份
innobackupex-1.5.1 --user=root --password=123 --stream=tar /u01/backup/1/ 2>/u01/backup/2.log | gzip > /u01/backup/1/1.tar.gz
大约3分钟。这里使用了管道|将innobackupex-1.5.1作为gzip的标准输入。它的恢复过程,只需要使用tar --izxvf 解压对应的文件后,操作完全同普通备份。
四、 关于XtraBackup
XtraBackup还在快速的成长阶段,由http://www.percona.com/维护。这里列出一些相关资源:
· 主页: http://www.percona.com/docs/wiki/percona-xtrabackup:start
· Google Group: http://groups.google.com/group/percona-discussion?hl=en
· Launchpad: https://launchpad.net/percona-xtrabackup
· Manual http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual
· Ningoo.net:
http://www.ningoo.net/html/2009/using_xtrabackup_backup_mysql_database.html
参考文献
1 http://www.percona.com/docs/wiki/percona-xtrabackup:start
2 http://www.ningoo.net/html/2009/using_xtrabackup_backup_mysql_database.html
3 http://www.innodb.com/doc/hot_backup/manual.html#innobackup
4 http://www.ibm.com/developerworks/cn/linux/l-diffp/index.html