2012年2月24日金曜日

稼働中のデータベースサーバにレプリケーションを追加する手順

こんにちは、忙しさで書くのを忘れていたhodori です。

そんなに多くある事例ではないと思いますが、稼働中のWebサービスで別プラットフォーム展開を同サーバに同居する形でサービスを提供し新しいプラットフォーム用のデータベースを追加する場合などにほとんど既存サービスに影響がない形でレプリケーションを追加する手順です。

ま、自分でやってみてうまくいったのでメモ代わりです。


1.masterとslaveの両DBに新しく追加するデータベースを作成します。
[master DB server]
CREATE DATABASE database03;
[slave DB server]
CREATE DATABASE database03;

2.レプリケーションを追加するためにslaveのレプリケーションを一度止めます。
[slave DB server]
SHOW SLAVE STATUS \G;
STOP SLAVE;

3.masterの設定に新しくレプリケーションするデータベースを登録して、反映させます。
[master DB server]
vim /etc/my.cnf
# replication settings
# master
log-bin
server-id=1
#log-slave-updates
#sync_binlog=1
expire_logs_days=14
replicate-do-db=database01
replicate-do-db=database02
replicate-do-db=database03 <<< 追加
service mysqld reload

4.slaveの設定に新しくレプリケーションするデータベースを登録して、再起動させます。
 注) 自分で試したときはなぜかreloadで反映させてもレプリケーションされずに再起動が必要でした。
[slave DB server]
vim /etc/my.cnf
# slave
server-id=11
read_only
#master-host=dbm.in
#master-port=
#master-user=repl
#master-password=CabaProMyRep
replicate-do-db=database01
replicate-do-db=database02
replicate-do-db=database03 <<< 追加
service mysqld restart

5.レプリケーションの設定がすべて終わったのでslaveのレプリケーションを再起動させます。SLAVE STATUSを確認すると新しいデータベースがレプリケーションされているのが確認できます。
[slave DB server]
START SLAVE;
SHOW SLAVE STATUS \G;


注意するべき点はmasterに新しく作ったデータベースはレプリケーション設定が終わるまでテーブルが一つもない状態にしておくことです。このやり方はデータベースにデータが一つもない状態なのを利用してデータのバックアップと移動の手順を省いた、サービスが開始される前だからこそできる手順だったりします。