作者:
来自:supu@TaobaoDBA 2009年10月12日星期一
摘要:本文将较为详细的介绍InnoDB Hot Backup(后简称IHB)使用。IHB是Innobase下的一个商用备份软件,可以实现在线备份InnoDB数据表,这里的“在线备份”是指:在备份的同时不阻塞其他连接的读、写请求。(本文提供PDF版本下载:点击下载)
+++++++++++++++++++++++++++++++++
正文:
+++++++++++++++++++++++++++++++++
一、 License
InnoDB Hot Backup授权方式是基于每台server的,可以是按年购买,也可以购买永久使用权限。试用期可以使用30天。
可以通过http://www.innodb.com/products/hot-backup/order/order/ 申请获得一个30天的试用版本,申请后innodb.com将会给你发一封电子邮件,里面有二进制可执行文件ibbackup的下载地址。这样我们就获得了IHB的主要部分ibbackup。
配合ibbackup的工具还有innobackup脚本,该脚本是在GPL协议下发布。如果你购买了IHB,那么使用innobackup可以不受GPL协议的限制,获得和IHB同样的商业授权。
二、 ibbackup
这里将简单测试说明ibbackup的备份、恢复。(很遗憾,ibbackup不能够做增量备份)
1. 备份
这里仅简单的介绍ibbackup的基础使用,更多详细请参考manual。
ibbackup的基本命令:
#基本命令:
ibbackup my.cnf my2.cnf
#典型的:
ibbackup /etc/my.cnf /home/mysql/backup-my.cnf
ibbackup会根据第一个参数my.cnf文件,获取需要备份的ibdata和ib_logfile文件位置,并将其备份到第二个参数my2.cnf所指定的位置。
ibbackup将读取第一个参数my.cnf中的如下内容:
datadir=…
innodb_data_home_dir=…
innodb_data_file_path=…
innodb_log_group_home_dir=…
innodb_log_files_in_group=…
innodb_log_file_size=…
#这里需要注意的是,很多的配置文件my.cnf中是没有innodb_log_group_home_dir和innodb_data_home_dir,这样ibbackup会执行失败。
参数my.cnf和my2.cnf中,关于数据文件的数量和大小必须相同。日志文件则可以不一样。下面是我在测试中使用的命令,以及文件中的参数:
/etc/my.cnf文件:
datadir = /disk1/mysql/data
innodb_log_group_home_dir = /disk1/mysql/data
# innodb_log_group_home_dir 在MySQL的配置文件中可以省略,但是ibbackup必须有这个参数才行
innodb_log_file_size = 100M
innodb_log_files_in_group = 4
innodb_data_home_dir = /disk1/mysql/data
# innodb_data_home_dir 在MySQL的配置文件中可以省略,但是ibbackup必须有这个参数才行
innodb_data_file_path = ibdata1:1G;ibdata2:1G;ibdata3:1G
/home/mysql/backup-my.cnf文件:
datadir=/disk1/ibbackup/
innodb_data_home_dir=/disk1/ibbackup
innodb_data_file_path= ibdata1:1G;ibdata2:1G;ibdata3:1G
innodb_log_group_home_dir=/disk1/ibbackup
[set-variable = ]innodb_log_files_in_group=4
[set-variable = ]innodb_log_file_size=100M
这里为什么写set-variable,好像是为了兼容4.0.2之前的版本。参考:这里
开始备份:
ibbackup /etc/my.cnf /home/mysql/backup-my.cnf
备份时,输出信息参考[附录1]。备份后的文件列表:
cd /disk1/ibbackup/ && ls
ibbackup_logfile ibdata1 ibdata2 ibdata3 test
cd test && ls
t1.ibd t2.ibd user_auth.ibd
注意到,这里并没有备份.frm文件。备份的主要时间花费在数据文件的拷贝上。这里共花费232秒(本地备份)。
压缩备份命令为:ibbackup --compress /etc/my.cnf /home/mysql/backup-my.cnf。
2. 恢复
恢复的第一步是应用log。ibbackup在备份是将logfile全部放到了文件ibbackup_logfile中,所以恢复的第一步是将ibbackup_logfile文件中的内容应用到数据文件,并创建对应的logfile。
ibbackup --apply-log /home/mysql/backup-my.cnf
# ibbackup --apply-log输出信息,参考[附录2]。
cd /disk1/ibbackup/ && ls
ibbackup_logfile ibdata1 ibdata2 ibdata3 ib_logfile0 ib_logfile1 ib_logfile2 ib_logfile3 test
这时候,数据文件就是我们需要的了。只需要将对应的文件拷贝的你的数据目录下就可以了。这里我们将原来的数据文件删除(.frm文件需要保留),用备份的文件来恢复数据库。
cp -r /disk1/ibbackup/* /disk1/mysql/data/
mysqld_safe --user=mysql &&
注意事项:
(1).Ibbackup只备份innodb的数据文件(ibdata和*.ibd)、日志文件(ib_logfile*),并不备份*.frm文件,所以恢复的时候,你需要通过其他途径确保你的*.frm文件正常。
(2).如果你备份的时候使用了压缩,那么apply log使用命令:ibbackup --apply-log --uncompress /home/mysql/backup-my.cnf。
(3).在apply-log的时候,我们可以获得二进制文件及其位置,可以利用此信息做slave。
(未完待续)
Leave a Reply