目次
mysqlバックアップとボリューム処理の復元を実装するphpメソッド、mysqlボリューム
ホームページ バックエンド開発 PHPチュートリアル mysql バックアップおよびリカバリ ボリューム処理を実装するための PHP メソッド、mysql volume_PHP チュートリアル

mysql バックアップおよびリカバリ ボリューム処理を実装するための PHP メソッド、mysql volume_PHP チュートリアル

Jul 13, 2016 am 10:10 AM
mysql mysqlデータベース php バックアップ

mysqlバックアップとボリューム処理の復元を実装するphpメソッド、mysqlボリューム

この記事の例では、PHP で mysql のバックアップとリカバリのボリューム処理を実装する方法を説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:

ボリューム処理とは、処理したいデータを小さなファイルに分割して処理することです。ここでは、mysql データベースのボリュームバックアップを実現し、バックアップ用のテーブルを選択し、単一の SQL を実現するための PHP mysql バックアップおよび復元ボリューム処理クラスを紹介します。ファイルとボリュームの SQL インポート

各巻のインポートカテゴリとアイデアの詳細な説明

データベースのインポートとエクスポートはバックエンドに必要な機能です。ネットで検索するとデータベースのインポートとエクスポートについてたくさん見つかりますが、基本的には必要のないものがたくさん含まれている大規模なシステムです。他の人のものを自分のバックエンドに統合するのが好きではないので、私は自分のものをたくさん参照し、簡単に呼び出せるようにボリュームインポートクラスを書きました。どなたでもご参加いただけます。

ここでのボリューム ファイルは、単一 SQL ファイルとボリューム SQL インポートを実装するために「_v1.sql」で終わります。ボリューム インポートの場合、現在のボリュームを残りのボリュームにインポートするかどうかを選択できます。完了するには、クラスを直接呼び出すだけです。

それらは、ホスト、ユーザー名、パスワード、データベース名、データベースエンコーディングです

コードをコピーします コードは次のとおりです:
$db = new DataManage ( 'localhost', 'root', 'root', 'test', 'utf8' );

SQL ファイル、単一の SQL のみをインポートするかどうか (つまり、他のボリュームがある場合はインポートされません)。

コードをコピーします コードは次のとおりです:
$db->restore ( './backup/20120516211738_all_v1.sql', false );

バックアップ SQL ファイルを一覧表示する方法や SQL を選択する方法に相当しますが、これはこのカテゴリには含まれておらず、非常に簡単です。

現時点では、データベースのインポートのみが実装されています。具体的なアイデアと実装コードは次のとおりです。以下:

