【问题标题】:MySqldump success or failure testMySqldump 成功或失败测试
【发布时间】:2012-01-05 14:45:56
【问题描述】:

我正在使用 mysqldump 来备份我的 mysql 数据库并将其置于 cron 作业下。我想测试它的成功或失败,并希望它在 cron 作业电子邮件中回显成功或失败消息但失败了?请帮帮我...

要传递什么命令?我这样做了,但失败了:

在我的 php 备份脚本中,我包括:

   $testvar = '
            if [ "$?" -eq 0 ]
then
        echo "Success"
        else
        echo "Mysqldump encountered a problem look in database.err for information"
        fi
            ';

    exec($testvar);

我的服务器说:文件意外结束

脚本:

 $creatBackup = 'mysqldump -uabc -p password  mydb > myfile '.       
        'if [ "$?" -eq 0 ]; then
        eho "Success"    

 else  echo "Mysqldump encountered a problem"
fi
    ';



$BackupMessage = exec($creatBackup);

echo $BackupMessage;

【问题讨论】:

  • 这在我看来就像一个 shell 错误。您能否发布脚本以及您通过 cron 调用它的方式。
  • @Radix - 先生,我已经发布了脚本
  • 你应该发布所有的php备份脚本。您发布的这一行不包括 mysqldump 命令。您应该在同一个 exec() php 命令中调用 dump ant 测试。
  • 假设您正在通过 cron 运行 php 脚本,您是否在文件顶部包含了带有 php 可执行文件路径的 hash bang?另外,我注意到您将 mysql 用户放在 -u 旁边,并在 -p 和密码之间放置一个空格 - 它应该是相反的,'mysqldump -u abc -ppassword。

标签: php mysql mysqldump


【解决方案1】:

您正在尝试使用exec 运行 bash 脚本内容。这是不正确的; exec 用于运行命令或脚本文件,而不是 shell 脚本。

我看到了两种解决方法:

1) 将脚本的内容保存到 bash 文件并使用 exec 运行它:

/var/www/scripts/script.sh:

#!/bin/bash
mysqldump -uabc -p password  mydb > myfile
if [ "$?" -eq 0 ]; then
    echo "Success"    
else
    echo "Mysqldump encountered a problem"
fi

PHP:

$creatBackup = '/var/www/scripts/script.sh';
$BackupMessage = exec($creatBackup);
echo $BackupMessage;

2)另一种方法是不仅捕获脚本输出,还捕获标准错误(检查第三个exec parameter):

$creatBackup = 'mysqldump -uabc -p password  mydb > myfile';
exec($creatBackup, $output, $returnVar);
var_dump($output, $returnVar);

【讨论】:

    【解决方案2】:

    在类似的帖子中回答,但问题相同。通过 PHP 抓取 mysqldumps 的错误信息:mysqldump via PHP

    【讨论】:

      【解决方案3】:

      如果您在 php 备份脚本中包含引用的代码,则您错误地调用了需要引用外部程序的“exec”函数。 '$testvar' 变量的内容似乎是 shell 脚本(sh 或 bash),而不是外部脚本名称(和文件路径)。

      以下 shell 脚本将运行 mysqldump 命令,并且可以通过 cron 执行,以向您提供数据库转储成功或失败的电子邮件通知。您需要调整您的 PHP 脚本以实际为 mysqldump 创建备份文件。

      #!/bin/sh
      if /usr/local/mysql/bin/mysqldump -u root -pyourpassword yourdatabasename 
      then
          echo 'Success'
      else
          echo 'Mysqldump encountered a problem look in database.err for information'
      fi
      

      希望这会有所帮助!

      【讨论】:

        【解决方案4】:

        我认为 mysqldump 的退出代码会对你有所帮助。它会在成功时返回 0,在失败时返回任何其他值。

        php 函数 passthru 在第二个参数中返回这个值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-12
          • 2015-06-24
          • 2019-08-26
          • 1970-01-01
          • 1970-01-01
          • 2016-03-05
          • 2015-11-19
          • 2016-09-05
          相关资源
          最近更新 更多