http://space.itpub.net/22664653/viewspace-713127 这位哥们用innobackupex做增量备份时,发生了增量的数据丢失。今天在做增量的时候发现了一个小小过程,算是解决了这个问题。
下面是我的整个过程,如有那个地方是错误的,看过的人麻烦指点小弟。谢啦!! 图片有可能不是很清晰,大家见谅!!
测试环境
我的环境是多实例,所有在下面的参数中传递了defaults-file,基于多实例备份,可以传递个假的配置文件给innobackupex, 这个配置文件中把对应的GNR,改为[ mysqld],那么就可以备份了。!
1.完整备份,这是增量备份的基础
innobackupex --defaults-file=/var/lib/my.cnf --user=backup --password=mysql --socket=/tmp/mysql0001.sock --parallel=8 /var/backup/
添加数据
2.增量备份
innobackupex --user=backup --password=mysql --socket=/tmp/mysql0001.sock --defaults-file=/var/lib/my.cnf --parallel=8 --incremental /var/backup/ --incremental-basedir=/var/backup/2012-04-30_08-41-14/ 完整备份目录上做第一次增量备份
如果默认存储引擎是基于MyISAM,那么增量备份时备份的文件分别是.frm、.MYD、.MYI。
如果默认存储引擎是基于InnoDB,那么增量备份时备份的只会是.frm文件,我的配置文件所采用的是独立表空间
note:此过程仅影响XtraDB或基于InnoDB的表,其他带不同存储引擎的表会在增量备份出现时被完全复制
恢复过程也需要用到prepare
首先,提交事务必须重新执行每一个备份
然后,未提交事务必须回退
模拟故障
回滚未提交的事务
innobackupex --defaults-file=/var/lib/my.cnf --apply-log --redo-only /var/backup/2012-04-30_08-41-14/
第一个增量备份应用到完整备份
innobackupex --defaults-file=/var/lib/my.cnf --apply-log --redo-only /var/backup/2012-04-30_08-41-14/ --incremental-dir=/var/backup/2012-04-30_08-42-23/
以上信息都是在增量备份应用到完整备份时输出信息,图一是MyISAM,图二是InnoDB,它们都会创建一个/var/backup/2012-04-30_08-41-14eugene目录,里面的信息都是增量备份的内容。
恢复备份
增量备份只是把增量备份的内容,恢复到新建目录/var/backup/2012-04-30_08-41-14eugene下,而没有恢复到/var/backup/2012-04-30_08-41-14/eugene/ 完整备份目录中的数据库当中去。所以需要手工把文件移动到完整备份的数据库目录当中去,如不执行这步,那么还原回来的数据只是完整备份的数据,而所做的增量就消失了。
千万不要选择y,不然会覆盖掉你表结构。如果选择y,那么你select * from test;会提示这个test表不存在!!!
innobackupex --defaults-file=/var/lib/my.cnf --copy-back /var/backup/2012-04-30_08-41-14
chow -R mysql.mysql /opt/mysql/data/0001/*
/etc/init.d/rc.mysqlmulti start 0001
下面是我的整个过程,如有那个地方是错误的,看过的人麻烦指点小弟。谢啦!! 图片有可能不是很清晰,大家见谅!!
测试环境
我的环境是多实例,所有在下面的参数中传递了defaults-file,基于多实例备份,可以传递个假的配置文件给innobackupex, 这个配置文件中把对应的GNR,改为[ mysqld],那么就可以备份了。!
![clipboard.png clipboard.png](http://itpubpic.img168.net/forum/201204/30/182239ifpm73ep5z3kmlym.png)
1.完整备份,这是增量备份的基础
innobackupex --defaults-file=/var/lib/my.cnf --user=backup --password=mysql --socket=/tmp/mysql0001.sock --parallel=8 /var/backup/
添加数据
![aa.png aa.png](http://itpubpic.img168.net/forum/201204/30/18234055rtzai2lnarrasz.png)
2.增量备份
innobackupex --user=backup --password=mysql --socket=/tmp/mysql0001.sock --defaults-file=/var/lib/my.cnf --parallel=8 --incremental /var/backup/ --incremental-basedir=/var/backup/2012-04-30_08-41-14/ 完整备份目录上做第一次增量备份
如果默认存储引擎是基于MyISAM,那么增量备份时备份的文件分别是.frm、.MYD、.MYI。
![bb.png bb.png](http://itpubpic.img168.net/forum/201204/30/182411zwtn6k3pezi61bbl.png)
如果默认存储引擎是基于InnoDB,那么增量备份时备份的只会是.frm文件,我的配置文件所采用的是独立表空间
![cc.png cc.png](http://itpubpic.img168.net/forum/201204/30/1824106mp8r66a6uyuubo8.png)
note:此过程仅影响XtraDB或基于InnoDB的表,其他带不同存储引擎的表会在增量备份出现时被完全复制
恢复过程也需要用到prepare
首先,提交事务必须重新执行每一个备份
然后,未提交事务必须回退
模拟故障
![dd.png dd.png](http://itpubpic.img168.net/forum/201204/30/182440lx10ex9nx9snstx1.png)
回滚未提交的事务
innobackupex --defaults-file=/var/lib/my.cnf --apply-log --redo-only /var/backup/2012-04-30_08-41-14/
第一个增量备份应用到完整备份
innobackupex --defaults-file=/var/lib/my.cnf --apply-log --redo-only /var/backup/2012-04-30_08-41-14/ --incremental-dir=/var/backup/2012-04-30_08-42-23/
![bb.png bb.png](http://itpubpic.img168.net/forum/201204/30/1825329g5c5rsyzxxj4ggx.png)
以上信息都是在增量备份应用到完整备份时输出信息,图一是MyISAM,图二是InnoDB,它们都会创建一个/var/backup/2012-04-30_08-41-14eugene目录,里面的信息都是增量备份的内容。
恢复备份
![clipboard.png clipboard.png](http://itpubpic.img168.net/forum/201204/30/182656ixxpim2zqnvipwci.png)
增量备份只是把增量备份的内容,恢复到新建目录/var/backup/2012-04-30_08-41-14eugene下,而没有恢复到/var/backup/2012-04-30_08-41-14/eugene/ 完整备份目录中的数据库当中去。所以需要手工把文件移动到完整备份的数据库目录当中去,如不执行这步,那么还原回来的数据只是完整备份的数据,而所做的增量就消失了。
![clipboard.png clipboard.png](http://itpubpic.img168.net/forum/201204/30/182719kx58ff8880bbw15a.png)
千万不要选择y,不然会覆盖掉你表结构。如果选择y,那么你select * from test;会提示这个test表不存在!!!
innobackupex --defaults-file=/var/lib/my.cnf --copy-back /var/backup/2012-04-30_08-41-14
chow -R mysql.mysql /opt/mysql/data/0001/*
/etc/init.d/rc.mysqlmulti start 0001
![clipboard.png clipboard.png](http://itpubpic.img168.net/forum/201204/30/182810tuo1x477p4xwntti.png)