日期:2014-05-16  浏览次数:20350 次

innobackupex介绍与使用
innobackupex封装了xtrabackup和tar4ibd,其中tar4ibd提供一个接口去备份服务器上的全部数据

1 全备

1.1 backup
 
简单例子:
$ innobackupex --user=root --password=oracle /home/mysql/backup/base/

全备时有2个比较有意思的参数
--no-timestamp:自定义备份的名字
--defaults-file:读取想要的my.cnf

1.2 prepare

备份后的数据直接拿去恢复是件高风险的事,因为这里面可能会有未提交的事务待回滚以及已提交的事务待重演
那么在backup和restore之间需要插入一步prepare,以使所有的数据文件步调一致,方便下一个开机周期的公平公正
这里prepare相当于Oracle里的restore,而restore则相当于recover。如何完成这一步?方法很简单,加个 --apply-log 即可

简单例子:
$ innobackupex --apply-log /home/mysql/backup/base/mysql_0_backup/

Prepare过程有一个参数也可以考虑

--use-memory:Prepare过程可供使用的内存,因为Prepare本身就可以拿到其它机器上prepare,可以加大内存来加速prepare而不会有资源争用问题

1.3 restore 

恢复阶段比较简单,只要加个--copy-back,innobackupex则会自动把数据拷贝到--datadir下面
该过程有3个需要注意的地方,其一,关闭mysqld;其二,datadir下不能存在相同的文件名;第三,文件属性和权限

简单例子:
$ innobackupex --copy-back /home/mysql/backup/base/mysql_0_backup/
# chown -R mysql:dba /home/mysql/mysql/data/


2 增量备份

涉及到增量备份有2个文件需要考虑:xtrabackup_logfile和xtrabackup_checkpoint
log-coping线程会复制变化的块到xtrabackup_logfile,在xtrabackup_checkpoint记录to-lsn及备份类型,以备下次增量迭代

2.1 backup 

增量备份之前需要先创建一份全备,方法参见1,下面是做2次增量的简单例子:
全备:
$ innobackupex --user=root --password=oracle /home/mysql/backup/base/
第一次增量
$ innobackupex --user=root --password=oracle --incremental /home/mysql/backup/inc1/ --incremental-basedir=/home/mysql/backup/base/2013-10-20_23-27-20/
第二次增量
$ innobackupex --user=root --password=oracle --incremental /home/mysql/backup/inc2/ --incremental-basedir=/home/mysql/backup/inc1/2013-10-20_23-30-29/


2.2 prepare 

该过程和全备有些不同,差异在于有且只有提交的事务需要重演,未提交的事务不应该被回滚,具体见下面过程解析:
--redo-only禁用xtrabackup回滚步骤
$ innobackupex --user=root --password=oracle --apply-log --redo-only /home/mysql/backup/base/2013-10-20_23-27-20/

$ innobackupex --user=root --password=oracle --apply-log --redo-only /home/mysql/backup/base/2013-10-20_23-27-20/ --incremental-dir=/home/mysql/backup/inc1/2013-10-20_23-30-29/

最后一次增量运用--redo-only不必在执行,因为回滚的解析不应该交给服务器去做,徒增压力罢了,这种事情应该先做好了再递给服务器

$ innobackupex --user=root --password=oracle --apply-log  /home/mysql/backup/base/2013-10-20_23-27-20/ --incremental-dir=/home/mysql/backup/inc2/2013-10-20_23-31-42/
回滚未提交的事务
$ innobackupex --user=root --password=oracle --apply-log  /home/mysql/backup/base/2013-10-20_23-27-20/ 

2.3 restore 

这和1.3所描述的没有任何区别


By 迦夜

2013-10-21

Good Luck