2012-01-05 197 views
1

我正在使用mysqldump取得我的mysql数据库的备份,并把它放在cron作业下。我想测试它的成功或失败,并希望它回复cron作业电子邮件中的成功或失败消息,但失败?请帮助我...MySqldump成功或失败测试

什么命令通过?我这样做,但失败:

在我的PHP备份脚本我包括:

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

    exec($testvar); 

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

SCRIPT:

$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; 
+0

这看起来像我一样的shell错误。您可以发布脚本和您通过cron调用它的方式。 – Radix 2012-01-05 15:54:08

+0

@Radix - 先生,我已经发布脚本 – sqlchild 2012-01-05 16:10:12

+0

你sholud发布所有的PHP备份脚本。你发布的这一行不包含mysqldump命令。您应该在同一个exec()php命令中调用dump ant测试。 – danihp 2012-01-05 16:28:40

回答

0

如果您包括在你的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 

希望这会有所帮助!

0

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

php function passthru在第二个参数中返回此值。

3

您正在尝试使用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); 
1

回答了类似的线程,但具有相同的问题。通过PHP抓取mysqldumps的错误消息:mysqldump via PHP