• ADADADADAD

    innobackupex在线备份及恢复的方法[ mysql数据库 ]

    mysql数据库 时间:2024-11-28 13:03:49

    作者:文/会员上传

    简介:

    背景介绍:1、Xtrabackup是什么Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。Xtrabac

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    背景介绍:

    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在线备份及恢复的方法.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: innobackupex