通过 shell 备份 mysql 到七牛云并发送钉钉消息

发布: 2020-06-25 21:05:45 标签: 前端开发

一、简介

所有功能通过 shell 实现

  1. 定时备份数据库
  2. 使用 shell 上传七牛云
  3. 上传结果发送钉钉消息

设置定时任务

(1) 打开定时任务

01crontab -e
复制代码

(2)编辑定时任务

01# 每天五点开始备份数据库
020 5 * * * cd /root/backup; bash index.sh
03
复制代码

二、shell 文件介绍

(1)index.sh

关联三个 shellmysql->上传七牛云->上传结果发送钉钉消息,保存日志到 backup.log

01set -e
02
03# 日志文件
04logFile="backup.log"
05
06# 上传文件
07echo "开始数据库备份开始..."
08bash backup.sh|xargs bash upload.sh|xargs bash dingding.sh >> $logFile
09echo "\n" >> $logFile
复制代码

(2)backup.sh

备份数据库 shell

01#!bin/bash
02# 数据库用户名和密码
03username=****
04password=****
05
06# mysql的docker容器ID/名称
07dockerId=****
08
09# 备份文件
10backupFile="`pwd`/mysql_backup/`date +%Y-%m-%dT%H:%M:%S`.sql.gz"
11
12# 创建保存目录
13mkdir -p mysql_backup
14
15# 执行备份任务
16docker exec $dockerId /usr/bin/mysqldump --all-databases -u"$username" -p"$password" | gzip > $backupFile
17
18echo $backupFile
复制代码

(3)upload.sh

用 shell 通过 accesskey/secretkey 获取七牛上传凭证 并上传七牛云

01# 第一个参数为上传文件名字
02file=$1
03if [ -z $file ]; then
04 echo "请指定上传文件!"
05 exit
06fi
07
08# 上传配置
09url=http://upload.qiniup.com #存储区域见 https://developer.qiniu.com/kodo/manual/1671/region-endpoint
10bucket=***
11accesskey=****
12secretkey=***
13
14# 设置过期时间1小时
15deadline=$(echo `date +%s` + 3600| bc )
16
17# 构造JSON格式的上传策略
18putPolicy="{\"scope\":\"$bucket\",\"deadline\":$deadline}"
19
20# 对上传策略进行Base64编码
21encodedPutPolicy=`echo -n "$putPolicy" | base64 | tr "+/" "-_"`
22
23# 使用访问密钥secretkey对Base64上传策略进行HMAC-SHA1签名,并对签名进行Base64编码
24encodedSign=`echo -n "$encodedPutPolicy" | openssl sha1 -hmac $secretkey -binary | base64 | tr "+/" "-_"`
25
26# 拼接token
27uploadToken="$accesskey:$encodedSign:$encodedPutPolicy"
28
29# 使用curl上传
30curl -s -F "file=@$file" -F "key=$file" -F "token=$uploadToken" $url
31
32# 代码来自github:https://github.com/helphi/qiniu
33# 参考
34# https://developer.qiniu.com/kodo/manual/1272/form-upload
复制代码

(4)dingding.sh

利用 shell 发送钉钉消息

01#!bin/bash
02
03# 发送钉钉消息(安全设置使用关键词)
04res=$1
05
06apiUrl="****"
07formatDate=`date "+%Y-%m-%d %H:%M:%S"`
08
09title="mysql备份成功"
10text="### $title\n$res\n\n$formatDate"
11
12msg="{\"msgtype\":\"markdown\",\"markdown\":{\"title\":\"$title\",\"text\":\"$text\"}}"
13
14curl $apiUrl -H "Content-Type:application/json" -d "$msg"
15
复制代码

三、 查看github