为Linux系统添加定时备份Mysql(Docker)指定数据库的方法
引言
使用Mysql的时候遇到需要定时备份数据库的问题,但苦于Mysql自身没有提供直接的工具。
准备工作
- 一台Linux(Centos7为例)服务器。
- 安装Docker服务。
- 安装并启动Mysql容器服务。
安装7z压缩工具(可选)
安装7z的目的主要是用于对数据库备份后的文件的压缩和加密。如果不需要也可以跳过此步骤。
yum -y install epel-release
yum -y install p7zip p7zip-plugins
安装完成后使用以下命令测试时候安装成功
7za -h
编写Shell文件
给出一个备份的范例
#!/bin/bash
# 数据库参数
backupDatabase=<数据库名称>
password=<数据库密码>
# 存放备份的目录,可以是任意位置,先创建并赋权
baseDir=/data/databack/
# 最终文件名,使用类似 mysql_database_20201231.sql
fileName=mysql_${backupDatabase}_`date +%Y%m%d%H%M%S`
# 备份数据库 其中mysql代表容器名称,如果没有名称可以用其他方法代替
docker exec mysql mysqldump -uroot -p${password} ${backupDatabase} > ${baseDir}${fileName}.sql
加密并压缩数据库文件并删除超过90天的备份文件(可选)
如果需要对数据库加密并删除指定天数前的备份,可以在Shell文件中追加以下命令。
# 必须先正确安装7z才能使用7za命令压缩文件
# 加密压缩 使用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 {} \;
在Linux添加定时任务
添加定时任务需要使用到Linux的crontab服务。我们可以通过下列命令来检测并安装这个服务。
# 检查crontab工具是否安装
crontab -l
# 检查crond服务是否启动
service crond status
# 如果未安装服务我们需要进行安装
yum install vixie-cron
yum install crontabs
再确认安装完成后我们使用命令 crontab -e
打开crontab的编辑功能,添加如下示例:
# 定时任务 每日0点备份
# 注意别忘记 sh 命令
0 0 * * * sh /root/databack/dockerMysqlBackup.sh
添加完成后可以使用命令(systemctl restart crond
),重启下crond服务确保服务能正常运行。
crontab格式介绍
参考生成工具 https://tool.lu/crontab/
格式: * * * * * comand
(*以空格或tab隔开)
- 第一个* : 分钟(0--59)
- 第二个* : 小时(0--23)
- 第三个* : 日期(0--31)
- 第四个* : 月份(1--12)
- 第五个* : 星期0--7(0或者7表示星期天)
- comand : 要执行的操作
举例:
- 每晚21:30重启apache: 30 21 * * * service httpd restart
- 每月1、10、22日的4:45重启apache : 45 4 1,10,22 * * service httpd restart
- 每月1到10日的4:45重启apache : 45 4 1-10 * * service httpd restart
- 每隔两分钟重启apache : */2 * * * * service httpd restart 或者 1-59/2 * * * * service httpd restart
- 每晚11点到早上7点间,每隔1小时重启apache : 0 23-7/1 * * * service httpd restart
- 每晚18:00至23:00,每隔30分钟重启apache : 0,30 18-23 * * * service httpd restart 或 0-59/30 18-23 * * * service httpd restart
本文来自博客园,作者:一块白板,转载请注明原文链接:https://www.cnblogs.com/ykbb/p/15923706.html