找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 74|回复: 0
打印 上一主题 下一主题

php实现mysql数据库备份类

[复制链接]

2560

主题

2560

帖子

7622

积分

论坛元老

Rank: 8Rank: 8

积分
7622
跳转到指定楼层
楼主
发表于 2018-2-14 09:24:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            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('errordatadir 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 $dbName 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 _getTableList($dbName) as $tableName){     
$this->_TableBak->backupTable($tableName);     
}     
}     
function _backupOneTable($dbName,$tableName)     
{     
!in_array($tableName,$this->_getTableList($dbName)) && die("指定的表名$tableName在数据库中不存在");     
$this->_TableBak->backupTable($tableName);     
}     
function _backupSomeTalbe($dbName,$TableNameList)     
{     
foreach ($TableNameList as $tableName){     
!in_array($tableName,$this->_getTableList($dbName)) && die("指定的表名$tableName在数据库中不存在");     
}     
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("指定的表名$tableName在数据库中不存在");     
//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("指定的表名$tableName在数据库中不存在");     
}     
//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] 代码如下:
_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_mysql_link_id);      
$num_field=mysql_num_fields($result);      
for($i=0;$i$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 $datafile");      
(!fwrite($handle, $sqltext))   && die("can not write data to file $datafile");      
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 $datafile");      
//逐条取得表记录并写入文件:      
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 $datafile");      
}      
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');
            
            
您可能感兴趣的文章:
  • php mysql数据库操作类
  • php连接mysql数据库代码
  • PHP备份/还原MySQL数据库的代码
  • 常用的PHP数据库操作方法(MYSQL版)
  • 全新的PDO数据库操作类php版(仅适用Mysql)
  • PHP数据库操作之基于Mysqli的数据库操作类库
  • Php连接及读取和写入mysql数据库的常用代码
  • PHP连接和操作MySQL数据库基础教程
  • 一款简单实用的php操作mysql数据库类
  • php实现MySQL数据库备份与还原类实例
  • PHP实现PDO的mysql数据库操作类
  • PHP基于ORM方式操作MySQL数据库实例
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端