背景
mysql运行在Docker中,计划每天定时备份数据并存储到阿里云OSS。其中用到了定时任务crontab、云存储管理rclone、shell脚本
部署脚本
# 创建目录
mkdir -p ~/task
cd ~/task
# 创建主备份脚本
touch backup_main.sh
# 创建mysql备份脚本,这个后面要传到运行mysql的docker容器
touch mysql_backup.sh
将一下脚本写入到mysql_backup.sh
#!/bin/bash
backUpFolder=/mnt/backup
databaseName=yourDatabaseName
backFileName="${databaseName}.sql"
password='***'
#创建备份目录
if [ ! -d $backUpFolder ];then
mkdir -p $backUpFolder
fi
# 进入备份文件夹
cd $backUpFolder
# 导出 dbName 数据库
mysqldump -h 127.0.0.1 -u${username} -p${password} $databaseName > $backFileName
# 压缩导出的数据
tar zcvf $databaseName.tar.gz $backFileName
# 删除文件夹,只保留备份的压缩包
rm -rf $backFileName
将一下脚本写入到backup_main.sh
#!/bin/bash
# 放在宿主机上,将备份的文件拷贝到宿主机并上传到oss
dateNow=`date +%Y_%m_%d_%H%M`
# 这个fileName与mysql_backup.sh中的databaseName保持一直
fileName=yourDatabaseName
newFileName=${fileName}-$dateNow.tar.gz
backupPath=/mnt/data/dbBackup
# 这是rclone中的OSS路径
# yourRcloneConfigName:rclone中的配置名称
# yourBucketName:OSS中的Bucket名改成
# yourBackupPath:要备份到OSS的路径
rclonePath=yourRcloneConfigName:/yourBucketName/yourBackupPath
#创建备份目录
if [ ! -d $backupPath ];then
mkdir -p $backupPath
fi
/usr/bin/docker exec mysql sh -c 'sh /mnt/mysql_backup.sh' && \
/usr/bin/docker cp mysql:/mnt/backup/${fileName}.tar.gz ${backupPath}
dateNow=`date +%Y_%m_%d_%H%M`
mv ${backupPath}/${fileName}.tar.gz ${backupPath}/${newFileName}
#
/usr/bin/docker exec rclone sh -c "rclone copy /data/${newFileName} ${rclonePath} && rm -rf ${newFileName}"
将脚本mysql_backup.sh
复制到mysql的容器中
docker cp ./mysql_backup.sh mysql:/mnt/
Docker安装Rclone
docker run --restart unless-stopped --name rclone -it \
--privileged=true \
--volume /mnt/data/rclone:/config/rclone \
--volume /mnt/data/dbBackup:/data \
rclone/rclone \
config
执行以上指令后会直接进入rclone的配置,根据命令提示和官方文档完成OSS的配置。
然后在宿主机执行sh ~/task/backup_main.sh
然后去OSS检查备份的文件是否已经上传到云端。
添加到定时
crontab -e
输入一下代码
# 每天4点备份数据库
0 4 * * * sh /root/task/backup_main.sh
完成.
标签:rclone,OSS,Mysql,sh,mysql,backup,备份 From: https://www.cnblogs.com/andyxq/p/17727592.html