innobackupex备份和恢复原理

innobackupex备份和恢复原理

备份原理:

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





本文出自 “SQLServer MySQL” 博客,转载请与作者联系!

你可能感兴趣的:(备份,恢复,innobackupex)