Centos Docker MySql 数据库每日备份压缩 定时任务

前言
MySql部署在Docker下,通过每日定时任务,备份并加密压缩,的每日任务脚本
之前写过类似的笔记,年代久远了,再重写一版
正文
先提前安装7Z
# yum 安装7z
yum -y install epel-release
yum -y install p7zip p7zip-plugins
# 测试7z是否安装成功
7za -h
完整备份脚本如下
从docker容器MySql中备份数据库database到本地
必须先正确安装7z才能使用7za命令压缩文件
#!/bin/bash
# MySql 自动备份 加密压缩 本地保留90天
# 数库名
backupDatabase=database
# 存放备份的目录,可以是任意位置,先创建并赋权
baseDir=/root/backup/mysql/
# 最终文件名,使用类似 mysql_database_20201231.sql
fileName=mysql_${backupDatabase}_`date +%Y%m%d`
# 备份数据库 其中mysql代表容器名称,如果没有名称可以用其他方法代替
docker exec mysql mysqldump --databases ${backupDatabase} > ${baseDir}${fileName}.sql
# 加密压缩 使用7zip 密码123456
7za a ${baseDir}${fileName}.7z ${baseDir}${fileName}.sql -p123456
# 删除刚刚备份的sql文件,留下压缩的
rm -f ${baseDir}${fileName}.sql;
# 删除大于90天的备份数据
find ${baseDir} -mtime +90 -name "mysql_${backupDatabase}_*.7z" -exec rm -rf {} \;
这里补充说明一下 7z的命令还有一个用法 具体写法如下
亲测使用正牌7z扩展名,压缩率可以提升30%
缺点是单核CPU下测试 压缩中CPU100% 压缩时间也会加倍
所以这里是一个取舍 CPU被挤占 和 磁盘空间占用 哪个重要了
另外如果文件扩展名是tar.gz貌似密码就不起作用了
如果改了扩展名,那删除大于N天的脚本也要改扩展名
7za a filename.zip filename.sql -ppassword
# 也可以改成
7za a filename.7z filename.sql -ppassword
进入crontab 增加定时任务
crontab -e
# 最后一行加入 即每日凌晨3点 执行脚本 backup.sh
0 3 * * * /root/shell/backup.sh
# 保存并退出
:wq
# 保险起见再重启一下crontab确认生效
systemctl restart crond
END
如果还有归档用的OSS或者公网的FTP
还可以进一步上传压缩文件到外部设备做多重备份
评论