您的位置:首页 > 编程语言 > PHP开发

mysql数据库备份.php

2012-05-28 12:52 218 查看
<?php  class DB_BACKUP   {     private $dbname ; #要进行备份数据库名称      private $isGz=true ; # 是否对数据进行压缩      private $mode = "w"; #写入模式      private $dir  ; #数据存放目录      private $charset="gb2312";  #要跟数据库的存储编码一样      #构造函数      function  __construct($dbname="",  $dir="", $isGz = "",$mode="")     {      $this->dbname = $dbname;       $this->isGz = is_bool($isGz) ?  $isGz : $this->isGz;       $this->dir = $dir ? $dir : $this->dir ;       $this->mode = $mode ? $mode : $this->mode ;      }      #兼容php4     function DB_BACKUP($dbname="" ,$dir="", $isGz = "",$mode="")     {       $this->__construct($dbname="" ,$dir="", $isGz = "",$mode="");      }       function get_table_fields($table)     {      global  $DB ;       $content="DROP TABLE IF EXISTS `{$table}`;\n;n";       $DB->db_connect($this->dbname,$this->charset);       if (!$table) exit() ;       $sql = "show create table {$table}";       $row = $DB->db_fetch_array($sql,MYSQL_NUM);        $content .=$row[0]['Create Table'] ;        return $content;     }       #备份整个数据库函数     function backup_all($dir="")     {      global $DB ;  #全局变量 调用数据库类       global $FILE ;  #全局变量调用数据库类       $DB->db_connect($this->dbname,$this->charset);       $date = date("Y-m-d");       $this->dir = $dir ? $dir : $this->dir ;       $this->dir .= "/{$this->dbname}_{$date}";  #文件夹以日期命名       $FILE->make_dir($this->dir);       $sql = "show tables;";       $row = $DB->db_fetch_array($sql,"",MYSQL_NUM);       if ($DB->db_num_rows($sql)<=0) exit() ;       foreach ( $row as $rw)      {       foreach ($rw as $table)       {        $this->backup_table($table,$dir);        }#end second foreach()       }#end first foreach()      }       #备份数据表函数      function backup_table($table)     {      global $DB ;  #全局变量 调用数据库类      global $FILE ;  #全局变量 调用数据库类      $DB->db_connect($this->dbname,$this->charset);      $field = "{$this->get_table_fields($table)};\n;n";      $content = "";       if (!$table) exit();       $time = time();       $query = "select * from $table";         if ($DB->db_num_rows($query)>0)       {         $fp = $this->isGz ? gzopen("{$this->dir}/{$table}_{$time}.sql.gz",$this->mode) :fopen("{$this->dir}/{$table}_{$time}.sql",$this->mode);          if ($fp)        {         $row2 = $DB->db_fetch_array($query);            foreach ($row2 as $rw2)         {          $content .="INSERT INTO `{$table}` VALUES(";            foreach ($rw2 as $value)          {              $value = mysql_escape_string($value);            $content .="'{$value}'," ;           }           $content = rtrim($content,",");  #去除右边的“,”;           $content.=");\n;n";          }# first foreach()          $content = $field.$content;          $this->isGz ? gzwrite($fp , $content):fwrite($fp ,$content );          $this->isGz ? gzclose($fp ) : fclose($fp);          echo "Backup {$table} Success\n";         }else {          echo "Backup {$table} Failure\n";         }#end gzopen()        }#end db_num_rows()      }      function split_sql($sql)     {      $sqlArray = explode(";n",trim($sql));      return $sqlArray ;      }       #还原数据表数据      function recover_table($filename)     {      global $FILE ;       global $DB ;       $filename = "{$this->dir}/{$filename}";       if (!file_exists($filename)) return false ;         $DB->db_connect($this->dbname,$this->charset);          $content = file_get_contents($filename);      //  $content= iconv("gb2312","utf8",$content);         $sqlArray = $this->split_sql($content);         unset($content);         for ($i= 0 ; $i < count($sqlArray)-1 ; ++ $i  )          {           $result=$DB->db_query($sqlArray[$i]);           if ($result) echo "Insert success!\n";           else  echo "Failure!\n";          }          unset($sqlArray,$result);          return true ;      }       #还原整文件夹的数据      function recover_all($dir="")     {      global $DB ;       global $FILE ;       $DB->db_connect($this->dbname,$this->charset);       $this->dir = $dir ? $dir : $this->dir ;       $fileArray = $FILE->read_dir($dir) ;       foreach ($fileArray as $filename)      {       $this->recover_table($filename);      }      }    }   ?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: