`

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实例代码"指的是使用PHP编写程序,实现对CSV(逗号分隔值)和Excel文件的数据处理。CSV格式是一种简单且通用的数据交换格式,而Excel文件(通常是.xlsx或.xls格式)通常用于更复杂的...

    mysqldump导入导出mysql数据库.docx

    MySQL数据库的管理和维护是IT领域中常见的任务,其中mysqldump和source命令是进行数据库导入导出的关键工具。这两个命令在Linux和Windows环境下都有应用,但使用方式有所不同。 mysqldump是MySQL提供的一个命令行...

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

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

    运行cmd状态下MySQL导入导出.sql文件

    ### MySQL在CMD状态下的导入与导出操作详解 ...以上步骤详细介绍了如何在CMD环境下进行MySQL的导入导出操作,并解决了导入文件大小限制的问题。这些操作对于数据库管理来说是非常实用且重要的技能。

    mysql导入导出数据库文件

    本文将详细介绍两种常见的MySQL数据库文件导入导出的方法:使用图形化辅助工具和使用MySQL自带的命令行方式。 #### 二、使用图形化辅助工具进行MySQL导入导出 **MySQL GUITools v5.0** 是一套强大的可视化工具集,...

    PHP实现的excel数据导入到MySQL数据库的程序包

    本程序包就是针对这一需求,使用PHP语言实现了从Excel文件中读取数据并将其导入到MySQL数据库的功能。这个过程涉及到了PHP的文件操作、数据处理以及数据库交互等多个技术点。 首先,我们要了解PHP中的`PHPExcel`库...

    mysql数据导入导出php版 mysql数据导入导出php版

    总结,使用PHP进行MySQL数据导入导出涉及到的知识点包括:PHP执行shell命令、PDO和MySQLi扩展的使用、`mysqldump`和`mysqlimport`工具、`SELECT INTO OUTFILE`和`LOAD DATA INFILE` SQL语句、数据分批处理、事务管理...

    php 实现从mysql导出excel中

    这篇教程将详细介绍如何使用PHP实现从MySQL数据库导出数据到Excel文件。 首先,我们需要理解基本的流程。这个过程通常包括以下几个步骤: 1. **连接MySQL数据库**:使用PHP的`mysqli_connect`或`PDO`函数建立与...

    MySQL数据导入导出各类型文件

    MySQL 数据导入导出是数据库管理中的重要操作,用于数据备份、迁移或在不同系统间交换数据。本篇文章主要探讨如何使用MySQL命令行和特定软件来导入导出不同类型的文件,如txt、sql和csv。 首先,数据导出可以通过两...

    php导入导出Excel

    本篇文章将深入探讨如何使用PHP实现Excel的导入与导出,以及与MySQL数据库的交互。 首先,我们要知道PHP处理Excel文件主要依赖于第三方库,如PHPExcel、phpspreadsheet等。这些库提供了丰富的API,可以方便地读取、...

    MySQL导入导出数据库文件.pdf

    综上所述,无论是通过图形化工具还是命令行,MySQL都提供了灵活且高效的方式来处理数据库的导入导出。理解并掌握这些方法对于数据库管理和维护至关重要,特别是对于需要定期备份、迁移或恢复数据的场景。了解和熟练...

    MySql数据库导入乱码

    MySql 数据库导入乱码解决方案 在使用 PHPmyadmin 导出 MySql 数据库时,经常会遇到中文乱码的...通过遵循这些步骤,我们可以轻松地解决 MySql 数据库导入中文乱码的问题,并确保我们的数据库数据正确地导出和导入。

    MySQL数据导入导出.pdf

    MySQL 数据导入导出是数据库管理中的重要操作,用于数据迁移、备份、恢复或者在不同环境间同步数据。本文主要介绍两种常见的MySQL数据导入导出方法:`SELECT INTO OUTFILE`语句和`mysqldump`实用程序。 1. **使用 `...

    mysql导入导出.sql文件.pdf

    在进行MySQL数据库的导入导出之前,确保已经正确配置了MySQL的命令行环境。这通常涉及设置系统的环境变量,以便可以在任何位置通过命令行访问MySQL的可执行文件。 ##### 设置步骤: 1. **打开“我的电脑”属性**:...

    CSV 导入mysql 数据库

    CSV(Comma Separated Values)文件是一种常见的数据存储格式,广泛用于数据交换,尤其是在数据库导入导出场景中。本主题将深入探讨如何将CSV文件导入MySQL数据库,这通常涉及到几个关键步骤,包括数据预处理、连接...

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

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

    mysql导入导出

    在进行MySQL数据库的导入与导出操作之前,首先需要确保能够顺利地通过命令行模式访问MySQL。以下是一些必要的配置步骤及基本命令介绍。 **1. 设置MySQL命令行模式** - **环境变量配置**:为了方便使用MySQL命令行...

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

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

    [其他类别]从phpwind论坛分离出来的mysql数据库导入导出程序源码_phpwind_bak.zip

    【标题】:“从phpwind论坛分离出来的mysql数据库导入导出程序源码”是针对PHPWind论坛系统的数据库管理工具,主要用于数据库的备份(导出)和恢复(导入)操作。PHPWind是一款广泛使用的开源社区论坛软件,它基于...

    使用phpexcel类实现excel导入mysql数据库功能(实例代码)

    以下是对`PHPExcel`类实现Excel导入MySQL数据库功能的详细说明。 1. **安装和下载**: 首先,你需要从`phpexcel.codeplex.com`下载`PHPExcel`库。这个库包含了处理Excel文件所需的所有类。下载后,将其解压缩并引入...

Global site tag (gtag.js) - Google Analytics