首页 > 数据库技术 > 详细

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

时间:2020-02-24 12:34:27      阅读:68      评论:0      收藏:0      [点我收藏+]

事件背景

 

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

本文备份原理:

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/\n/\\r\\r/g;ta" /tmp/download.txt
DINGDING_CONTENT=$(cat /tmp/download.txt)
echo $DINGDING_CONTENT
SendMessageToDingding ${DINGDING_SUBJECT} ${DINGDING_CONTENT}

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

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

技术分享图片

 

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

原文:https://www.cnblogs.com/Dy1an/p/12355785.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!