コードをコピーします コードは次のとおりです:
<?php
/**
* @著者やぬえ
* 注: ボリューム ファイルは _v1.sql で終わります
* 機能: 単一の SQL ファイルとボリュームの SQL インポートを実装します。ボリュームのインポートでは、現在のボリュームを残りのボリュームにインポートするかどうかを選択できます。 * 使用方法:
*
*
*------------------------------------------------ - -----------------
//それらは、ホスト、ユーザー名、パスワード、データベース名、データベースエンコーディングです
$db = 新しい DataManage ( 'localhost', 'root', 'root', 'test', 'utf8' ); //SQL ファイル、単一の SQL のみをインポートするかどうか (つまり、他のボリュームがある場合はインポートされません)
$db->restore ( './backup/20120516211738_all_v1.sql', false ); *------------------------------------------------ - ------------------------
​*/
クラス DataManage {
var $db; // データベース接続
var $database; // 使用されるデータベース
var $sqldir; // データベースのバックアップ フォルダー

/**
  *初始化
  *
  * @param 文字列 $host
  * @param string $ユーザー名
  * @param string $password
  * @param 文字列 $database
  * @param 文字列 $charset
 */
function __construct($host = 'localhost', $username = 'root', $password = '', $database = 'test', $charset = 'utf8') {
$this->ホスト = $host; $this->ユーザー名 = $ユーザー名
$this->パスワード = $パスワード
$this->データベース = $データベース
$this->charset = $charset; // データベースに接続します
$this->db = mysql_connect ( $this->host, $this->username, $this->password ) または die ( "データベース接続に失敗しました。" ); //使用するデータベースを選択します
mysql_select_db ( $this->database, $this->db ) or die ( "データベースを開けません" ); // データベースのエンコード方法
mysql_query ( 'SET NAMES ' . $this->charset, $this->db ); }

/**
* バックアップデータをインポートします
* 説明: ボリューム ファイル形式 20120516211738_all_v1.sql
*
* @param 文字列 $sqlfile
* @param bool $single
​*/
関数リストア($sqlfile, $single = FALSE) {
// ファイルが存在するかどうかを確認します
if (! file_exists ( $sqlfile )) {
exit ( "ファイルが存在しません。確認してください" ); }
$this->ロック ( $this->データベース ); // データベースの保存場所を取得します
$sqlpath = パス情報 ($sqlfile); $this->sqldir = $sqlpath ['ディレクトリ名']; // サブボリュームが含まれているかどうかを確認し、20120516211738_all_v1.sql を _v から分離します。サブボリュームがある場合は、サブボリュームがあることを意味します
$volume = 爆発 ( "_v", $sqlfile ); $volume_path = $volume [0]; echo "プログラムが終了しないように、ブラウザを更新して閉じないでください。注意しないとデータベース構造が破損します<br />"; echo "バックアップ データをインポートしています。お待ちください!<br />"; if (emptyempty ( $volume [1] ) || $single) {
echo "sql:<span style='color:#f00;'>' をインポートしています。 // 分割はありません
If ($this->_import ( $sqlfile )) {
echo "データベースは正常にインポートされました!"; } その他 {
exit ('データベースのインポートに失敗しました!' ); }
} その他 {
// サブボリュームがある場合は、現在のサブボリュームを取得し、残りのサブボリュームをループで実行します
$volume_id = 爆発 ( ".sq", $volume [1] ); //現在のボリュームは $volume_id です
$volume_id = intval ( $volume_id [0] ); while ( $volume_id ) {
$tmpfile = $volume_path .$volume_id
// 他のボリュームが存在するため、実行を続行します
If (file_exists ( $tmpfile )) {
// インポートメソッドを実行します
echo "ボリューム $volume_id:<span style='color:#f00;'> '</span<br />'; If ($this->_import ( $tmpfile )) {

} その他 {
exit ( "ボリュームのインポート $volume_id: <span style='color:#f00;'>" . $tmpfile . '</span>失敗! データベース構造が破損している可能性があります! ボリューム 1 のインポートから開始してください。 '); }
} その他 {
echo "このボリュームのバックアップはすべて正常にインポートされました!<br />"; 戻る
}
$volume_id ++; }
}
}

/**
* SQLをデータベースにインポートします(通常のインポート)
*
* @param 文字列 $sqlfile
* @return ブール値
​*/
プライベート関数 _import($sqlfile) {
$name = ベース名 ( $sqlfile ); $sqls = ファイル ( $sqlfile ); foreach ( $sqls as $sql ) {
str_replace ( "r", "", $sql ); str_replace ( "n", "", $sql ); if (! mysql_query ( トリム ( $sql ), $this->db ))
false を返します。 }
true を返します。 }

//データベース接続を閉じる
プライベート関数 close() {
mysql_close ( $this->db ); }

// バックアップまたはインポート中のエラーを避けるためにデータベースをロックします
プライベート関数 lock($tablename, $op = "WRITE") {
if (mysql_query ( "ロックテーブル " . $tablename . " " . $op ))
true を返します。 それ以外は
false を返します。 }

// ロックを解除します
プライベート関数unlock() {
if (mysql_query ( "テーブルのロックを解除" ))
true を返します。 それ以外は
false を返します。 }

// 破壊
関数 __destruct() {
mysql_query ( "テーブルのロックを解除", $this->db ); mysql_close ( $this->db ); }
}
?>

MySQL のバックアップと復元はボリュームで処理され、呼び出しが簡単です。


各巻の紹介アイデア:


SQL ファイルを 1 行ずつ読み取り、各行を完全な SQL ステートメントとして配列に保存し、ループして実行してデータベースに挿入します。 ただし、create table ステートメントは複数の行に分割する必要があります。かなり時間がかかりました。主にクラスファイルが占有されているためです。

アップデートの説明:


1. SQLインポート時にSQLファイル内のコメント「-」を削除することで、SQL内のシングルクォーテーションとダブルクォーテーションがインポートできない問題を解決します

