zoukankan      html  css  js  c++  java
  • 阿里云RDS数据库备份同步到自建库方法(SHELL脚本)

    一、背景:

    由于阿里云RDS生产库每天都需要备份且拷贝到自建读库,而如果使用阿里云的自动拷贝到只读实例, 费用太高, 故采用自编写同步脚本方法实现。

    二、前提: 

    1). 已开通阿里云RDS, 且开启定期备份功能。(备份功能生成备份文件供下载)

    2). 已在备份的目标服务器上安装mysql数据库。

    3). 备份目标服务器已安装数据恢复工具Percona XtraBackup,您可以从Percona XtraBackup官网下载安装。

    • MySQL 5.6及之前的版本需要安装 Percona XtraBackup 2.3,安装指导请参见官方文档Percona XtraBackup 2.3
    • MySQL 5.7版本需要安装 Percona XtraBackup 2.4,安装指导请参见官方文档Percona XtraBackup 2.4
    • MySQL 8.0版本需要安装 Percona XtraBackup 8.0,安装指导请参见官方文档Percona XtraBackup 8.0

    三、脚本编写和测试

    1. 编写SHELL脚本

    #!/usr/bin/env bash
    #########数据库基础信息#############
    #输入参数
    URL_PATH=$1
    #定义时间格式
    DATE=`date +%Y%m%d%H%M%S`
    #日志记录文件地址
    LOG_PATH=/data/db_bakup/bakup.log
    #保存备份个数
    BACK_NUM=3
    #备份文件存放路径
    BAKUP_PATH=/data/db_bakup/
    
    ##########################
    back_up(){
    cd ${BAKUP_PATH}
    echo "===${DATE}-下载备份,URL_PATH=${URL_PATH}===" >> ${LOG_PATH}
    wget -c "${URL_PATH}" -O database.${DATE}.tar.gz
    echo "===创建文件夹用于存放解压文件===" >> ${LOG_PATH}
    mkdir database.${DATE}
    echo "===解压database.${DATE}===" >> ${LOG_PATH}
    tar -izxvf database.${DATE}.tar.gz -C database.${DATE}
    echo "===恢复解压好的备份文件===" >> ${LOG_PATH}
    innobackupex --defaults-file=/data/db_bakup/database.${DATE}/backup-my.cnf --apply-log /data/db_bakup/database.${DATE}
    echo "===停止数据库===" >> ${LOG_PATH}
    service mysql stop
    #删除数据库data软链接(我的数据库安装在/data/mysql/)
    rm -rf /data/mysql/data
    echo "===删除原数据库文件夹===" >> ${LOG_PATH}
    #删除原数据库文件夹
    rm -rf database/
    #更名
    mv database.${DATE} database
    #新建数据库软链接
    ln -s /data/db_bakup/database /data/mysql/data
    #创建版本号文件(方便辨认当前数据库备份是属于哪个版本的)
    touch database/rev.database
    cat "${DATE}" >> database/rev.database
    echo "===修改文件属主===" >> ${LOG_PATH}
    chown -R mysql:mysql /data/db_bakup/database
    chown -R mysql:mysql /data/mysql
    echo "===重启数据库===" >> ${LOG_PATH}
    service mysql start
    #找出需要删除的备份
    delfile=`ls -l -crt  ${BAKUP_PATH}/*.tar.gz | awk '{print $9 }' | head -1`
    
    #判断现在的备份数量是否大于$number
    count=`ls -l -crt  ${BAKUP_PATH}/*.tar.gz | awk '{print $9 }' | wc -l`
    if [[ $count -gt $BACK_NUM ]];then
         #删除最早生成的备份,只保留number数量的备份
         rm $delfile
         #写删除文件日志
         echo "delete $delfile" >> ${LOG_PATH}
    fi
    echo "===结束===" >> ${LOG_PATH}
    }
    back_up;

    脚本保存文件为: /data/db_bakup/back_up.sh

    2. 给文件增加运行权限

    chmod u+x /data/db_bakup/back_up.sh

    3. 启动备份命令:

    sh /data/db_bakup/back_up.sh "备份文件下载链接"

    注意:"备份文件下载链接" 从阿里云RDS管理控制台复制获取

    4. 查看备份日志查看进程

    tail -f  /data/db_bakup/bakup.log -n 50

    5. 登录数据库查看是否已经切换到新的备份

    mysql -uroot -p

    6. 完毕~~~

    参考文献:

    RDS for MySQL 物理备份文件恢复到自建数据库

  • 相关阅读:
    luogu 2478 [SDOI2010]城市规划 仙人掌上dp.
    bzoj 3782 上学路线 卢卡斯定理 容斥 中国剩余定理 dp
    bzoj 3790 神奇项链 回文串 manacher|PAM
    4.4 相交弧 容斥 平衡规划 二维数点
    4.4 省选模拟赛 拉格朗日计数 树状数组+容斥.
    4.4 省选模拟赛 修路 斯坦纳树
    带修改线性基
    CF R 630 div2 1332 F Independent Set
    4.3 省选模拟赛 石子游戏 树上博弈
    机器C盘临时区
  • 原文地址:https://www.cnblogs.com/mhl1003/p/11691954.html
Copyright © 2011-2022 走看看