innobackupex实现对MySQL的增量备份与还原

备份
增量备份是基于完整备份的,所以我们需要先做一次完整备份:

innobackupex --defaults-file=/etc/my.cnf --user root --password chengce243 /data/mysqlbak

执行完命令后,/data/mysqlbak 目录下会生成目录: 2018-08-06_13-53-57

第一次增量备份:

innobackupex --defaults-file=/etc/my.cnf --user root --password chengce243 --incremental /data/mysqlbak --incremental-basedir=/data/mysqlbak/2018-08-06_13-53-57


注意:第一次备份的--incremental-basedir参数应指向完整备份的时间戳目录。
执行完命令后,/data/mysqlbak 目录下会生成目录:2018-08-06_13-55-42

第二次增量备份:

innobackupex --defaults-file=/etc/my.cnf --user root --password chengce243 --incremental /data/mysqlbak --incremental-basedir=/data/mysqlbak/2018-08-06_13-55-42

注意:第二次备份的--incremental-basedir参数应指向第一次增量备份的时间戳目录。
执行完命令后,/data/mysqlbak 目录下会生成目录: 2018-08-06_13-58-47


还原
停止MySQL服务并清空数据目录:

/etc/init.d/mysqld stop
rm -rf /data/mysql/*


恢复过程:

恢复情况一:
直接恢复完整备份之后的数据。
直接把全备备份文件( 2018-08-06_13-53-57)目录下的文件复制到 /data/mysql ,然后启动数据库,此时数据库的数据是完整备份之后的数据。

恢复情况二:
恢复完整备份+增量备份

innobackupex --apply-log --redo-only /data/mysqlbak/2018-08-06_13-53-57
innobackupex --apply-log --redo-only /data/mysqlbak/2018-08-06_13-53-57 --incremental-dir=/data/mysqlbak/2018-08-06_13-55-42
innobackupex --apply-log /data/mysqlbak/2018-08-06_13-53-57 --incremental-dir=/data/mysqlbak/2018-08-06_13-58-47
innobackupex --apply-log /data/mysqlbak/2018-08-06_13-53-57


注意:一定要按照完整备份、第一次增量备份、第二次增量备份的顺序进行整合,在整合最后一次增量备份时不要使用--redo-only参数。

开始还原:
由于我的mysql数据目录为 /data/mysql ,所以还原直接 mv 数据文件到 /data/mysql 即可。

mv /data/mysqlbak/2018-08-06_11-36-02/* /data/mysql/


修改数据目录的属主和属组并启动MySQL服务:

chown -R mysql.mysql /data/mysql/
/etc/init.d/mysqld start