« 「.htaccess」の親切で詳細なリファレンスを見つけました。 | メイン | 第3回 楽天アフィリエイト選手権にエントリー! »

Ramdom Entry Pickup

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


[PR] 「ほったらかしアフィリエイト実践会」わずか108円であなたに代わって優秀なライターが、毎日3本の最新アフィリエイト記事を書いてくれる!

Category : [ Linux, 自宅サーバ ]
December 11, 2006 22:04
TAG : [Home Server,MySQL]





ちょっと思うところあり、自宅のセカンダリーサーバーでも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 こんな技術解説書がもっと世にあれば




ソーシャルブックマーク

「del.icio.us」にブックマーク|このエントリーの「del.icio.us」での登録状況|はてなブックマーク|はてなブックマーク|テクノラティ・リンク検索結果|Technorati|BlogPeople Instant Bookmark|BlogPeople Tags|ドリコムRSS|ニフティクリップ|livedoorクリップ|livedoorクリップ|ECナビに登録|add-fc2.gif|FC2ブックマークでの登録状況

このエントリーと関連性が高いと思われるエントリー


このエントリーに関連するかもしれない商品


おすすめ商品


Link Information

Link HTML:

トラックバックURL:

コメント

お久しぶりです!

DBのレプリケーションってまた趣味の割りには偉いもんに手を出しましたね~
(電気代が・・・)

トランザクションの負荷分散用かな?

>もかまたり さん

おひさしぶりです!

>トランザクションの負荷分散用かな?

そう!、その通り!!
さすが察しが早い(^^;)

ゆくゆくはロードバランサーを導入予定!
といっても、ソフトウェア的なロードバランサーだけど。。(^^;)

コメントする