MySQLでのレプリケーション

目次

レプリケーションとは
レプリケーションの用途およびメリット・デメリット
レプリケーションの設定方法
レプリケーションの運用

レプリケーションとは

レプリケーションとは、あるMySQLサーバで更新されたデータを別のMySQLサーバに複製する機能。

MySQLではマスタからスレーブヘの複製は非同期に行われるのが標準である*1

ここで、レプリケーションの種類と仕組みについて整理する。

  片方向レプリケーション 双方向レプリケーション
非同期レプリケーション ・マスタ→スレーブという片方向でのレプリケーション
・I/Oスレッドによる「スレーブでのバイナリログの受信」とSQLスレッドによる「スレーブでのバイナリログの実行」という2段階のステップが非同期に行われるレプリケーション
・マスタを2個以上持たせて、それぞれのマスタを更新できるようにした構成。MySQL Clusterが双方向レプリケーションの機能を有する。
準同期レプリケーション ・マスタ→スレーブという片方向でのレプリケーション
・I/Oスレッドによる「スレーブでのバイナリログの受信」は同期的に行われるが、SQLスレッドによる「スレーブでのバイナリログの実行」は非同期に行われるレプリケーション
・マスタを2個以上持たせて、それぞれのマスタを更新できるようにした構成。MySQL Clusterが双方向レプリケーションの機能を有する。
同期レプリケーション MySQLには同期レプリケーションが無い。 MySQLには同期レプリケーションが無い。

非同期レプリケーションでは、マスタのバイナリログにデータを書き込んだらクライアントに応答を返すが、準同期レプリケーションではスレーブのリレーログにデータを書き込んでからクライアントに応答を返す。データベースへの反映に関しては非同期レプリケーションと同じく非同期で行われる。

詳細は次のblogが参考になりそうだ。

レプリケーションの用途およびメリット・デメリット
レプリケーションの用途は次の2つであろう。

・性能向上
・可用性向上

また、片方向/非同期および片方向/準同期レプリケーションのメリット・デメリットをあげる。同期レプリケーションおよび双方向レプリケーションについては、今回は触れない。

  片方向/非同期レプリケーション 片方向/準同期レプリケーション
メリット ・スレーブのリレーログへの反映も、スレーブでのデータの反映も非同期で行われるため比較的性能が良い(同期による待ちが生じない)。 ・スレーブのリレーログへの反映が同期であるため、クライアントへ応答が返った時に更新情報がスレーブサーバへ届いている(スレーブDBへのデータ反映ではない)ことが保証される。
デメリット ・非同期であるため、マスタに障害が発生した場合に、マスタのバイナリログのスレーブへの反映が保証されない。 ・マスタからスレーブ間のリレーログとのやりとりが同期であるため、その分レスポンスタイムが悪くなる。

レプリケーションの設定方法
別の機会に更新します。
(追記)「(続)MySQLでのレプリケーション 〜 実践編1「レプリケーションの設定」」に更新した。

レプリケーションの運用
別の機会に更新します。
(追記)「(続)MySQLでのレプリケーション 〜 実践編2「レプリケーションの運用」」に更新した。

*1:これはMySQLの標準機能が「片方向/非同期レプリケーション」であるという意味だ。これに加えてMySQL5.5からは「片方向/準同期レプリケーション」も可能である。これは、スレーブがバイナリログを同期的に受信するが、バイナリログの反映は非同期に実行するレプリケーション方式である。なお、現時点で、MySQLに同期レプリケーションの機能は無い。