0

mySQLでレプリケーション

レプリケーションの設定のメモ。
まずマスターとなるサーバーで設定。
/etc/my.confを編集

[mysqld]
datadir=/mnt/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
log-bin
server-id=10
log-bin=mysql-bin
log-bin-index=mybin.index
expire_logs_days=14

log-binでバイナリログを保存しますよの宣言
server-idはスレーブと重複しないサーバーIDのようなもの。
log-bin=mysql-binとlog-bin-index=mybin.indexはバイナリログのファイル名。
mysql-bin.000001のようになります。
ここで指定したら/mnt/mysqlにバイナリログは蓄積されていきます。
指定しなかった場合、俺の環境では/var/run/mysqlに溜まりEC2のHDを圧迫してたので必須でした。
expire_logs_daysはログのローテーションの期間です。2週間サイクルにしています。

mySQLを再起動したらSQLを発行する度にバイナリログに書き込まれていきます。

スレーブの設定で使う読み取りバイナリログの読み取り開始位置を確認しておく。
mySQLにログイン

> SHOW MASTER STATUS;

Fileがlog-bin.000001
Positionが128
となってたのでそれをメモる。

ログインついでにスレーブからの接続専用のユーザーを作成する

> GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY 'replrepl';

スレーブと同期を取るために一旦mySQLを止める。
下記のようにしてスレーブにデータディレクトリをごっそり持っていきます。

rsync -avz -e ssh /mnt/mysql root@ec2-174-129-***-**.compute-1.amazonaws.com:/mnt

続けてスレーブのmy.confを設定
[mysqld]

datadir=/mnt/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
relay-log=relay-bin
server-id=14
master-host=ec2-174-129-**-**.compute-1.amazonaws.com
master-user=repl
master-password=replrepl
replicate-do-db=access
expire_logs_days=14

relay-log=relay-binでリレーされたらログがrelay-bin.000001という形で蓄積されていきます。
master-hostでマスターのサーバーのホスト名を
master-userとmaster-passwordで接続情報を登録しておきます。
replicate-do-dbで指定したDBだけリレーションするようにします。この場合accessのいうデータベースだけリレーションします。

次にmySQLにログイン。
バイナリログがまったくなければ

> start slave;

だけでもいけるかも。

>change master to master_host = 'ec2-174-129-**-**.compute-1.amazonaws.com', master_port = 3306, master_user = 'repl', master_password = 'replrepl', master_log_file = 'mysql-bin.00001', master_log_pos = 128;
start slave;

ここで先ほどメモった読み取り開始位置を入力する。

これでレプリケーションが始まる。
マスターで何かinsertしてスレーブに反映されていればOK。
レプリケーションされてなければmysqld.logを確認する。

大阪のWEB屋です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です