2008年08月05日

MySQL5.1のレプリケーション設定

今回はDBの冗長化。今回はMySQL5.1にて。

MySQL自体のレプリケーションは結構歴史が古い。3系の頃からあったはず。

その分、結構参考になるサイトはあって、いくつか見比べて実際に行った方法。

・マスター側の設定

my.confのReplication Master Server部の内容を確認。無い場合は追加。

log-bin=mysql-bin
server-id=1
(ここは他のDBサーバーに対してユニークな値を設定)

mysqlの再起動後、レプリケーション用のユーザーを追加。

mysql> GRANT REPLICATION SLAVE ON *.* TO repl@"192.168.0.%" IDENTIFIED BY 'hogehoge';

※全てのDBに対して、192.168.0.のネットワークマシンから接続を許可する。
  ネットワーク部と、パスワードは適したものに変更すること。

現在のバイナリログ名とオフセットを調べる。

mysql> SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000018 | 158995 | | |
+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

この値を、スレーブ系に設定するので、メモ。


・スレーブ側の設定

my.confのReplication Master Server部を無効にし、Replication Slaveの項目の以下を有効にする。

server-id=2
skip-slave-start (これは追加。自動的にスレーブがスタートするのを抑制)
replicate-ignore-db=test (レプリケーション除外DB)
replicate-ignore-db=system_db

※設定例によっては、master-hostやmaster-userなどを書いている場合もある。しかしいったんスレーブが設定されると、これらの情報は/var/lib/mysql/master.infoに保存されてmy.cnfは無視されるので、my.cnfに書く必要はない。


マスター側とDBの内容を同じ状態にした後、スレーブのDBをマスターに接続する。

マスターDBのIP、レプリケーション用のユーザー、先ほど確認したバイナリログ名とオフセットを設定する。

※既にスレーブが起動している場合には、stop slave;を実行。

mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.0.41',
MASTER_USER='repl',
MASTER_PASSWORD='hogehoge',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000018',
MASTER_LOG_POS=158995;


スレーブを開始する。

mysql> start slave;

ここまでの作業でレプリケーションはできている。

後は確認作業。

マスターの状態を表示する。

mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000002
Position: 186113
Binlog_Do_DB:
Binlog_Ignore_DB:

スレーブの状態を表示する。Slave_IO_Running:とSlave_SQL_Running:がyesだとslaveとして動いている。

mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: db1
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 186113
Relay_Log_File: db2-relay-bin.000004
Relay_Log_Pos: 186250
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 186113
Relay_Log_Space: 186250
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0


マスターでプロセスを見てみる。Binlog Dumpがあればよい。

mysql> show processlist\G
*************************** 1. row ***************************
Id: 22
User: root
Host: localhost
db: mt
Command: Query
Time: 0
State: NULL
Info: SHOW PROCESSLIST
*************************** 2. row ***************************
Id: 41
User: repl
Host: db2.grandarbre.net:56174
db: NULL
Command: Binlog Dump
Time: 323
State: Has sent all binlog to slave; waiting for binlog to be updated
Info: NULL


スレーブでもプロセスを見ると、2つのConnectがある。

mysql> show processlist\G
*************************** 1. row ***************************
Id: 2
User: root
Host: localhost
db: mt
Command: Query
Time: 0
State: NULL
Info: show processlist
*************************** 2. row ***************************
Id: 3
User: system user
Host:
db: NULL
Command: Connect
Time: 191
State: Waiting for master to send event
Info: NULL
*************************** 3. row ***************************
Id: 4
User: system user
Host:
db: NULL
Command: Connect
Time: 11
State: Has read all relay log; waiting for the slave I/O thread to update it
Info: NULL


後は実際にマスターDBを更新してみて、スレーブDBに反映されているか確認する。

以上!!
posted by hana at 23:21| Comment(0) | TrackBack(0) | DB,SQL関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック