AB Lab

abgata20000 blog.

MySQLのレプリケーション設定

マスター側設定

レプリケーション用のユーザーを作成

1
GRANT REPLICATION SLAVE ON *.* TO repl@% IDENTIFIED BY 'password';

my.cnf(winの場合はmy.ini)を修正(追加)

1
2
3
[mysqld]
log-bin = mysql-bin
server-id = 1001

mysqlを再起動

1
service mysqld restart

mysqlのスナップショットを作成

mysqlにて

1
2
3
4
5
6
7
# DBロック
FLUSH TABLES WITH READ LOCK;

# 現在のバイナリポジションを取得
SHOW MASTER STATUS;

# File、Positionはスレーブ側の設定に必要なので控えておく

別ターミナル等でDBのバックアップを取る(mysqldumpを利用)

1
mysqldump -u user -p --all-databases --lock-all-tables > snapshot.db

DBロックを解除

mysqlにて

1
UNLOCK TABLES;

スレーブ側設定

my.cnfを修正(追加)

1
2
3
4
[mysqld]
log-bin=mysql-bin
log_slave_updates #このスレーブを他のマスターとして使いたい場合追加
server-id=1002

マスタで作成したスナップショットを復元

1
mysql -u user -p  < snapshot.db

mysqlを再起動

1
service mysqld restart

マスタ情報を登録

1
2
3
4
5
6
CHANGE MASTER TO
MASTER_HOST='sample.com',
MASTER_USER='rep-user',
MASTER_PASSWORD='passwd',
MASTER_LOG_FILE='mysql-bin.000001', #マスターのFIle
MASTER_LOG_POS=98; #マスターのPosition

スレーブをスタート

1
2
START SLAVE;
# STOP SLAVE;RESTART SLAVE;RESET SLAVE;

起動確認

1
SHOW SLAVE STATUS\G