5

我正在尝试为数据库备份创建一个 cron 作业。

这是我到目前为止所拥有的:

mysqldump.sh

 mysqldump -u root -ptest --all-databases | gzip > "/db-backup/backup/backup-$(date)" 2> dump.log

 echo "Finished mysqldump $(date)" >> dump.log

定时任务:

 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
4

1 回答 1

6

您可以检查几件事,但更多信息总是更有帮助(文件的权限和位置、整个文件内容等)。

  1. 为您的环境使用Shebang 语法mysqldump.sh作为文件的开头永远不会有什么坏处。我冒昧地猜测就足够了。#!/bin/bash
  2. 而不是mysqldump -u ....使用绝对路径/usr/bin/mysqldump(或系统上的任何位置)。在任何形式的脚本中,绝对路径总是一个好主意,因为很难说用户是否与您拥有相同的环境。

至于将错误存储在 dump.log 中,我认为您的语法不正确。我相当确定您将错误从管道gzip传输到 dump.log,而不是从mysqldump. 这似乎是一个相当普遍的问题,它的答案是mysqldump $PARAMS | gzip -c dump-$(date)

于 2013-04-06T19:29:30.070 回答