问题
我在crontab中添加了一条计划任务,每天凌晨2点执行MySQL数据库备份。该MySQL是在docker-compose中作为服务运行的。但是,却无法执行数据库备份的脚本,该怎么办?
解决方案
1. 添加计划任务
- 1# 计划任务
- 2$ sudo crontab -e
- 3# 任务表内容
- 40 2 * * * /mnt/mysql/mysql-bak.sh
-
注意事项
- 使用
sudo
来编辑任务表
- 使用
2. 创建备份脚本
/mnt/mysql/mysql-bak.sh
- 1#!/bin/sh
- 2
- 3# 目标文件
- 4Now=$(date +"%d-%m-%Y")
- 5File=/mnt/mysql/data/bakmysql-$Now.sql
- 6
- 7# 执行备份
- 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
- 10# 提示完成
- 11echo "Your database backup successfully completed"
-
注意事项
-
命令:
docker-compose
要使用绝对路径 -
配置文件:
docker-compose.yml
要使用绝对路径 -
命令选项:
-
-T
:从而禁止分配伪终端
- Disable pseudo-tty allocation. By default
docker-compose exec
allocates a TTY
- Disable pseudo-tty allocation. By default
-
-
密码:建议用
单引号
包含起来,因为密码可能会有特殊字符
,导致命令作出错误的解析 -
备份选项:
-
-R
:导出存储过程和自定义函数 -
-E
:导出事件
-
-
结语
注意以上几点,自动备份MySQL数据库无忧矣!
评论: