备份原理:
1.找到redolog中最后一个checkpoint的lsn,从这个lsn开始记录所有新的redolog
2.cpinnodb数据
3.flush tables with read lock (加全局锁)
4.复制所有myisam表和所有表的表结构文件
5.锁定binlog文件
6.记录当前的binlogfile和pos
恢复原理:
innobackupex --apply-log --redo-only
innobackupex恢复和mysql系统崩溃的原理一样,通过比对页的lsn和日志中的lsn大小来完成的.
mysql崩溃后的数据恢复流程。
通过查找日志最后一次checkpoint的位置取出这个lsn之后的所有日志,然后比对lsn值与页面的lsn的大小,
如果页面的lsn小于当前的lsn就恢复该页面
innobackupex --apply-log --redo-only
innobackupex恢复:
在应用日志阶段(apply-log),会比对数据页面和日志中lsn值,如果lsn日志的值比数据页面的lsn大,
就应用该条日志。
redo-only:只前滚已提交的事务,忽略未提交的事务日志。
记得又一次做数据恢复的时候 ,使用innobackupex , 在最后一次备份合并的过程中使用redo-only参数,
导致mysql无法启动(有的时候可以启动)。
具体原因分析如下:
这时page的lsn大于redo日志中最大的lsn,也就是page的lsn在redo中找不到的lsn,所以他会提示日志丢失,或者日志文件被
损坏,实际上日志文件没有被损坏,。mysql需要这部分日志来回滚事务,但是这部分日志存在于xtracback_logfile中,
,xtracback_logfile mysql无法识别获取不到日志。
innobackupex的使用方法:
http://dwchaoyue.blog.51cto.com/2826417/1429918