MySQLをレプリケーションして2台運用にする(ミラーリング?)

  • 投稿日:
  • by

ちょっと思うところあり、自宅のセカンダリーサーバーでもMySQLを走らせることにしました。

で、プライマリーサーバーのMySQLとセカンダリーサーバーのMySQLを同期させる方法はないかと探していたら、「レプリケーション」という機能を使えばそれが実現することを知りました。


以下、解説するやり方の前提として、


  • マスターとなるMySQLを一時停止が可能なこと。

  • スレーブとなるMySQLを新規で立ち上げる

です。。。

まぁ、端的に言えば、スレーブMySQLを追加したい、という場合ですね。

前置きが長いですが、、、それでは設定方法です。

まず、

まずはマスターとなるMySQLに、mysqlコマンドを使って、レプリケーション用のMySQLユーザ−を追加します。

# /usr/bin/mysql -u root -p
# password:

> grant replication slave on *.* repl@'%' identified by '<password>';

上記のコマンドにより、「repl」というユーザーが追加され、レプリケーション権限が与えられました。

このユーザーは、後から出てくる、スレーブMySQLからの接続する時のユーザー・パスワードとなります。


次に、マスターとなるMySQLと、スレーブとなるMySQLの両方を停止します。
(停止方法はいろいろあるので割愛します(^^;))

そして、現在のマスターの状態をそのままスレーブマシンにコピーします。

コピーはスコープやrsyncなどを使ってコピーしましょう。

# cd /var/lib/mysql
# tar cpf /var/tmp/mysql.tar .
# scp /var/tmp/mysql.tar myslave:/var/tmp/mysql.tar

そして、コピーしたファイルをスレーブ側で展開し、マスターと同じ状態にします。

# cd /var/lib/mysql
# rm -fr *
# tar xpf /var/tmp/mysql.tar


続いて、マスターMySQLの設定ファイルである、「my.cnf」を設定します。

以下を追加します。


[mysqld]
log-bin
server-id=1

サーバーインストール等で、すでにMySQLが稼働している場合、マスター側ではすでに上記の記述が「my.cnf」に書かれている場合があります。

server-idはこの後設定するスレーブ側と一緒にならなければ、何でも良いと思います。一意な数値である必要があります。


ここでマスター側のMySQLを起動します。

以下のsqlコマンドで起動していることを確認できます。

> show master status;


次にスレーブ側の「my.cnf」を設定します。


以下の行を追加します。

[mysqld]
server-id = 2
master-host = sv1 (マスターマシンのホスト名)
master-user = repl (先述で追加したmysqlユーザー名)
master-password = password (先述で追加したユーザーのパスワード)
master-port = 3306 (マスターサーバーのポート番号)

これで、スレーブ側のMySQLを起動します。

これでレプリケーションが開始されます。

MySQLのログでレプリケーションを始まったことを確認します。

#cat /var/log/mysqld.log

061211 18:27:46 [Note] Slave I/O thread: connected to master 'repl@sv1:3306', replication started in log 'FIRST' at position 4


試しに、マスター側で、追加・更新等の操作をし、スレーブ側で同様に反映されるのを確認します。

私の場合、MySQLはMovableTypeでしか使っていないので、エントリーを追加したりで確認しました。


これでマスター側でSQL操作をしたら、スレーブ側での同様に反映され、同期がとれた状態になります。


あとの細かいコマンドなどは、上記参考URLを参照ください(^^;)


MySQL全機能リファレンス
鈴木 啓修
技術評論社
売り上げランキング: 30434
おすすめ度の平均: 4.5
5 最高のMySQLリファレンス本
5 これ一冊あればOK
4 予想とは違っていましたが


実践ハイパフォーマンスMySQL
ジェレミ・D. ザウドニ デレク・J. ベリング Jeremy D. Zawodny Derek J. Balling 林 秀幸
オライリージャパン
売り上げランキング: 91393
おすすめ度の平均: 4.5
4 MySQLの裏技集
4 もう少し分量があれば・・・
5 こんな技術解説書がもっと世にあれば