MySQLのレプリケーションをしてみた。

PHP
広告

ちょっと思い立ってMySQLのレプリケーションをしてみた。
今までMySQLは基本的には1台でしか使っていなかったのでレプリケーションの必要性がなかったけど、やりたいことがあってレプリケーションをしてみた。
ググってみると、結構面倒な感じだったけど、2台ともphpMyAdminを使ったら簡単にできたのでメモ。

今回試したのは、linuxサーバとWindowsサーバのMySQL。
Windowsサーバの方は外部に公開していないので、ApacheからMySQLから何も入っていない状態。
今回、MySQLは普通に使うので通常通りのインストール。

phpMyAdminを使いたいけど、Apacheをインストールしたくは無かったので、
インストールしないで使えるApacheを使ってphpMyAdminを利用。
このサイトがわかりやすかった。

で、本題。今回マスタはLinux、スレーブはWindows。
使用するMySQLのバージョンは5.5

マスタ側の操作
・phpMyAdminでレプリケーションを選択。
・スレーブレプリケーションのユーザを追加
 →レプリケーション用のユーザIDとパスワードを入力してユーザを追加
・マスタレプリケーションの設定から、すべてのDBを対象とするか一部のDBを対象とするかを選択。
 →今回は一部のDBのみで良いので、そのように設定。
 →my.iniに画面上に出た内容を追加。Server-IDをメモ。
 →バイナリログの自動削除設定も追加(mysqldセクションにexpire_logs_days=xx) xxは日数
 →mySQLの再起動
・iptablesで3306ポート開放。(スレーブ側のIPだけ許可)
・対象DBのエクスポート

スレーブ側の操作
・my.iniにマスタ側のServer-IDと違うものを追加。
 server-id=xxxxxx (マスタ側のServer-IDに1を足したものにした。)
・MySQLサービスの再起動
・phpMyAdminでレプリケーションを選択
・スレーブレプリケーションの設定から、先ほど作ったユーザIDとパスワードとマスタ側のIPを入力して登録。
・すべてのDBを対象の場合は特に必要ないけど、一部のDBのみを対象の場合は、my.iniに以下の内容を追加
 replicate-do-db=xxxxxx (xxxxxxはDB名)
・MySQLサービスの再起動
・先ほどマスタ側でエクスポートした対象DBのインポート
・レプリケーションのスレーブの操作から、全開始

マスタ側にデータを入れてみて、スレーブ側に入ればOK。
今回は、データが無い状態からだったので、楽ちんだったのかもしれない。
すでにデータが入るような状態の場合は、一度ロックをかけて入ってこないようにしてから、操作した方が良いね。

もっと大変かと思ったら、phpMyAdminのおかげで簡単にできた。

じゃあまたね。