2007.11.18 Sun

MySQL レプリケーション の設定

動作環境

  • Centos 5
  • MySQL 5.0.22 (Master,Slave)

マスターサーバーにレプリケーション用ユーザ作成

通常レプリケーションを行う場合、レプリケーション専用のユーザーを作成します。このユーザーはスレーブがマスタに接続するためのユーザーになります。最低限、与えなければならないのはREPLICATION SLAVE権限です。

mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'192.168.1.0/255.255.255.0' IDENTIFIED BY 'パスワード';

マスタサーバで更新ログを有効にする

# vi /etc/my.cnf

[mysqld]
#replication
# バイナリログを有効
log-bin=mysql-bin
# MySQL識別番号の設定
server-id = 1

設定修正後にmysqlを再起動しておきましょう。

# service mysqld restart

マスタデータのスナップショット作成

テーブル情報が更新されないようにマスタをロックします。

mysql> FLUSH TABLES WITH READ LOCK;

マスタデータのスナップショットの作成

# cd /var/lib/mysql
# tar cpf /var/tmp/mysql-snapshot.tar .

マスタのロック解除

mysql> UNLOCK TABLES;

マスタのバイナリログの位置情報を確認

mysql> SHOW MASTER STATUS;

| File | Position | Binlog_do_db | Binlog_ignore_db |
| mysql-bin.000001 | 1234 | | |

Positionの数字を確認しておきましょう。スレーブでレプリケーションを開始するためにどの状態からの同期かを設定するのに必要になります。

スレーブにマスタデータのスナップショットを設定

まずスレーブサーバーが起動しているようであれば、停止させてください。

# service mysqld stop

マスタからコピーしたtarファイルをMySQLのデータディレクトリと入れ替えるように展開します。

# cd /var/lib/mysql
# rm -fr *
# tar xpf /usr/local/src/mysql-snapshot.tar

スレーブサーバーの設定変更

# vi /etc/my.conf

[mysqld]
server-id=2
master-host=マスタサーバーIP
master-user=repl
master-password=パスワード

レプリケーションの開始

マスタのサーバーを起動した後に、スレーブのサーバーを起動してください。自動でスレーブが開始されるようになっている場合は、

mysql> stop slave;

でレプリケーションの処理をとめて、以下の処理を実行します。

mysql> CHANGE MASTER TO
-> MASTER_HOST = 'マスタサーバーIP',
-> MASTER_USER = 'repl',
-> MASTER_PASSWORD = 'パスワード',
-> MASTER_LOG_FILE = 'mysql-bin.000001',
-> MASTER_LOG_POS = 1234;

MASTER_LOG_POS には Position の番号を指定してください。
処理実行後に

mysql> start slave;
mysql> SHOW MASTER STATUS;

上記処理実行結果画面にてエラーが発生していない場合はレプリケーションが正常に開始されているので、マスタサーバーのデータを追加・修正して、リアルタイムに情報がスレーブに反映されるか確認してください。

レプリケーションについて参考サイト

システム構築に関する覚書トップページへ