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的FTP学习(一)
Oct 09 PHP
浅析ThinkPHP的模板输出功能
Jul 01 PHP
ThinkPHP模板替换与系统常量及应用实例教程
Aug 22 PHP
php使用post数组的键值创建同名变量并赋值的方法
Apr 03 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
修复ShopNC使用QQ 互联时提示100010 错误
Nov 08 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
Jan 08 PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
Mar 14 PHP
php封装的smartyBC类完整实例
Oct 19 PHP
PHP生成word文档的三种实现方式
Nov 14 PHP
PHP判断是否是微信打开,浏览器打开的方法
Mar 14 PHP
PHP XML Expat解析器知识点总结
Feb 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
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
php curl常见错误:SSL错误、bool(false)
2011/12/28 PHP
PHP使用CURL获取302跳转后的地址实例
2014/05/04 PHP
PHP采用自定义函数实现遍历目录下所有文件的方法
2014/08/19 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
jQuery 表单验证扩展(三)
2010/10/20 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
浅谈javascript中createElement事件
2014/12/05 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
js指定步长实现单方向匀速运动
2017/07/17 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
js仿360开机效果
2019/12/26 Javascript
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
Python中序列的修改、散列与切片详解
2017/08/27 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
Python datetime包函数简单介绍
2019/08/28 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
Links of London官方网站:英国标志性的珠宝品牌
2017/04/09 全球购物
Johnston & Murphy官网: 约翰斯顿·墨菲牛津总统鞋
2018/01/09 全球购物
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
ktv好的活动方案
2014/08/15 职场文书
2014年乡镇工作总结
2014/11/21 职场文书
九华山导游词
2015/02/03 职场文书
goland 设置project gopath的操作
2021/05/06 Golang