MySQL5 レプリケーション設定

ずぶ濡れ小堤です。

さて、MySQL5のレプリケーション設定を行ったのでメモ。

MySQLのバージョンはCentOS5を入れたときに、いれることができるRPM版の5.0.22です。
今回は、マスタ、スレーブの2台構成で、マスターを更新するとスレーブも自動的に更新されるというレプリケーションを行います。
マスターを2つ作って、お互いを更新しあうデュアルマスタや、マスターを複数で構成するマルチマスタの設定などは、そのうちやれればやろうかな。

MySQLはインストールされているものとして、設定をはじめます。
手順は下記の通りです。

  1. ユーザの追加
  2. マスタ設定
  3. スレーブ設定
  4. データの移行
  5. マスターのMySQLを再起動して、スレーブを再起動
  6. 確認

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の負荷分散が容易に行えます。

MySQL5 レプリケーション設定