使用mysqldump创建备份

时间:2016-09-06 12:26:59

标签: php mysql

我想备份我的数据库,但它根本不工作。

<?php
ob_start();

$username = "root"; 
$password = ""; 
$hostname = "localhost"; 
$dbname   = "dbmaurhotel";

$command = "C:\\xampp\\mysql\\bin\\mysqldump --add-drop-table -host=$hostname
--user=$username ";
if ($password) 
    $command.= "--password=". $password ." "; 
$command.= $dbname;
system($command);

$dump = ob_get_contents(); 
ob_end_clean();

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($dbname . "_" . 
date("Y-m-d_H-i-s").".sql"));
flush();
echo $dump;
exit();
?>

它下载了一个sql文件,但它不包含我的数据库中的任何内容。有人可以帮助我...谢谢

3 个答案:

答案 0 :(得分:1)

使用ob_XXX代替所有shell_exec()内容,返回所有输出。

$username = "root"; 
$password = ""; 
$hostname = "localhost"; 
$dbname   = "dbmaurhotel";

$command = "C:\\xampp\\mysql\\bin\\mysqldump --add-drop-table -host=$hostname
--user=$username ";
if ($password) 
    $command.= "--password=". $password ." "; 
$command.= $dbname;
$dump = shell_exec($command);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($dbname . "_" . date("Y-m-d_H-i-s").".sql"));
echo $dump;
exit();

答案 1 :(得分:0)

我建议使用<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-bundle-compatible</artifactId> <version>3.1.7</version> <exclusions> <exclusion> <artifactId>spring-asm</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-client</artifactId> <version>3.1.7</version> </dependency> <dependency> <groupId>javax.xml.ws</groupId> <artifactId>jaxws-api</artifactId> <version>2.2.11</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.2.11</version> </dependency> <dependency> <groupId>javax.annotation</groupId> <artifactId>jsr250-api</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-bundle</artifactId> <version>1.19.2</version> </dependency> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-common</artifactId> <version>2.23.2</version> </dependency> 和scheduler / cron来执行它。这是一个蝙蝠版本:

bat/bash script

这样,您运行cd C:\wamp\bin\mysql\mysql5.6.17\bin set dt=%date:~10,4%-%date:~4,2%-%date:~7,2%_%time:~0,2%_%time:~3,2%_%time:~6,2% mysqldump --databases DATABASE_NAME--user=USERNAME --password=PASSWORD --skip-add-drop-table > c:/backups/SOMENAME_%dt%.sql 或Windows预定程序时就会MySQL dump

P.S。相应地更改路径

答案 2 :(得分:0)

正如system() function上的php文档所说(粗体是我的):

  

返回值

     

成功时返回命令输出的最后一行,并返回FALSE   失败。如果您需要执行命令并将命令中的所有数据直接传回而没有任何干扰,请使用passthru()函数。

如文档所示,请改用passthru() function。但是也可以使用$ return_var参数,因为如果事情发生了,它会让你抬头。

但是,请注意备份过程可能会运行很长一段时间,因此不建议使用php来执行它。如果备份由定期运行mysqldump实用程序的操作系统的调度程序执行,那就好多了。