Docker MySql 每日备份 定时任务 home 编辑时间 2021/01/06 ![mysql backup](/api/file/getImage?fileId=5ff825fe16199b501c01ae08) <br><br> ## 前言 <br> MySql部署在Docker下,通过每日定时任务,备份并加密压缩,的每日任务脚本 之前写过类似的笔记,年代久远了,再重写一版 <br><br> ## 正文 <br> 先提前安装7Z ```shell # yum 安装7z yum -y install epel-release yum -y install p7zip p7zip-plugins # 测试7z是否安装成功 7za -h ``` <br> 完整备份脚本如下 从docker容器MySql中备份数据库database到本地 必须先正确安装7z才能使用7za命令压缩文件 ```shell #!/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 {} \; ``` <br> 这里补充说明一下 7z的命令还有一个用法 具体写法如下 亲测使用正牌7z扩展名,压缩率可以提升30% 缺点是单核CPU下测试 压缩中CPU100% 压缩时间也会加倍 所以这里是一个取舍 CPU被挤占 和 磁盘空间占用 哪个重要了 另外如果文件扩展名是tar.gz貌似密码就不起作用了 如果改了扩展名,那删除大于N天的脚本也要改扩展名 ```shell 7za a filename.zip filename.sql -ppassword # 也可以改成 7za a filename.7z filename.sql -ppassword ``` <br> 进入crontab 增加定时任务 ```shell crontab -e # 最后一行加入 即每日凌晨3点 执行脚本 backup.sh 0 3 * * * /root/shell/backup.sh # 保存并退出 :wq # 保险起见再重启一下crontab确认生效 systemctl restart crond ``` ## END 如果还有归档用的OSS或者公网的FTP 还可以进一步上传压缩文件到外部设备做多重备份 送人玫瑰,手留余香 赞赏 Wechat Pay Alipay Linux Ubuntu 20.04 LTS 下安装 nvm nodejs npm 等 ROG 幻14 完美安装Linux Ubuntu LTS 20.04 解决各种问题