mysql 5.6 でやった。
1. Master に repl ユーザーを作成する
以下の例では、repl ユーザーが192.168.1.1 ~ 254 からレプリケーション用の接続をできるようにしている。
レプリケーションなので、ON *.*
で全データベース、全テーブルに対して許可している。
GRANT REPLICATION SLAVE
ON *.*
TO 'repl'@'192.168.1.0/255.255.255.0'
IDENTIFIED BY 'xxxxx'
2. MySQL サーバの設定を変更する
Master に server-id と、bin_log の設定をする
# Master
server-id = 10
log_bin = /var/log/mysql/mysql-bin.log
Slave には Master とは違う server-id を設定する。
# server-id はサーバ間で重複しないように設定する
# Slave
server-id = 11
その後 Master、Slave 共に再起動する service mysql restart
3. Slave で CHANGE MASTER TO 〜 する
Slave に Master の場所を教える。 MASTER_LOG_FILE や MASTER_LOG_POS は、
mysqldump に含めるので、ここでは指定しない。
※ Master_Log_File、Read_Master_Log_Pos が mysqldump から設定されるので、
dump を入れる前に実行しないといけません!
root などでログインして以下を実行する。
CHANGE MASTER TO
MASTER_HOST='192.168.1.xxx',
MASTER_USER='repl',
MASTER_PASSWORD='xxxxx'
4. Master で dump をとる
--master-data=1 で MASTER_LOG_FILE、MASTER_LOG_POS が dump に含まれる。
--flush-logs で その時点のログを吐き出しておく。
--single-transaction で、dump が一貫性を保つようにする。dump が開始された以降の変更はふくまれなくなる。また、ロックされなくなるので、Master は止まらない。
mysqldump -uroot -p --master-data=1 --single-transaction --all-databases --flush-logs > replication.mysqldump
そして、scp などで、Slave に dump をコピーする
5.Slave に dump を入れ、SLAVE START
する
mysql -uroot -p < replication.mysqldump
START SLAVE
6. 確認する
- Master で何か変更してみる
update members set name = 'hoge' where id = 1
- Slave で変更を確認する
select name from members where id = 1