2012-08-17 129 views
9

我想从数据库创建一个备份,但我只得到一个空白文件。php exec() - mysqldump创建一个空文件

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服务器(XAMPP),我需要指定路径:

$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql'; 
  1. 我删除了-p之间的空间通行证。它看起来像:-pMYPASSWORD
  2. '

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

干杯! :-)

+4

我想你应该删除-p和密码之间的空格。 – 2012-08-17 10:46:55

+0

仍然得到一个空白文件。 – 2012-08-17 10:49:55

+2

您是否尝试过回显命令(以确保所有变量均按预期方式传递)或使用正确的输入手动测试它?对于-u,你可以有一个空间, – Fluffeh 2012-08-17 10:51:34

回答

0

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

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

除此之外,你的语法是正确的,所以如果它不适用于-p修复,你应该检查参数和生成的命令。

4

这些是参数

-uroot -Ppassword --databases DB - 结果文件= FILE.SQL

+0

。 – 2012-08-17 10:53:16

+0

test.sql仍然为0 kb。 – 2012-08-17 10:53:32

0

如果看手册为exec的输出变为一个数组,是第二个论点。这可能是问题的根源。

0

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

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

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

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

system($command);

3

试试这个:关于许可

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

- 它的问题。

+2

2>&1在最后帮助我至少得到一个错误,而不是一个空文件。 – 2015-01-26 21:24:20

0

对于那些在Mac上

我整个晚上争夺的今天这一问题。愚蠢的错误:你需要chmod你正在转储文件的目录。

我跑这里面解决了该问题:

chmod -R 777 your_dump_directory/ 
0

试试这个:

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

编辑:你必须给权限,在那里你留存复印件的文件夹。