ITインフラ技術の実験室ITインフラ技術の実験室Linuxを中心に、仮想化やネットワーク、Windowsまで、ITインフラ技術に関するノウハウを幅広く紹介します。Flash)はじめに本サイトで使用しているMySQLバージョン:5.0.51a-24MySQLレプリケーションは、特定のMySQLサーバのデータを更新すると他のMySQLサーバに更新結果を複製することができる技術です。複製元をマスタサーバ、複製先をスレーブサーバと呼びます。具体的には、マスタサーバ側でMySQLのデータを更新すると、実行されたSQL文がバイナリログとしてスレーブサーバ側に転送され、同様に実行されます。スレーブサーバに対するマスタサーバは1台ですが、マスタサーバに対するスレーブサーバは複数設定できます。そのため、更新処理を行うマスターサーバに対して参照処理を行うスレーブサーバを複数用意することで、参照処理を負荷分散させることができます。アクセス数増加に伴い、スレーブサーバを増やすことでスケールアウトが容易にできるという利点もあります。マスタサーバを複数用意することで更新処理を負荷分散させるためにマルチマスタ構成というのも使われますが、その道のプロの方もお勧めしていませんので、気軽に手を出すと痛い目を見そうです。MySQLレプリケーションの注意点MySQLレプリケーションは設定が非常に簡単でデータベースを冗長化させることができ、処理も非常に軽いのでお勧めですが、いくつか注意点もあります。マスタサーバとスレーブサーバで差分が生じる可能性があるマスタサーバはスレーブサーバ側でバイナリログが実行されるまで待つことなく自身のデータを更新し、スレーブサーバへの転送とスレーブサーバでの実行も非同期で行われるため、マスターで更新した結果が確実に即時スレーブに反映されているとは限りません。そのため、マスタサーバが更新された直後にdownすると、スレーブサーバにその更新結果が反映されていない可能性があります。ネットワークの冗長化は別途検討する必要があるマスタ・スレーブサーバはそれぞれ別IPアドレスのため、マスタサーバ故障時に自動的にスレーブに接続させるにはアプリケーション側での工夫や他の冗長化技術との併用が必要になります。バックアップは別の手段を利用するオペレーションミスでマスタサーバ側のデータを消してしまうと、当然スレーブ側のデータも消えてしまうことになるので、ある時点でのバックアップ取得も別の手段で用意しておく必要があります。172.0.0.3server-idはマスタとスレーブで被らないように設定します。自宅サーバではアプリサーバとDBサーバを一台で兼用していたりするので、bind-addressに要注意です。172.0.0.0/29TCPWrapperも開放しておきます。両方向の通信を考慮する必要がありますので両系に同じ設定を行います。mysqld-bin.indexバイナリログが出力されていることを確認します。COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;バイナリ形式なので、mysqlbinlogコマンドを使用して確認します。mysql_upgrade_infoまだスレーブ設定していないため、現時点ではスレーブ関連のファイル(後述)はありません。sec)my.cnfの通りであることを確認します。sec)my.cnfの通りであることを確認します。sec)スレーブサーバからマスタサーバに接続する際のユーザ「replication」PW「abcdefgh」を作成しました。権限は最低限「REPLICATION」のみを与えます。sec)Fileはマスタサーバが現在書き込んでいるバイナリログのファイル名、Positionは現在までに書き込んだバイナリログの位置です。スレーブ側で上記の値を指定するため、メモしておきます。sec)現時点ではlocalhostからrootユーザでmysqlデータベースに接続しているスレッドのみしかありません。TOコマンドを実行しています。レプリケーションを開始するバイナリログファイルを指定。statusの実行結果にあるPositionを指定ここで設定された内容はデータディレクトリのmaster.infoに保存されます。relay-log.info新たにスレーブ関連のファイルが作成されました。master.info14mysqld-bin.00000198172.0.0.2replicationabcdefgh3306600※master.infoの書式はこちらを参照(MySQL5.1のマニュアルですが5.0も同じです)以下に引用しておきます。このログはその時点でマスタ側から読み込み中。その時点分のマスタの読み込みは完了している。インターバル時間(秒)。relay-log.info./mysqld-relay-bin.000002236mysqld-bin.00000198※relay-log.infoの書式はこちらを参照(MySQL5.1のマニュアルですが5.0も同じです)以下に引用しておきます。ファイル内の現在位置。この位置までのイベントはスレーブのデータベースで実行済み。sec)上記ピンクの箇所がYesになっているので、SQLスレッドとI/Oスレッドが正常に動作しています。sec)マスター側にデータベースtestを作成しました。sec)スレーブ側では何もしていないのにデータベースtestが作成されています。sec)次は、データベースの中身(テーブル、データ)がレプリケーションされるか確認します。上記時点ではまだ空っぽです。sec)テーブルとデータもコピーされました。最後に現時点での各ファイルの値の変化を確認して終了します。コメントをキャンセルメールアドレスが公開されることはありません。