共计 3837 个字符,预计需要花费 10 分钟才能阅读完成。
本篇内容介绍了“innobackupex 在线备份及恢复的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
背景介绍:
1、Xtrabackup 是什么
Xtrabackup 是一个对 InnoDB 做数据备份的工具,支持在线热备份 (备份时不影响数据读写),是商业备份工具 InnoDB Hotbackup 的一个很好的替代品。
Xtrabackup 有两个主要的工具:xtrabackup、innobackupex
1、xtrabackup 只能备份 InnoDB 和 XtraDB 两种数据表,而不能备份 MyISAM 数据表
2、innobackupex 是参考了 InnoDBHotbackup 的 innoback 脚本修改而来的.innobackupex 是一个 perl 脚本封装,封装了 xtrabackup。主要是为了方便的同时备份 InnoDB 和 MyISAM 引擎的表,但在处理 myisam 时需要加一个读锁。并且加入了一些使用的选项。如 slave-info 可以记录备份恢复后,作为 slave 需要的一些信息,根据这些信息,可以很方便的利用备份来重做 slave。
Xtrabackup 是由 percona 开发的一个开源软件,它是 innodb 热备工具 ibbackup(收费的商业软件)的一个开源替代品。Xtrabackup 由个部分组成:xtrabackup 和 innobackupex,其中 xtrabackup 工具用于备份 innodb 和 xtraDB 引擎的表;而 innobackupex 工具用于备份 myisam 和 innodb 引擎的表,本文将介绍如何用 innobackupex 工具做全量和增量备份。
全备及其恢复:
全备:
执行如下语句进行全备:
innobackupex –defaults-file=/opt/mysql/my.cnf –user=root –password=*** /backup/mysql/data
该语句将拷贝数据文件(由 my.cnf 里的变量 datadir 指定)至备份目录下(/backup/mysql/data),注意:如果不指定 –defaults-file,默认值为 /etc/my.cnf。
备份成功后,将在备份目录下创建一个时间戳目录(本例创建的目录为 /backup/mysql/data/2013-10-29_09-05-25),在该目录下存放备份文件。
恢复:
恢复之前,要先关闭数据库,并且删除数据文件和日志文件。
innobackupex –defaults-file=/opt/mysql/my.cnf –user=root –password=*** –use-memory=4G –apply-log /backup/mysql/data/2013-10-29_09-05-25
innobackupex –defaults-file=/opt/mysql/my.cnf –user=root –password=*** –copy-back /backup/mysql/data/2013-10-29_09-05-25
从什么可以看出,恢复分为两个步骤,第 1 步是 apply-log,为了加快速度,一般建议设置 –use-memory,这个步骤完成之后,目录 /backup/mysql/data/2013-10-29_09-05-25 下的备份文件已经准备就绪。
第 2 步是 copy-back,即把备份文件拷贝至原数据目录下。
恢复完成之后,一定要记得检查数据目录的所有者和权限是否正确。
增量备份及其恢复:
注意:innobackupex 增量备份仅针对 InnoDB 这类支持事务的引擎,对于 MyISAM 等引擎,则仍然是全备。
增量备份:
增量备份需要基于全备或者增量备份,先假设我们已经有了一个全备(/backup/mysql/data/2013-10-29_09-05-25),我们需要在该全备的基础上做增量备份。
innobackupex –defaults-file=/opt/mysql/my.cnf –user=root –password=*** –incremental-basedir=/backup/mysql/data/2013-10-29_09-05-25 –incremental /backup/mysql/data
其中 –incremental-basedir 指向全备目录,–incremental 指向增量备份的目录。
上面语句执行成功之后,会在 –incremental 执行的目录下创建一个时间戳子目录(本例中为:/backup/mysql/data/2013-10-29_09-52-37),在该目录下存放着增量备份的所有文件。
在备份目录下,有一个文件 xtrabackup_checkpoints 记录着备份信息,全备的信息如下:
backup_type = full-backuped
from_lsn = 0
to_lsn = 563759005914
last_lsn = 563759005914
基于该全备的增量备份的信息如下:
backup_type = incremental
from_lsn = 563759005914
to_lsn = 574765133284
last_lsn = 574765133284
从上面可以看出,增量备份的 from_lsn 正好等于全备的 to_lsn。
那么,我们是否可以在增量备份的基础上再做增量备份呢?答案是肯定的,只要把 –incremental-basedir 执行上一次增量备份的目录即可,如下所示:
innobackupex –defaults-file=/opt/mysql/my.cnf –user=root –password=*** –incremental-basedir=/backup/mysql/data/2013-10-29_09-52-37 –incremental /backup/mysql/data
它的 xtrabackup_checkpoints 记录着备份信息如下:
backup_type = incremental
from_lsn = 574765133284
to_lsn = 574770200380
last_lsn = 574770200950
可以看到,该增量备份的 from_lsn 是从上一次增量备份的 to_lsn 开始的。
恢复:整个过程分为三步骤,整体上可以理解为:可以理解是先把增量备份的数据倒进全备份中,然后最后使用全备份恢复即可
第一步:是在所有备份目录下重做已提交的日志,注意最后一个增量备份是没有 –redo-only 的,并且数据最后是在全备份中,,如:
innobackupex –apply-log –redo-only BASE-DIR
innobackupex –apply-log –redo-only BASE-DIR –incremental-dir=INCREMENTAL-DIR-1
innobackupex –apply-log BASE-DIR –incremental-dir=INCREMENTAL-DIR-2
其中 BASE-DIR 是指全备目录,INCREMENTAL-DIR- 1 是指第一次的增量备份,INCREMENTAL-DIR- 2 是指第二次的增量备份,以此类推。这里要注意的是:最后一步的增量备份并没有 –redo-only 选项!还有,可以使用 –use_memory 提高性能。
以上语句执行成功之后,最终数据在 BASE-DIR(即全备目录)下。
第二步:回滚未完成的日志:
innobackupex –apply-log BASE-DIR
上面执行完之后,BASE-DIR 里的备份文件已完全准备就绪,
最后一步:是拷贝:
innobackupex –copy-back BASE-DIR
同样地,拷贝结束之后,记得检查下数据目录的权限是否正确。
常见错误及解决方法
错误:
131028 17:45:57 innobackupex: Connecting to MySQL server with DSN dbi:mysql:;mysql_read_default_group=xtrabackup (using password: NO).
innobackupex: Error: Failed to connect to MySQL server as DBD::mysql module is not installed at /home/mysql/admin/bin/percona-xtrabackup-2.1.5/innobackupex line 2913.
解决方法:
yum -y install perl-DBD-MySQL.x86_64
错误:
sh: xtrabackup_55: command not found
innobackupex: Error: no mysqld group in MySQL options at /home/mysql/admin/bin/percona-xtrabackup-2.1.6/innobackupex line 4341.
解决方法:
cp xtrabackup_innodb55 xtrabackup_55
“innobackupex 在线备份及恢复的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!