2012-08-17 127 views
9

我想從數據庫創建一個備份,但我只得到一個空白文件。php exec() - mysqldump創建一個空文件

include('config.php'); 

$command = "mysqldump --opt -h ".$_host." -u ".$_user." -p ".$_pass." ".$_db." > test.sql"; 
exec($command); 

echo "<br />".$command; 

test.sql在.php文件所在的位置創建。

編輯:

注意!我正在使用XAMPP WINDOWS!

解決方案:

因爲我使用的是Windows Web服務器(XAMPP),我需要指定路徑:

$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql'; 
  1. 我刪除了-p之間的空間通行證。它看起來像:-pMYPASSWORD
  2. '

我認爲,如果你使用的是基於Linux的Web服務器,則不必指定mysqldump的路徑替換"

乾杯! :-)

+4

我想你應該刪除-p和密碼之間的空格。 – 2012-08-17 10:46:55

+0

仍然得到一個空白文件。 – 2012-08-17 10:49:55

+2

您是否嘗試過回顯命令(以確保所有變量均按預期方式傳遞)或使用正確的輸入手動測試它?對於-u,你可以有一個空間, – Fluffeh 2012-08-17 10:51:34

回答

0

您應該刪除-p和密碼之間的空格。

--opt在最近的mysql版本中不需要。

除此之外,你的語法是正確的,所以如果它不適用於-p修復,你應該檢查參數和生成的命令。

4

這些是參數

-uroot -Ppassword --databases DB - 結果文件= FILE.SQL

+0

。 – 2012-08-17 10:53:16

+0

test.sql仍然爲0 kb。 – 2012-08-17 10:53:32

0

如果看手冊爲exec的輸出變爲一個數組,是第二個論點。這可能是問題的根源。

0

取出引號中的變量並刪除--opt。

還要確保您有唯一的文件名

$backupfile = $dbname . date("Y-m-d-H-i-s") . '.sql';

$command = "D:\xampp\mysql\bin\mysqldump -u $_user -p$_pass $_db > $backupfile";

system($command);

3

試試這個:關於許可

$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql 2>&1'; 

- 它的問題。

+2

2>&1在最後幫助我至少得到一個錯誤,而不是一個空文件。 – 2015-01-26 21:24:20

0

對於那些在Mac上

我整個晚上爭奪的今天這一問題。愚蠢的錯誤:你需要chmod你正在轉儲文件的目錄。

我跑這裏面解決了該問題:

chmod -R 777 your_dump_directory/ 
0

試試這個:

$DBUSER="user"; 
$DBPASSWD="password"; 
$DATABASE="DBname"; 

$filename = "backup-" . date("d-m-Y") . ".sql"; 

$command = '"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe" '.$DATABASE ." -u".$DBUSER ." -p".$DBPASSWD." > your_web_site/$filename"; 
passthru($command); 
  • 更改路線到您的計算機的mysqldump.exe應用的方向。
  • 尊重命令中的「」。

然後迫使文件的下載:

if (file_exists("your_web_site/".$filename)) { 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename="'.basename($filename).'"'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate'); 
header('Pragma: public'); 
readfile("your_web_site/".$filename); 
exit; 
} 

編輯:你必須給權限,在那裏你留存複印件的文件夾。