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中截取字符串支持utf-8
Jan 18 PHP
PHP的分页功能
Mar 21 PHP
PHP4中session登录页面的应用
Jul 25 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
Oct 19 PHP
兼容firefox,chrome的网页灰度效果
Aug 08 PHP
php命令行用法入门实例教程
Oct 27 PHP
php中实现用数组妩媚地生成要执行的sql语句
Jul 10 PHP
PHP中addcslashes与stripcslashes函数用法分析
Jan 07 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
php写入文件不覆盖的实例讲解
Sep 17 PHP
php依赖注入知识点详解
Sep 23 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利用事务处理转账问题
2015/04/22 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
jQuery.holdReady()使用方法
2014/05/20 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
详解AngularJS2 Http服务
2017/06/26 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
JavaScript 五大常见函数
2018/03/23 Javascript
个人小程序接入支付解决方案
2019/05/23 Javascript
js实现GIF图片的分解和合成
2019/10/24 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
Javascript异步编程async实现过程详解
2020/04/02 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
Python程序设计入门(3)数组的使用
2014/06/16 Python
跟老齐学Python之使用Python操作数据库(1)
2014/11/25 Python
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
Python程序中的观察者模式结构编写示例
2016/05/27 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
Python定义一个Actor任务
2020/07/29 Python
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
h5封装下拉刷新
2020/08/25 HTML / CSS
实习求职信
2013/12/01 职场文书
打架检讨书100字
2014/01/08 职场文书
党风廉政建设责任书
2014/04/14 职场文书
白血病募捐倡议书
2014/05/14 职场文书
出租车拒载检讨书
2015/01/28 职场文书
会计工作检讨书
2015/02/19 职场文书
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python