php将mysql数据库整库导出生成sql文件的具体实现

 更新时间:2014年01月08日 16:06:09   作者:  
下面是php将mysql数据库整库导出生成sql文件的详细代码,希望对大家在用php编程时备份数据有一定帮助
由网上搜到,有更改。

文件名:db_backup.php

源代码如下:
复制代码 代码如下:

<?php
ini_set("max_execution_time", "180");//避免数据量过大,导出不全的情况出现。

/*

程序功能:mysql数据库备份功能
作者:唐小刚
说明:
本程序主要是从mysqladmin中提取出来,并作出一定的调整,希望对大家在用php编程时备份数据有一定帮助.
如果不要备份结构:请屏掉这句:echo get_table_structure($dbname, $table, $crlf).";$crlf$crlf";
如果不要备份内容:请屏掉这句:echo get_table_content($dbname, $table, $crlf);

修改者:何锦盛
修改时间:2009/11/7
修改内容:新增函数get_table_structure,注释掉了函数get_table_def,目的是获得更丰富的建表时的细节(如:ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='商品信息变更信息')
*/

$host="";//数据库地址

$dbname="";//这里配置数据库名

$username="";//用户名

$passw="";//这里配置密码

$filename=date("Y-m-d_H-i-s")."-".$dbname.".sql";
header("Content-disposition:filename=".$filename);//所保存的文件名
header("Content-type:application/octetstream");
header("Pragma:no-cache");
header("Expires:0");

//备份数据
$i = 0;
$crlf="\r\n";
global $dbconn;
$dbconn = mysql_connect($host,$username,$passw]);//数据库主机,用户名,密码
$db = mysql_select_db($dbname,$dbconn);
mysql_query("SET NAMES 'utf8'");
$tables =mysql_list_tables($dbname,$dbconn);
$num_tables = @mysql_numrows($tables);
print "-- filename=".$filename;
while($i < $num_tables)
{
$table=mysql_tablename($tables,$i);
print $crlf;
echo get_table_structure($dbname, $table, $crlf).";$crlf$crlf";
//echo get_table_def($dbname, $table, $crlf).";$crlf$crlf";
echo get_table_content($dbname, $table, $crlf);
$i++;
}

/*新增的获得详细表结构*/
function get_table_structure($db,$table,$crlf)
{
global $drop;

$schema_create = "";
if(!empty($drop)){ $schema_create .= "DROP TABLE IF EXISTS `$table`;$crlf";}
$result =mysql_db_query($db, "SHOW CREATE TABLE $table");
$row=mysql_fetch_array($result);
$schema_create .= $crlf."-- ".$row[0].$crlf;
$schema_create .= $row[1].$crlf;
Return $schema_create;
}

/*
//原来别人的取得数据库结构,但不完整
function get_table_def($db,$table,$crlf)
{
global $drop;

$schema_create = "";
if(!empty($drop))
$schema_create .= "DROP TABLE IF EXISTS `$table`;$crlf";

$schema_create .= "CREATE TABLE `$table` ($crlf";
$result = mysql_db_query($db, "SHOW full FIELDS FROM $table");
while($row = mysql_fetch_array($result))
{
$schema_create .= " `$row[Field]` $row[Type]";

if(isset($row["Default"]) && (!empty($row["Default"]) || $row["Default"] == "0"))
$schema_create .= " DEFAULT '$row[Default]'";
if($row["Null"] != "YES")
$schema_create .= " NOT NULL";
if($row["Extra"] != "")
$schema_create .= " $row[Extra]";
if($row["Comment"] != "")
$schema_create .= " Comment '$row[Comment]'";
$schema_create .= ",$crlf";
}
$schema_create = ereg_replace(",".$crlf."$", "", $schema_create);
$result = mysql_db_query($db, "SHOW KEYS FROM $table");
while($row = mysql_fetch_array($result))
{
$kname=$row['Key_name'];
if(($kname != "PRIMARY") && ($row['Non_unique'] == 0))
$kname="UNIQUE|$kname";
if(!isset($index[$kname]))
$index[$kname] = array();
$index[$kname][] = $row['Column_name'];
}

while(list($x,$columns) = @each($index))
{
$schema_create .= ",$crlf";
if($x == "PRIMARY")
$schema_create .= " PRIMARY KEY (".implode($columns,", ") . ")";
elseif (substr($x,0,6) == "UNIQUE")
$schema_create .= " UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
else
$schema_create .= " KEY $x (" . implode($columns, ", ") . ")";
}

$schema_create .= "$crlf)";
return (stripslashes($schema_create));
}
*/

