qshell 下载
tar zxfv <(curl -L https://devtools.qiniu.com/qshell-v2.6.2-linux-386.tar.gz)
chmod +x qshell
sudo ln $PWD/qshell /usr/local/bin/qshell
其他版本可以看以下链接
千牛命令行工具
qshell 配置
# 设置 ak sk 和name
qshell account ak sk name
# 如果ak, sk, name首字母是"-" 需要使用如下的方式添加账号, 这样避免把该项识别成命令行选项
# qshell account -- ak sk name
# 检查一下
qshell user ls
# 输出
Name: XXXX
AccessKey: xxx
SecretKey: xxx
脚本
脚本内容
#!/bin/sh
# mysql data backup script
#
# use mysqldump --help,get more detail.
dbname=dbname
user=user
password=password
bakDir=/data/backup/
logFile=/data/backup/mysqlbak.log
datetime=`date +%Y%m%d%H%M%S`
keepDay=keepDay
Bucket=Bucket
echo "-------------------------------------------" >> $logFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $logFile
echo "--------------------------" >> $logFile
cd $bakDir
bakFile=$dbname.$datetime.sql.gz
# mysqldump -u$user -p$password $dbname | gzip > $bakFile
docker exec mysql /usr/bin/mysqldump -u $user $dbname | gzip > $bakFile
echo "数据库 [$dbname] 备份完成" >> $logFile
echo "$bakDir/$bakFile" >> $logFile
echo "开始上传备份文件至七牛云存储" >> $logFile
qshell rput $Bucket database/$bakFile $bakFile --overwrite | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" >> $logFile 2>&1
qshell expire $Bucket database/$bakFile $keepDay
echo "删除${keepDay}天前的备份文件" >> $logFile
find $bakDir -ctime +$keepDay >> $logFile
find $bakDir -ctime +$keepDay -exec rm -rf {} \;
echo " " >> $logFile
echo " " >> $logFile
配置
其中需要填写的是:
参数 | 说明 |
---|---|
dbname | 数据库名 |
user | 数据库账号 |
password | 数据库密码 |
keepDay | 有限期,天数 |
Bucket | 七牛空间名称 |
bakDir | 备份目录 |
logFile | 备份日志 |
修改内容
脚本在参考1基础上修改的。
- 我用的是docker-mysql,所以导出命令改成docker环境的
- 给千牛云上的备份文件也设置了个有效期,过期后删除,以免空间不足
- qshell rput 覆盖上传的参数应该是 --overwrite,而不是Yes
定时任务
每天2点进行备份
0 2 * * * /data/backup/qbackup.sh