2014-11-05 89 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