zoukankan      html  css  js  c++  java
  • 异地备份远程服务器文件脚本,如: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}

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

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

  • 相关阅读:
    XAF 有条件的对象访问权限
    XAF 顯示 UnInplace Report(設置自定義條件顯示報表,不是根據選擇ListView記錄條件顯示報表)
    XAF 如何自定义PivotGrid单元格显示文本?
    XAF 如何布局详细视图上的按钮
    XAF How to set size of a popup detail view
    XAF Delta Replication Module for Devexpress eXpressApp Framework
    XAF 帮助文档翻译 EasyTest Basics(基础)
    XAF 用户双击ListView记录时禁止显示DetailView
    XAF How to enable LayoutView mode in the GridControl in List Views
    XAF 如何实现ListView单元格批量更改?
  • 原文地址:https://www.cnblogs.com/Dy1an/p/12355785.html
Copyright © 2011-2022 走看看