zoukankan      html  css  js  c++  java
  • mysql增量备份 percona-xtrabackup

    1. 先说下实际环境
    2. 阿里云买的ESC跑的mysql服务,目前由于数据量过大,数据库目前有800GB,每次全备需要等20多个小时才能够完成,然后就想到做增量备份,写下此文档

    一、测试环境

    [root@localhost ~]# cat /etc/redhat-release
    CentOS release 6.2(Final)
    [root@localhost ~]# mysql --version
    mysql Ver14.14Distrib5.5.20,forLinux(x86_64)using readline 5.1

    二、安装软件及其作用

      软件名:percona-xtrabackup

      作用:针对Mysql数据库进行热备份,及增量备份,主要应用于innodb引擎

    三、安装步骤

    yum -y install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses5-devel #安装依赖包
    yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm #安装percona YUM库
    yum -y install percona-xtrabackup.x86_64 #安装percona-xtrabackup

    四、备份及恢复命令

    1)完整备份
    innobackupex --defaults-file=/etc/my.cnf --user=root --password=PASSWORD --database=DATE BACK_DIR_PATH
    # PASSWORD 数据库密码
    # DATE 数据库名
    # --database=DATE 针对所有库做备份去掉该选项即可
    # BACK_DIR_PATH 完全备份目录位置
    注:该命令执行后会在备份目录位置以当前时间为命名生成一个目录,备份的文件会备份到该目录中。例如2014-12-06_16-00-15
    2)完整备份的恢复
    1.首先需要备份数据库
    2.停止数据库运行
    3.删除数据库目录内所有文件
    4.然后执行下列命令进行恢复
        innobackupex --defaults-file=/etc/my.cnf --user=root --password=PASSWORD --database=DATE --apply-log BACK_DIR_PATH/2014-12-06_16-00-15
          # PASSWORD 数据库密码
          # DATE 数据库名
          # BACK_DIR_PATH 完全备份目录位置
    3)增量备份
    innobackupex --defaults-file=/etc/my.cnf --user=root --password=PASSWORD --database=DATE --incremental-basedir=BACK_DIR_PATH/2014-12-06_16-00-15--incremental BACK_DIR_ZENG_1
    # PASSWORD 数据库密码
    # DATE 数据库名
    # BACK_DIR_PATH 完全备份目录位置
    # BACK_DIR_ZENG_1 第一次增量备份目录位置
    # --incremental-basedir 该选项后面写的为第一次完整备份的路径
    注:此次增量备份是在第一次完整备份的基础之上进行的增量备份
    4)第二次增量备份
    innobackupex --defaults-file=/etc/my.cnf --user=root --password=PASSWORD --database=DATE --incremental-basedir=BACK_DIR_ZENG_1 --incremental BACK_DIR_ZENG_2
    # PASSWORD 数据库密码
    # DATE 数据库名
    # BACK_DIR_PATH 完全备份目录位置
    # BACK_DIR_ZENG_1 第一次增量备份目录位置
    # BACK_DIR_ZENG_2 第二次增量备份目录位置
    # --incremental-basedir 该选项后面写的为第一次增量备份的路径
    注:此次增量备份是在第一次增量备份的基础之上进行的第二次增量备份
    5)第三次增量备份

      同第二次增量备份

    6)多次增量备份之后的恢复
    1、首先需要备份数据库
    2、停止数据库运行
    3、删除数据库目录内所有文件
    4、然后执行下列命令进行恢复
        innobackupex --apply-log --redo-only BACK_DIR_PATH
        innobackupex --apply-log --redo-only BACK_DIR_PATH --incremental-dir=BACK_DIR_ZENG_1
        innobackupex --apply-log BACK_DIR_PATH --incremental-dir=BACK_DIR_ZENG_2
          # BACK_DIR_PATH 完全备份目录位置
          # BACK_DIR_ZENG_1 第一次增量备份目录位置
          # BACK_DIR_ZENG_2 第二次增量备份目录位置
          注:如果只有2次增量备份则执行此条命令,如果有多次增量命令,则参照上一条命令

    五、脚本

      1 此脚本为一次全备+6次增备轮询
      2 #!/bin/sh
      3 DATE=`date +%Y-%m-%d`
      4 BACKUP_DIR_PATH=/backup/data
      5 FILE_CNF=/etc/my.cnf
      6 USER_NAME=root
      7 PASSWORD=root
      8 DATEBASE=test
      9 BACK_LOG=$BACKUP_DIR_PATH/backup_cost_time
     10 OUT_LOG=Xtrabackup_$DATE.log
     11 if[-d "$BACKUP_DIR_PATH/rec6"];
     12 then
     13 mv $BACKUP_DIR_PATH $BACKUP_DIR_PATH-bak
     14 mkdir $BACKUP_DIR_PATH
     15 fi
     16 if[!-d "$BACKUP_DIR_PATH/full"];
     17 then
     18 START_DATE=`date +%Y-%m-%d_%H:%M:%S`
     19 mkdir $BACKUP_DIR_PATH/full
     20 echo "###start full backup at $START_DATE to directory full">> $BACK_LOG
     21 echo "###start full backup at $START_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
     22 innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --database=$DATEBASE $BACKUP_DIR_PATH/full 2>>$BACKUP_DIR_PATH/$OUT_LOG
     23 STOP_DATE=`date +%Y-%m-%d_%H:%M:%S`
     24 echo "###stop full backup at $STOP_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
     25 echo "###stop full backup at $STOP_DATE to directory full">> $BACK_LOG
     26 echo "">> $BACK_LOG
     27 echo "">> $BACK_LOG
     28 echo "">> $BACK_LOG
     29 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
     30 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
     31 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
     32 break;
     33 elif[!-d "$BACKUP_DIR_PATH/rec1"];
     34 then
     35 BACKUP_FULL_PATH=`ls -l $BACKUP_DIR_PATH/full |awk '/^d/ {print $NF}'`
     36 START_DATE=`date +%Y-%m-%d_%H:%M:%S`
     37 mkdir $BACKUP_DIR_PATH/rec1
     38 echo "###start 1 incremental backup at $START_DATE to directory full">> $BACK_LOG
     39 echo "###start 1 incremental backup at $START_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
     40 innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --database=$DATEBASE --incremental-basedir=$BACKUP_DIR_PATH/full/$BACKUP_FULL_PATH --incremental $BACKUP_DIR_PATH/rec1 2>>$BACKUP_DIR_PATH/$OUT_LOG
     41 STOP_DATE=`date +%Y-%m-%d_%H:%M:%S`
     42 echo "###stop 1 incremental backup at $STOP_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
     43 echo "###stop 1 incremental backup at $STOP_DATE to directory full">> $BACK_LOG
     44 echo "">> $BACK_LOG
     45 echo "">> $BACK_LOG
     46 echo "">> $BACK_LOG
     47 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
     48 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
     49 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
     50 break;
     51 elif[!-d "$BACKUP_DIR_PATH/rec2"];
     52 then
     53 BACKUP_REC1_PATH=`ls -l $BACKUP_DIR_PATH/rec1 |awk '/^d/ {print $NF}'`
     54 START_DATE=`date +%Y-%m-%d_%H:%M:%S`
     55 mkdir $BACKUP_DIR_PATH/rec2
     56 echo "###start 2 incremental backup at $START_DATE to directory full">> $BACK_LOG
     57 echo "###start 2 incremental backup at $START_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
     58 innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --database=$DATEBASE --incremental-basedir=$BACKUP_DIR_PATH/rec1/$BACKUP_REC1_PATH --incremental $BACKUP_DIR_PATH/rec2 2>>$BACKUP_DIR_PATH/$OUT_LOG
     59 STOP_DATE=`date +%Y-%m-%d_%H:%M:%S`
     60 echo "###stop 2 incremental backup at $STOP_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
     61 echo "###stop 2 incremental backup at $STOP_DATE to directory full">> $BACK_LOG
     62 echo "">> $BACK_LOG
     63 echo "">> $BACK_LOG
     64 echo "">> $BACK_LOG
     65 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
     66 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
     67 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
     68 break;
     69 elif[!-d "$BACKUP_DIR_PATH/rec3"];
     70 then
     71 BACKUP_REC2_PATH=`ls -l $BACKUP_DIR_PATH/rec2 |awk '/^d/ {print $NF}'`
     72 START_DATE=`date +%Y-%m-%d_%H:%M:%S`
     73 mkdir $BACKUP_DIR_PATH/rec3
     74 echo "###start 3 incremental backup at $START_DATE to directory full">> $BACK_LOG
     75 echo "###start 3 incremental backup at $START_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
     76 innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --database=$DATEBASE --incremental-basedir=$BACKUP_DIR_PATH/rec2/$BACKUP_REC2_PATH --incremental $BACKUP_DIR_PATH/rec3 2>>$BACKUP_DIR_PATH/$OUT_LOG
     77 STOP_DATE=`date +%Y-%m-%d_%H:%M:%S`
     78 echo "###stop 3 incremental backup at $STOP_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
     79 echo "###stop 3 incremental backup at $STOP_DATE to directory full">> $BACK_LOG
     80 echo "">> $BACK_LOG
     81 echo "">> $BACK_LOG
     82 echo "">> $BACK_LOG
     83 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
     84 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
     85 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
     86 break;
     87 elif[!-d "$BACKUP_DIR_PATH/rec4"];
     88 then
     89 BACKUP_REC3_PATH=`ls -l $BACKUP_DIR_PATH/rec3 |awk '/^d/ {print $NF}'`
     90 START_DATE=`date +%Y-%m-%d_%H:%M:%S`
     91 mkdir $BACKUP_DIR_PATH/rec4
     92 echo "###start 4 incremental backup at $START_DATE to directory full">> $BACK_LOG
     93 echo "###start 4 incremental backup at $START_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
     94 innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --database=$DATEBASE --incremental-basedir=$BACKUP_DIR_PATH/rec3/$BACKUP_REC3_PATH --incremental $BACKUP_DIR_PATH/rec4 2>>$BACKUP_DIR_PATH/$OUT_LOG
     95 STOP_DATE=`date +%Y-%m-%d_%H:%M:%S`
     96 echo "###stop 4 incremental backup at $STOP_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
     97 echo "###stop 4 incremental backup at $STOP_DATE to directory full">> $BACK_LOG
     98 echo "">> $BACK_LOG
     99 echo "">> $BACK_LOG
    100 echo "">> $BACK_LOG
    101 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
    102 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
    103 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
    104 break;
    105 elif[!-d "$BACKUP_DIR_PATH/rec5"];
    106 then
    107 BACKUP_REC4_PATH=`ls -l $BACKUP_DIR_PATH/rec4 |awk '/^d/ {print $NF}'`
    108 START_DATE=`date +%Y-%m-%d_%H:%M:%S`
    109 mkdir $BACKUP_DIR_PATH/rec5
    110 echo "###start 5 incremental backup at $START_DATE to directory full">> $BACK_LOG
    111 echo "###start 5 incremental backup at $START_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
    112 innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --database=$DATEBASE --incremental-basedir=$BACKUP_DIR_PATH/rec4/$BACKUP_REC4_PATH --incremental $BACKUP_DIR_PATH/rec5 2>>$BACKUP_DIR_PATH/$OUT_LOG
    113 STOP_DATE=`date +%Y-%m-%d_%H:%M:%S`
    114 echo "###stop 5 incremental backup at $STOP_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
    115 echo "###stop 5 incremental backup at $STOP_DATE to directory full">> $BACK_LOG
    116 echo "">> $BACK_LOG
    117 echo "">> $BACK_LOG
    118 echo "">> $BACK_LOG
    119 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
    120 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
    121 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
    122 break;
    123 elif[!-d "$BACKUP_DIR_PATH/rec6"];
    124 then
    125 BACKUP_REC5_PATH=`ls -l $BACKUP_DIR_PATH/rec5 |awk '/^d/ {print $NF}'`
    126 START_DATE=`date +%Y-%m-%d_%H:%M:%S`
    127 mkdir $BACKUP_DIR_PATH/rec6
    128 echo "###start 6 incremental backup at $START_DATE to directory full">> $BACK_LOG
    129 echo "###start 6 incremental backup at $START_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
    130 innobackupex --defaults-file=$FILE_CNF --user=$USER_NAME --password=$PASSWORD --database=$DATEBASE --incremental-basedir=$BACKUP_DIR_PATH/rec5/$BACKUP_REC5_PATH --incremental $BACKUP_DIR_PATH/rec6 2>>$BACKUP_DIR_PATH/$OUT_LOG
    131 STOP_DATE=`date +%Y-%m-%d_%H:%M:%S`
    132 echo "###stop 6 incremental backup at $STOP_DATE to directory full">> $BACKUP_DIR_PATH/$OUT_LOG
    133 echo "###stop 6 incremental backup at $STOP_DATE to directory full">> $BACK_LOG
    134 echo "">> $BACK_LOG
    135 echo "">> $BACK_LOG
    136 echo "">> $BACK_LOG
    137 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
    138 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
    139 echo "">> $BACKUP_DIR_PATH/$OUT_LOG
    140 break;
    141 fi
  • 相关阅读:
    spark机器学习从0到1特征抽取–Word2Vec(十四)
    spark机器学习从0到1特征抽取–CountVectorizer(十三)
    spark机器学习从0到1特征提取 TF-IDF(十二)
    spark机器学习从0到1机器学习工作流 (十一)
    vant ui中area组件踩坑记录
    免费CDN:jsDelivr+Github 使用方法
    使用vue-quill-editor实现富文本编辑器
    数组添加元素到特定位置
    scoop——强大的Windows命令行包管理工具
    radio单选框样式
  • 原文地址:https://www.cnblogs.com/CongZhang/p/5300699.html
Copyright © 2011-2022 走看看