TOP
>
サーバ構築・運用
> MySQL標準レプリケーション機能の構造
徹底比較!! PostgreSQL vs MySQL
第4回:レプリケーションの比較
著者:
NTTデータ 藤塚 勤也
2006/5/22
前のページ
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
著者プロフィール
株式会社NTTデータ 藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。
INDEX
第4回:レプリケーションの比較
はじめに
PostgreSQLとMySQLのレプリケーション
PostgresForestの構成
MySQL標準レプリケーション機能の構造