LoginSignup
46
51

More than 5 years have passed since last update.

レプリケーションを始める

Last updated at Posted at 2014-06-09

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 の設定をする

my.cnf
# Master
server-id = 10 
log_bin = /var/log/mysql/mysql-bin.log

Slave には Master とは違う server-id を設定する。
# server-id はサーバ間で重複しないように設定する

my.cnf
# 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. 確認する

  1. Master で何か変更してみる update members set name = 'hoge' where id = 1
  2. Slave で変更を確認する select name from members where id = 1
46
51
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
51