//获得表内容
function get_table_content($db, $table, $crlf)
{
$schema_create = "";
$temp = "";
$result = mysql_db_query($db, "SELECT * FROM $table");
$i = 0;
while($row = mysql_fetch_row($result))
{
$schema_insert = "INSERT INTO `$table` VALUES (";
for($j=0; $j<mysql_num_fields($result);$j++)
{
if(!isset($row[$j]))
$schema_insert .= " NULL,";
elseif($row[$j] != "")
$schema_insert .= " '".addslashes($row[$j])."',";
else
$schema_insert .= " '',";
}
$schema_insert = ereg_replace(",$", "",$schema_insert);
$schema_insert .= ");$crlf";
$temp = $temp.$schema_insert ;
$i++;
}
return $temp;
}
?>

相关文章

  • php 实现进制相互转换

    php 实现进制相互转换

    最近的项目中需要用到进制转换,这个问题在刚刚接触计算机理论时候,还是很会的,好久不用,居然模糊了……
    2016-04-04
  • PHP校验ISBN码的函数代码

    PHP校验ISBN码的函数代码

    最近在编写一个图书管理程序的时候,需要校验图书ISBN码正确性,查了一些资料,了解了图书ISBN码的构成。
    2011-01-01
  • PHP实现上一篇下一篇的方法实例总结

    PHP实现上一篇下一篇的方法实例总结

    这篇文章主要介绍了PHP实现上一篇下一篇的方法,结合实例形式总结分析了php获取上一篇下一篇文章SQL操作的相关查询技巧,需要的朋友可以参考下
    2016-09-09
  • 学习php设计模式 php实现观察者模式(Observer)

    学习php设计模式 php实现观察者模式(Observer)

    这篇文章主要介绍了php设计模式中的观察者模式,使用php实现观察者模式,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • redis查看连接数及php模拟并发创建redis连接的方法

    redis查看连接数及php模拟并发创建redis连接的方法

    下面小编就为大家带来一篇redis查看连接数及php模拟并发创建redis连接的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • php 随机记录mysql rand()造成CPU 100%的解决办法

    php 随机记录mysql rand()造成CPU 100%的解决办法

    mysql数据库有10几万条数据,使用rand()提取随机10条记录,导致服务器cpu占用居高不下直至死机~
    2010-05-05
  • PHP使用feof()函数读文件的方法

    PHP使用feof()函数读文件的方法

    这篇文章主要介绍了PHP使用feof()函数读文件的方法,以实例形式对比了正确与错误的用法,阐明了feof()函数的使用技巧,需要的朋友可以参考下
    2014-11-11
  • PHP实现返回JSON和XML的类分享

    PHP实现返回JSON和XML的类分享

    这篇文章主要给大家分享了一个使用PHP实现返回JSON和XML的类,非常实用,希望大家能够喜欢
    2015-01-01
  • PHP程序员编程注意事项

    PHP程序员编程注意事项

    PHP程序员最易犯10种错误所以下面的好多都是我们需要注意的地方PHP是个伟大的web开发语言,灵活的语言,但是看到php程序员周而复始的犯的一些错误。我做了下面这个列表,列出了PHP程序员经常犯的10中错误,大多数和安全相关。看看你犯了几种
    2008-04-04
  • PHP生成和获取XML格式数据的方法

    PHP生成和获取XML格式数据的方法

    这篇文章主要介绍了PHP生成和获取XML格式数据的方法,结合实例形式较为详细的分析了PHP操作数据库生成XML及获取XML格式数据的相关技巧,需要的朋友可以参考下
    2016-03-03

最新评论