1.执行全备
innobackupex是对xtrabackup进行封装过的perl脚本,详细参数可查看使用手册
innobackupex --database="database_name" --user=用户名 --password=密码
--no-lock --defaults-file=/etc/mysql/my.cnf /bak
执行完以上语句会在/bak目录下产生一个以备份时间为文件名的目录,如下:
drwxr-xr-x 3 root root 4096 8月 21 10:16 2013-08-21_10-15-53/
drwxr-xr-x 3 root root 4096 8月 21 10:41 2013-08-21_10-40-37/
在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间 命名的目录;innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。
2.恢复数据
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处于不一致状态--apply-log
主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
# innobackupex --apply-log /bak/2013-08-21_10-15-53/
恢复数据时,如果数据库数据目录不为空,恢复会终止,防止意外覆盖。因此先把datadir目录更名。数据库数据目录可以通过my.cnf查看。
# innobackupex --copy-back /bak/2013-08-21_10-15-53/
3.增量备份
a. 产生第一个增量备份
innobackupex --incremental /data/backups --incremental-basedir=BASEDIR
此时的BASEDIR是一个全备份的目录,执行后会生成一个新的增量备份目录如
/data/backups/2013-04-01_23-01-18 我们把这个目录称为INCREMENTAL-DIR-1
b.产生第二个增量备份
innobackupex --incremental /data/backups --incremental-basedir=INCREMENTAL-DIR-1
执行后会生成一个新的增量备份目录 我们把这个目录称为INCREMENTAL-DIR-2
/data/backups/2013-04-02_23-01-18
c.产生第三个增量备份
innobackupex --incremental /data/backups --incremental-basedir=INCREMENTAL-DIR-2
依次类推
4.增量备份恢复
(2)基于所有的备份将未提交的事务进行“回滚”。
innobackupex --apply-log --redo-only BASE-DIR
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
innobackupex --apply-log BASE-DIR
innobackupex --copy-back BASE-DIR
5.mysql数据恢复的过程
a.首先关闭数据库
service mysql stop
b.准备并回滚数据库
innobackupex --apply-log BASE-DIR
innobackupex --copy-back BASE-DIR
c.修改数据库权限
chown -R mysql:mysql /var/lib/mysql
注:数据目录/var/lib/mysql 替换成数据恢复的目录
d.启动mysql
service mysql start
6.报错信息
ERROR 1018 (HY000): Can't read dir of '.' (errno: 13)
由于权限问题, 修改数据目录权限解决
chown -R mysql:mysql /var/lib/mysql
参考博文:
http://blog.chinaunix.net/uid-233544-id-3166703.html