IThaiのブログ

IT関連の話題やタイに関する様々なことを書いていきます。

ローカルPCでmysqlを2つ動かしてレプリケーションする

大規模Webサイトなら負荷分散は必須ですよね。

私のプロジェクトでもかなり重要度が高いです。

そこで、今回は負荷分散技術のひとつである
DBレプリケーション機能を触ってみます。

特に本番環境と開発環境で環境が違っているのは致命的でもあったので、
まずはDBのレプリケーション機能をローカル開発環境にも整備してみました。

以下は手順です。

1. Mysqlを2つインストール
A(マスター), B(スレーブ)

2. Aのmy.iniに以下を追加
server_id=1
log_bin
3. Bのmy.iniに以下を追加
server_id=2

4. Aにreplユーザー追加
mysql> GRANT REPLICATION SLAVE ON *.* TO
   repl@localhost IDENTIFIED BY 'password'

5. Aのバイナリログ状態を確認
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
mysql> UNLOCK TABLES;
る。

6. Bにレプリケーションを設定
mysql> CHANGE MASTER TO
        MASTER_HOST='localhost',
        MASTER_USER='repl',
        MASTER_PASSWORD='password',
        MASTER_LOG_FILE='a-bin.000001', //5で確認
        MASTER_LOG_POS=79; //5で確認

7. Bでレプリケーションを開始
mysql> START SLAVE;

これだけで結構簡単に整備することができました。

レプリケーションにバイナリログが必要な理由は何だろうと思っていましたが、どうやらレプリケーションの仕組みとして、バイナリログ (binlog)を利用してスレーブDBに書き込みを行っているみたいです。