源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

php实现mysql数据库备份类

  • 时间:2021-03-05 03:16 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:php实现mysql数据库备份类
1、实例化DbBak需要告诉它两件事:数据服务器在哪里($connectid)、备份到哪个目录($backupDir):  require_once('DbBak.php');     require_once('TableBak.php');     $connectid = mysql_connect('localhost','root','123456');     $backupDir = 'data';     $DbBak = new DbBak($connectid,$backupDir);     2、然后就可以开始备份数据库了,你不仅能够指定备份那个数据库,而且能详细设置只备份那几个表:    2.1如果你想备份mybbs库中的所有表,只要这样:  $DbBak->backupDb('mybbs');     2.2如果你只想备份mybbs库中的board、face、friendlist表,可以用一个一维数组指定: $DbBak->backupDb('mybbs',array('board','face','friendsite'));     2.3如果只想备份一个表,比如board表: $DbBak->backupDb('mybbs','board');     3,数据恢复: 对于2.1、2.1、2.3三种情况,只要相应的修改下语句,把backupDb换成restoreDb就能实现数据恢复了: $DbBak->restoreDb('mybbs');    SQL代码 $DbBak->restoreDb('mybbs',array('board','face','friendsite'));    PHP代码 $DbBak->restoreDb('mybbs','board');    PHP代码 require_once('TableBak.php');     class DbBak {     var $_mysql_link_id;     var $_dataDir;     var $_tableList;     var $_TableBak;     function DbBak($_mysql_link_id,$dataDir)     {     ( (!is_string($dataDir)) || strlen($dataDir)==0) && die('error:$datadir is not a string');     !is_dir($dataDir) && mkdir($dataDir);     $this->_dataDir = $dataDir;     $this->_mysql_link_id = $_mysql_link_id;     }     function backupDb($dbName,$tableName=null)     {     ( (!is_string($dbName)) || strlen($dbName)==0 ) && die('$dbName must be a string value');     //step1:选择数据库:     mysql_select_db($dbName);     //step2:创建数据库备份目录     $dbDir = $this->_dataDir.DIRECTORY_SEPARATOR.$dbName;     !is_dir($dbDir) && mkdir($dbDir);     //step3:得到数据库所有表名 并开始备份表     $this->_TableBak = new TableBak($this->_mysql_link_id,$dbDir);     if(is_null($tableName)){//backup all table in the db     $this->_backupAllTable($dbName);     return;     }     if(is_string($tableName)){     (strlen($tableName)==0) && die('....');     $this->_backupOneTable($dbName,$tableName);     return;     }     if (is_array($tableName)){     foreach ($tableName as $table){     ( (!is_string($table)) || strlen($table)==0 ) && die('....');     }     $this->_backupSomeTalbe($dbName,$tableName);     return;     }     }     function restoreDb($dbName,$tableName=null){     ( (!is_string($dbName)) || strlen($dbName)==0 ) && die('$dbName must be a string value');     //step1:检查是否存在数据库 并连接:     @mysql_select_db($dbName) || die("the database <b>$dbName</b> dose not exists");     //step2:检查是否存在数据库备份目录     $dbDir = $this->_dataDir.DIRECTORY_SEPARATOR.$dbName;     !is_dir($dbDir) && die("$dbDir not exists");     //step3:start restore     $this->_TableBak = new TableBak($this->_mysql_link_id,$dbDir);     if(is_null($tableName)){//backup all table in the db     $this->_restoreAllTable($dbName);     return;     }     if(is_string($tableName)){     (strlen($tableName)==0) && die('....');     $this->_restoreOneTable($dbName,$tableName);     return;     }     if (is_array($tableName)){     foreach ($tableName as $table){     ( (!is_string($table)) || strlen($table)==0 ) && die('....');     }     $this->_restoreSomeTalbe($dbName,$tableName);     return;     }     }     function _getTableList($dbName)     {     $tableList = array();     $result=mysql_list_tables($dbName,$this->_mysql_link_id);     for ($i = 0; $i < mysql_num_rows($result); $i++){             array_push($tableList,mysql_tablename($result, $i));     }     mysql_free_result($result);     return $tableList;     }     function _backupAllTable($dbName)     {     foreach ($this->_getTableList($dbName) as $tableName){     $this->_TableBak->backupTable($tableName);     }     }     function _backupOneTable($dbName,$tableName)     {     !in_array($tableName,$this->_getTableList($dbName)) && die("指定的表名<b>$tableName</b>在数据库中不存在");     $this->_TableBak->backupTable($tableName);     }     function _backupSomeTalbe($dbName,$TableNameList)     {     foreach ($TableNameList as $tableName){     !in_array($tableName,$this->_getTableList($dbName)) && die("指定的表名<b>$tableName</b>在数据库中不存在");     }     foreach ($TableNameList as $tableName){     $this->_TableBak->backupTable($tableName);     }     }     function _restoreAllTable($dbName)     {     //step1:检查是否存在所有数据表的备份文件 以及是否可写:     foreach ($this->_getTableList($dbName) as $tableName){     $tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR                 . $dbName.DIRECTORY_SEPARATOR                    . $tableName.DIRECTORY_SEPARATOR                 . $tableName.'.sql';     !is_writeable ($tableBakFile) && die("$tableBakFile not exists or unwirteable");     }     //step2:start restore     foreach ($this->_getTableList($dbName) as $tableName){     $tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR                    . $dbName.DIRECTORY_SEPARATOR                    . $tableName.DIRECTORY_SEPARATOR                    . $tableName.'.sql';     $this->_TableBak->restoreTable($tableName,$tableBakFile);     }     }     function _restoreOneTable($dbName,$tableName)     {     //step1:检查是否存在数据表:     !in_array($tableName,$this->_getTableList($dbName)) && die("指定的表名<b>$tableName</b>在数据库中不存在");     //step2:检查是否存在数据表备份文件 以及是否可写:     $tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR              . $dbName.DIRECTORY_SEPARATOR           . $tableName.DIRECTORY_SEPARATOR              . $tableName.'.sql';     !is_writeable ($tableBakFile) && die("$tableBakFile not exists or unwirteable");     //step3:start restore     $this->_TableBak->restoreTable($tableName,$tableBakFile);     }     function _restoreSomeTalbe($dbName,$TableNameList)     {     //step1:检查是否存在数据表:     foreach ($TableNameList as $tableName){     !in_array($tableName,$this->_getTableList($dbName)) && die("指定的表名<b>$tableName</b>在数据库中不存在");     }     //step2:检查是否存在数据表备份文件 以及是否可写:     foreach ($TableNameList as $tableName){     $tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR                    . $dbName.DIRECTORY_SEPARATOR                    . $tableName.DIRECTORY_SEPARATOR                    . $tableName.'.sql';     !is_writeable ($tableBakFile) && die("$tableBakFile not exists or unwirteable");     }     //step3:start restore:     foreach ($TableNameList as $tableName){     $tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR                    . $dbName.DIRECTORY_SEPARATOR                    . $tableName.DIRECTORY_SEPARATOR                    . $tableName.'.sql';     $this->_TableBak->restoreTable($tableName,$tableBakFile);     }     }     }     ?>     
[u]复制代码[/u] 代码如下:
<?php      //只有DbBak才能调用这个类      class TableBak{      var $_mysql_link_id;      var $_dbDir;      //private $_DbManager;      function TableBak($mysql_link_id,$dbDir)      {      $this->_mysql_link_id = $mysql_link_id;      $this->_dbDir = $dbDir;      }      function backupTable($tableName)      {      //step1:创建表的备份目录名:      $tableDir = $this->_dbDir.DIRECTORY_SEPARATOR.$tableName;      !is_dir($tableDir) && mkdir($tableDir);      //step2:开始备份:      $this->_backupTable($tableName,$tableDir);      }      function restoreTable($tableName,$tableBakFile)      {      set_time_limit(0);      $fileArray = @file($tableBakFile) or die("can open file $tableBakFile");      $num = count($fileArray);      mysql_unbuffered_query("DELETE FROM $tableName");      $sql = $fileArray[0];      for ($i=1;$i<$num-1;$i++){       mysql_unbuffered_query($sql.$fileArray[$i]) or (die (mysql_error()));      }      return true;      }      function _getFieldInfo($tableName){      $fieldInfo = array();      $sql="SELECT * FROM $tableName LIMIT 1";      $result = mysql_query($sql,$this->_mysql_link_id);      $num_field=mysql_num_fields($result);      for($i=0;$i<$num_field;$i++){      $field_name=mysql_field_name($result,$i);      $field_type=mysql_field_type($result,$i);      $fieldInfo[$field_name] = $field_type;      }      mysql_free_result($result);      return $fieldInfo;      }      function _quoteRow($fieldInfo,$row){      foreach ($row as $field_name=>$field_value){      $field_value=strval($field_value);      switch($fieldInfo[$field_name]){        case "blob":     $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;          case "string": $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;        case "date":     $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;        case "datetime": $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;        case "time":     $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;        case "unknown":   $row[$field_name] = "'".mysql_escape_string($field_value)."'";break;          case "int":     $row[$field_name] = intval($field_value); break;      case "real":     $row[$field_name] = intval($field_value); break;      case "timestamp":$row[$field_name] = intval($field_value); break;      default:     $row[$field_name] = intval($field_value); break;      }      }      return $row;      }      function _backupTable($tableName,$tableDir)      {      //取得表的字段类型:      $fieldInfo = $this->_getFieldInfo($tableName);      //step1:构造INSERT语句前半部分 并写入文件:      $fields = array_keys($fieldInfo);      $fields = implode(',',$fields);      $sqltext="INSERT INTO $tableName($fields)VALUES \r\n";      $datafile = $tableDir.DIRECTORY_SEPARATOR.$tableName.'.sql';      (!$handle = fopen($datafile,'w')) && die("can not open file <b>$datafile</b>");      (!fwrite($handle, $sqltext))   && die("can not write data to file <b>$datafile</b>");      fclose($handle);      //step2:取得数据 并写入文件:      //取出表资源:      set_time_limit(0);      $sql = "select * from $tableName";      $result = mysql_query($sql,$this->_mysql_link_id);      //打开数据备份文件:$tableName.xml      $datafile = $tableDir.DIRECTORY_SEPARATOR.$tableName.'.sql';      (!$handle = fopen($datafile,'a')) && die("can not open file <b>$datafile</b>");      //逐条取得表记录并写入文件:      while ($row = mysql_fetch_assoc($result)) {      $row = $this->_quoteRow($fieldInfo,$row);       $record='(' . implode(',',$row) . ");\r\n";      (!fwrite($handle, $record))   && die("can not write data to file <b>$datafile</b>");      }      mysql_free_result($result);      //关闭文件:      fclose($handle);      return true;      }      }      ?>   
  备份mybbs数据库: SQL代码 //example 1 backup:     require_once('DbBak.php');     require_once('TableBak.php');     $connectid = mysql_connect('localhost','root','123456');     $backupDir = 'data';     $DbBak = new DbBak($connectid,$backupDir);     $DbBak->backupDb('mybbs');     恢复mybbs数据库: 
[u]复制代码[/u] 代码如下:
require_once('DbBak.php');      require_once('TableBak.php');      $connectid = mysql_connect('localhost','root','123456');      $backupDir = 'data';      $DbBak = new DbBak($connectid,$backupDir);      $DbBak->restoreDb('mybbs'); 
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部