作者:周振兴
来自:supu@TaobaoDBA 2009年10月13日星期二
摘要:在上篇中我们介绍了Xtrabackup的编译安装,以及如何使用innobackupex来备份和恢复数据库。本文将继续介绍Xtrabackup中的另一个工具xtrabackup(二进制脚本)。innobackupex对xtrabackup进行了封装可以同时备份InnoDB和MyISAM数据表,在备份MyISAM表时会进行全局锁表,如果单独使用xtrabackup,我们不仅可以实现真正的“在线”备份,还可以进行增量备份InnoDB。本文将介绍如何单独使用xtrabackup来备份你的InnoDB数据。(本文PDF版本:上篇 下篇)
+++++++++++++++++++++++++++++++++
正文:
+++++++++++++++++++++++++++++++++
一、 使用说明
本文测试环境同上篇。
1. 备份
InnoDB配置说明:
innodb_data_home_dir = ./
innodb_data_file_path = ibdata1:50M:autoextend
innodb_log_group_home_dir = ./
innodb_log_files_in_group = 4
innodb_log_file_size = 104857600
备份命令:
$xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/u01/xtrabackup/1/
……
$cd /u01/xtrabackup/1/ && ls
ibdata1 test xtrabackup_checkpoints xtrabackup_logfile
2. 恢复
需要执行两次xtrabackup --prepare
$xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/u01/xtrabackup/1/
……
$xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/u01/xtrabackup/1/
……
$cd /u01/xtrabackup/1/ && ls
ibdata1 ib_logfile0 ib_logfile1 ib_logfile2 ib_logfile3 test xtrabackup_checkpoints xtrabackup_logfile
这时候,InnoDB的全部数据文件就已经恢复了。将这些数据文件,拷贝回你的MySQL数据文件的位置就可以了。需要注意的是,xtrabackup只备份数据文件,并不备份数据表结构(.frm),所以使用xtrabackup恢复的时候,你必须有对应表结构文件(.frm)。
二、 增量备份
对比innobackupex和xtrabackup我们可以看到,innobackupex操作起来更方便,但是innobackupex会有短暂的锁表(时间依赖于MyISAM大小)。xtrabackup备份还有另一个重要特性:增量备份。(未来的版本innobackupex也可能增长该功能)
1. 全量备份
$xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/u01/xtrabackup/2/
……
$ls /u01/xtrabackup/2/
ibdata1 test xtrabackup_checkpoints xtrabackup_logfile
2. 增量备份
$xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/u01/xtrabackup/2.1/ --incremental-basedir=/u01/xtrabackup/2/
……
$ls /u01/xtrabackup/2.1/
ibdata1.delta test xtrabackup_checkpoints xtrabackup_logfile
在增量备份的目录下,数据文件都是以.delta结尾的。增量备份只备份上一次全量备份之后被修改过的page,所以增量备份一般只暂用较少的空间。
$cd /u01/xtrabackup/ && du --max-depth=1 -h
428K ./2.1
935M ./2
3. 增量备份恢复
我们需要分别对全量、增量备份各做一次prepare操作。
$xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/u01/xtrabackup/2/
……
$xtrabackup --prepare --target-dir=/u01/xtrabackup/2/ --incremental-dir=/u01/xtrabackup/2.1/
……
$xtrabackup --prepare --target-dir=/u01/xtrabackup/2/ #这一步不是必须的
这样,/u01/xtrabackup/2/下的数据文件就可以直接放到你的MySQL数据目录下,恢复数据了。
再次提醒,xtrabackup只备份InnoDB数据文件,表结构是不备份的,所以恢复的时候,你必须有对应表结构文件(.frm)。
参考文献
[1]. http://www.percona.com/docs/wiki/percona-xtrabackup:start
Leave a Reply