mysql docker数据库定时自动备份删除+上传七牛云


1安装qshell

       首先在服务器上要安装qshell工具,选择合适系统的版本进行下载

命令行工具(qshell)_实用工具_对象存储 - 七牛开发者中心 (qiniu.com)

上传/解压到 服务器上将它移动到/usr/bin目录下

$ mv qshell /usr/bin/
$ chmod +x /usr/bin/qshell

执行 qshell 时,如果输出了一大堆帮助信息,说明已安装成功

2配置账号

七牛云申请账号 Access Key (AK) 和 Secret Key(SK).

然后在服务器终端执行

$ qshell account <ak> <sk> <name>

执行完毕后,再运行以下命令,就可以查看所有已配置的用户信息:

$ qshell user ls

3准备运行脚本

此脚本包含,备份本地数据库,备份docker数据库,上传七牛云

#!/bin/bash

# MySQL data backup script
# 数据库批量备份删除多余数据
# Use mysqldump --help to get more details.

user="root"
password="datapassword"    # 数据库用户名&密码
bakDir="/www/mybackup"    #备份路径
execDir="/www/server/mysql/bin"    # 指定数据库执行目录
dbname="django"    # 数据库名
qshellDir="/usr/bin"    # qhell运行目录
logFile="/www/mybackup/mysqlbak.log"    # 日志路径
datetime=$(date +"%Y%m%d%H%M%S")
datetime1=$(date +"%Y%m%d")
keepDay=3
bucketName="qiniu"    # 七牛空间名称
dockerNames="q18quxxxxucv9b"    # docker数据库备份
qnendtime="$(date +%F --date "$keepDay days ago")"    # 七牛n天以前的备份

echo "-------------------------------------------" >> "$logFile"
echo "$(date) $(date +%T)" >> "$logFile"
echo "--------------------------" >> "$logFile"

echo "备份目录不存在,创建[$bakDir]"
mkdir -p "$bakDir"
bakFile="$dbname$datetime.sql"
bakgzip="$bakDir/$bakFile.gz"

echo "开始备份数据库 [$dbname]"
echo "开始备份数据库 [$dbname]" >> "$logFile"

echo "备份[$dbname]数据库" 
# 备份 docker 容器中的数据库
docker exec -i "$dockerNames" mysqldump -u"$user" -p"$password" "$dbname"  2> /dev/null | gzip > "$bakgzip"
# 备份 直接安装在 linux 系统中的数据库
# "$execDir/mysqldump" -u"$user" -p"$password" "$dbname" 2> /dev/null | gzip > "$bakgzip"


echo "数据库 [$dbname] 备份完成"
echo "数据库 [$dbname] 备份完成" >> "$logFile"
echo "$bakgzip" >> "$logFile"

# 上传七牛部份
echo "开始上传备份文件至七牛云存储"
echo "开始上传备份文件至七牛云存储" >> "$logFile"
"$qshellDir/qshell" rput "$bucketName" "database/$dbname/$bakFile.gz" "$bakgzip" true >> "$logFile" 2>&1
echo "上传完成" >> "$logFile"
echo "上传完成"

# 上传七牛后删除本地文件
# rm "$bakgzip"

# 删除七牛n天以前的备份
echo "-------------------------------------------" >> "$logFile"
echo "-------------------------------------------"
echo "开始删除七牛$keepDay天前的备份"
echo "开始删除七牛$keepDay天前的备份" >> "$logFile"
"$qshellDir/qshell" listbucket2 --prefix "database/$dbname/" "$bucketName" --end "$qnendtime" -o "$dbname".list.txt
"$qshellDir/qshell" batchdelete  --force "$bucketName" -i "$dbname".list.txt >> "$logFile"
rm -rf "$dbname".list.txt
echo "删除七牛过期文件成功" >> "$logFile"
echo "删除七牛过期文件成功"

echo "-------------------------------------------" >> "$logFile"
echo "删除$keepDay天前的备份文件"
echo "删除$keepDay天前的备份文件" >> "$logFile"
find "$bakDir" -name "*.sql.gz" -type f -mtime +$keepDay -exec rm {} \; >> "$logFile"

echo " " >> "$logFile"
echo "-------------------------------------------"

脚本说明:

dockerNames :服务器安装有docker并创建容器后,输入dokcer ps 即可以看到 dockerNames

注,此脚本备注单个指定数据库名的数据库 循环遍历备份所有数据库请参看以下链接,本脚本也是跟据以下链接修改

https://blog.csdn.net/weixin_38912950/article/details/132626556

4编辑定时任务

crontab -e


按 Ins 键输入 以下内容:

*/2 * * * * /www/mysqlbak.sh    # 表示每2分钟执行一次

esc 再输入 :wq  回车  退出

关于定时任务详细情参看

https://www.cnblogs.com/KingArmy/p/13096861.html

————————————————

版权声明:本文为CSDN博主「longm龙哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_38912950/article/details/132632082