データベースが特段に大きい場合は、mysqldump
を使用してそれぞれのスレーブにファイルをインポートするよりも、生データ
ファイルをコピーする方が効率的な場合があります。
しかし、複雑なキャッシュやロギング アルゴリズムを使用しているストレージ エンジンのテーブルにこの方法を使うことは、完全にイン タイムのスナップショットにならない可能性があり、キャッシュ情報とロギング アップデートは、グローバル 読み込みロックを使っていたとしても、適用されない場合があります。これにストレージ エンジンがどのように反応するかは、クラッシュ リカバリ能力に依存します。
たとえば、グローバル
読み込みロックを使用していた場合、InnoDB
テーブルのファイルシステム
スナップショットを開始できます。内部的
(InnoDB
ストレージ エンジンの中)
には、InnoDB
キャッシュをフラッシュしていないなどの理由で、スナップショットが乱れます。しかし、これはスタートアップ時に
InnoDB
によって解決され、一貫した結果が運ばれるため、問題になることはありません。つまり、InnoDB
は破損を伴わずに、クラッシュ
リカバリを行うことができる、ということですが、しかし、これは、
InnoDB
テーブルの一貫したスナップショットを確保する一方で、MySQLサーバをストップすることができないということです。
生データのスナップショットを作成するには、cp
または copy などの標準のコピー
ツール、scp or rsync
などの リモート コピー
ツール、zip or tar
などのアーカイブ ツール、dump
などのファイル システム スナップショット
ツールなどを使用し、MySQL データ
ファイルが単一のファイルシステムに存在すると定めます。特定のデータベースを複製するだけである場合は、テーブルに関係のあるファイルのコピーを取るだけであることを確認します。InnoDB
で、innodb_file_per_table
オプションを利用しない場合は、すべてのデータベースにあるすべてのテーブルを一つのファイルに格納します。
アーカイブから次のファイルを指定して取り除く場合
mysql
データベースに関連するファイル
master.info
ファイル
マスタのバイナリ ログ ファイル
リレー ログ ファイル
生データのスナップショットで最も一貫した結果を得るには、次の通りにプロセス中にサーバをシャットダウンします。
読み込みロック、マスタ ステータスを取得する。項5.1.1.4. 「マスタ レプリケーション情報の取得」 参照。
別のセッションで、MySQL サーバをシャットダウンする。
shell> mysqladmin shutdown
MySQL データ ファイルのコピーを取る。一般的なソリューションは次の例示の通り。この中から一つだけを選択する。
shell> tar cf/tmp/db.tar
./data
shell> zip -r/tmp/db.zip
./data
shell> rsync --recursive./data
/tmp/dbdata
マスタの MySQL インスタンスを立ち上げる。
データベースをシャットダウンしないで、マスタからスナップショットを得る。
読み込みロック、マスタ ステータスを取得する。項5.1.1.4. 「マスタ レプリケーション情報の取得」 参照。
MySQL データ ファイルのコピーを取る。一般的なソリューションは次の例示の通り。この中から一つだけを選択する。
shell> tar cf/tmp/db.tar
./data
shell> zip -r/tmp/db.zip
./data
shell> rsync --recursive./data
/tmp/dbdata
InnoDB
テーブルを使用している場合、
InnoDB
Hot Backup
ツールの使用をお勧めします。これは、マスタ
サーバのロックを取らずに一貫したスナップショットを取り、後にスレーブで使用するスナップショットに関連するログ名とオフセットを記録します。Hot
Backup
は業務用ツールであるため、標準の MySQL
には含まれていません。詳細は、http://www.innodb.com/manual.php
で、InnoDB
Hot
Backupを参照してください。
読み込みロックを取得したクライアントでは、ロックを解除する。
mysql> UNLOCK TABLES;
データベースのアーカイブまたはコピーを作成した後は、スレーブでレプリケーション プロセスを開始する前に、それぞれのスレーブにファイルをコピーします。