Docker容器中备份MySQL数据库并添加到定时任务


Docker容器中备份MySQL数据库

一、创建备份脚本文件 backup_mysql.sh

脚本内容如下:

#!/bin/bash

# 获取当前日期作为备份文件名后缀
suffix=$(date +%Y%m%d%H%M%S)

# 备份数据库名称
database_name="test"
database_password="123456"

# 备份文件保存的目标路径
backup_dir="/cgh/backups"

# 进入 MySQL 容器进行备份
docker exec c_mysql sh -c "mysqldump -u root -p${database_password} ${database_name} > /tmp/${database_name}_${suffix}.sql"

# 将备份文件从容器中拷贝到本地目录
docker cp c_mysql:/tmp/${database_name}_${suffix}.sql "${backup_dir}/${database_name}_${suffix}.sql"

# 清除3天前的备份文件
find "${backup_dir}" -name "${database_name}_*.sql" -type f -mtime +2 -exec rm {} \;

说明:

  1. 首先,脚本获取当前日期,并将其作为备份文件名的后缀,以确保每个备份具有唯一的文件名。
  2. 接下来,指定要备份的数据库名称和密码。在脚本中,数据库名称设置为 "test",密码设置为 "123456"。请根据您的实际情况进行相应的更改。
  3. 然后,定义了备份文件的目标路径。在脚本中,备份目录设置为 "/cgh/backups"。您可以根据需要修改此路径。
  4. 使用 docker exec 命令进入名为 "c_mysql" 的 MySQL 容器,并在容器内部使用 mysqldump 命令备份指定的数据库。备份命令使用了之前定义的数据库名称和密码,并将备份结果输出到 "/tmp" 目录下的文件中。
  5. 最后,使用 docker cp 命令将容器内的备份文件复制到脚本中指定的本地目录中,以完成备份过程。

注意:脚本文件要添加执行权限 chmod +x backup_mysql.sh

二、添加到自动计划任务里

  1. 打开计划任务,可以在终端中输入以下命令来打开:

    打开编辑任务
    crontab -e
    
    查看任务列表
    crontab -l
    
  2. 在文本编辑器中添加一个新行作为备份脚本的定时任务。以下是每天晚上10点运行备份脚本的示例:

    0 22 * * * /bin/bash /cgh/sh/backup_mysql.sh >/dev/null 2>&1
    

    该任务将每天的22:00执行 /cgh/sh/backup_mysql.sh 这个备份脚本,并将所有输出定向到 /dev/null 避免任何日志文件。

    第一列代表分钟,第二列代表小时,第三列代表日期,第四列代表月份,第五列代表星期几。

    例如:5 * * * * 表示每个小时的第5分钟执行一次;*/10 * * * *表示每隔10分钟执行一次