#topicpath
----
//ここにコンテンツを記述します。
MySQLには、他のデータベースサーバにネットワーク経由でデータを複製する、レプリケーションという機能があります。マスターというデータベースから、スレーブというN台のデータベースにデータをコピーして、負荷分散をはかることができます。


**マスターの設定 [#pc38c3d3]

***バイナリログとserver-idの設定。 [#k93ee47a]
/etc/my.cnf (windowsだったら${install_root}/my.ini)に以下を追加
 [mysqld]
 log-bin
 server-id=10 <- 系でUniqueにする
サーバを再起動して、ログインして以下のコマンドで確認
 mysql> show master status;
 +----------------------------+----------+--------------+------------------+
 | File                       | Position | Binlog_Do_DB | Binlog_Ignore_DB |
 +----------------------------+----------+--------------+------------------+
 | xxxxxxxxxxxxxxxxxxx.000001 |       98 |              |                  |
 +----------------------------+----------+--------------+------------------+
 1 row in set (0.00 sec)
 mysql> show variables like 'server\_id';
 +---------------+-------+
 | Variable_name | Value |
 +---------------+-------+
 | server_id     | 10    |
 +---------------+-------+
 1 row in set (0.00 sec)


***レプリケーション用のユーザID追加 [#x439e516]
スレーブがレプリケーションのために接続してくるため、専用のユーザIDを用意しておきます。
 mysql> grant replication slave on *.* to repl@'192.168.10.0/255.255.255.0' identified by 'qa55wd';
 Query OK, 0 rows affected (0.00 sec)
 mysql>

**スレーブの設定 [#j6bdc915]
***マスターのデータをコピー [#n9d37f78]
マスターのデータをごっそりコピーします。マスターがLinuxなら
 > cd /var/lib/mysql/
 > tar cpf /var/tmp/mysql.tar .
として、そのままスレーブの同じディレクトリに展開します。Windowsなら${install_root}/data/ ディレクトリが該当のディレクトリです。

***マスターに接続する設定を記述 [#l20cdc9f]
my.iniもしくはmy.cnfに以下を追加
 master-host=192.168.10.10 <-マスターのIPアドレス、ノード名
 master-user=repl <- マスタで作ったレプリケーション用ID
 master-password=qa55wd <-そのIDのパスワード
server-idをマスターと違うモノにすることを忘れずに。。これでスレーブを再起動すると、エラーログに

 051105 11:04:55  mysqld started
 051105 11:04:55  InnoDB: Started; log sequence number 0 43655
 051105 11:04:55 [Warning] Neither --relay-log nor --relay-log-index were used; 
 so replication may break when this MySQL
 server acts as a slave and has his hostname changed!! Please use 
 '--relay-log=kino-relay-bin' to avoid this problem.
 051105 11:04:55 [Note] /usr/sbin/mysqld-max: ready for connections.
 Version: '5.0.15-max-log'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  
 MySQL Community Edition - Experimental (GPL)
 051105 11:04:55 [Note] Slave SQL thread initialized, starting replication 
 in log 'FIRST' at position 0, relay log './kino-relay-bin.000001' position: 98
 051105 11:05:00 [Note] Slave I/O thread: connected to master 
 'repl@192.168.10.10:3306',  replication started in log 'FIRST' at position 4
などと表示されればOKです。マスター側で更新や削除などを行うと、スレーブのテーブルに即座に反映されます。


***いろいろつぶやき [#c3be51fe]
-レプリケーションするテーブル(かスキーマ)の範囲は?
-スレーブ側にinsertとかしちゃうと、マスターでInsertしたときにキーがダブったり。。まあ当たり前か。
-何台までスレーブになれっかなあ。
-スナップショットとかいう用語が出てくるけど、なんなのかなあ。。


***参考 [#jf188da0]
[[WEB-DB PRESS Vol.22:http://www.amazon.co.jp/exec/obidos/redirect?tag=kinosite-22&creative=203&camp=23&link_code=st1&path=ASIN/4774120979]]を参考にさせていただきました。




----
この記事は
#vote(おもしろかった[2],そうでもない[0])
#vote(おもしろかった[3],そうでもない[0])

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS