【问题标题】:php exec() - mysqldump creates an empty filephp exec() - mysqldump 创建一个空文件
【发布时间】:2012-08-17 10:44:01
【问题描述】:

我想从数据库创建备份,但我只得到一个空白文件。

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 Server (XAMPP),所以我需要指定路径:

$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql';
  1. 我删除了 -p 和 pass 之间的空格。看起来像:-pMYPASSWORD
  2. " 替换为'

我认为如果您使用的是基于 Linux 的 Web 服务器,则不必指定 mysqldump 的路径。

干杯! :-)

【问题讨论】:

  • 我认为您应该删除 -p 和密码之间的空格。
  • 您是否尝试过回显命令(以确保所有变量都按预期传递)或使用正确的输入手动测试它?

标签: php mysql exec mysqldump


【解决方案1】:

试试这个:

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

-关于权限问题。

【讨论】:

  • 最后的 2>&1 帮助我至少得到了一个错误而不是一个空文件。
【解决方案2】:

这些是参数

-uROOT -pPASSWORD --databases DB --result-file=FILE.SQL

【讨论】:

  • for -u,可以有空格。
【解决方案3】:

如果您查看exec 的手册,输出将转到作为第二个参数的数组。这可能是问题的根源。

【讨论】:

    【解决方案4】:

    您应该删除 -p 和密码之间的空格。

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

    除此之外,你的语法是正确的,所以如果它不能与 -p 修复一起工作,你应该检查参数和生成的命令。

    【讨论】:

      【解决方案5】:

      将变量从引号中取出并删除--opt。

      还要确保您拥有唯一的文件名

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

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

      system($command);

      【讨论】:

        【解决方案6】:

        对于 Mac 用户

        我今天整个晚上都在与这个问题作斗争。愚蠢的错误:需要 chmod 将文件转储到的目录。

        我运行这个解决了这个问题:

        chmod -R 777 your_dump_directory/
        

        【讨论】:

          【解决方案7】:

          试试这个:

          $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;
          }
          

          编辑:您必须授予保存副本的文件夹的权限。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-21
            • 2019-03-19
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多