我正在尝试为数据库备份创建一个cron作业。
这是我到目前为止所做的:
mysqldump.sh
mysqldump -u root -ptest --all-databases | gzip > "/db-backup/backup/backup-$(date)" 2> dump.log
echo "Finished mysqldump $(date)" >> dump.log
Cron工作:
32 18 * * * /db-backup/mysqldump.sh
我遇到的问题是作业不通过cron执行,或者当我不在目录中时。
有人可以提供建议。我的路径不正确吗?
另外,我不确定以下行会将错误输出到dump.log:
mysqldump -u root -ptest --all-databases | gzip > "/db-backup/backup/backup-$(date)" 2> dump.log
什么有效:
mysqldump -u root -ptest --all-databases | gzip > "../db-backup/backup/backup-$(date).sql.gz" 2> ../db-backup/dump.log
echo "Finished mysqldump $(date)" >> ../db-backup/dump.log
答案 0 :(得分:6)
您可以检查一些事项,但更多信息总是更有帮助(文件的权限和位置,整个文件内容等)。
mysqldump.sh
文件永远不会有害。我冒昧地猜测#!/bin/bash
就足够了。mysqldump -u ....
使用绝对路径/usr/bin/mysqldump
(或者在系统中的任何位置)。绝对路径在任何形式的脚本中都是一个好主意,因为很难说用户是否拥有与您相同的环境。至于在dump.log中存储错误,我不相信你的语法是正确的。我很确定你将错误从gzip
传递到dump.log,而不是来自mysqldump
的错误。这似乎是fairly common question到达mysqldump $PARAMS | gzip -c dump-$(date)