|
||||||||||||||
| 前のページ 1 2 3 4 | ||||||||||||||
| MySQL標準レプリケーション機能の構造 | ||||||||||||||
|
MySQLのレプリケーション機能では、役割の異なるいくつかのファイルが使用されます。レプリケーションにて使用するファイルのうち、マスタデータベース内で使用するものは、バイナリ・ログファイルです。 バイナリ・ログファイルは、デフォルトでデータベースディレクトリに存在し、マスタデータベースへの更新処理内容のすべてが書き込まれます。バイナリ・ログファイは、レプリケーションのためだけに使用されるのではなく、データベース障害時のリカバリにも使用されます。 また、スレーブデータベース内でレプリケーション用に使用するファイルは、「マスタ・情報ファイル」「リレー・ログファイル」「リレーログ・情報ファイル」の3つです。この3つのファイルは、デフォルトでデータベースディレクトリに存在します。 リレー・ログファイルは、マスタデータベースでの更新処理内容を蓄積する役割を持ちます。スレーブデータベースは、このリレー・ログファイルに蓄積された更新処理内容を実行することによって、マスタデータベースをレプリケーション(複製)します。 ただし、リレー・ログファイルへのマスタデータベースの更新処理内容の蓄積は、マスタデータベースの更新と同時に行われるわけではありません。そこで、マスタデータベースの更新処理内容をどこまでリレー・ログファイルに蓄積したかをマスタ・情報ファイルへ記録します。 また、リレー・ログファイルの内容をどこまでスレーブデータベースに反映したかを記録するために使用されるのが、リレーログ・情報ファイルです(図3)。 ![]() 図3:MySQLのレプリケーション構造 |
||||||||||||||
| MySQLのレプリケーションの動作 | ||||||||||||||
|
ここではマスタデータベース1台、スレーブデータベース1台でのレプリケーション構成の動作について解説します。 まず、レプリケーションがスタートすると、スレーブデータベースにI/OスレッドとSQLスレッドの2つのスレッドが起動します。I/Oスレッドはマスタデータベースの更新処理内容を取り込む役割を担い、SQLスレッドは取り込んだ更新処理内容をスレーブデータベースに反映する役割を担います。 I/Oスレッドが起動されるとアプリケーションはマスタデータベースに接続します。これにともない、このI/Oスレッドの接続を受けるためのスレッドが、マスタデータベースによって起動されます。このようにマスタデータベースには、複数のスレーブデータベースのI/Oスレッドごとにスレッドが必要になります。 レプリケーションがスタートしている状況にて、マスタデータベースに接続しているアプリケーションがデータベースの更新要求(INSERT、UPDATE、DELETEなどのSQL文の実行)を発行したとします。SQL文を受け取ったマスタデータベースは、更新要求を処理し、その後バイナリ・ログファイルにその内容を記録します。 すると、スレーブデータベースのI/Oスレッドから新規の更新処理内容の転送を要求されているので、マスタデータベースのスレッドはバイナリ・ログファイルへ記録された内容を転送します。 更新処理内容を受け取ったI/Oスレッドは、その内容をリレー・ログファイルに蓄積し、マスタデータベースのバイナリ・ログファイルの内容をどこまで蓄積したかの情報をマスタ・情報ファイルに記録します。このI/Oスレッドのリレー・ログファイルへの蓄積動作は、レプリケーションが動作している間、繰り返し続けられます。 一方のSQLスレッドは、I/Oスレッドによってリレー・ログファイルに新たな更新処理内容が蓄積されると、その内容を読み込みスレーブデータベースに対して実行します。さらに、リレー・ログファイルの内容をどこまでスレーブデータベースに反映したかをリレー・情報ファイルに記録します。このSQLスレッドの動作も、レプリケーションが動作している間、繰り返し続けられます。 このように、スレーブデータベースの2つのスレッドが動作し続けることによって、MySQLのレプリケーションは動作します。なお、スレーブデータベースの停止中にマスタデータベースの更新が行われても、スレーブデータベースは再起動されると停止中の更新処理内容も含めてレプリケーションを継続できます。 なぜならば、I/Oスレッド、SQLスレッドともに、それぞれの処理経過をマスタ・情報ファイル、リレー・情報ファイルに記録しているため、どこから処理を再開すればよいかを判断できるからです。 |
||||||||||||||
| まとめ | ||||||||||||||
|
以上、説明してきたようにPostgreSQL、MySQLともにデータベースをレプリケーションすることは可能です。しかし、その構造や実装方式はまったく異なります。実システムに適用する際には、それぞれの特徴をよく理解し、十分な検証を行うことをお勧めします。 |
||||||||||||||
|
前のページ 1 2 3 4 |
||||||||||||||
|
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||
|
|
||||||||||||||
|
||||||||||||||


