`

php 代码实现导入导出 mysql数据库

    博客分类:
  • PHP
阅读更多
   之前一直是手工导入导出数据库,在服务器端或者客户端备份还原数据库经常了出错,很不方便,现我写了一个关于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导入和导出CSV EXCEL实例代码 mysql数据库

    PHP导入和导出CSV EXCEL实例代码 写入读取mysql数据库

    php excel导入导出,php导入mysql,mysql 数据导出为excel

    本项目包含一个带样式的小实例,页面可以直接导入数据,导入的数据存入mysql数据库,也可以导出excel,导出excel文件位于downloads目录下, 需要将较长的样本数据从 Excel 文件导入到 MYSQL 数据库,此项目包含一个 ...

    php 实现从mysql导出excel中

    源码,php实现把数据从数据库导出到excel中。

    php mysql数据库管理文件(单个文件 代码小 功能强大)

    php mysql数据库管理文件(单个文件 代码小 功能强大) phpmysql 管理数据库 非常适合php网站导入导出数据库 mysql数据库优化 等等 是一款强大高效的管理mysql数据库功能的文件

    SQL Server数据库导入MySQL数据库体验

    文中介绍了将存放在sql server数据库中的数据全部导入到mysql数据库中的两种方法。第一种是安装mysql ODBC,利用sql server的导出功能,选择mysql数据源,进行数据的直接导出,这种方法很简便,但是针对实际应用有很...

    MySQL数据库如何导入导出(备份还原)

    本文适用范围:全面阐述MySQL数据库的各种操作,分虚拟主机和服务器两种情况。 虚拟主机 1、通过PHPMyAdmin的导入导出功能,这个软件一般只支持几兆数据的导出,太大的数据可能会超时。 2、通过程序自带的数据库备份...

    MySql数据库导入乱码

    大家在使用PHPmyadmin把mysql数据库导出导入的时候都遇到过中文乱码的问题,尤其是网站迁移的过程中,只有把这个中文乱码的问题解决好了,你才能把mysql数据库玩熟玩好。

    从MySQL导入导出大量数据的程序实现方法

    2 导出到硬盘的 .SQL 文件在导回时,经常出现由于某些单引号的问题引起失败,造成导入失败,只能用 MySQL等应用程序导入了。 我的数据库已经超过10M,所以必须解决这个问题。我的思路: 导出: 用phpmyadmin 保存...

    php实现利用phpexcel导入导出数据至excel

    1,建立mysql数据库,把excel_demo.sql导入到你的数据库,采取utf-8编码; 2,导入时候请按照xls/demo.xls的格式导入,在linux系统下 xls目录要有下的权限; 3, 默认只有一条数据,导出至少有一条数据; 4,如果数据...

    php实现MySQL数据库备份、还原类

    一个非常简单的利用php来备份mysql数据库的类文件,我们只要简单的在dbmange中配置好连接地址用户名与数据库即可。 1. 数据库备份(导出) 2. 数据库恢复(导入) 分别是主机,用户名,密码,数据库名,数据库编码

    php实现MySQL数据库备份、还原类.zip

    一个非常简单的利用php来备份mysql数据库的类文件,我们只要简单的在dbmange中配置好连接地址用户名与数据库即可。 1. 数据库备份(导出) 2. 数据库恢复(导入) 分别是主机,用户名,密码,...

    php版mysql大数据库备份和恢复工具

    如果是UTF8编码的数据,如我的博客(http://www.zhouliang.name)采用WordPress程序,默认使用UTF8编码,则只能在MySQL 4.1/MySQL 5以上的数据库中导入导出,因为低版本的MySQL不支持UTF8. 6.以上说明仅针对本程序而言,在...

    PHP+Mysql导入或导出Excel文件

    PHP+Mysql导入或导出Excel文件

    php版mysql数据库备份恢复代码

    最近呵呵笑话网的数据库丢了,没办法空间...而提供商提供的phpadminmysql导出数据库又有2m的限制,只能自己写一个数据库备份恢复类了。这是我借鉴网上提供的一种方法,修改了其中的timestamp部分,希望对大家有所帮助。

    MYSQL数据库管理器 (易语言源代码)

    最新的5.0.X(测试版)已经添加了以前受人诟病的缺失的企业级数据库必备的特性(事务、视图、存储过程、自定义函数、触发器等),具备了这些企业级特性的MYSQL数据库并且与PHP的紧密结合,成为企业级应用的...

    Mysql导入导出工具Mysqldump和Source命令用法详解

    在PHP网站开发中,时常遇到Mysql数据库备份或数据库迁移工作,这时Mysql怎么导入导出数据库中的数据就非常关键,Mysql本身提供了命令行导出工具Mysqldump和Mysql Source导入命令进行SQL数据导入导出工作,通过Mysql...

    在线MySQL管理工具php单文件版 v1.0

    这次给大家分享的是一款mysql数据库管理工具工具是用php所写,总共只有一个文件,大小只有27KB。是一款十分实用精悍的数据库管理工具。站长必备的数据库管理工具。 使用指导:上传文件到你空间,打开文件页面,输入...

    phpexcel PHP导入数据库

    用php,将excel内容导入mysql。代码注释非常详细,需要的下。。。。不懂的可以给我回信

Global site tag (gtag.js) - Google Analytics