最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2008年03月20日 21:24:46   作者:  
備份程序一共只有兩個類:數(shù)據(jù)庫備份器(DbBak)和表備份器(TableBak): 這個程序僅僅備份和恢復(fù)數(shù)據(jù),使用方法很簡單,實(shí)例化DbBak,然后調(diào)用bakupDb和restoreDb方法:
1、實(shí)例化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就能實(shí)現(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'); 

相關(guān)文章

  • YII實(shí)現(xiàn)分頁的方法

    YII實(shí)現(xiàn)分頁的方法

    這篇文章主要介紹了YII實(shí)現(xiàn)分頁的方法,需要的朋友可以參考下
    2014-07-07
  • yii2中添加驗(yàn)證碼的實(shí)現(xiàn)方法

    yii2中添加驗(yàn)證碼的實(shí)現(xiàn)方法

    這篇文章主要介紹了yii2中添加驗(yàn)證碼的實(shí)現(xiàn)方法,實(shí)例分析了Yii2中實(shí)現(xiàn)添加驗(yàn)證碼的具體步驟與相關(guān)功能代碼,需要的朋友可以參考下
    2016-01-01
  • yii框架通過控制臺命令創(chuàng)建定時任務(wù)示例

    yii框架通過控制臺命令創(chuàng)建定時任務(wù)示例

    這篇文章主要介紹了yii框架通過控制臺命令創(chuàng)建定時任務(wù)示例,需要的朋友可以參考下
    2014-04-04
  • php單例模式示例分享

    php單例模式示例分享

    這篇文章主要分享了一則php單例模式的示例,設(shè)計模式這些的花點(diǎn)心思基本的是能夠理解的,當(dāng)然要想很好的運(yùn)用到項目上也是需要一定的實(shí)踐,不能只是知道了解,或者說的是很厲害很懂的,一到要實(shí)際操作就不行了,廢話就不多說了
    2015-02-02
  • PHP執(zhí)行shell腳本運(yùn)行程序不產(chǎn)生core文件的方法

    PHP執(zhí)行shell腳本運(yùn)行程序不產(chǎn)生core文件的方法

    下面小編就為大家?guī)硪黄狿HP執(zhí)行shell腳本運(yùn)行程序不產(chǎn)生core文件的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • PHP把JPEG圖片轉(zhuǎn)換成Progressive JPEG的方法

    PHP把JPEG圖片轉(zhuǎn)換成Progressive JPEG的方法

    這篇文章主要介紹了PHP把JPEG圖片轉(zhuǎn)換成Progressive JPEG的方法,本文同時講解了Baseline JPEG和Progressive JPEG的區(qū)別和它們的優(yōu)劣,需要的朋友可以參考下
    2014-06-06
  • PHP生成sitemap.xml地圖函數(shù)

    PHP生成sitemap.xml地圖函數(shù)

    找到一個功能齊全,代碼清晰的PHP生成sitemap的類,大家可以參考一下
    2013-11-11
  • php解析xml 的四種簡單方法(附實(shí)例)

    php解析xml 的四種簡單方法(附實(shí)例)

    下面小編就為大家?guī)硪黄猵hp解析xml 的四種簡單方法(附實(shí)例)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • Symfony2框架學(xué)習(xí)筆記之表單用法詳解

    Symfony2框架學(xué)習(xí)筆記之表單用法詳解

    這篇文章主要介紹了Symfony2框架學(xué)習(xí)筆記之表單用法,結(jié)合實(shí)例形式詳細(xì)分析了Symfony2針對表單的創(chuàng)建,校驗(yàn),提交等各種常用技巧,需要的朋友可以參考下
    2016-03-03
  • PHP實(shí)現(xiàn)圖片批量打包下載功能

    PHP實(shí)現(xiàn)圖片批量打包下載功能

    這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)圖片批量打包下載功能的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03

最新評論

文山县| 名山县| 双柏县| 安阳市| 灌云县| 桐城市| 萨迦县| 土默特左旗| 静宁县| 汉川市| 阆中市| 盐边县| 于田县| 张家界市| 秦皇岛市| 平原县| 彭州市| 宜黄县| 宜州市| 延川县| 报价| 明星| 彭州市| 普兰店市| 望江县| 卓尼县| 云龙县| 延寿县| 文水县| 东丽区| 泊头市| 湟源县| 兴和县| 五家渠市| 蒙山县| 六安市| 隆尧县| 左贡县| 建湖县| 望城县| 辽阳市|