2014-11-05 58 views
1

Hye,我是PHP新手,嘗試使用php腳本使用mysqldump。
我已經嘗試使用命令和轉儲過程是成功的。
情況是,當我嘗試使用本地計算機進行轉儲時,轉儲已成功。
但是當代碼傳輸到服務器時,mysqldump不起作用。我已經嘗試了幾乎與mysqldump主題相關的解決方案,但仍然無效。我希望有人能指導我。 TQ使用PHP腳本:爲什麼mysqldump不會轉儲sql文件?

<?php 

/*----------------------------------------------- 
MYSQLDUMP FOR SERVER 
------------------------------------------*/ 


$dbhost = "*****"; 
$dbuser = "*****"; 
$dbpass = "*****"; 
$dbname = "*****"; 

//set date today 
$today=date("d-m-Y"); 

//set file name 
$filename = "leave_".$today.".sql"; 

//MYSQLDUMP 

//For Server 
$command = sprintf("/usr/bin/mysqldump --opt -h%s -u%s -p%s %s  >/var/www/html/leave/leave/backup/%s", 

//for local 
//$command = sprintf("c:\AppServ\MySQL\bin\mysqldump --opt -h%s -u%s -p%s %s > %s", 

$dbhost, 
$dbuser, 
$dbpass, 
$dbname, 
$filename 
); 
system($command); 



/*------------------------------------------------------------- 
TO SAVE FILE SQL INTO LOCAL 
---------------------------------------------------------------*/ 

$file = "leave_".$today.".sql"; 
if(!$file) 
{ 
    // File doesn't exist, output error 
     die('File not found'); 
} 
else 
{ 
// Set headers to ask user where to save file. 
header('Pragma: anytextexeptno-cache', true); 
header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Cache-Control: private", false); 
header("Content-Type: text/plain"); 
header("Content-Disposition: attachment; filename=$file"); 

// Read the file from disk 
readfile($file); 


} 



?> 
+0

你有任何錯誤或任何東西?你爲什麼想要做一個mysqldump?,你知道爲了做到這一點,你需要很多權限才能在服務器上打開? – Saikios 2014-11-05 04:53:29

+0

檢查系統命令是否可以從php執行的權限。許多時候,系統和執行命令不能在PHP文件中解決權限問題。 – WisdmLabs 2014-11-05 04:55:31

+0

@Saikios沒有錯誤,它根本就沒有轉儲文件。我試過echo $命令,仍然沒有錯誤。對於你的第二個問題,我從我的主管得到了使用php腳本備份數據庫的任務。所以我已經試過mysqldump和查詢,唯一的成功是mysqldump,兩者都在本地運行。當腳本傳輸到服務器時會發生問題,當然我也已經更改了用戶名和密碼。 – 2014-11-05 05:00:24

回答

1

好吧,其實我已經解決了這個問題,幾天後後,我張貼的問題。不幸的是,我沒有足夠的聲譽發佈答案。所以我們走了。

下面是一些需要注意幾件事情: -

  1. 強制使用絕對路徑的MySQL轉儲。
  2. 嘗試使用--opt(MySQL轉儲的默認選項)。閱讀更多here
  3. 對於選項,如果使用縮寫形式,則不需要有( - )。例如:--p。使用完整表單時使用( - )。例如: - 密碼。因此,使用'-p'而不是'--p'(也適用於其他選項)。
  4. 如果mysqldump在'exec'上不起作用,請嘗試'shell_exec'或'system'。
  5. 儘量避免選項和變量之間有空格。例如:-p $ dbpass

*還要緊張,它涉及到許可系統命令是否可以從php執行或不執行。

0

我假設你的php允許通過system()執行命令。

你是不是在安全模式下運行,或者,如果你是,safe_mode_exec_dir之包含所有的命令,你需要

+0

我不知道爲什麼這個'安全模式'可以影響代碼,但一些文章指出安全模式爲'on'會影響mysqldump。所以,我檢查它,它已經處於「關閉」模式..你能詳細說明你上面提到的內容嗎? – 2014-11-05 06:06:22

+0

如果安全模式關閉,您可以忽略我的回覆。我會進一步嘗試檢查並看看我能否提供幫助。 – Sambhav 2014-11-05 06:38:26

相關問題