ずぶ濡れ小堤です。
さて、MySQL5のレプリケーション設定を行ったのでメモ。
MySQLのバージョンはCentOS5を入れたときに、いれることができるRPM版の5.0.22です。
今回は、マスタ、スレーブの2台構成で、マスターを更新するとスレーブも自動的に更新されるというレプリケーションを行います。
マスターを2つ作って、お互いを更新しあうデュアルマスタや、マスターを複数で構成するマルチマスタの設定などは、そのうちやれればやろうかな。
MySQLはインストールされているものとして、設定をはじめます。
手順は下記の通りです。
- ユーザの追加
- マスタ設定
- スレーブ設定
- データの移行
- マスターのMySQLを再起動して、スレーブを再起動
- 確認
1.ユーザの追加
マスタに対してレプリケーション用ユーザを作ります。スレーブがこのユーザを使って通信を行います。
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@”192.168.1.0/255.255.255.0″ IDENTIFIED BY ‘パスワード’;
今回は192.168.1.xのLAN内に2台のMySQLサーバがある状態で試しています。
2.マスタ設定
/etc/my.cnf を編集します。[mysqld]に対して
log-bin
server-id=1
と設定します。
3.スレーブ設定
スレーブの/etc/my.cnf にも設定を追加します。同様に[mysqld]の項目です。
server-id=2
master-host=マスターサーバのアドレス
master-user=repl
master-password=パスワード
master-port=3306
と設定します。
4.データの移行
データ移行を行います。何かマスタにデータがあろうが、なかろうがやったほうがいいです。下記はマスタサーバで作業します。
mysqldump –all-databases –master-data > /tmp/mysql_dump.sql
mysql_dump.sqlをスレーブサーバにコピーします。
コピーしたら、ダンプを展開します。下記はスレーブサーバで作業します。
mysql -u root < /tmp/mysql_dump.sql
5. マスターのMySQLを再起動して、スレーブを再起動
まんまです。先にマスタを起動してから、スレーブを起動してください。
6.マスタを更新して、スレーブに反映されているかを確認
一度うまくいってしまえばこっちのものです。マスタにデータベースを追加してり、テーブルの内容を更新してみてください。
その後スレーブのデータをみてみてください。マスタで作ったデータベースや、テーブル更新などが反映されているはずです。
レプリケーションは万能薬ではありませんが、負荷分散や拡張性、バックアップなどを考える場合に大変有効です。
設定してしまえば、PHPのプログラムから操作する際には、マスタに更新系処理を、検索系をスレーブにして、スレーブの前にロードバランサーを後にいれることにより、予算やアクセス数によって、DBの負荷分散が容易に行えます。