- 浏览: 197222 次
- 性别:
- 来自: 湖南
文章分类
最新评论
之前一直是手工导入导出数据库,在服务器端或者客户端备份还原数据库经常了出错,很不方便,现我写了一个关于php 代码实现 备份还原mysql数据库
<?php class DbOperate { public $db; private $debug = false; public $tbprefix = ''; public function __construct($mysql) { global $db; $this ->db = $mysql; $this -> tbprefix = $tbprefix; } /**查询**/ function getAllTabName() { $sql = "show tables"; $arrs = $this ->db -> query($sql); $tab_arr = array(); while($row =$this ->db -> fetch_array($arrs)){ $tab_arr[] = $row['Tables_in_takoo_db']; } return $tab_arr; } /**备份**/ function bakupData($tb_arr,$start = 0,$sizelimit) { global $sizelimit,$startfrom,$tbid,$rows,$stop; $t_count = count($tb_arr); for($i=0;$i<$t_count;$i++){ $res = $this -> db -> query("SHOW TABLE STATUS LIKE '$tb_arr[$i]'"); $arr = $this -> db -> fetch_array($res); $rows = (int)$arr['Rows']; $limitadd = "LIMIT $start,100000"; $query = $this -> db -> query("SELECT * FROM $tb_arr[$i]");//$limitadd $num_F = mysql_num_fields($query); while (FALSE!=$datadb = mysql_fetch_row($query)) { $start++; $table=$tb_arr[$i]; $bakupdata .= "INSERT INTO $table VALUES("."'".addslashes($datadb[0])."'"; $tempdb=''; for ($j=1;$j<$num_F;$j++) { $tempdb .= ",'".addslashes($datadb[$j])."'"; } $bakupdata .=$tempdb. ");\n"; if ($sizelimit && strlen($bakupdata)>$sizelimit*1000) { break; } } mysql_free_result($query); if($start>=$rows) { $start=0; $rows=0; } $bakupdata .="\n"; if($sizelimit && strlen($bakupdata)>$sizelimit*1000){ $start==0 && $i++; $stop=1; break; } $start=0; } if($stop==1) { $i++; $tbid = $i; $startfrom = $start; $start = 0; } return $bakupdata; } /**备份表**/ public function bakupTable($tb_arr) { $this -> db->query("SET SQL_QUOTE_SHOW_CREATE = 0"); foreach ($tb_arr as $table) { $creattable.= "DROP TABLE IF EXISTS $table;\n"; $res = $this -> db -> query("SHOW CREATE TABLE $table"); $ctable = $this -> db -> fetch_array($res); $creattable .= $ctable['Create Table'].";\n\n"; } $bak = "#\n# Takoo: bakfile\n# Version: 1.1.2\n# Time: ".date('Y-m-d H:i:s')."\n# Type: ".count($tb_arr)." \n# 官方网站:: http://www.takoo.com.cn\n# --------------------------------------------------------\n\n\n"; return $bak.$creattable; } /**还原**/ public function bakInData($file) { global $dbcharset; $sql = file($file); $query=''; $num=0; foreach ($sql as $key => $value) { $value = trim($value); if (!$value || $value[0]=='#') continue; if (eregi("\;$",$value)) { $query .= $value; if (eregi("^CREATE",$query)) { $extra = substr(strrchr($query,')'),1); $tabtype = substr(strchr($extra,'='),1); $tabtype = substr($tabtype, 0, strpos($tabtype,strpos($tabtype,' ') ? ' ' : ';')); $query = str_replace($extra,'',$query); if (version_compare(mysql_get_server_info(), '4.1.0', '>=')) { $extra = $dbcharset ? "ENGINE=$tabtype DEFAULT CHARSET=".$dbcharset.";" : "ENGINE=$tabtype;"; } else { $extra = "TYPE=$tabtype;"; } $query .= $extra; } elseif(eregi("^INSERT",$query)) { $query = 'REPLACE '.substr($query,6); } $this -> db -> query($query); $query=''; } else{ $query.=$value; } } } public function getcreatFile($tb_arr,$sizelimit){ $path = '../data/db_backup'; if(!file_exists($path)){ $this->createDir($path); } $this->create_file($this->bakupTable($tb_arr).$this->bakupData($tb_arr,0,$sizelimit),'../data/db_backup/takoo_'.md5(date('Ymd_His')).'.sql'); } /**读取文件**/ public function getBackupFileInfo() { $filedb = array(); $handle = opendir('../data/db_backup'); while ($file = readdir($handle)) { if (eregi("^takoo_",$file) && eregi("\.sql$",$file)) { $strlen = eregi("^takoo_",$file) ? 16 + strlen("takoo_") : 19; $fp = fopen("../data/db_backup/$file",'rb'); $bakinfo = fread($fp,filesize("../data/db_backup/$file")); fclose($fp); $detail=explode("\n",$bakinfo); $bk['name'] = $file; $bk['num'] = substr($detail[4],1); $bk['version'] = substr($detail[2],1); $bk['time'] = substr($detail[3],1); $bk['pre'] = substr($file,0,$strlen); $filedb[] = $bk; } } return $this -> setFileInfo($filedb); } /**设计文件**/ private function setFileInfo($arr) { $tmp1 = $tmp2 = array(); foreach ($arr as $k => $v) { $tmp1[] = $v['pre']; } $dbf = array_unique($tmp1); sort($dbf); for($i=0,$max=intval(count($dbf));$i<$max;$i++) { $j = 0; foreach ($arr as $a => $b) { if ($j == 0) { $tmp2[$i]['name'] = $dbf[$i].'.sql';//$b['name'] $tmp2[$i]['num'] = $b['num']; $tmp2[$i]['version'] = $b['version']; $tmp2[$i]['time'] = $b['time']; $tmp2[$i]['pre'] = $b['name']; } if ($b['pre'] == $dbf[$i]) { $j += 1; } } } return $tmp2; } /**删除文件**/ public function delBackup($arr) { if (!is_array($arr)) { $file = '../data/db_backup/'.$d['name']; self::delSqlFile($arr); return true; } $farr = $this -> getBackupFileInfo(); foreach ($arr as $k => $v) { self::delSqlFile($v); } } private function delSqlFile($file) { if (!is_file("../data/db_backup/".$file)) { return false; } @chmod("../data/db_backup/".$file, 0777); return @unlink("../data/db_backup/".$file); } public function __destruct() { $this -> db = null; } private function createDir($dir) { $flag = true; $dir = str_replace(array('//','\\','\\\\'),'/',$dir); if (!is_dir($dir)) { $temp = explode('/',$dir); $cur_dir = ''; for($i=0;$i<count($temp);$i++) { $cur_dir .= $temp[$i].'/'; if (!@is_dir($cur_dir)) { if(!@mkdir($cur_dir,0777)) $flag = false; } $flag !== false and @chmod($cur_dir,0777); } } return $flag; } public function create_file($data,$file,$cover="wb",$return = true){//ab追加 WB 覆盖 $file = str_replace("\\",'/',$file); $p = dirname($file); $p = substr($p,-1,1)!='/'?$p.'/':$p; @$this->mkdirs($p); $fp=fopen($file, $cover); fwrite($fp,$data);//="\xEF\xBB\xBF".$text; @flock($fp,2); @fclose($fp); @chmod($file, 0777); if(!file_exists($file))return FALSE; return $return?(filesize($file)?$file:0):FALSE; } private function mkdirs($path, $mode = 0777){ $path = str_replace("\\",'/',$path); $dirs = explode('/',($path=substr($path,-1,1)!='/'?$path.'/':$path)); $pos = strrpos($path, "."); $subamount = $pos === false?0:1; for ($c=0;$c < count($dirs) - $subamount; $c++) { $thispath=""; for ($cc=0; $cc <= $c; $cc++) { $thispath.=$dirs[$cc].'/'; } if (!file_exists($thispath))@mkdir($thispath,$mode); } } } ?>
发表评论
-
php 报表开发
2011-10-29 02:21 4471 什么是报表 报表( 报: 报告 表: 表格 图表) ... -
php使用excel_class.php操作Excel文件
2011-05-11 15:53 2632<?php //header("Cont ... -
信息采集
2011-03-18 13:47 1002php支持多种远程文件复制,拷贝方法,常用有fsockop ... -
正则表达式
2011-03-12 09:37 9711、正则i,s,m,g 这些是模 ... -
PHP 和 AJAX
2011-01-07 09:22 759AJAX 简介 AJAX = Asynchronous ... -
PHP XML
2011-01-06 15:59 942PHP XML PHP XML Expat 解析器 ... -
PHP 数据库
2011-01-06 15:15 891PHP MySQL 简介 MySQL 是最流行的开源数据库服务 ... -
PHP 高级
2011-01-06 13:26 1262PHP Date() PHP 的 date() 函数用于格式化 ... -
PHP 基础
2011-01-06 11:36 922PHP 是一种创建动态交互 ... -
电子邮件开发
2010-12-24 15:19 947<?php //发送邮件的类 class Smt ... -
电子商务网站支付接口应用
2010-12-03 10:32 1262支付宝纯担保 支付宝(接口网站:www.alipay.com ... -
PHP_方法_PHP添加水印方法
2010-10-06 14:38 2566简介摘要:功能:PHP图 ... -
PHP+jQuery上传图片并对已上载的图片进行裁切
2010-09-09 08:37 3015PHP+jQuery上传图片并对已上载的图片进行裁 ... -
Smarty框架安装使用实例
2010-09-04 08:11 1805ThinkPHP是一个性 ... -
PHP通用分页程序
2010-01-09 19:57 1709我在一些PHP论坛上经常看到不少PHP初学者对于PHP分页很头 ... -
php配置安装
2010-01-03 14:04 1388我写过的教程不多,而 ...
相关推荐
PHP导入和导出CSV EXCEL实例代码 写入读取mysql数据库
本项目包含一个带样式的小实例,页面可以直接导入数据,导入的数据存入mysql数据库,也可以导出excel,导出excel文件位于downloads目录下, 需要将较长的样本数据从 Excel 文件导入到 MYSQL 数据库,此项目包含一个 ...
源码,php实现把数据从数据库导出到excel中。
php mysql数据库管理文件(单个文件 代码小 功能强大) phpmysql 管理数据库 非常适合php网站导入导出数据库 mysql数据库优化 等等 是一款强大高效的管理mysql数据库功能的文件
文中介绍了将存放在sql server数据库中的数据全部导入到mysql数据库中的两种方法。第一种是安装mysql ODBC,利用sql server的导出功能,选择mysql数据源,进行数据的直接导出,这种方法很简便,但是针对实际应用有很...
本文适用范围:全面阐述MySQL数据库的各种操作,分虚拟主机和服务器两种情况。 虚拟主机 1、通过PHPMyAdmin的导入导出功能,这个软件一般只支持几兆数据的导出,太大的数据可能会超时。 2、通过程序自带的数据库备份...
大家在使用PHPmyadmin把mysql数据库导出导入的时候都遇到过中文乱码的问题,尤其是网站迁移的过程中,只有把这个中文乱码的问题解决好了,你才能把mysql数据库玩熟玩好。
2 导出到硬盘的 .SQL 文件在导回时,经常出现由于某些单引号的问题引起失败,造成导入失败,只能用 MySQL等应用程序导入了。 我的数据库已经超过10M,所以必须解决这个问题。我的思路: 导出: 用phpmyadmin 保存...
1,建立mysql数据库,把excel_demo.sql导入到你的数据库,采取utf-8编码; 2,导入时候请按照xls/demo.xls的格式导入,在linux系统下 xls目录要有下的权限; 3, 默认只有一条数据,导出至少有一条数据; 4,如果数据...
一个非常简单的利用php来备份mysql数据库的类文件,我们只要简单的在dbmange中配置好连接地址用户名与数据库即可。 1. 数据库备份(导出) 2. 数据库恢复(导入) 分别是主机,用户名,密码,数据库名,数据库编码
一个非常简单的利用php来备份mysql数据库的类文件,我们只要简单的在dbmange中配置好连接地址用户名与数据库即可。 1. 数据库备份(导出) 2. 数据库恢复(导入) 分别是主机,用户名,密码,...
如果是UTF8编码的数据,如我的博客(http://www.zhouliang.name)采用WordPress程序,默认使用UTF8编码,则只能在MySQL 4.1/MySQL 5以上的数据库中导入导出,因为低版本的MySQL不支持UTF8. 6.以上说明仅针对本程序而言,在...
PHP+Mysql导入或导出Excel文件
最近呵呵笑话网的数据库丢了,没办法空间...而提供商提供的phpadminmysql导出数据库又有2m的限制,只能自己写一个数据库备份恢复类了。这是我借鉴网上提供的一种方法,修改了其中的timestamp部分,希望对大家有所帮助。
最新的5.0.X(测试版)已经添加了以前受人诟病的缺失的企业级数据库必备的特性(事务、视图、存储过程、自定义函数、触发器等),具备了这些企业级特性的MYSQL数据库并且与PHP的紧密结合,成为企业级应用的...
在PHP网站开发中,时常遇到Mysql数据库备份或数据库迁移工作,这时Mysql怎么导入导出数据库中的数据就非常关键,Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql...
这次给大家分享的是一款mysql数据库管理工具工具是用php所写,总共只有一个文件,大小只有27KB。是一款十分实用精悍的数据库管理工具。站长必备的数据库管理工具。 使用指导:上传文件到你空间,打开文件页面,输入...
用php,将excel内容导入mysql。代码注释非常详细,需要的下。。。。不懂的可以给我回信