【问题标题】:MySQLDump via shell script not being executed, why?MySQLDump 通过 shell 脚本没有被执行,为什么?
【发布时间】:2013-08-25 12:26:09
【问题描述】:

大家好,

我相信您在阅读此帮助请求时一切正常。我在 Linux 世界中不是很有经验,但我仍然努力尽快学习。因此,请原谅我任何明显的无知,并尽可能提供帮助。

我正在运行 ClearOS v5.2 Enterprise 服务器(基于 Centos linux 发行版)并且我在 shell 脚本中使用以下命令来备份我的 MySQL 数据库。

mysqldump -u root -pMYPASSWORD --all-databases > /mnt/shares/flexshares/backup/MySQL/mysql-backup-`date +%Y-%m-%d-%H-%M`.sql

我每天凌晨 1:15 使用 cron 作业调用此脚本。现在,我可以在 cron 日志中看到当时执行了作业并调用了脚本,但是命令没有执行(下面的日志条目)。我这样说是因为我没有在 /mnt/shares/flexshares/backup/MySQL 目录中看到正在创建的 sql 文件。

Aug 21 01:15:01 server1 crond[27842]: (root) CMD (/root/my_scripts/backup-mysql.sh)
Aug 22 01:15:01 server1 crond[9031]: (root) CMD (/root/my_scripts/backup-mysql.sh)

奇怪的是,如果我从 CLI 运行相同的命令,它会毫无问题地执行,并且 MySQL 数据库会被转储到目标目录 (/mnt/shares/flexshares/backup/MySQL)。

我遗漏了什么或者我在脚本中包含了什么导致它无法运行?这是我的 shell 脚本 ("backup-mysql.sh"):

#!/bin/bash
# FULL BACKUP OF MySQL DATABASE
mysqldump -u root -pMYPASSWORD --all-databases > /mnt/shares/flexshares/backup/MySQL/mysql-backup-`date +%Y-%m-%d-%H-%M`.sql

非常感谢我能得到的任何帮助,谢谢。

v/r

基斯梅特

【问题讨论】:

  • 您在哪里寻找您的转储文件?他们应该保存在 /mnt/shares/flexshares/backup/MySQL/mysql-backup-date +%Y-%m-%d-%H-%M.sql
  • 一种可能性(?) 问:“/mnt/shares/flexshares/backup”在本地文件系统上,是在自动挂载的远程文件系统上吗?如果它不是本地的,那么在 cron 运行脚本时可能不可用(?)。如果是我,我会验证这一点并运行一个写入具有写入权限的已知文件系统的测试:/tmp
  • @rakib 我已经编辑了问题以显示正确的目标目录。
  • @spencer7593 /mnt/shares/flexshares/backup 位于我自动安装的另一个硬盘上,因此它始终可用。我已经验证,如果我将目标更改为 /root,它在 cron 作业中不起作用,但如果我在 CLI 上手动运行它,它就会起作用。此外,当以 /mnt/shares/flexshares/backup/MySQL 作为目标手动运行时,它也可以工作。
  • @Kismet Agbasi:另一个建议是完全限定 mysqldump 可执行文件的位置,以防该目录不在路径中:/opt/mysql/bin/mysqldump -u root ... 或您的可执行文件所在的任何位置。 (which mysqldump)。

标签: mysql linux bash shell centos


【解决方案1】:

感觉剧本没问题。

请检查您是否获得了足够的执行权限以及您的 cron 条目是否正确。

尝试自己执行脚本,看看数据库文件是否正在生成。

【讨论】:

  • 在这种情况下,罪魁祸首肯定是 cron 条目
【解决方案2】:

我认为您的命令没有从脚本正确执行。你可以试试下面的 -

         #!/bin/sh
         DUMPFILE=mysql-backup-`date +%Y-%m-%d-%H-%M`.sql
         `mysqldump -u root -pMYPASSWORD --all-databases > $DUMPFILE`

【讨论】:

  • 我尝试了您的建议,但没有成功。当然,假设我没有错误地复制和粘贴。整个命令应该在一行上吗?因为我就是这样运行它的。
  • 有两条不同的线路。第一行是 DUMPFILE 变量设置。下一行执行命令。
  • 谢谢,它成功了。我很感激。不幸的是,它在 cron 中不起作用,所以我决定检查文件的权限,发现它没有设置为可执行文件。所以我改变了它并且cron工作。非常感谢。
【解决方案3】:

我非常感谢您的帮助。根据 @Narayan 的评论,问题可能出在 cron 作业上 - 我对 cron 作业进行了更多测试,看看我的问题出在哪里。好吧,不久之后,当我尝试通过执行 ./backup-mysql.sh 直接从 CLI 运行脚本时,访问被拒绝。

这提示我检查脚本文件的权限,具有讽刺意味的是它不可执行。我相信这就是脚本没有从 cron 作业运行的原因。我更改了权限并进行了测试,一切正常。

我想我今天在 linux 世界中的一堂课,总是检查权限!无论如何感谢您的帮助,我真的很感激。

【讨论】:

    猜你喜欢
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    相关资源
    最近更新 更多