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 相关文章推荐
FCKeditor添加自定义按钮
Mar 27 PHP
PHP 程序员应该使用的10个组件
Oct 31 PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
Nov 27 PHP
解析PHP可变函数的经典用法
Jun 20 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 PHP
php+xml编程之SimpleXML的应用实例
Jan 24 PHP
PHP里的单例类写法实例
Jun 25 PHP
php判断当前操作系统类型
Oct 28 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
php中的异常和错误浅析
May 03 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
Jul 15 PHP
Laravel定时任务的每秒执行代码
Oct 22 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 5.0创建图形的巧妙方法
2010/10/12 PHP
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
XP折叠菜单&amp;仿QQ2006菜单
2006/12/16 Javascript
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
如何将网页表格内容导入excel
2014/02/18 Javascript
JavaScript页面模板库handlebars的简单用法
2015/03/02 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
Centos7 中 Node.js安装简单方法
2016/11/02 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
2017/01/16 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
python二分查找算法的递归实现方法
2016/05/12 Python
Python时间和字符串转换操作实例分析
2019/03/16 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
2020/02/21 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
pytorch 移动端部署之helloworld的使用
2020/10/30 Python
python实现三壶谜题的示例详解
2020/11/02 Python
HTML5 Canvas的事件处理介绍
2015/04/24 HTML / CSS
远东集团网络工程师面试题
2014/10/20 面试题
写好求职信第一句话的技巧
2013/10/26 职场文书
公司庆典邀请函范文
2014/01/13 职场文书
舞蹈教师自荐信
2014/01/27 职场文书
模具设计与制造专业自荐书
2014/07/01 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python
Python打包exe时各种异常处理方案总结
2021/05/18 Python
正则表达式基础与常用验证表达式
2022/06/16 Javascript