Blog.L

Blog.L

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

129
2023-09-18

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
datetime=`date +%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