问题

我在crontab中添加了一条计划任务,每天凌晨2点执行MySQL数据库备份。该MySQL是在docker-compose中作为服务运行的。但是,却无法执行数据库备份的脚本,该怎么办?

解决方案

1. 添加计划任务

  1. 1# 计划任务
  2. 2$ sudo crontab -e
  3. 3# 任务表内容
  4. 40 2 * * * /mnt/mysql/mysql-bak.sh
  • 注意事项

    • 使用sudo来编辑任务表

2. 创建备份脚本

/mnt/mysql/mysql-bak.sh

  1. 1#!/bin/sh
  2. 2
  3. 3# 目标文件
  4. 4Now=$(date +"%d-%m-%Y")
  5. 5File=/mnt/mysql/data/bakmysql-$Now.sql
  6. 6
  7. 7# 执行备份
  8. 8/usr/local/bin/docker-compose -f /mnt/src/my-project/docker-compose.yml exec -T mysql /usr/bin/mysqldump -u root --password='my-password' -R -E 数据库名称 > $File
  9. 9
  10. 10# 提示完成
  11. 11echo "Your database backup successfully completed"
  • 注意事项

    • 命令:docker-compose要使用绝对路径

    • 配置文件:docker-compose.yml要使用绝对路径

    • 命令选项:

      • -T:从而禁止分配伪终端

        • Disable pseudo-tty allocation. By default docker-compose exec allocates a TTY
    • 密码:建议用单引号包含起来,因为密码可能会有特殊字符,导致命令作出错误的解析

    • 备份选项:

      • -R:导出存储过程和自定义函数

      • -E:导出事件

结语

注意以上几点,自动备份MySQL数据库无忧矣!