使用PHP脚本:为什么mysqldump不转储sql文件?

使用PHP脚本:为什么mysqldump不转储sql文件?,php,mysqldump,Php,Mysqldump,Hye,我是PHP新手,尝试使用PHP脚本使用mysqldump。 我已经尝试使用命令,转储过程成功。情况是,当我尝试使用本地计算机转储时,转储成功。但是当代码传输到服务器时,mysqldump不起作用。我几乎尝试过与mysqldump主题相关的解决方案,但仍然不起作用。我希望有人能指导我。TQ <?php /*----------------------------------------------- MYSQLDUMP FOR SERVER --------------------

Hye,我是PHP新手,尝试使用PHP脚本使用mysqldump。
我已经尝试使用命令,转储过程成功。
情况是,当我尝试使用本地计算机转储时,转储成功。
但是当代码传输到服务器时,mysqldump不起作用。我几乎尝试过与mysqldump主题相关的解决方案,但仍然不起作用。我希望有人能指导我。TQ

<?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);


 }



 ?>

我假设您的php允许通过system()执行命令


您没有在安全模式下运行,或者,如果您是,安全模式下的exec_dir包含您需要的所有命令

好的,事实上,在我发布问题几天后,我已经解决了这个问题。不幸的是,我没有足够的声誉来发布答案。所以我们开始吧

以下是一些需要注意的事项:-

  • 必须为MySQL转储使用绝对路径
  • 尝试使用--opt(MySQL转储的默认选项)。阅读更多
  • 对于选项,如果使用缩写形式,则不需要使用(--)。例:p。使用完整形式时使用(--)。例如:密码。因此,请使用'-p'而不是'-p'(也适用于其他选项)
  • 如果mysqldump无法在“exec”上运行,请尝试“shell\u exec”或“system”
  • 尽量避免在选项和变量之间留空格。例:p$dbpass

  • *还要记住,它涉及到是否可以从php执行系统命令的权限

    你有什么错误吗?为什么要执行mysqldump?您知道,要执行此操作,需要在服务器上打开很多权限?请检查权限是否可以从php执行系统命令。很多时候,由于权限问题,system和exec命令在php文件中不起作用。@Saikios没有错误,只是根本没有转储文件。我已尝试回显$command,但仍然没有错误。对于你们的第二个问题,我从我的主管那个里得到了使用php脚本备份数据库的任务。所以我尝试了mysqldump和query,唯一成功的是mysqldump,两者都在本地运行。当脚本传输到服务器时会出现问题,当然我已经更改了用户名和密码。@WisdmLabs我也尝试使用shell_exec()和exec()命令,但问题仍然存在。您要做的不是通过php脚本进行备份,而是通过bash脚本进行备份,但您正在用php屏蔽它,无论如何,看看这个;)我不知道为什么这个“安全模式”会影响代码,但是一些文章说“打开”的安全模式会影响mysqldump。所以,我检查它,它已经处于“关闭”模式。。你能详细说明一下你上面提到的吗?如果安全模式关闭,你可以忽略我的回答。我将进一步检查并看看是否能提供帮助。添加mysqldump命令的完整路径对我来说是一个有效的改变,因为我试图系统化地自动化数据库备份。