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


Posted in PHP onJanuary 08, 2014

由网上搜到,有更改。

文件名: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 strncasecmp字符串比较的小技巧
Jan 04 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
Jan 11 PHP
解析PHP中empty is_null和isset的测试
Jun 29 PHP
php5.5中类级别的常量使用介绍
Oct 02 PHP
php上传文件中文文件名乱码的解决方法
Nov 01 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
php发送邮件的问题详解
Jun 22 PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
Dec 22 PHP
php操作xml并将其插入数据库的实现方法
Sep 08 PHP
php中类和对象:静态属性、静态方法
Apr 09 PHP
php根据命令行参数生成配置文件详解
Mar 15 PHP
PHP修改session_id示例代码
Jan 08 #PHP
让PHP显示Facebook的粉丝数量方法
Jan 08 #PHP
利用浏览器的Javascript控制台调试PHP程序
Jan 08 #PHP
php获取从百度搜索进入网站的关键词的详细代码
Jan 08 #PHP
PHP IE中下载附件问题解决方法
Jan 07 #PHP
迅速确定php多维数组的深度的方法
Jan 07 #PHP
ini_set的用法介绍
Jan 07 #PHP
You might like
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
js打印纸函数代码(递归)
2010/06/18 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
jQuery获取动态生成的元素示例
2014/06/15 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
谈谈JavaScript自定义回调函数
2015/10/18 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
Vue.use源码分析
2017/04/22 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
Java Varargs 可变参数用法详解
2020/01/28 Javascript
python实现windows下文件备份脚本
2018/05/27 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
Python jieba库分词模式实例用法
2021/01/13 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
俄罗斯小米家用电器、电子产品和智能家居商店:Poood.ru
2020/04/03 全球购物
UNIX文件名称有什么规定
2013/03/25 面试题
高中地理教学反思
2014/01/29 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
求职信的正确写法
2014/07/10 职场文书
政协调研汇报材料
2014/08/15 职场文书
学校政风行风评议心得体会
2014/10/21 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
2015年社区工会工作总结
2015/05/26 职场文书
孔子观后感
2015/06/08 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书