• 异地备份远程服务器文件脚本,如:MySQL 备份


    事件背景

    在运维工作过程中,我们通常都会有一句俗语叫:不要把鸡蛋放在一个篮子里。数据库备份也是一样,如果单放在一台机器或者放到一个环境,如果这个地方出问题,可能就会导致数据全部丢失。所以我们会经常涉及到数据异地备份的问题。

    本文备份原理:

    1. 远程服务器凌晨定时备份并推送到指定备份服务器。

    2. 备份服务器配置 nginx 文件下载和用户认证,配置方法可以参照我之前 nginx 文章:

    https://www.cnblogs.com/Dy1an/p/11249061.html

    3. 本地备份服务器定时去拉取该服务器上面的备份。

    当然,如果本地服务器也有固定公网最好为了安全起见在 nginx 上面限制访问的来源 IP。

    脚本实例

    由于每个人的目录这些存在差异,所以有需要的可以根据自己的环境修改:

    #!/bin/bash
    
    ##########################################################################
    # 用途:拉取备份
    # 作者:Dylan<1214966109@qq.com>
    # 时间:2020-02-21
    ##########################################################################
    
    
    ##########################################################################
    # 用户变量
    ##########################################################################
    DINGDING_WEBHOOK="这里是钉钉机器人地址"
    DOWNLOAD_BASE_URL='http://这里是文件下载的基础地址'
    DOWNLOAD_USER='用户名'
    DOWNLOAD_PASSWORD='密码'
    DOWNLOAD_COMMAND="/usr/bin/wget"
    
    
    ##########################################################################
    # 系统变量
    ##########################################################################
    # 注意自己备份的文件时间格式
    DATE_TODAY=$(date +\%Y\%m\%d)
    
    # 远程目录和本地保存目录,这里根据自己备份目录情况改写
    BACKUP_DIRECTORY="mysql-3306/mysql_${DATE_TODAY}"
    LOCAL_DIRECTORY="/data/download/mysql-3306/mysql_${DATE_TODAY}"
    
    # 文件列表
    FILE_ARRY=(
    数据库名称1
    数据库名称2
    ...
    )
    
    
    ##########################################################################
    # 备份文件
    ##########################################################################
    mkdir -p ${LOCAL_DIRECTORY}
    
    for ECHO_FILE in ${FILE_ARRY[@]};do
        cd ${LOCAL_DIRECTORY}
        # 注意下载路径拼接是否正确,我这里备份的sql是压缩的
        ${DOWNLOAD_COMMAND} --http-user=${DOWNLOAD_USER} --http-passwd=${DOWNLOAD_PASSWORD} ${DOWNLOAD_BASE_URL}/${BACKUP_DIRECTORY}/${ECHO_FILE}_${DATE_TODAY}.sql.gz >> /tmp/remote-backup.log
    done
    
    
    ##########################################################################
    # 处理备份结果
    ##########################################################################
    cd ${LOCAL_DIRECTORY}
    echo "日期:${DATE_TODAY}" > /tmp/download.txt
    
    for EACH_LOCAL_FILE in ${FILE_ARRY[@]};do
        ls -l ${LOCAL_DIRECTORY}/${EACH_LOCAL_FILE}_${DATE_TODAY}.sql.gz
        if [[ $? != 0 ]];then
            echo "${EACH_LOCAL_FILE}[失败]" >> /tmp/download.txt
        else
            FILE_SIZE=$(ls -l ${LOCAL_DIRECTORY}/${EACH_LOCAL_FILE}_${DATE_TODAY}.sql.gz | awk {'print $5'})
            FILE_H_SIZE=$(ls -lh ${LOCAL_DIRECTORY}/${EACH_LOCAL_FILE}_${DATE_TODAY}.sql.gz | awk {'print $5'})
            echo "${EACH_LOCAL_FILE}[${FILE_SIZE}/${FILE_H_SIZE}]" >> /tmp/download.txt
        fi
    done
    
    
    ##########################################################################
    # 发送钉钉消息
    ##########################################################################
    function SendMessageToDingding(){ 
        curl "${DINGDING_WEBHOOK}" -H 'Content-Type: application/json' -d "
        {
            "actionCard": {
                "title": "$1", 
                "text": "$2", 
                "hideAvatar": "0", 
                "btnOrientation": "0", 
                "btns": [
                    {
                        "title": "$1", 
                        "actionURL": ""
                    }
                ]
            }, 
            "msgtype": "actionCard"
        }"
    }
    
    # 执行
    DINGDING_SUBJECT="数据库本地备份结果"
    sed -i ":a;N;s/
    /\r\r/g;ta" /tmp/download.txt
    DINGDING_CONTENT=$(cat /tmp/download.txt)
    echo $DINGDING_CONTENT
    SendMessageToDingding ${DINGDING_SUBJECT} ${DINGDING_CONTENT}

    注意红色部分修改为自己的!

    最后加入定时任务,备份下载完成后钉钉机器人会通知到群里,如我的:

  • 相关阅读:
    PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )
    关于汽车
    PCB 敷铜间距规则(转)
    有同感的话
    kubernetes学习之二进制部署1.16
    kubernetes网络之Flannel
    Kubernetes学习之原理
    Kubernetes学习之基础概念
    Centos7配置Grafana对接OpenLDAP
    Centos7安装OpenLDAP
  • 原文地址:https://www.cnblogs.com/Dy1an/p/12355785.html
Copyright © 2020-2023  润新知