MySQLには、他のデータベースサーバにネットワーク経由でデータを複製する、レプリケーションという機能があります。マスターというデータベースから、スレーブというN台のデータベースにデータをコピーして、負荷分散をはかることができます。 マスターの設定 †バイナリログとserver-idの設定。 †/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追加 †スレーブがレプリケーションのために接続してくるため、専用のユーザ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> スレーブの設定 †マスターのデータをコピー †マスターのデータをごっそりコピーします。マスターがLinuxなら > cd /var/lib/mysql/ > tar cpf /var/tmp/mysql.tar . として、そのままスレーブの同じディレクトリに展開します。Windowsなら${install_root}/data/ ディレクトリが該当のディレクトリです。 マスターに接続する設定を記述 †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です。マスター側で更新や削除などを行うと、スレーブのテーブルに即座に反映されます。 いろいろつぶやき †
参考 †WEB-DB PRESS Vol.22を参考にさせていただきました。 この記事は 現在のアクセス:11832 |