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

  • A+
所属分类:linux技术
摘要

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


引言
使用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