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); } } } ?>
相关文章推荐
- php 通过网页的方式备份和还原mysql数据库
- linux php mysql数据库备份代码
- php代码备份mysql数据库
- Win 2003利用PHP实现mysql数据库自动备份教程
- 最完整代码的用php备份mysql数据库
- PHP-mysql数据库每天自动备份
- 推荐没有虚拟主机的小巧的Mysql数据库备份脚本(PHP)
- php实现备份mysql数据库
- php实现MySQL数据库备份与还原类实例
- PHP备份/还原MySQL数据库的代码
- PHP XML备份Mysql数据库
- php备份和还原mysql数据库
- linux php mysql数据库备份实现代码
- PHP备份/还原MySQL数据库的代码
- PHP备份MYSQL数据库的一个完整方案
- PHP备份mysql数据库
- PHP备份/还原MySQL数据库的代码
- PHP MySQL数据库备份,全部保存为一个sql文件。
- php备份mysql数据库
- 用PHP实现XML备份Mysql数据库