由于现在线上备份是用dump,对于个库不能保证库的状态的一致性。
为了能是数据库做到point-in-time recovery,可以采用xtrabackup
先声明:对于任何point-in-time recovery binary log是不可缺少的,所以必需保证binary log的安全性,一般是是用RAID10
xtrabackup的增备和全备的实现:
首先是官方文档,说的比较清楚了:
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/ 然后如上面全备一样修改目录即可