用于备份 MySQL 数据库的 Cron 作业生成了空的转储文件,没有记录任何我能找到的错误

用于备份 MySQL 数据库的 Cron 作业生成了空的转储文件,没有记录任何我能找到的错误

我的网站通过以下方式控制控制面板。我想自动备份我的数据库,然后自动将其下载到我的开发机器上。第一步是设置cron 作业如下

0   3   *   *   4   mysqldump -u username -p password database1 > backup/db_biz_directory.sql
0   4   *   *   4   mysqldump -u username -p password database2 > backup/db_swr_software.sql
  1. 备份文件夹中有两个空文件,时间戳为11日,即上周四。
  2. cPanel 的错误部分没有错误。
  3. 下面什么也没有ETC日志或者变量文件夹。
  4. 我没有收到任何电子邮件,它们已设置完毕并开始工作。
  5. 这些数据库中有表和数据。

由于文件存在,作业显然已运行。我的作业出了什么问题?错误会记录在其他地方吗?

答案1

您可能没有提供足够的信息让我们确定。您可能想告诉我们这是在哪个 cron 文件中(即系统 cron -/etc/crontab例如,有一个带有用户名的额外字段 - 虽然我怀疑这不是问题所在。cron 也有不同的实现 - 知道您使用的是哪个以及哪个操作系统会很有用)

我要做的第一件事就是添加一条路径 - 即更改mysqldump/usr/bin/mysqldump 假设这是系统的正确路径。

不清楚为什么你会期望从这个命令收到电子邮件。你在 crontab 中是否有一个包含类似行的更高命令[email protected]?即使有这个,如果 mysqldump 命令没有产生任何输出,它也不会向你发送电子邮件。

您可能想尝试将其放入批处理文件中,然后调用它以及一些 echo 语句。此外,将 stderr 重定向到 stdout 也很有用(即添加2>&1到批处理文件中命令的末尾)。

您说 etc 日志或 var 文件夹下没有任何内容 - 但是您是否在系统日志(例如)中查找过/var/log/messages来自/var/log/syslogcrontab 的输出?

另外,我想说,从安全角度来看,在命令行上硬编码密码是个坏主意。你应该从命令行中删除用户名和密码,并将其添加到 .my.cnf 中 - 请参阅https://serverfault.com/questions/358903/store-the-mysql-client-password-or-setup-password-less-authentication

答案2

事实证明存在许多问题。

  1. davidgo 的答案解决了一个问题,即在运行 cron 时不存在正常路径信息。因此我需要输入完整路径对于 mysqldump。
  2. mysqldump 不喜欢空间-p 和密码之间
  3. 需要 mysqldump表锁访问,我还没有将其提供给用户。
  4. 正如 davidgo 的回答中提到的那样,错误本身并不会消失(与网络上的许多帖子相反)。
  5. 控制面板帮助说我应该收到一封电子邮件——这显然是不正确的。

我必须等到工作完成,现在一切都很好。

新的命令是

0   3   *   *   4   /usr/bin/mysqldump -u username -ppassword database1 > backup/db_biz_directory.sql

我已经完成了备份多个数据库并通过电子邮件将状态/错误发送给我的脚本。

相关内容