Blog.L

Blog.L

Docker 定时备份 MySql 并上传至七牛云存储

13
2024-06-10

1. 安装 qshell

下载qshell

查看系统CPU结构

  • Arch命令:直接输出架构方式。aarch64 就是 ARM 架构,x86_64 就是 X86 架构

arch

x86_64

  • 在docker中,x86_64是以AMD64架构显示

docker version

OS/Arch: linux/amd64

用xftp把下载的文件,上传到你想要的目录下。

可执行文件移到 /usr/bin/,后面会用到此路径

tar -xvf qshell-v2.12.0-linux-amd64.tar.gz 

mv qshell /usr/bin/

chmod +x /usr/bin/qshell

查看是否成功

qshell

显示帮助信息,代表安装成功

2. 配置账户

登录七牛云,右上角密钥管理找到 AccessKey/SecretKey

ak、sk:填写密钥管理对应的即可

name:随便写

qshell account <ak> <sk> <name>

查询已配置的用户

qshell user ls

3. 编写shell脚本

创建存放数据和配置目录

mkdir -p ~/backup/sql

mkdir ~/backup/config

编辑备份脚本文件

vi ~/backup/config/backup.sh

添加如下内容

  • /usr/bin/qshell:解压出来qshell安装位置

#!/bin/sh

# container_id:命令docker ps查看

# bucket:七牛云存储里的bucket名称

# directory:bucket下的目录

dbname=数据库名称

user=用户名

password=密码

bakDir=~/backup/sql

container_id=看上面解释

bucket=看上面解释

directory=看上面解释

logFile=~/backup/sql/backup.log

datetimedate +%Y%m%d%H%M%S

keepDay=7

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

echo $(date +"%y-%m-%d %H:%M:%S") >> $logFile

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

cd $bakDir

bakFile=$dbname.$datetime.sql.gz

docker exec -i $container_id mysqldump -u$user -p$password $dbname | gzip > $bakFile

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

echo "$bakDir/$bakFile" >> $logFile

echo "开始上传备份文件至七牛云存储" >> $logFile

/usr/bin/qshell rput $bucket $directory/$bakFile $bakFile --overwrite | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" >> $logFile 2>&1

echo "删除${keepDay}天前的备份文件" >> $logFile

find $bakDir -ctime +$keepDay >> $logFile

find $bakDir -ctime +$keepDay -exec rm -rf {} \;

echo " " >> $logFile

echo " " >> $logFile

rput参数详细用法,可以看 qshell官网

添加权限

chmod +x ~/backup/config/backup.sh

测试脚本

sh ~/backup/config/backup.sh

去七牛云存储bucket下,生成后缀.sql.gz,代表测试成功

4. 定时任务

crontab -e

添加任务,每天凌晨2点执行

00 02 * * * /root/backup/config/backup.sh

添加任务后,必须重启 crond

systemctl restart crond

查看任务

crontab -l

删除所有任务(谨慎操作)

crontab -r