- 追加された行はこの色です。
- 削除された行はこの色です。
#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;}