php実現mysqlデータベースバックアップ類


1、实例化DbBakは、データサーバはどこにありますか?どのディレクトリにバックアップしますか? require_オンス('DbBak.php')     require_once('TableBak.php')     $connectid = mysqlconnect('local host','root','123456')     $backudir = 'data;     $DbBak = new DbBak($connectid、$backudir);     2、データベースのバックアップを開始します。そのデータベースのバックアップを指定するだけでなく、そのいくつかのテーブルだけを詳細に設定できます。   2.1 mbbbsライブラリのすべての表をバックアップしたいなら、それだけでいいです。  $DbBak->backudb('mybbbbbbs')     2.2 mybbbsライブラリのboard、face、friendlist表をバックアップしたいなら、1次元配列で指定できます。     2.3もし一つの表だけをバックアップしたいなら、例えば、board表:$DbBak->backudb('mybbbbbbs'、'board')     3,データの回復:2.1、2.1、2.3の3つの状況に対して、対応する修正文があれば、backupDbをrestoreDbに両替すれば、データの回復ができます。    SQLコード$DbBak->restoreDb('mybbbbbbbbbs'、arard'、'face'、'friends ite');    PHPコード$DbBak->restoreDb('mbbbbbbbbbbbbbbbs');    PHPコードrequire_once('TableBak.php')     クラス DbBak {     var $_mysqllink_id;     var $_dataDir;     var $_テーブルリスト     var $_TableBak;     機能 DbBak($u)mysqllink_id,$dataDir)     {     ( (!is_string($dataDir) || streen($dataDir)==0) && ディエ('error:$datadir) is not a. ストリング     !is_dir($dataDir) && mkdir($dataDir)     $this->_dataDir = $dataDir;     $this->_mysqllink_id。 = $_mysqllink_id;     }     機能 backuDb($dbName、$table Name=null)     {     ( (!is_string($dbName) || streen($dbName)==0 ) && die('$dbName) must be a. ストリングス value;;     //ステップ1:データベースを選択:     mysqlselect_.db($dbName);     //Step 2:データベースバックアップディレクトリの作成     $dbDir = $this->_dataDir.DIRECTORY_SEPARTOR.$dbName;     !is_dir($dbDir) && mkdir($dbDir)     //Step 3:データベースのすべてのテーブル名を取得します。 バックアップテーブルを開始します     $this->_TableBak = new TableBak($this->>_mysqllink_id,$dbDir);     if(is_)null($table Name){/backup all. テーブル in the db     $this->_backupAllTable($dbName);     return;     }     if(is_)string($table Name){     (strelen($table Name)==0) && die('.')     $this->_backuplone Table($dbName、$table Name);     return;     }     if (is_array($table Name){     foreach ($テーブルName as $テーブル){     ( (!is_string($table) || streen($table)==0 ) && die('.')     }     $this->_backup SomeTalbe($dbName、$table Name);     return;     }     }     機能 restoreDb($dbName、$table Name=null){     ( (!is_string($dbName) || streen($dbName)==0 ) && die('$dbName) must be a. ストリングス value;;     //Step 1:データベースがあるかどうかを確認します。 接続:     @mysqlselect_.db($dbName) || die(the) database $dbName dose not exists");     //Step 2:データベースのバックアップディレクトリがあるか確認します。     $dbDir = $this->_dataDir.DIRECTORY_SEPARTOR.$dbName;     !is_dir($dbDir) && die("$dbDir" not exists");     //Step 3:start ストール     $this->_TableBak = new TableBak($this->>_mysqllink_id,$dbDir);     if(is_)null($table Name){/backup all. テーブル in the db     $this->_restore AllTable($dbName);     return;     }     if(is_)string($table Name){     (strelen($table Name)==0) && die('.')     $this->_restore OneTable($dbName);     return;     }     if (is_array($table Name){     foreach ($テーブルName as $テーブル){     ( (!is_string($table) || streen($table)==0 ) && die('.')     }     $this->_restore SomeTalbe($dbName、$table Name);     return;     }     }     機能 _getTable List($dbName)     {     $テーブルリスト = array();     $reult=mysql_リスト.tables($dbName、$this->_mysqllink_id)     for ($i = 0; $i < mysqlnumローソン($result) $i+){             アラリpush($table List、mysql_)tableaname($result) $イ)     }     mysqlfree_レスリング     return $テーブルリスト     }     機能 _backupAllTable($dbName)     {     foreach ($this->_getTable List($dbName) as $table Name){     $this->_TableBak->backuplable($table Name);     }     }     機能 _backuploneTable($dbName、$table Name)     {     !同前array($table Name、$this->_getTable List($dbName)) && die(「指定されたテーブル名$table Name(/b)はデータベースに存在しません。」)     $this->_TableBak->backuplable($table Name);     }     機能 _backup SomeTalbe($dbName、$Table NameList)     {     foreach ($Table NameList as $table Name){     !同前array($table Name、$this->_getTable List($dbName)) && die(「指定されたテーブル名$table Name(/b)はデータベースに存在しません。」)     }     foreach ($Table NameList as $table Name){     $this->_TableBak->backuplable($table Name);     }     }     機能 _restore AllTable($dbName)     {     //Step 1:すべてのデータテーブルのバックアップファイルがあるか確認します。 および書くことができますか?     foreach ($this->_getTable List($dbName) as $table Name){     $tableBakFile = $this->_dataDir.DIRECTORY_SEPAATOR                 . $db Name.DIRECTORY_SEPAATOR                    . $テーブルName.DIRECTORY_SEPAATOR                 . $table Name.'.sql'     !is_writeable ($tableBakFile) && die("tableBakFile" not exists or unwirteable");     }     //Step 2:start ストール     foreach ($this->_getTable List($dbName) as $table Name){     $tableBakFile = $this->_dataDir.DIRECTORY_SEPAATOR                    . $db Name.DIRECTORY_SEPAATOR                    . $テーブルName.DIRECTORY_SEPAATOR                    . $table Name.'.sql'     $this->_TableBak->restore Table($table BakFile);     }     }     機能 _restore OneTable($dbName、$table Name)     {     //Step 1:データテーブルがあるかどうかを確認します。     !同前array($table Name、$this->_getTable List($dbName)) && die(「指定されたテーブル名$table Name(/b)はデータベースに存在しません。」)     //Step 2:データテーブルのバックアップファイルがあるか確認します。 および書くことができますか?     $tableBakFile = $this->_dataDir.DIRECTORY_SEPAATOR              . $db Name.DIRECTORY_SEPAATOR           . $テーブルName.DIRECTORY_SEPAATOR              . $table Name.'.sql'     !is_writeable ($tableBakFile) && die("tableBakFile" not exists or unwirteable");     //Step 3:start ストール     $this->_TableBak->restore Table($table BakFile);     }     機能 _restore SomeTalbe($dbName、$Table NameList)     {     //Step 1:データテーブルがあるかどうかを確認します。     foreach ($Table NameList as $table Name){     !同前array($table Name、$this->_getTable List($dbName)) && die(「指定されたテーブル名$table Name(/b)はデータベースに存在しません。」)     }     //Step 2:データテーブルのバックアップファイルがあるか確認します。 および書くことができますか?     foreach ($Table NameList as $table Name){     $tableBakFile = $this->_dataDir.DIRECTORY_SEPAATOR                    . $db Name.DIRECTORY_SEPAATOR                    . $テーブルName.DIRECTORY_SEPAATOR                    . $table Name.'.sql'     !is_writeable ($tableBakFile) && die("tableBakFile" not exists or unwirteable");     }     //Step 3:start レスター:     foreach ($Table NameList as $table Name){     $tableBakFile = $this->_dataDir.DIRECTORY_SEPAATOR                    . $db Name.DIRECTORY_SEPAATOR                    . $テーブルName.DIRECTORY_SEPAATOR                    . $table Name.'.sql'     $this->_TableBak->restore Table($table BakFile);     }     }     }     ?>     

<?php     
// DbBak      
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: :     
$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: INSERT   :     
$fields = array_keys($fieldInfo);     
$fields = implode(',',$fields);     
$sqltext="INSERT INTO $tableName($fields)VALUES \r
";     
$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:   :     
// :     
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 <b>$datafile</b>");     
// :     
while ($row = mysql_fetch_assoc($result)) {     
$row = $this->_quoteRow($fieldInfo,$row);      
$record='(' . implode(',',$row) . ");\r
";     
(!fwrite($handle, $record))   && die("can not write data to file <b>$datafile</b>");     
}     
mysql_free_result($result);     
// :     
fclose($handle);     

return true;     
}     

}     
?>   
  バックアップmbbsデータベース:SQLコード/example 1 backup:     require_オンス('DbBak.php')     require_once('TableBak.php')     $connectid = mysqlconnect('local host','root','123456')     $backudir = 'data;     $DbBak = new DbBak($connectid、$backudir);     $DbBak->backudb('mybbbbbbs')     mbbsデータベースを復元: 

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