PHP 备份MySQL数据库,生成(*.sql)文本文件并提供下载

发布时间:2008年05月05日      浏览次数:1482 次
<?
////////////////////////////////////////////////////////////////////////////////
// 功能:数据库备份 //
// 文件名:mysql_backup.php //
// 执行本文件将备份指定数据库中所有表与数据 //
///////////////////////////////////////////////////////////////////////////////

header("content-type:text/html; charset=UTF-8");
set_time_limit(0);
//----------------------------------------------------------------------------
// 下载已生成的文本文件
// 如果点击了下面的超链接,则运行以下内容,否则跳过
//----------------------------------------------------------------------------
if(trim($_GET["filename"])<>"")
{
      $upload_file = trim($_GET["filename"]);
      //判断下载文件类型是否合法,此限制只能下载以.sql为后缀的文件
      if ( substr(strtolower(trim($_GET["filename"])),-4)<>".sql" ) {
            echo "文件类型不匹配";
            exit;
      }
      if (!file_exists($upload_file)) {
            echo "找不到文件";
      }else{
            $fp = fopen($upload_file,"r");
            Header("Content-type: application/octet-stream");
            Header("Content-Disposition: attachment; filename=" . $upload_file);
            while (!feof ($fp)) {
                  echo fread($fp,50000);
            }      
            fclose($fp);
      }
      exit;
}
//----------------------------------------------------------------------------
$host="localhost"; //主机名
$user="root"; //MYSQL用户名
$password=""; //密码
$dbname="mysql"; //在此指定您要备份的数据库名,请自已修改数据库名

mysql_connect($host,$user,$password);
mysql_select_db($dbname);
//创建数据库备份目录
$path = "MySQL_Backup/";
if(! file_exists($path)){
mkdir($path);
}
//生成文本文件名称
$filename=$path.$dbname."_".date('Ymd').".sql";
$fp = fopen($filename,'w');
echo "<p>正在备份数据库 $dbname 中,请等待...</p>";
$q1=mysql_query("show tables");
while($t=mysql_fetch_array($q1))
{
      $table=$t[0];
      echo $table."<br>";//输出数据库表名称
      $q2=mysql_query("show create table `$table`");
      $sql=mysql_fetch_array($q2);
      $mysql="\r\n"."DROP TABLE IF EXISTS `$table`;\r\n"; //写入判断数据库表是否存在,如果存在则删除的命令
      fwrite($fp, $mysql);
      $mysql="\r\n".$sql['Create Table'].";\r\n\r\n"; //写入生成数据库表
      fwrite($fp, $mysql);
      
      $q3=mysql_query("select * from `$table`"); //循环表,写入表中数据命令
      while($data=mysql_fetch_assoc($q3))
      {
            $keys="";
            $vals="";
            $keys=array_keys($data);
            $keys=array_map('addslashes',$keys);
            $keys=join('`,`',$keys);
            $keys="`".$keys."`";
            $vals=array_values($data);
            $vals=array_map('addslashes',$vals);
            $vals=join("','",$vals);
            $vals="'".$vals."'";
            
            $mysql="insert into `$table`($keys) values($vals);\r\n"; //写入表中数据记录
            fwrite($fp, $mysql);
      }
}
fclose($fp);
echo "<p>数据备份成功,<a href='?filename=$filename' target=_blank>点击这里下载 $filename</a></p>";
?>
文章来源:桂林唯创网络
免责声明:本站相关技术文章信息部分来自网络,目的主要是传播更多信息,如果您认为本站的某些信息侵犯了您的版权,请与我们联系,我们会即时妥善的处理,谢谢合作!