如何一键创建MySQL数据库的备份

fmms 13年前

有时候,你的用户要求添加一个选项,导出整个数据库到一个SQL文件。虽然phpMyAdmin,以及Navicat有这个功能,但你的用户想要更简单点怎么办?

以下是如何一键导出MySQL数据库的php代码。

新建一个名为backup.php的文件,复制粘贴以下代码,然后编辑数据库连接设置和mysqldump的路径。有必要的话,你还可以添加一个backup.php超链接到你的程序里:

<A href="backup.php">导出整个数据库</A>

请注意,第一个php代码执行的时候,会导出zip压缩后的sql文件,所以此代码所在文件夹需要可写的权限。
如果你没有写的权限,请使用第二个php代码,缺点是导出的sql文件不会被zip压缩。

此代码需要可写权限:

<?php       $username = "root";    $password = "";    $hostname = "localhost";    $dbname   = "cars";       // if mysqldump is on the system path you do not need to specify the full path   // simply use "mysqldump --add-drop-table ..." in this case   $dumpfname = $dbname . "_" . date("Y-m-d_H-i-s").".sql";   $command = "C:\\xampp\\mysql\\bin\\mysqldump --add-drop-table --host=$hostname       --user=$username ";   if ($password)            $command.= "--password=". $password ." ";    $command.= $dbname;   $command.= " > " . $dumpfname;   system($command);       // zip the dump file   $zipfname = $dbname . "_" . date("Y-m-d_H-i-s").".zip";   $zip = new ZipArchive();   if($zip->open($zipfname,ZIPARCHIVE::CREATE))    {      $zip->addFile($dumpfname,$dumpfname);      $zip->close();   }       // read zip file and send it to standard output   if (file_exists($zipfname)) {       header('Content-Description: File Transfer');       header('Content-Type: application/octet-stream');       header('Content-Disposition: attachment; filename='.basename($zipfname));       flush();       readfile($zipfname);       exit;   }   ?> 

此代码不需要可写权限:

<?php   ob_start();       $username = "root";    $password = "";    $hostname = "localhost";    $dbname   = "cars";       // if mysqldump is on the system path you do not need to specify the full path   // simply use "mysqldump --add-drop-table ..." in this case   $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();       // 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();]]>   ?>

原文链接