微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php实现mysql数据库备份类

1、实例化DbBak需要告诉它两件事:数据服务器在哪里($connectid)、备份到哪个目录($backupDir):require_once('DbBak.PHP');
require_once('TableBak.PHP');
$connectid=MysqL_connect('localhost','root','123456');
$backupDir='data';
$DbBak=newDbBak($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','friendsite'));
PHP代码
$DbBak->restoreDb('mybbs','board');
PHP代码
require_once('TableBak.PHP');
classDbBak{
var$_MysqL_link_id;
var$_dataDir;
var$_tableList;
var$TableBak; functionDbBak($MysqL_link_id,$dataDir)
{
((!is_string($dataDir))||strlen($dataDir)==0)&&die('error:$datadirisnotastring');
!is_dir($dataDir)&&mkdir($dataDir);
$this->dataDir=$dataDir;
$this->
MysqL_linkid=$MysqL_link_id;
} functionbackupDb($dbname,$tableName=null)
{
((!is_string($dbname))||strlen($dbname)==0)&&die('$dbnamemustbeastringvalue');
//step1:选择数据库
MysqL_select_db($dbname);
//step2:创建数据库备份目录
$dbDir=$this->_dataDir.DIRECTORY_SEParaTOR.$dbname;
!is_dir($dbDir)&&mkdir($dbDir);
//step3:得到数据库所有表名并开始备份表
$this->TableBak=newTableBak($this->MysqL_link_id,$dbDir);
if(is_null($tableName)){//backupalltableinthedb
$this->_backupAllTable($dbname);
return;
}
if(is_string($tableName)){
(strlen($tableName)==0)&&die('....');
$this->_backupOneTable($dbname,$tableName);
return;
}
if(is_array($tableName)){
foreach($tableNameas$table){
((!is_string($table))||strlen($table)==0)&&die('....');
}
$this->_backupSoMetalbe($dbname,$tableName);
return;
}
} functionrestoreDb($dbname,$tableName=null){
((!is_string($dbname))||strlen($dbname)==0)&&die('$dbnamemustbeastringvalue');
//step1:检查是否存在数据库并连接:
@MysqL_select_db($dbname)||die("thedatabase$dbnamedosenotexists");
//step2:检查是否存在数据库备份目录
$dbDir=$this->_dataDir.DIRECTORY_SEParaTOR.$dbname;
!is_dir($dbDir)&&die("$dbDirnotexists");
//step3:startrestore
$this->TableBak=newTableBak($this->MysqL_link_id,$dbDir);
if(is_null($tableName)){//backupalltableinthedb
$this->_restoreAllTable($dbname);
return;
}
if(is_string($tableName)){
(strlen($tableName)==0)&&die('....');
$this->_restoreOneTable($dbname,$tableName);
return;
}
if(is_array($tableName)){
foreach($tableNameas$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("指定的表名$tableName数据库中不存在");
$this->_TableBak->backupTable($tableName);
} function_backupSoMetalbe($dbname,$TableNameList)
{
foreach($TableNameListas$tableName){
!in_array($tableName,$this->_getTableList($dbname))&&die("指定的表名$tableName数据库中不存在");
}
foreach($TableNameListas$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("$tableBakFilenotexistsorunwirteable");
}
//step2:startrestore
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("$tableBakFilenotexistsorunwirteable");
//step3:startrestore
$this->_TableBak->restoreTable($tableName,$tableBakFile);
}
function_restoreSoMetalbe($dbname,$TableNameList)
{
//step1:检查是否存在数据表:
foreach($TableNameListas$tableName){
!in_array($tableName,$this->_getTableList($dbname))&&die("指定的表名$tableName数据库中不存在");
}
//step2:检查是否存在数据表备份文件以及是否可写:
foreach($TableNameListas$tableName){
$tableBakFile=$this->_dataDir.DIRECTORY_SEParaTOR
.$dbname.DIRECTORY_SEParaTOR
.$tableName.DIRECTORY_SEParaTOR
.$tableName.'.sql';
!is_writeable($tableBakFile)&&die("$tableBakFilenotexistsorunwirteable");
}
//step3:startrestore:
foreach($TableNameListas$tableName){
$tableBakFile=$this->_dataDir.DIRECTORY_SEParaTOR
.$dbname.DIRECTORY_SEParaTOR
.$tableName.DIRECTORY_SEParaTOR
.$tableName.'.sql';
$this->_TableBak->restoreTable($tableName,$tableBakFile);
}
}
}
?>
<div class="codetitle"><a style="CURSOR: pointer" data="21427" class="copybut" id="copybut21427" onclick="doCopy('code21427')"> 代码如下:

<div class="codebody" id="code21427">
<?PHP
//只有DbBak才能调用这个类
classtableBak{
var$_MysqL_link_id;
var$_dbDir;
//private$_DbManager;
functionTableBak($MysqL_linkid,$dbDir)
{
$this->
MysqL_link_id=$MysqL_link_id;
$this->_dbDir=$dbDir;
} functionbackupTable($tableName)
{
//step1:创建表的备份目录名:
$tableDir=$this->_dbDir.DIRECTORY_SEParaTOR.$tableName;
!is_dir($tableDir)&&mkdir($tableDir);
//step2:开始备份:
$this->_backupTable($tableName,$tableDir);
} functionrestoreTable($tableName,$tableBakFile)
{
set_time_limit(0);
$fileArray=@file($tableBakFile)ordie("canopenfile$tableBakFile");
$num=count($fileArray);
MysqL_unbuffered_query("DELETEFROM$tableName");
$sql=$fileArray[0];
for($i=1;$i<$num-1;$i++){
MysqL_unbuffered_query($sql.$fileArray[$i])or(die(MysqL_error()));
}
returntrue;
} function_getFieldInfo($tableName){
$fieldInfo=array();
$sql="SELECTFROM$tableNameLIMIT1";
$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($rowas$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="INSERTINTO$tableName($fields)VALUES\r\n";
$datafile=$tableDir.DIRECTORY_SEParaTOR.$tableName.'.sql';
(!$handle=fopen($datafile,'w'))&&die("cannotopenfile$datafile");
(!fwrite($handle,$sqltext))&&die("cannotwritedatatofile$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("cannotopenfile$datafile");
//逐条取得表记录并写入文件
while($row=MysqL_fetch_assoc($result)){
$row=$this->_quoteRow($fieldInfo,$row);
$record='('.implode(',$row).");\r\n";
(!fwrite($handle,$record))&&die("cannotwritedatatofile$datafile");
}
MysqL_free_result($result);
//关闭文件
fclose($handle); returntrue;
} }
?>
备份mybbs数据库sql代码
//example1backup:
require_once('DbBak.PHP');
require_once('TableBak.PHP');
$connectid=MysqL_connect('localhost',$backupDir);
$DbBak->backupDb('mybbs'); 恢复mybbs数据库:<div class="codetitle"><a style="CURSOR: pointer" data="13141" class="copybut" id="copybut13141" onclick="doCopy('code13141')"> 代码如下:
<div class="codebody" id="code13141">
require_once('DbBak.PHP');
require_once('TableBak.PHP');
$connectid=MysqL_connect('localhost',$backupDir);
$DbBak->restoreDb('mybbs');

原文地址:https://www.jb51.cc/php/29774.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