【问题标题】:Backup of Mysql database on button click in php在 php 中单击按钮时备份 Mysql 数据库
【发布时间】:2016-10-09 20:35:59
【问题描述】:

我正在尝试使用以下代码对按钮单击进行备份,每次单击时我都会得到空数据库。我尝试了所有文章,但结果都是一样的。谁能帮我解决这个问题。

 <?php
 ob_start();

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

 $command = "D:\\..\\wamp64\\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();

// send dump file to the output
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();
?>

【问题讨论】:

  • 你需要转储到一个文件,然后把它放到downland

标签: php mysql backup database-backups mysql-backup


【解决方案1】:

我本来打算检查你的代码,但我想我不妨给你一个我之前从我的一个网站制作的代码,因为它与你的要求相同。我可以一目了然地告诉您,您的数据库在点击时清空的原因是因为您使用--add-drop-table 将数据库放入您的 exec 命令中:

How to drop and re-populate mysql databases?

这是从我的一个后端管理页面站点中提取的代码,用于在需要时通过浏览器进行随机 MySQL 转储和备份。如果妥善保护,它非常简单但极其有效。使用单选按钮设置表单以进行下载或备份,然后从 cmdline 执行本地 mysqldump。备份将输出是否成功,通过测试查看文件是否实际备份,下载将下载文件,该文件使用 PHP 站点here 中的示例几乎放在一起。我已经对其进行了一些调整,以便您可以将其添加到您自己的项目中

   <?php 


$username = "root";
$password = "root";
$host = "localhost";
$dbname = "new";
$path = "/Applications/MAMP/htdocs/html/test123.sql";
$backup = exec('/Applications/MAMP/Library/bin/mysqldump --user=' . $username . ' --password='. $password .' --host=' . $host . ' ' . $dbname . ' > ' . $path . '');

if (isset($_POST['backup'])) {

        if (file_exists($path)) {

            echo "Backup Success";
            echo "<br>";

        } else {

            echo "Backup failed!";
            echo "<br>";
            echo "Backup of " . $dbname . " does not exist in " . $path;

        }

}

if (isset($_POST['download'])) {

    if (file_exists($path)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($path).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($path)); //Whoops...Forgot to change variable!
    readfile($path); //Whoops...Forgot to change variable!
    exit;
} else {

    echo "File does not exist!";

}


}

?>


<!DOCTYPE html>
<html>
<head>
<title>Backup Page</title>
</head>
<body>

        <form method="post">

            <input type="radio" name="backup"> Backup <br>
            <input type="radio" name="download"> Download <br>
            <input type="submit" value="MySQL Backup">

        </form>

</body>
</html>

【讨论】:

  • 嗨.. @kitson88 ...同样的问题..我可以下载并进行备份,并且还会显示成功的味精。但是文件是空的..我正在使用 wamp 服务器..因此我更改了 $path 和 $backup 的路径..你能帮忙吗..?
  • @DhruviMistry 抱歉,我刚刚更新了代码以使其正常工作,基本上我忘了更新内容长度和readfile() 上的变量(请参阅 cmets),所以它现在工作完美。如果您还有其他问题,请告诉我。
  • $path = "/Applications/MAMP/htdocs/html/test123.sql"; $backup = exec('/Applications/MAMP/Library/bin/mysqldump --user=' . $username . ' --password='. $password .' --host=' . $host . ' ' . $dbname . ' > ' . $path . '');我在这两点上感到困惑..你能澄清一下..或分享任何相关链接..吗?
  • Path: 是文件的存储位置,$backup 运行运行 MySQLdump 的函数 exec。如果您直接浏览到路径中的文件,该文件在那里吗?是这样,删除再运行。
猜你喜欢
  • 1970-01-01
  • 2016-06-22
  • 2011-11-10
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多