一、使用innobackupex做完全备份并恢复

1、完全备份

#innobackupex--user=root --password=boyojoy.com /backup/innodb/full/

使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAMMERGECSVARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命名的目录中。

161021735.jpg

2准备(prepare)一个完全备份

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处于不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

#innobackupex--user=root --password=boyojoy.com --apply-log/backup/innodb/full/2013-05-14_03-50-00/


161109120.jpg

3、查询lee数据库 tb表记录并清空记录,尝试用备份的数据进行恢复

161219668.jpg

已经清空记录现在进行恢复


Copy数据目录

161242112.jpg

Copy ib*日志文件

161256671.jpg

重启数据库

161309356.jpg

登录数据库验证

161324851.jpg

恢复成功



二、使用innobackuppx做增量备份并恢复

增量备份

为了显示增量的效果,在每次备份前会执行一个php的脚本,对tb进行插入操作,php脚本见附件

首先执行一次全备

161436523.jpg

innobackupex --user=root--password=boyojoy.com /backup/innodb/full/

执行一次php插入操作并做第一次增量备份

161458125.jpg

innobackupex --user=root--password=boyojoy.com--incremental-basedir=/backup/innodb/full/2013-05-14_03-25-05/ --incremental/backup/innodb/increment/


执行一次php插入操作并作第二次增量备份

161607751.jpg

innobackupex --user=root--password=boyojoy.com--incremental-basedir=/backup/innodb/increment/2013-05-14_03-28-11/--incremental /backup/innodb/increment/

第二次增量备份的basedir 是第一次增量备份为基础的所以--incremental-basedir=/backup/innodb/increment/2013-05-14_02-47-19/

……以此类推



利用全备+增备恢复:

1)对全备数据进行parpare

innobackupex --user=root--password=boyojoy.com --apply-log --redo-only/backup/innodb/full/2013-05-14_03-25-05/

2)对第一次增备进行parpare

innobackupex --user=root--password=boyojoy.com --apply-log --redo-only /backup/innodb/full/2013-05-14_03-25-05/--incremental-dir=/backup/innodb/increment/2013-05-14_03-28-11/

此时我们先尝试进行恢复,可以预想恢复后的数据应该是161634347.jpg

我们先清理这张表,然后copy对应的文件

cp full/2013-05-14_03-25-05/ibdata1/data0/mysql/3306/log/

cp full/2013-05-14_03-25-05lee/*/data0/mysql/3306/data/lee/

重启数据库

161657595.jpg

查询结果为

161715831.jpg

此时恢复至第一次增备后,第二次增备前的状态


3)继续对第二次增备进行parpare

innobackupex --user=root--password=boyojoy.com --apply-log --redo-only/backup/innodb/full/2013-05-14_03-25-05/--incremental-dir=/backup/innodb/increment/2013-05-14_03-30-31/

然后同样进行恢复,这次就可恢复至第二次增备的状态了

登录数据库查询:

161804464.jpg

三、使用innobackupex过程出现的问题

1)innobackupex: fatal error: no 'mysqld' group in MySQL options

innobackupex: fatal error: OR no 'datadir' option in group 'mysqld' in MySQL options


解决办法

[root@lee1~]#which xtrabackup_innodb55

/usr/bin/xtrabackup_innodb55

[root@lee1~]#

找到xtrabackup_innodb55的文件位置

ln -sv /usr/bin/xtrabackup_innodb55 /usr/bin/xtrabackup_55

ln -sv /usr/bin/xtrabackup_innodb55 /usr/bin/xtrabackup


如果确实没有找到这个xtrabackup_innodb55文件,说明没有安装xtrabackup 需要手动安装

2)

[root@lee1/backup/innodb]#innobackupex --user=root --password=boyojoy.com --copy-back /backup/innodb/full/2013-05-14_03-50-00/


InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy

and Percona Inc 2009-2012.  All Rights Reserved.


This software is published under

the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.


IMPORTANT: Please check that the copy-back run completes successfully.

          At the end of a successful copy-back run innobackupex

          prints "completed OK!".


Original data directory is not empty! at /usr/bin/innobackupex line 538.

这个是bug,实在不行在parpare后将备份的文件复制到对应的位置,本文的实验就是这样操作的