zoukankan      html  css  js  c++  java
  • xtrabackup备份恢复

    tar -xzvf percona-xtrabackup-2.1.9-744-Linux-x86_64.tar.gz

    cd percona-xtrabackup-2.1.9-Linux-x86_64/bin

    cp * /usr/bin/

    --apply-log选项的命令是将备份文件中的日志应用到备份文件中的数据文件上

    --no-timestamp,指定了这个选项备份会直接备份在BACKUP-DIR,不再创建时间戳文件夹。

    --default-file,指定配置文件,用来配置innobackupex的选线

    --backup  实施备份到target-dir

    --target-dir 备份文件的存放目录路径

    --copy-back 做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir

    --remote-host 通过ssh将备份数据存储到进程服务器上;

    --no-lock 

    --incremental-dir指定要恢复的增量备份的位置

    备份完数据库之后,下一步是预备数据库,因为数据文件在某个时间点上,并不是一致的,所以需要预备让数据文件在某个时间点一致,--prepare就是来完成,让数据文件保持一致性

    全部备份

    /usr/bin/innobackupex --user=root --password=qkgweb401 --defaults-file=/etc/my.cnf /home/mysql/ 2>/home/mysql/data.log

    /usr/bin/innobackupex --user=root --password=qkgweb401 --database="db1 db2" --defaults-file=/etc/my.cnf /home/mysql/ 2>/home/mysql/data.log

    xtrbackup还支持并行备份,默认情况下xtrabackup备份时只会开启一个进程进行数据文件的备份,若配置参数--parallel=N可以让xtrabackup开启N个子进程对多个数据文件进行并发备份,这样可以加快备份的速度

    当然服务器的IO处理能力以及对服务器的影响也是要考虑的,所以另一个参数--throttle=IOS会与它同时使用,这个参数用来限制备份过程中每秒读写的IO次数,对服务器的IO是一个保护

    innobackupex --parallel=4 --throttle=400 ${BACKUP_DIR}/part-base 

    恢复:

    删除数据库数据:

    rm -rf /data/local/mysql/var/*

    innobackupex --apply-log --user=root --defaults-file=/etc/my.cnf /home/mysql/2015-03-24_10-35-53/

    innobackupex --user=root --password=wg1q2w3e --copy-back /home/mysql/2015-03-24_10-35-53/

    cd /data/local/mysql/ && chown -R root . && chown -R mysql var && chgrp -R mysql .

    service mysqld start

    增量备份

    全备:

    /usr/bin/innobackupex --user=root --password=qkgweb401 --defaults-file=/etc/my.cnf /home/mysql/ 2>/home/mysql/data.log

    第一次增量备份

    /usr/bin/innobackupex --user=root --password=qkgweb401 --defaults-file=/etc/my.cnf --incremental /home/mysql/incr1 --incremental-basedir=/home/mysql/2015-03-25_10-58-43

    第二次增量备份

    innobackupex --defaults-file=/etc/my.cnf --user=root --password=qkgweb401 --incremental --incremental-basedir=/home/mysql/incr1/2015-03-25_11-34-36 /home/mysql/incr2

    增量备份恢复

    service mysqld stop

    rm -rf /data/local/mysql/var/*

    合并完全备份:务必使用--redo-only选项,强制xtrabackup跳过"rollback"

    innobackupex --apply-log /home/mysql/2015-03-26_17-09-31

    合并第一个增量备份到完全备份

    innobackupex --apply-log /home/mysql/2015-03-26_17-09-31 --incremental-dir=/home/mysql/incr1/2015-03-26_17-22-31/

    合并第二个增量备份(合并最后一个增量备份到完全备份:最后一个增量备份不需要加--redo-only)

    innobackupex --apply-log /home/mysql/2015-03-26_17-09-31 --incremental-dir=/home/mysql/incr2/2015-03-26_17-31-09

    选做:

    一旦合并了完全备份和所有增量备份,就可以回滚没有提交的事务

    该步骤是可选的,如果没有做,在数据库开启时会自动进行回滚没有提交的事务,同crash后恢复,但是做了准备,可以减少服务启动时间。innobackupex工具不会创建ib_log*文件,如要创建事务日志文件,需使用xtrabackup --prepare,否则在服务启动时进行创建。

    innobackupex --apply-log /home/mysql/2015-03-26_17-09-31

    完整数据还原

    innobackupex --copy-back /home/mysql/2015-03-26_17-09-31

    cd /data/local/mysql/ && chown -R root . && chown -R mysql var && chgrp -R mysql .

    service mysqld start

    ===============================================================================

    并行备份

    xtrbackup还支持并行备份,默认情况下xtrabackup备份时只会开启一个进程进行数据文件的备份,若配置参数--parallel=N可以让xtrabackup开启N个子进程对多个数据文件进行并发备份,这样可以加快备份的速度。当然服务器的IO处理能力以及对服务器的影响也是要考虑的,所以另一个参数--throttle=IOS会与它同时使用,这个参数用来限制备份过程中每秒读写的IO次数,对服务器的IO是一个保护。

    这两个参数xtrabackup和innobackupex都支持,举例如下:

    $ innobackupex --parallel=4 --throttle=400 ${BACKUP_DIR}/part-base 

    注意:对同一个数据文件只会有一个进程在备份。

    ======================================

    http://sofar.blog.51cto.com/353572/1313649

    部分备份和恢复

    xtrabackup可以只备份/恢复部分库表,可以正则模式匹配或者是你想备份库表的列表,但InnoDB表必须是独立表空间,同时不能使用流备份功能。

    1)、使用正则模式匹配备份部分库表,需要使用参数--include,语句类似如下:

    $ innobackupex --include=’^qb.*’ ${BACKUP_DIR}/part-base 

    2)、使用数据库列表备份部分库,需要使用参数--databases,语句类似如下:

    $ innobackupex --databases=qb0 qb1 qb2 qb3 ${BACKUP_DIR}/part-base 

    3) 、使用表列表备份部分表,需要使用参数--tables-file,语句类似如下:

    $ innobackupex --tables-list=${CONF_DIR}/tab.conf ${BACKUP_DIR}/part-base 

    注:在我们的现实应用中,很少会只备份集群中部分库表,所以只是了解此功能即可,若有现实需要可以参考percona官方资料以获取更多信息。

    能备份部分库表,也就能根据完全备份集进行部分库表的恢复,在现实中很少会用到,但还是说一下吧。

    首先在“准备prepare”的过程中,使用参数--export将表导出,这个导出会将每个InnoDB表创建一个以.exp结尾的文件,这些文件为之后的导入过程服务。

    $ innobackupex --apply-log --export ${BACKUP_DIR}/base 

    然后将你需要恢复的表的ibd和exp文件复制到目标机器,在目标机器上执行导入:

    mysql> create table t()engine=innodb; //此处需要DBA手动创建一个同结构的表或表已存在 mysql> ALTER TABLE t DISCARD TABLESPACE; $ cp t.ibd t.exp ${DATA_DIR}/${DB}/ mysql> ALTER TABLE t IMPORT TABLESPACE; 

    这样的导出导入就可以保住恢复的表可以与数据库其他表保持一致性了。

    脚本:

    #!/bin/bash

    DATE=`date +%Y%m%d`

    DATADIR=`date +%Y%m%d%H`

    BACKUPDIR="/data/webgame/log/xtrabackup"

    SQLIP='127.0.0.1'

    [ -d /data/webgame/log/xtrabackup ] || mkdir -p /data/webgame/log/xtrabackup

    [ -d ${BACKUPDIR}/${DATE} ] || mkdir -p ${BACKUPDIR}/${DATE}

    if [ ! -d "${BACKUPDIR}/${DATE}/trunk" ]

      then

          /usr/bin/innobackupex --host=${SQLIP} --user=webgame --password=qkgweb401 --defaults-file=/etc/my.cnf --no-timestamp ${BACKUPDIR}/${DATE}/trunk 2>${BACKUPDIR}/${DATE}/trunk.log

    elif [ ! -d "${BACKUPDIR}/${DATE}/incr4" ]

      then

        /usr/bin/innobackupex --host=${SQLIP} --user=webgame --password=qkgweb401 --defaults-file=/etc/my.cnf --no-timestamp --incremental ${BACKUPDIR}/${DATE}/incr4  --incremental-basedir=${BACKUPDIR}/${DATE}/trunk 2>${BACKUPDIR}/${DATE}/incr4.log

    elif [ ! -d "${BACKUPDIR}/${DATE}/incr7" ]

      then

        /usr/bin/innobackupex --host=${SQLIP} --user=webgame --password=qkgweb401 --defaults-file=/etc/my.cnf --no-timestamp --incremental ${BACKUPDIR}/${DATE}/incr7  --incremental-basedir=${BACKUPDIR}/${DATE}/incr4 2>${BACKUPDIR}/${DATE}/incr7.log

    elif [ ! -d "${BACKUPDIR}/${DATE}/incr10" ]

      then

        /usr/bin/innobackupex --host=${SQLIP} --user=webgame --password=qkgweb401 --defaults-file=/etc/my.cnf --no-timestamp --incremental ${BACKUPDIR}/${DATE}/incr10  --incremental-basedir=${BACKUPDIR}/${DATE}/incr7 2>${BACKUPDIR}/${DATE}/incr10.log

    elif [ ! -d "${BACKUPDIR}/${DATE}/incr13" ]

      then

        /usr/bin/innobackupex --host=${SQLIP} --user=webgame --password=qkgweb401 --defaults-file=/etc/my.cnf --no-timestamp --incremental ${BACKUPDIR}/${DATE}/incr13  --incremental-basedir=${BACKUPDIR}/${DATE}/incr10 2>${BACKUPDIR}/${DATE}/incr13.log

    elif [ ! -d "${BACKUPDIR}/${DATE}/incr16" ]

      then

        /usr/bin/innobackupex --host=${SQLIP} --user=webgame --password=qkgweb401 --defaults-file=/etc/my.cnf --no-timestamp --incremental ${BACKUPDIR}/${DATE}/incr16  --incremental-basedir=${BACKUPDIR}/${DATE}/incr13 2>${BACKUPDIR}/${DATE}/incr16.log

    elif [ ! -d "${BACKUPDIR}/${DATE}/incr19" ]

      then

        /usr/bin/innobackupex --host=${SQLIP} --user=webgame --password=qkgweb401 --defaults-file=/etc/my.cnf --no-timestamp --incremental ${BACKUPDIR}/${DATE}/incr19  --incremental-basedir=${BACKUPDIR}/${DATE}/incr16 2>${BACKUPDIR}/${DATE}/incr19.log

    elif [ ! -d "${BACKUPDIR}/${DATE}/incr22" ]

      then

        /usr/bin/innobackupex --host=${SQLIP} --user=webgame --password=qkgweb401 --defaults-file=/etc/my.cnf --no-timestamp --incremental ${BACKUPDIR}/${DATE}/incr22  --incremental-basedir=${BACKUPDIR}/${DATE}/incr19 2>${BACKUPDIR}/${DATE}/incr22.log

    fi

  • 相关阅读:
    Error updating database. Cause: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction(mysql 事务方法debug后果)
    按钮防止多次点击重复提交的方法
    图解为什么要使用线程池?
    如果屏蔽父容器的CSS样式。
    一个JSON解构赋值给另一个字段不同的JSON
    @Transactional的参数意义及使用。spring中事务注解的配置情况
    var me = this的实际意义,js将this引用赋值的意义
    EasyUI Combobox 组合框在后端数据初始化后前端的数据加工处理
    >>和>>>的效率分析
    js中debug的使用
  • 原文地址:https://www.cnblogs.com/yangmeichong/p/backup.html
Copyright © 2011-2022 走看看