Top / MySQL / レプリケーション

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です。マスター側で更新や削除などを行うと、スレーブのテーブルに即座に反映されます。

いろいろつぶやき

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

参考

WEB-DB PRESS Vol.22を参考にさせていただきました。


この記事は

選択肢 投票
おもしろかった 3  
そうでもない 0  

Top / MySQL / レプリケーション

現在のアクセス:11830


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-11-05 (金) 11:53:11 (4920d)