2014-03-02 76 views
2

我正在玩mysql的備份腳本。這是用於工作的一種變體,但自從php4以來我沒有看過它。它返回一個空文件。奇怪的是,如果我去命令行並使用EXACT相同的命令,我會得到我期待的文件。MySQLdump空文件使用PHP但不是命令行?

我捅了一圈互聯網,找不到任何東西......想法?

錯誤代碼?

$db_host='localhost'; 
$db_user='root'; 
$db_pass='root'; 
$db_name='gakkou'; 
$dir='backups'; 
$file_list=scandir($dir); 
if(count($file_list)>10) unlink($dir.'/'.$file_list[2]); //delete old file 
$prefix=date("YmdHi").'_'; 
$command='mysqldump -u'.$db_user.' --password="'.$db_pass.'" --databases '.$db_name.' | gzip > '.$dir.'/'.$prefix.'_backup.sql.gzip'; 
exec($command,$output,$return_val); 

這完美的作品:mysqldump -uroot -proot -hlocalhost gakkou > /webdocs/gakkou/backups/mysql_backup.sql,這是完全一樣的命令php文件執行(除了文件名)。

編輯:更新與任何感興趣的工作代碼。原來這是兩個不同的問題。使用MAMP,我需要指定路徑/Applications/MAMP/Library/bin/mysqldump。然後在生產服務器上,瘋狂的密碼將作品粘上了。

+3

是mysqldump中PHP使用的shell的路徑嗎?嘗試一個完整的'/ usr/bin/mysqldump'或者絕對路徑在你的系統上。另外,如果失敗,exec($ command,$ output,$ return_val); var_dump($ output,$ return_val)'可能會有一些調試輸出對追蹤問題有用。 –

+0

謝謝,馬克。絕對路徑在我的開發機器上似乎已經完成了,但它仍然在真正的交易中失敗。用法:mysqldump [OPTIONS] database [tables]「[1] => string(65)」或mysqldump [選項] - 數據庫[選項] DB1 [DB2 DB3 ...]「[2] => string(52)」或者mysqldump [OPTIONS] --all-databases [OPTIONS]「[3] => string(38)」如需更多選項,請使用mysqldump - 幫助「} int(127)' – jonlink

+0

這可能是一個權限問題。 – vicLam

回答

2

好的。最終弄明白了。我的超級愚蠢的密碼與mysqldump搞混了,因爲它裏面有一個「&」。不必更改密碼。我只是將密碼括在括號內:--password="'.$db_pass.'"現在它按預期工作。浪費了很多時間...... @MarcB,非常感謝你的幫助。不知道如何回報錯誤,那絕對是最大的障礙。

+0

@shi,現在評論回答! :) – jonlink

+0

你救了我的一天:) :)。長期以來一直在苦苦思索這是語法錯誤 – Simone

相關問題