2. 効率を向上させるために SQL ステートメントを配列に再結合し、配列から SQL を読み取ってインポートする必要を回避し、単一行を読み取った後に SQL を直接実行します。
ダウンロードアドレス: https://github.com/yanue/Dbmanage
エクスポートされた SQL ファイル形式は次のとおりです:

コードをコピーします

コードは次のとおりです:

-- -- MySQL データベース ダンプ

-- DBManage クラス、Power By yanue によって作成されました。 --

-- ホスト: ローカルホスト

-- 作成日: 2012 年 10 月 6 日 22:32

-- MySQL バージョン: 5.1.50-コミュニティ

-- PHP バージョン: 5.3.9-ZS5.6.0

--

-- データベース: `テスト`
--

-------------------------------------------------- ------- -- -- テーブル構造 aa
--

`aa` が存在する場合はテーブルを削除します
; テーブルを作成します `aa` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT、
`content` テキストが NULL ではありません、
主キー (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 デフォルト CHARSET=utf8;
--
-- テーブル aa のデータを転送します
--

INSERT INTO `aa` VALUES('1','<p id="test"><span class='hahh' style="line-height:;">テストデータです笑</span> ; </p>');

以下はクラスコードです:



コードをコピーします

コードは次のとおりです:
<?php
/**
* @著者やぬえ
* @copyright Copyright (c) 2012 yanue.net
* @バージョン 1.1
※作成時期:2012年5月21日

更新日: 2012 年 10 月 6 日
更新手順: 1. SQL をインポートするときに SQL ファイル内のコメント「--」を削除することで、SQL 内の単一引用符と二重引用符がインポートできない問題が解決されます
2. 単一行を読み取った後、SQL を直接実行します。これにより、効率を向上させるために SQL ステートメントを配列に再結合し、配列から SQL を読み取ってインポートする必要がなくなります

* 注: ボリューム ファイルは _v1.sql (20120522021241_all_v1.sql) で終わります
* 機能: mysql データベースのボリュームバックアップを実現、バックアップ用のテーブルを選択、単一 SQL ファイルとボリューム SQL インポートを実現
* 使用方法:
*
* ------1. データベースのバックアップ(エクスポート) ---------------------------------- -- ------------------------
//それらは、ホスト、ユーザー名、パスワード、データベース名、データベースエンコーディングです
$db = 新しい DBManage ( 'localhost', 'root', 'root', 'test', 'utf8' ); // パラメータ: バックアップするテーブル (オプション)、バックアップ ディレクトリ (オプション、デフォルトはバックアップ)、ボリューム サイズ (オプション、デフォルトは 2000、つまり 2M)
$db->バックアップ (); * ------2. データベースのリカバリ(インポート) ---------------------------------- -- ------------------------
//それらは、ホスト、ユーザー名、パスワード、データベース名、データベースエンコーディングです
$db = 新しい DBManage ( 'localhost', 'root', 'root', 'test', 'utf8' ); //パラメータ: SQLファイル
$db->restore ('./backup/20120516211738_all_v1.sql'); *------------------------------------------------ - ------------------------
​*/
クラス DbManage {
var $db; // データベース接続
var $database; // 使用されるデータベース
var $sqldir; // データベースのバックアップ フォルダー
// 改行文字
プライベート $ds = "n"; // SQLを格納する変数
パブリック $sqlContent = ""; //各 SQL ステートメントの終了文字
パブリック $sqlEnd = ";";
/**
     *初始化
     *
     * @param 文字列 $host
     * @param string $ユーザー名
     * @param string $password
     * @param 文字列 $database
     * @param 文字列 $charset
    */
関数 __construct($host = 'localhost', $username = 'root', $password = '', $database = 'test', $charset = 'utf8') {
$this->host = $host; $this->ユーザー名 = $ユーザー名; $this->password = $password; $this->database = $database; $this->charset = $charset; set_time_limit(0);//時間制限なし
@ob_end_flush(); // データベースに接続します
$this->db = @mysql_connect ( $this->host, $this->username, $this->password ) または die( '<p class="dbDebug"><span class= "err">Mysql 接続エラー: </span>'.mysql_error().'</p>'); //使用するデータベースを選択します
mysql_select_db ( $this->database, $this->db ) または die('<p class="dbDebug"><span class="err">Mysql 接続エラー:</span>' .mysql_error().'</p>'); // データベースのエンコード方法
mysql_query ( 'SET NAMES ' . $this->charset, $this->db );
}

/*
* * 新しいクエリデータベーステーブルを追加しました
*/
関数 getTables() {
$res = mysql_query ( "SHOW TABLES" ); $tables = 配列 (); while ( $row = mysql_fetch_array ( $res ) ) {
$tables [] = $row [0]; }
$tables を返します。 }

/*
*
*------------------------------------------データベースバックアップ開始---- -------------------------------------------------- ----
*/

/**
* データベースのバックアップ
* パラメーター: バックアップするテーブル (オプション)、バックアップ ディレクトリ (オプション、デフォルトはバックアップ)、ボリューム サイズ (オプション、デフォルトは 2000、つまり 2M)
*
* @param $string $dir
* @param int $size
* @param $string $テーブル名
​​*/
関数バックアップ($tablename = '', $dir, $size) {
$dir = $dir : './backup/'; //ディレクトリを作成します
if (! is_dir ( $dir )) {
mkdir ( $dir, 0777, true ) または die ( 'フォルダーの作成に失敗しました' ); }
$サイズ = $サイズ ? : 2048; $sql = ''; // 特定のテーブルのみをバックアップします
if (! emptyempty ( $tablename )) {
If(@mysql_num_rows(mysql_query("SHOW TABLES LIKE '".$tablename."'")) == 1) {
                                                                                                 $this->_showMsg('Table-<b>' . $tablename .'</b>-存在しません、確認してください!',true); 死ぬ();                                                                                $this->_showMsg('テーブル <span class="imp">' . $tablename.'</span>'); // ダンプ情報を挿入します
$sql = $this->_retrieve (); //テーブル構造情報を挿入
$sql .= $this->_insert_table_struct ( $tablename ); // データを挿入
$data = mysql_query ( "select * from " . $tablename ); // ファイル名の最初の部分
$filename = date ( 'YmdHis' )
。 // フィールドの数
$num_fields = mysql_num_fields ( $data );                                                                                                                                                                                           $p = 1; // 各レコードをループします
while ( $record = mysql_fetch_array ( $data ) ) {
// シングルレコード
$sql .= $this->_insert_record ( $tablename, $num_fields, $record ); // ボリュームサイズより大きい場合はファイルを書き込みます
If (strlen ( $sql ) >= $size * 1024) {
$file = $ファイル名 .$p
If ($this->_write_file ($sql, $file, $dir)) {
$this->_showMsg("Table-<b>" . $tablename . "</b>- Volume-<b>" . $p . "</b>-データのバックアップが完了しました、バックアップ ファイル[ <span class='imp'>" .$dir . $file ."</span> ]");
} else {
$this->_showMsg("バックアップ テーブル -<b>" . $tablename . "</b>- 失敗しました",true); falseを返します。                                                                                                                                                                                                                                                        $p ++; // $ SQL 変数を空にリセットし、変数のサイズを再計算します
$sql = "";                                                                                                                                                                    // 時間内にデータをクリアします
unset($data,$record); // SQL のサイズだけではサイズをスコアリングするのに十分ではありません
if ($sql != "") {
$ファイル名 .= "_v" .sql; if ($this->_write_file ( $sql, $filename, $dir )) {
$this->_showMsg( "テーブル-<b>" . $tablename . "</b>-ボリューム-<b>" . $p . "</b>-データのバックアップが完了しました、バックアップ ファイル[ <span class='imp'>" .$dir . $filename ."</span> ]");
} それ以外 { $this->_showMsg("バックアップ ボリューム-<b>" . $p . "</b>-失敗<br />"); false を返します。                                                                                                                                                                    $this->_showMsg("おめでとうございます! <span class='imp'>バックアップが成功しました</span>"); } else {
$this->_showMsg('バックアップ中'); // すべてのテーブルをバックアップします
If ($tables = mysql_query ( "show table status from " . $this->database )) {
$ This-& gt; _Showmsg ("データベース構造の読み取りに成功しました!");                                                                                          $this->_showMsg("データベース構造の読み取りに失敗しました!"); 終了 (0);                                                                              // ダンプ情報を挿入します
$sql .= $this->_retrieve (); // ファイル名の最初の部分
$filename = date ( 'YmdHis' )
; // すべてのテーブルを検索します
$tables = mysql_query ( 'SHOW TABLES' );                                                                                                                                                                                           $p = 1; // すべてのテーブルをループします
while ( $table = mysql_fetch_array ( $tables ) ) {
                                                                                                                                                                            $tablename = $table [0];                                                                                                                                                                         $sql .= $this->_insert_table_struct ( $tablename ); $data = mysql_query ( "select * from " . $tablename ); $num_fields = mysql_num_fields ( $data );
// 各レコードをループします
while ( $record = mysql_fetch_array ( $data ) ) {
// シングルレコード
$sql .= $this->_insert_record ( $tablename, $num_fields, $record ); // ボリュームサイズより大きい場合はファイルを書き込みます
If (strlen ( $sql ) >= $size * 1000) {

$file = $ファイル名 .$p
// ファイルを書き込む 文 If ($this->_write_file ($sql, $file, $dir)) {
$this->_showMsg("-ボリューム-<b>" . $p . "</b>-データのバックアップが完了しました。バックアップ ファイル[<span class='imp'>".$dir.$ファイル。"</span> ]");                                                                                                   $this->_showMsg("ボリューム-" . $p . "</b>-バックアップに失敗しました!",true); falseを返します                                                                        // 次のサブロール个 $p ++; // $sql 変数を空にリセットし、変数のサイズを再計算します
$sql = "";                                                                                                                                                                                                                                                                    // SQL のサイズだけではサイズをスコアリングするのに十分ではありません
if ($sql != "") {
$ファイル名 .= "_v" .sql"; if ($this->_write_file ( $sql, $filename, $dir )) {
$this->_showMsg("-ボリューム-<b>" . $p . "</b>-データのバックアップが完了しました。バックアップ ファイル[<span class='imp'>".$dir.$ファイル名。"</span> ]"); } それ以外 { $this->_showMsg("ボリューム-" . $p . "</b>-バックアップに失敗しました",true); false を返します。                                                                                                                                                                      $this->_showMsg("おめでとうございます! <span class='imp'>バックアップが成功しました</span>"); }
}

// 時間内に情報を出力します
プライベート関数 _showMsg($msg,$err=false){
$err = $err ? "<span class='err'>エラー:</span>" ; echo "<p class='dbDebug'>".$msg."</p>"; フラッシュ();
}

/**
* 基本的なデータベースのバックアップ情報を挿入します
*
* @return 文字列
​​*/
プライベート関数 _retrieve() {
$value = ''; $value .= '--'
$value .= '-- MySQL データベース ダンプ'
$value .= '-- DbManage クラス、Power By yanue によって作成されました ' 。 $value .= '-- http://yanue.net '
$value .= '--'
$value .= '-- ホスト: ' . $this->ds; $value .= '-- 日付: ' . date ( 'Y' ) . ' month ' . ' day' .私' ) $this->ds; $value .= '-- MySQL バージョン: ' . mysql_get_server_info ()
$value .= '-- PHP バージョン: ' . phpversion ()
$value .= $this->ds; $value .= '--'
$value .= '-- データベース: `' . $this->ds; $value .= '--' . $this->ds; $value .= '-------------------------------------------- -- ----------'; $value .= $this->ds . $this->ds;
$value を返します。 }

/**
* テーブル構造を挿入します
*
* @param 不明なタイプ $table
* @return 文字列
​​*/
プライベート関数 _insert_table_structor($table) {
$sql = ''; $sql .= "--" . $this->ds;$sql .= "--テーブル構造" .$this->ds; $sql .= "--" . $this->ds;
// テーブルが存在する場合は削除します
$sql .= "DROP TABLE IF EXISTS `" . $this->sqlEnd
// 詳細なテーブル情報を取得します
$res = mysql_query ( 'SHOW CREATE TABLE `' . $table . '`' ); $row = mysql_fetch_array ( $res ); $sql .= $row [1]; $sql .= $this->sqlEnd . //
を追加します $sql .= $this->ds; $sql .= "--" .$this->ds; $sql .= "-- テーブル内のデータを転送します " .this->ds; $sql .= "--" .$this->ds; $sql .= $this->ds; 戻り $sql; }

/**
* 単一レコードを挿入します
*
* @param string $table
* @param int $num_fields
* @param 配列 $record
* @return 文字列
​​*/
プライベート関数 _insert_record($table, $num_fields, $record) {
// カンマ区切りの SQL フィールド
$挿入 = ''; $comma = ""
; $insert .= "INSERT INTO `" . $table . "` VALUES(";
) // 各サブセクションのコンテンツをループします
for($i = 0; $i $insert .= ($comma . "'" . mysql_escape_string ( $record [$i] ) . "'"); $comma = ","; }
$insert .= ");" . 戻り $insert; }

/**
*ファイルに書き込む
*
* @param 文字列 $sql
* @param string $ファイル名
* @param 文字列 $dir
* @return ブール値
​​*/
プライベート関数 _write_file($sql, $filename, $dir) {
$dir = $dir : './backup/'; //ディレクトリを作成します
if (! is_dir ( $dir )) {
mkdir ( $dir, 0777, true ); }
$re = true; If (! @$fp = fopen ( $dir . $filename, "w+" )) {
$re = false; $this->_showMsg("SQL ファイルを開けませんでした!",true); }
If (! @fwrite ( $fp, $sql )) {
$re = false; $this->_showMsg("SQL ファイルの書き込みに失敗しました。ファイルが書き込み可能かどうかを確認してください",true); }
if (! @fclose ( $fp )) {
$re = false; $this->_showMsg("SQL ファイルを閉じることができませんでした!",true); }

$re を返します。 }

/*
*
* ---------------------------- 上: データベースのエクスポート ----------- 分割線 ---- ------次: データベースのインポート--------------------------------
*/

/**
* バックアップデータをインポートします
* 説明: ボリューム ファイル形式 20120516211738_all_v1.sql
* パラメータ: ファイルパス (必須)
*
* @param 文字列 $sqlfile
​​*/
関数復元($sqlfile) {
// ファイルが存在するかどうかを確認します
if (! file_exists ( $sqlfile )) {
$this->_showMsg("SQL ファイルが存在しません。確認してください。",true); 終了 (); }
$this->lock ( $this->database ); // データベースの保存場所を取得します
$sqlpath = パス情報 ($sqlfile); $this->sqldir = $sqlpath ['dirname']; // サブボリュームが含まれているかどうかを確認し、20120516211738_all_v1.sql を _v から分離します。存在する場合は、サブボリュームがあることを意味します
$volume = 爆発 ( "_v", $sqlfile ); $volume_path = $volume [0]; $this->_showMsg("プログラムが終了しないように、ブラウザを更新して閉じないでください。注意しないと、データベース構造が破損します。"); $this->_showMsg("バックアップ データをインポート中です。お待​​ちください!"); if (emptyempty ( $volume [1] )) {
$this->_showMsg ( "SQL のインポート: <span class='imp'>" . $sqlfile . '</span>');                                                                                                                                                                                                                           If ($this->_import ( $sqlfile )) {
$this->_showMsg( "データベースは正常にインポートされました!");                                                                                          $this->_showMsg('データベースのインポートに失敗しました!', true); 終了 ();                                                                              } else {
// スクロールがある場合、現在の 1 ポイント ボリュームが表示され、残りのスクロールが実行されます。 $volume_id =explode ( ".sq", $volume [1] ); // 現在のボリュームは $volume_id です
$volume_id = intval ( $volume_id [0] ); while ( $volume_id ) {
$tmpfile = $volume_path .$volume_id
// 他のボリュームが存在するため、実行を続行します
If (file_exists ( $tmpfile )) {
// インポートメソッドを実行します
$this->msg .= "ボリューム $volume_id: <span style='color:#f00;'> '</span><br />'; If ($this->_import ($tmpfile)) {

} else {
$volume_id = $volume_id :1; exit ( "ボリュームのインポート: <span style='color:#f00;'>" . $tmpfile . '</span>失敗! データベース構造が破損している可能性があります! ボリューム 1 からインポートしてみてください' );
                                                                                               } それ以外 { $ This-& gt; msg. = "このサブバックアップは正常に導入されました! & Lt; br /& gt;";
                                                                                      $volume_id ++;                                                                                }if (emptyempty ( $volume [1] )) {
$this->_showMsg ( "SQL のインポート: <span class='imp'>" . $sqlfile . '</span>');                                                                                                                                                                                                                           If ($this->_import ( $sqlfile )) {
$this->_showMsg( "データベースは正常にインポートされました!");                                                                                          $this->_showMsg('データベースのインポートに失敗しました!',true); 終了 ();                                                                                } else {
// スクロールがある場合、current は現在のロール数となり、残りのスクロールが実行されます。 $volume_id =explode ( ".sq", $volume [1] ); // 現在のボリュームは $volume_id です
$volume_id = intval ( $volume_id [0] ); while ( $volume_id ) {
$tmpfile = $volume_path .$volume_id
// 他のボリュームが存在するため、実行を続行します
If (file_exists ( $tmpfile )) {
// インポートメソッドを実行します
$this->msg .= "ボリューム $volume_id: <span style='color:#f00;'> '</span><br />'; If ($this->_import ($tmpfile)) {

} else {
$volume_id = $volume_id :1; exit ( "ボリュームのインポート: <span style='color:#f00;'>" . $tmpfile . '</span>失敗! データベース構造が破損している可能性があります! ボリューム 1 からインポートしてみてください' );
                                                                                               } それ以外 {$ this&gt; msg。= "このボリュームのすべてのバックアップは正常にインポートされました!&lt; br /&gt;";
                                                                                      $volume_id ++;                                                                                }
}

/**
* SQLをデータベースにインポートします(通常のインポート)
*
* @param 文字列 $sqlfile
* @return ブール値
​​*/
プライベート関数 _import($sqlfile) {
// SQL ファイルに含まれる SQL ステートメントの配列
$sqls = 配列
; $f = fopen ( $sqlfile, "rb" ); //テーブルバッファ変数を作成します
$create_table = ''; while ( ! feof ( $f ) ) {
// SQLの各行を読み取ります $line = fgets ( $f ); // このステップでは、作成されたテーブルを完全な SQL ステートメントに合成します
// 末尾に ';' (つまり、完全な SQL ステートメント、ここに insert ステートメント) が含まれておらず、'ENGINE=' (つまり、テーブルを作成する最後の文) が含まれていない場合
If (! preg_match ( '/;/', $line ) || preg_match ( '/ENGINE=/', $line )) {
// この SQL ステートメントと作成されたテーブル SQL 接続を保存します
$create_table .= $line; // テーブル作成の最後の文が含まれている場合
If (preg_match ( '/ENGINE=/', $create_table)) {
// SQL文を実行してテーブルを作成します
                                                                                                                                                        // 現在のテーブルをクリアし、次のテーブルを作成する準備をします
$create_table = '';                                                                                       // 今回はスキップします
続けてください。                                                                                // SQL ステートメントを実行します
$this->_insert_into($line); }
fclose ( $f ); true を返します
}

// 単一の SQL ステートメントを挿入します
プライベート関数 _insert_into($sql){
If (! mysql_query ( トリム ( $sql ) )) {
$this->msg .= mysql_error (); false を返します
}
}

/*
* -----------------------------データベースインポート終了--------------- - -----------------
*/

//データベース接続を閉じる
プライベート関数 close() {
mysql_close ($this->db); }

// バックアップまたはインポート中のエラーを避けるためにデータベースをロックします
プライベート関数 lock($tablename, $op = "WRITE") {
If (mysql_query ( "lock tables " . $tablename . " " . $op ))
true を返します。 その他
false を返します
}

// ロックを解除します
プライベート関数unlock() {
if (mysql_query ( "テーブルのロックを解除" ))
true を返します。 その他
false を返します
}

// 破壊
関数 __destruct() {
If($this->db){
mysql_query ( "テーブルのロックを解除", $this->db ); mysql_close ($this->db); }
}
}
?>


この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

http://www.bkjia.com/PHPjc/933601.html

www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/933601.html技術記事 PHP による mysql バックアップおよびリカバリ ボリュームの処理方法の実装 この記事では、mysql ボリュームの例で、PHP による mysql バックアップおよびリカバリ ボリューム処理の実装方法について説明します。参考のためにみんなで共有してください。具体的な分析は以下の通りです...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 Dec 09, 2024 am 11:42 AM

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

See all articles