为Linux系统添加定时备份Mysql(Docker)指定数据库的方法

引言
使用Mysql的时候遇到需要定时备份数据库的问题,但苦于Mysql自身没有提供直接的工具。

准备工作

  1. 一台Linux(Centos7为例)服务器。
  2. 安装Docker服务。
  3. 安装并启动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 : 要执行的操作

举例:

  1. 每晚21:30重启apache: 30 21 * * * service httpd restart
  2. 每月1、10、22日的4:45重启apache : 45 4 1,10,22 * * service httpd restart
  3. 每月1到10日的4:45重启apache : 45 4 1-10 * * service httpd restart
  4. 每隔两分钟重启apache : */2 * * * * service httpd restart 或者 1-59/2 * * * * service httpd restart
  5. 每晚11点到早上7点间,每隔1小时重启apache : 0 23-7/1 * * * service httpd restart
  6. 每晚18:00至23:00,每隔30分钟重启apache : 0,30 18-23 * * * service httpd restart 或 0-59/30 18-23 * * * service httpd restart
posted @ 2022-02-22 16:22  一块白板  阅读(579)  评论(0编辑  收藏  举报