2016年5月2日月曜日

レプリケーションの設定の実際

○ 新たにスレーブのPCとして追加したいとき設定変更が必要なところ
・/var/lib/tomcat7/webapps/SGW/WEB-INF/web.xmlの一部を変更する必要があります。
<context-param>
<param-name>master_hostname</param-name>
<param-value>ここにマスターのPCのipアドレスを入力</param-value>
</context-param>
とします。
 マスターのMYSQLのあるホストのIPアドレスを指定することで、書き込みはすべていったんマスターのMyqlに保存されます。読み込みは、通常通りスレーブのPCからするので、変更不要です。
 つまり、スレーブでの書き込みは、スレーブのWebアプリで入力受付→マスターのMysqlに保存→スレーブへレプリケーション(転送)(スレーブのMysqlに保存)という流れになります。

・drop database skt;としてから、新たにsktのデータベースを作成し直します。
方法は以下の通りです。

 マスターのMySQL サーバーを「A」と呼ぶことにします。新たに追加する MySQL サーバーを「B」を Slave サーバーだとします。
※のついたところは、すでに、マスターの設定ができていれば不要です。

①Bサーバの構築
mysql > create database skt character set utf8;

※②Aサーバにレプリケーション用ユーザ作成とmy.cnfの設定
mysql > GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.16.1.0/255.255.255.0' IDENTIFIED BY 'password';
/etc/mysql/my.cnf 内に追加設定します# vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1001
ここまで設定したら
>service mysql restartで
Aサーバを再起動します。

③Bサーバにレプリケーション用サーバ作成とmy.cnfの設定
mysql > GRANT ALL PRIVILEGES ON *.* TO 'repl'@localhost IDENTIFIED BY 'password';
# pico /etc/mysql/my.cnf
※ただし、Windowsの場合はmy.iniというファイルに設定する。
[mysqld]
log-bin=mysql-bin
server-id=1002
1002という番号は、複数のスレーブがある場合それらと重複しないようにします。

Bサーバーを再起動します。

※④Aサーバのログ位置の確認とデータベースのデータ取り出し
ここで、AサーバのMysqlにロックがかかります。
mysql > FLUSH TABLES WITH READ LOCK;
mysql > SHOW MASTER STATUS;
+----------------------+-----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+-----------+--------------+------------------+
| mysql-bin.000031 | 285 | | |
+----------------------+-----------+--------------+------------------+
という表示の mysql-bin.000031 と 285 の2つの値をメモしておきます。
# mysqldump -u root -p skt --lock-all-tables > skt.sql
これで指定した skt データベースのダンプを skt.sql というファイルに取得することができます。
取得後は再度もう一つのターミナルに戻って以下のコマンドを実行し、ロックを解除します
mysql > UNLOCK TABLES;

⑤Bサーバへのskt.sqlデータのコピー と データのBサーバへの展開、2つの値の設定
④で取得したスナップショットファイル(skt.sql)を、B サーバに転送します。
# mysql -u repl -p skt < skt.sql
として、Bサーバにデータを展開します。
mysql > CHANGE MASTER TO
MASTER_HOST='マスターのipアドレス',
MASTER_USER='repl',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000031',
MASTER_LOG_POS=285;
として、先ほどの2つの値等を設定します。

mysql > START SLAVE;
これで、レプリケーションがスタートします。

0 件のコメント:

コメントを投稿