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输出XML到页面的3种方法详解
Jun 06 PHP
PHP将XML转数组过程详解
Nov 13 PHP
php的declare控制符和ticks教程(附示例)
Mar 21 PHP
php中的curl_multi系列函数使用例子
Jul 29 PHP
php检查字符串中是否包含7位GSM字符的方法
Mar 17 PHP
PHP生成唯一订单号的方法汇总
Apr 16 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
May 09 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
php 常用的系统函数
Feb 07 PHP
laravel实现上传图片的两种方式小结
Oct 12 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
Mar 09 PHP
PHP7 标准库修改
Mar 09 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
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
php URL跳转代码 减少外链
2011/06/25 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
7个JS基础知识总结
2014/03/05 Javascript
JQuery下拉框应用示例介绍
2014/04/23 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
微信小程序 数组(增,删,改,查)等操作实例详解
2017/01/05 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
2017/09/13 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
Python统计单词出现的次数
2018/04/04 Python
Python3爬楼梯算法示例
2019/03/04 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
python树的同构学习笔记
2019/09/14 Python
django中嵌套的try-except实例
2020/05/21 Python
英国顶级珠宝品牌之家:John Greed
2018/06/09 全球购物
局域网定义和特性
2016/01/23 面试题
中青班党性分析材料
2014/02/16 职场文书
教师党员公开承诺书
2014/03/25 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
2015年出纳个人工作总结
2015/04/02 职场文书
2015年美容师个人工作总结
2015/10/14 职场文书
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python
Python基于Tkinter开发一个爬取B站直播弹幕的工具
2021/05/06 Python
react合成事件与原生事件的相关理解
2021/05/13 Javascript
微信小程序结合ThinkPHP5授权登陆后获取手机号
2021/11/23 PHP