TOPサーバ構築・運用> MySQL標準レプリケーション機能の構造
徹底比較!! PostgreSQL vs MySQL
徹底比較!! PostgreSQL vs MySQL

第4回:レプリケーションの比較
著者:NTTデータ   藤塚 勤也   2006/5/22
前のページ  1  2  3  4
MySQL標準レプリケーション機能の構造

   MySQLのレプリケーション機能では、役割の異なるいくつかのファイルが使用されます。レプリケーションにて使用するファイルのうち、マスタデータベース内で使用するものは、バイナリ・ログファイルです。

   バイナリ・ログファイルは、デフォルトでデータベースディレクトリに存在し、マスタデータベースへの更新処理内容のすべてが書き込まれます。バイナリ・ログファイは、レプリケーションのためだけに使用されるのではなく、データベース障害時のリカバリにも使用されます。

   また、スレーブデータベース内でレプリケーション用に使用するファイルは、「マスタ・情報ファイル」「リレー・ログファイル」「リレーログ・情報ファイル」の3つです。この3つのファイルは、デフォルトでデータベースディレクトリに存在します。

   リレー・ログファイルは、マスタデータベースでの更新処理内容を蓄積する役割を持ちます。スレーブデータベースは、このリレー・ログファイルに蓄積された更新処理内容を実行することによって、マスタデータベースをレプリケーション(複製)します。

   ただし、リレー・ログファイルへのマスタデータベースの更新処理内容の蓄積は、マスタデータベースの更新と同時に行われるわけではありません。そこで、マスタデータベースの更新処理内容をどこまでリレー・ログファイルに蓄積したかをマスタ・情報ファイルへ記録します。

   また、リレー・ログファイルの内容をどこまでスレーブデータベースに反映したかを記録するために使用されるのが、リレーログ・情報ファイルです(図3)。

MySQLのレプリケーション構造
図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データ  藤塚 勤也
著者プロフィール
株式会社NTTデータ   藤塚 勤也
基盤システム事業本部 オープンソース開発センタ シニアスペシャリスト。
日本タンデムコンピューターズ(現日本HP)を経て、2003年よりNTTデータにてOSS分野に参画。日頃はオリジナルOSSの開発や、OSSを用いたシステム構築への技術支援に従事。「RDBMS解剖学」(翔泳社)を共著。

INDEX
第4回:レプリケーションの比較
  はじめに
  PostgreSQLとMySQLのレプリケーション
  PostgresForestの構成
MySQL標準レプリケーション機能の構造