使用PHP脚本:为什么mysqldump不会转储sql文件?
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);
}
?>
好吧,其实我已经解决了这个问题,几天后后,我张贴的问题。不幸的是,我没有足够的声誉发布答案。所以我们走了。
下面是一些需要注意几件事情: -
- 强制使用绝对路径的MySQL转储。
- 尝试使用--opt(MySQL转储的默认选项)。阅读更多here。
- 对于选项,如果使用缩写形式,则不需要有( - )。例如:--p。使用完整表单时使用( - )。例如: - 密码。因此,使用'-p'而不是'--p'(也适用于其他选项)。
- 如果mysqldump在'exec'上不起作用,请尝试'shell_exec'或'system'。
- 尽量避免选项和变量之间有空格。例如:-p $ dbpass
*还要紧张,它涉及到许可系统命令是否可以从php执行或不执行。
我假设你的php允许通过system()执行命令。
你是不是在安全模式下运行,或者,如果你是,safe_mode_exec_dir之包含所有的命令,你需要
我不知道为什么这个'安全模式'可以影响代码,但一些文章指出安全模式为'on'会影响mysqldump。所以,我检查它,它已经处于“关闭”模式..你能详细说明你上面提到的内容吗? – 2014-11-05 06:06:22
如果安全模式关闭,您可以忽略我的回复。我会进一步尝试检查并看看我能否提供帮助。 – Sambhav 2014-11-05 06:38:26
你有任何错误或任何东西?你为什么想要做一个mysqldump?,你知道为了做到这一点,你需要很多权限才能在服务器上打开? – Saikios 2014-11-05 04:53:29
检查系统命令是否可以从php执行的权限。许多时候,系统和执行命令不能在PHP文件中解决权限问题。 – WisdmLabs 2014-11-05 04:55:31
@Saikios没有错误,它根本就没有转储文件。我试过echo $命令,仍然没有错误。对于你的第二个问题,我从我的主管得到了使用php脚本备份数据库的任务。所以我已经试过mysqldump和查询,唯一的成功是mysqldump,两者都在本地运行。当脚本传输到服务器时会发生问题,当然我也已经更改了用户名和密码。 – 2014-11-05 05:00:24