NTTドコモ様_dカーシェア
NTTドコモ様_dカーシェア
2012.08.10

負荷分散や障害対策として行う、MySQL5.5系でのレプリケーションについて

鳥よし

こんにちは、今日は久々に鳥よしの出番です。

(ブログ書くのが嫌で雲隠れしているわけではありません。)

今日はMySQL5.5系でレプリケーションしたときのメモを書いていこうと思います。

あれ? JMeterの話は? と思う方もいるかもしれません。

(前回までの記事)
パフォーマンス計測用のJavaアプリ「JMeter」で負荷テストをしてみる。その1
パフォーマンス計測用のJavaアプリ「JMeter」で負荷テストをしてみる。その2

いや、いないと思います。

なので一気に本題に入ります。(えっ)

この話はマスター用とスレーブ用のMySQLが用意されており、
マスターからエクスポートされたダンプデータがスレーブにインポートされている前提で進めます。

【マスター側】

1.現在のステータスを確認

mysqlにログインし、以下のコマンドでbin-logのファイル名とPositionを確認

SHOW MASTER STATUS;

2.my.cnfの設定

my.cnfの[mysqld]セクションで以下を設定

log-bin
server-id=<スレーブより小さな一意の数値>

設定後、mysql再起動

3.アカウントの作成

mysqlにログインし、以下のようなGRANT文を実行

GRANT REPLICATION SLAVE ON *.* TO '<pre>[code]'@'[xxx.xx.% 等接続を許可するアドレス(スレーブのアドレス)]' IDENTIFIED BY '[パスワード]';

【スレーブ側】

1.my.cnfの設定

my.cnfの[mysqld]セクションで以下を設定

log-bin
server-id=<マスターより大きな一意の数値>

******* 寄り道

5.5以前はmy.cnfで以下の設定を行っていましたが、5.5からはCHANGE MASTER TOで指定するようになりました。

master-host=[xxx.xx.xx.xxx マスターのアドレス]
master-port=[ポート番号]
master-user=
master-password=[パスワード]</pre>
<p style="padding-left: 30px">あと、僕の場合はレプリケーションしたくないテーブルがあったのと、<br />
バイナリログのローテーションサイズを自身で指定したかったため、以下の設定を追記しました。</p>
<p style="padding-left: 30px">(レプリケーションしたくないテーブルを複数指定する場合はこんな感じで)</p>
<pre>[code]
replicate-ignore-table=[DB名].[レプリケーションしたくないテーブル名1]
replicate-ignore-table=[DB名].[レプリケーションしたくないテーブル名2]
max_binlog_size = 400M

*******

設定後、mysql再起動

2.レプリケーションの開始

mysqlにログインし、以下のようなコマンドでマスターを指定。

CHANGE MASTER TO
MASTER_HOST='[xxx.xx.xx.xxx マスターのアドレス]',
MASTER_USER='<pre>[code]',
MASTER_PASSWORD='[パスワード]',
MASTER_LOG_FILE='[マスター側で確認したbin-logのファイル名]',
MASTER_LOG_POS=[マスター側で確認したPosition];

以下のコマンドでレプリケーションを開始する。

START SLAVE;

3.レプリケーションが正常に行われているかの確認

mysqlにログインし、以下のコマンドでステータスを確認する。

SHOW SLAVE STATUSG

何回か実行して、Slave_IO_RunningとSlave_SQL_Runningがyesになっていて
エラーが出ていないことと、場合によってはポジションが進んでいることを確認します。

以上で簡単なレプリケーションが行えます。