ホームページ >バックエンド開発 >PHPチュートリアル >PHP は mysql データベース バックアップ クラスを実装します_PHP チュートリアル
1. DbBak をインスタンス化するには、データ サーバーの場所 ($connectid) とバックアップ先のディレクトリ ($backupDir) という 2 つのことを DbBak に伝える必要があります。 TableBak.php') ;
$connectid = mysql_connect('localhost','root','123456');
$backupDir = 'data'; データベースをバックアップするだけでなく、ただし、バックアップするテーブルのみを詳細に設定することもできます:
2.1 mybbs ライブラリ内のすべてのテーブルをバックアップしたい場合は、これを実行するだけです:
$DbBak->backupDb('mybbs ');
2.2 mybbs ライブラリ内のボード、フェイス、およびフレンドリストのテーブルのみをバックアップしたい場合は、1 次元配列で指定できます:
$DbBak->backupDb('mybbs',array('board', ' face','friendsite'));
2.3 ボード テーブルなどの 1 つのテーブルのみをバックアップする場合:
$DbBak->backupDb('mybbs','board');リカバリ:
2.1 の場合、2.1 および 2.3 の 3 つのケースでは、ステートメントを適宜変更し、backupDb をrestoreDb に置き換えることでデータをリカバリできます:
$DbBak->restoreDb('mybbs'); ->restoreDb ('mybbs',array('board','face','friendsite'));
PHP コード
$DbBak->restoreDb('mybbs','board');
PHP コード
require_once ('TableBak.php');
var $_mysql_link_id;
var $_tableList;
( (! is_string($dataDir) ) || strlen($dataDir)==0) && die('エラー:$dataDir は文字列ではありません');
!is_dir($dataDir) && mkdir($dataDir); >_dataDir = $ dataDir;
$this->_mysql_link_id = $_mysql_link_id
}
function BackupDb($dbName,$tableName=null)
{
( (!is_string($dbName)) || str len( $dbName)==0 ) && die('$dbName は文字列値である必要があります');
//ステップ 1: データベースを選択します:
!is_dir($dbDir); mkdir($dbDir);
//ステップ 3: データベース内のすべてのテーブル名を取得し、テーブルのバックアップを開始します
$this->_TableBak = new TableBak($this->_mysql_link_id ,$dbDir); ($tableName)){//データベース内のすべてのテーブルをバックアップします
$this->_backupAllTable($dbName)
}
if(is_string($tableName)){
(strlen($tableName)== 0) && die('....');
$this->_backupOneTable($dbName,$tableName)
}
if (is_array($tableName) ){
foreach ($tableName として) table){
( (!is_string($table)) || strlen($table)==0 ) && die('....')
}
$this- >_backupSomeTalbe($dbName,$tableName) );
戻る;
関数restoreDb($dbName,$tableName=null){
((!is_string($dbName)) || strlen($dbName)==0 ) && die('$dbName は文字列値である必要があります');
//ステップ 1: データベース库が存在するかどうか 并接続:
@mysql_select_db($dbName) || die("データベース$dbName線量は存在しません");
//ステップ 2:检查が存在するかどうかデータ据库备份目录
$dbDir = $this->_dataDir.DIRECTORY_SEPARATOR.$dbName;
!is_dir($dbDir) && die("$dbDir 存在しません");
//ステップ 3:復元の開始
$this->_TableBak = new TableBak($this->_mysql_link_id,$dbDir);
if(is_null($tableName)){//データベース内のすべてのテーブルをバックアップします
$this->_restoreAllTable($dbName);
戻る;
}
if(is_string($tableName)){
(strlen($tableName)==0) && die('....');
$this->_restoreOneTable($dbName,$tableName);
戻る;
}
if (is_array($tableName)){
foreach ($tableName as $table){
( (!is_string($table)) || strlen($table)==0 ) && die('... .');
}
$this->_restoreSomeTalbe($dbName,$tableName);
戻る;
}
}
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);
$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< /b>データ库中に存在しません");
$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 が存在しないか、書き込みできません");
}
//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)) &&死ね("指定されたテーブル名$tableNameデータベース库中に存在しません");
//ステップ 2:データテーブル备份文件が存在するかどうか、および書き込み可能かどうか:
$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR
$dbName.DIRECTORY_SEPARATOR
。 $tableName.DIRECTORY_SEPARATOR
。 $tableName.'.sql';
!is_writeable ($tableBakFile) && die("$tableBakFile が存在しないか、書き込みできません");
//ステップ 3:復元の開始
$this->_TableBak->restoreTable($tableName,$tableBakFile);
}
function _restoreSomeTalbe($dbName,$TableNameList)
{
//step1:检查が存在するかどうかデータ表:
foreach ($TableNameList as $tableName){
!in_array($tableName,$this->) ;_getTableList($ dbName)) && die("指定された表名$tableNameデータベース库中に存在しません");
}
//ステップ 2:检查が存在するかどうかデータテーブル备份文件およびどうか書き込み可能:
foreach ($TableNameList as $tableName){
$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR
。 $dbName.DIRECTORY_SEPARATOR
。 $tableName.DIRECTORY_SEPARATOR
。 $tableName.'.sql';
!is_writeable ($tableBakFile) && die("$tableBakFile が存在しないか、書き込みできません");
}
//ステップ 3:復元の開始:
foreach ($TableNameList as $tableName){
$tableBakFile = $this->_dataDir.DIRECTORY_SEPARATOR
$dbName.DIRECTORY_SEPARATOR
。 $tableName.DIRECTORY_SEPARATOR
。 $tableName.'.sql';
$this->_TableBak->restoreTable($tableName,$tableBakFile);
}
}
}
?>