require_once('DbBak.php'); require_once('TableBak.php'); $connectid = mysql_connect('localhost','root', " /> 亚洲免费成人网,成人a在线,miya亚洲私人影院在线

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

php實現(xiàn)mysql數(shù)據(jù)庫備份類

1、實例化DbBak需要告訴它兩件事:數(shù)據(jù)服務(wù)器在哪里($connectid)、備份到哪個目錄($backupDir): 

require_once('DbBak.php');    
require_once('TableBak.php');    
$connectid = mysql_connect('localhost','root','123456');    
$backupDir = 'data';    
$DbBak = new DbBak($connectid,$backupDir);    

2、然后就可以開始備份數(shù)據(jù)庫了,你不僅能夠指定備份那個數(shù)據(jù)庫,而且能詳細(xì)設(shè)置只備份那幾個表:
   2.1如果你想備份mybbs庫中的所有表,只要這樣: 

$DbBak->backupDb('mybbs');    

2.2如果你只想備份mybbs庫中的board、face、friendlist表,可以用一個一維數(shù)組指定:

$DbBak->backupDb('mybbs',array('board','face','friendsite'));    

2.3如果只想備份一個表,比如board表:
$DbBak->backupDb('mybbs','board');    
3,數(shù)據(jù)恢復(fù):
對于2.1、2.1、2.3三種情況,只要相應(yīng)的修改下語句,把backupDb換成restoreDb就能實現(xiàn)數(shù)據(jù)恢復(fù)了:

$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:選擇數(shù)據(jù)庫:    
mysql_select_db($dbName);    
//step2:創(chuàng)建數(shù)據(jù)庫備份目錄    
$dbDir = $this->_dataDir.DIRECTORY_SEPARATOR.$dbName;    
!is_dir($dbDir) && mkdir($dbDir);    
//step3:得到數(shù)據(jù)庫所有表名 并開始備份表    
$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:檢查是否存在數(shù)據(jù)庫 并連接:    
@mysql_select_db($dbName) || die("the database <b>$dbName</b> dose not exists");    
//step2:檢查是否存在數(shù)據(jù)庫備份目錄    
$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>在數(shù)據(jù)庫中不存在");    
$this->_TableBak->backupTable($tableName);    
}    

function _backupSomeTalbe($dbName,$TableNameList)    
{    
foreach ($TableNameList as $tableName){    
!in_array($tableName,$this->_getTableList($dbName)) && die("指定的表名<b>$tableName</b>在數(shù)據(jù)庫中不存在");    
}    
foreach ($TableNameList as $tableName){    
$this->_TableBak->backupTable($tableName);    
}    
}    

function _restoreAllTable($dbName)    
{    
//step1:檢查是否存在所有數(shù)據(jù)表的備份文件 以及是否可寫:    
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:檢查是否存在數(shù)據(jù)表:    
!in_array($tableName,$this->_getTableList($dbName)) && die("指定的表名<b>$tableName</b>在數(shù)據(jù)庫中不存在");    
//step2:檢查是否存在數(shù)據(jù)表備份文件 以及是否可寫:    
$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:檢查是否存在數(shù)據(jù)表:    
foreach ($TableNameList as $tableName){    
!in_array($tableName,$this->_getTableList($dbName)) && die("指定的表名<b>$tableName</b>在數(shù)據(jù)庫中不存在");    
}    
//step2:檢查是否存在數(shù)據(jù)表備份文件 以及是否可寫:    
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);    
}    
}    
}    
?>     
復(fù)制代碼 代碼如下:
<?php     
//只有DbBak才能調(diào)用這個類     
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:創(chuàng)建表的備份目錄名:     
$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:構(gòu)造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:取得數(shù)據(jù) 并寫入文件:     
//取出表資源:     
set_time_limit(0);     
$sql = "select * from $tableName";     
$result = mysql_query($sql,$this->_mysql_link_id);     
//打開數(shù)據(jù)備份文件:$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);     
//關(guān)閉文件:     
fclose($handle);     

return true;     
}     

}     
?>   
 

備份mybbs數(shù)據(jù)庫:

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');    

恢復(fù)mybbs數(shù)據(jù)庫: 

復(fù)制代碼 代碼如下:
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技術(shù)php實現(xiàn)mysql數(shù)據(jù)庫備份類,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲国产成人久久笫一页 | 六月丁香婷婷天天在线 | 色哟哟在线资源 | 国产精品第2页 | 亚洲成综合人影院在院播放 | 成人小视频在线播放 | 欧美xxxx在线观看 | 91精品自在拍精选久久 | 日韩天堂在线 | 亚洲日本欧美产综合在线 | 台湾佬自偷自拍情侣在线 | 米奇色网 | 麻豆网页 | 福利一区二区 | 久久久久久88色愉愉 | 99视频精品全部国产盗摄视频 | 亚洲视频入口 | 91精品在线免费 | 无码中文字幕日韩专区 | 国内精品久久久久激情影院 | 色多多污在线观看 | 91国内在线| 日韩亚洲国产综合久久久 | 亚洲国产人成在线观看 | 成 人免费va视频 | 色综合久久88色综合天天 | 国产人成激情视频在线观看 | 国产日韩三级 | 在线观看免费精品国产 | 国产小视频国产精品 | 中文在线不卡 | 久久九九视频 | 亚洲免费中文 | 色月| 国产日韩精品一区二区三区 | 国内精品久久久久久影院老狼 | 激情在线视频 | 色爱区综合激情五月综合色 | 国产午夜亚洲精品不卡福利 | 精品无码一区在线观看 | 免费人成在线视频播放2022 |