innobackupex  


全备份原理:

1.执行一次checkpoint,找到最后那个checkpoint的lsn

2.从这个lsn开始记录所有产生的redo log  

3.cp  innodb  data  

4.flush tables with read lock

5.cp 非innodb 数据(myisam数据,.FYM,FIM等文件)

6.锁定binlog文件并且记录当前的binlog postion  

7.释放所有binlog 锁 ,释放unlock tables  


增量备份的原理:在第三步的有所变化

3.数据页面的比对(lsn),记录下有lsn不一样的数据页面


备份命令:

全备:

innobackupex --user=$user --password=$pass --socket=$sock_path --no-timestamp --parallel=$num $DIR$basedir/basebk

增量备份:

innobackupex --user=$user --password=$pass --socket=$sock_path --no-timestamp --parallel=$num --incremental-basedir=$dir_bak  

--incremental $dir_incre



常用参数:

--no-timestamp : 使用自定义目录

--parallel=$num :  并行的线程数

--databases:指定需要备份db列表,还可以指定到表

--incremental-basedir:上一次备份目录



innobackupex 恢复原理:将page head 部的lsn和 redo log 中lsn进行对比,

如果redo lsn 比页面的page的head 中的lsn大 ,就恢复该页面,



1.只有全备

innobackupex --apply-log  /storage/group2/bak/basebk

2.有增量备份

innobackupex --apply-log  --redo-only /storage/group2/bak/basebk

innobackupex --apply-log --incremental /storage/group2/bak/basebk --incremental-dir=/storage/group2/bak/incbk1


常用参数:

--apply-log: 应用全部的redo log

--redo-only:只应用commit的redo的 log

--incremental:每次恢复的过程中都是全备




问题2:(确认)

在应用最后一个增量备份的时候使用了 --redo-only 参数,导致 mysql 启动失败

,报错:日志丢失或者文件损坏问题分析

解释:在mysql启动时候会对mysql数据页面数据的完整性进行检测,发现有问题的页面就试图

恢复,而恢复是要通过redolog的,当redolog找不到的时候,就会报错,页面损坏。


问题3:(已经确认)

在有增量备份的时候进行恢复,是否可以不要--redo-only 参数

不可以,可能会造成部分数据数据丢失