zoukankan      html  css  js  c++  java
  • Xtrabackup之innobackupex备份恢复详解(转)

    add by zhj:对于Xtrabackup2.2来说,已经解决了本文结尾提到的那个bug,当使用--copy-back时,同时加--force-non-empty-directories

    即可。这样就不用手动去拷贝了。

    原文:http://ourlinux.blog.51cto.com/274624/844854

    安装配置Xtrabackup

    先看看如何安装Xtrabackup,最简单的安装方式是使用RPM包,不过想使用源代码方式安装的话,其安装方式有点古怪,因为它采用的在MySQL

    源代码上打补丁构建的方式安装的。这里使用二进制包的安装方式,相对比较灵活。

    mkdir /usr/local/xtrabackup
    tar -zxvf xtrabackup-1.6.tar.gz –C /usr/local/xtrabackup
    cd /usr/local/xtrabackup/bin
    ln –s innobackupex-1.5.1 innobackupex

    置环境变量:

    export PATH=$PATH:/usr/local/xtrabackup/bin

    希望永久生效的话,可以加到

    echo "export PATH=$PATH:/usr/local/xtrabackup/bin" >> /etc/profile
    source /etc/profile

    修改mysql配置文件:

    添加或修改:datadir =/usr/local/mysql/var(数据库目录)

    特别注意:default_table_type = InnoDB(必须改,否则进行增量备份的时候不成功)

    经过几天的测试,文档终于可以与大家分享了。使用Xtrabackup能够非常快速地备份与恢复mysql数据库,是mysql dba的首选。Xtrabackup

    是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。

    Xtrabackup有两个主要的工具:xtrabackup、innobackupex xtrabackup只能备份InnoDB和XtraDB两种数据表,支持在线热备份,不会锁表

    innobackupex则封装了xtrabackup,同时可以备份MyISAM数据表,如果你的数据库里有innodb和myisam存储引擎,只能使用innobackupex

    备份,以下是线上用的简单脚本

    #!/bin/bash
    USER=root
    PASSWORD=123456
    date > /data/scripts/backup.log
    echo "begin backup-------------------------------" >> /data/scripts/backup.log
    find /data/mysql/backups -mtime +7 |xargs rm -rf
    /usr/bin/innobackupex --defaults-file=/opt/mysql5/my.cnf --user=$USER --password=$PASSWORD --databases="test1 test2" /data/mysql/backups >> /data/scripts/backup.log 2>&1
    echo "end backup-------------------------------" >> /data/scripts/backup.log
    date >> /data/scripts/backup.log
    
    mail -s "backup Passport report" "localhost@localhost" < /data/scripts/backup.log
    exit 0

    以下是恢复脚本:

    #!/bin/bash
    USER=root
    PASSWORD=123456
    /etc/init.d/mysql stop
    /usr/bin/innobackupex-1.5.1 --apply-log --defaults-file=/opt/mysql5/my.cnf --user=$USER --password=$PASSWORD /data/mysql/backups/passportdb/`date +%Y-%m-%d`
    rm -rf /opt/mysql5/var/test1
    rm -rf /opt/mysql5/var/test2
    rm -f /opt/mysql5/var/ibdata1
    rm -f /opt/mysql5/var/ib_logfile0
    rm -f /opt/mysql5/var/ib_logfile1
    cd /data/mysql/backups
    tar zcvf `date +%Y-%m-%d`.tgz  `date +%Y-%m-%d`
    rm -rf `date -d -30day +%Y-%m-%d`.tgz
    cp -r /data/mysql/backups/`date +%Y-%m-%d`/ib* /opt/mysql5/var/
    cp -r /data/mysql/backups/`date +%Y-%m-%d`/test1 /opt/mysql5/var/
    cp -r /data/mysql/backups/`date +%Y-%m-%d`/test2 /opt/mysql5/var/
    rm -rf /data/mysql/backups/`date +%Y-%m-%d`/*
    chown -R mysql.mysql /opt/mysql5/var/test1
    chown -R mysql.mysql /opt/mysql5/var/test2
    chown mysql.mysql /opt/mysql5/var/ib*
    /etc/init.d/mysql start

    恢复的时候执行完/usr/bin/innobackupex-1.5.1 --apply-log后,直接拷贝就可以了,不用使用/usr/bin/innobackupex-1.5.1 --copy-back

    命令。如果使用/usr/bin/innobackupex-1.5.1 --copy-back命令后,会报Original data directory is not empty! at

    /usr/local/xtrabackup/bin/innobackupex line 538.恢复的目录必须为空。经查官网,这是xtrabackup的一个BUG。

    innobackupex did not check that MySQL datadir was empty before –copy-back was run. With this bug fix,innobackupex will

    now error out of the –copy-back operation if the destination is not empty, avoiding potential data loss or a strang combination

    of a restored backup and previous data. Bug Fixed: #737569(Valentine Gostev)

    网上有好多文章恢复使用
    /usr/bin/innobackupex-1.5.1 --apply-log 然后
    /usr/bin/innobackupex-1.5.1 --copy-back,难道他们恢复的目录都是空目录,还是人云亦云。

  • 相关阅读:
    flare3d_Material3D_shader3D
    判断2个数组是否相等
    js文件下载几种请求方式,普通请求方式封装
    echarts上下柱形图
    已知数组中的一个元素,求其下标
    判断一个数组是否另一个数组的子集
    js中如何判断一个数组是另一个数组的子集
    高德地图
    php过滤和转义函数
    SQLServer表字段默认值相关信息的获取方法
  • 原文地址:https://www.cnblogs.com/ajianbeyourself/p/4156088.html
Copyright © 2011-2022 走看看