由于现在线上备份是用dump,对于个库不能保证库的状态的一致性。

为了能是数据库做到point-in-time recovery,可以采用xtrabackup

先声明:对于任何point-in-time recovery binary log是不可缺少的,所以必需保证binary log的安全性,一般是是用RAID10

xtrabackup的增备和全备的实现:

首先是官方文档,说的比较清楚了:

http://www.percona.com/doc/percona-xtrabackup/xtrabackup_bin/incremental_backups.html

1.全备(这里是用5.5的版本)
xtrabackup_55 --datadir=/xxx/xxx --targe-dir=/xxx/xxx
然后需要做prepare
因为copy的时候并不是同一时间copy的,所以要prepare将所有恢复一致
xtrabackup_55 --prepare --target-dir=./full/

看到“InnoDB shutdown”信息和结束LSN
现在你的备份就一致了

如果你想恢复的更快,你需要再run一次prepare,会重建innodb logfile - -- --- 就是创建了几个logfile

2.

a).将备份的innodb的所有frm文件copy至新备份文件夹
b).将所有的系统级的mysiam表都copy只备份文件夹
c).修改文件夹权限

3.

重启mysql服务
遇到问题1.改mysqld启动脚本,主要是目录问题,指定basedir和datadir
另外需要修改my.cnf的数据文件路径

4.

启动成功,但是err文件报错Unable to lock /usr/local/mysql/data/ibdata1, error: 11

原因是之前启动失败的时候,启动脚本停了,后台脚本还在运行。需要ps将后台mysql进程杀死

5.

恢复之后做即时点恢复
有个文件xtrabackup_binlog_pos_innodb
./mysql-bin.000050      5868
根据这个信息搞吧

###########################################

增量备份(在昨晚全备之后,增备基于全备)
 xtrabackup_55 --backup --target-dir=/home/backup/inc1 --incremental-basedir=/home/backup/full/ --datadir=/usr/local/mysql/data/

 xtrabackup_55 --backup --target-dir=/home/backup/inc2 --incremental-basedir=/home/backup/inc1/ --datadir=/usr/local/mysql/data/
###########################################
注:最终都要应用到全备上
前提,全备不能使用单prepare命令,需要--apply-log-only

恢复的时候

xtrabackup_55 --prepare --apply-log-only --target-dir=/home/backup/full/
xtrabackup_55 --prepare --apply-log-only --target-dir=/home/backup/full/ --incremental-dir=/home/backup/inc1/
xtrabackup_55 --prepare --apply-log-only --target-dir=/home/backup/full/ --incremental-dir=/home/backup/inc2/
然后如上面全备一样修改目录即可