2012-01-05 259 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