2015年8月1日土曜日

Mysql レプリケーション

Mysqlのレプリケーションの設定をやってみた。
以下のリンクを参考にさせてもらった。
http://dotnsf.blog.jp/archives/1028720878.html

1 マスターで
mysql > GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.0/255.255.255.0' IDENTIFIED BY 'password';
 ネットワークアドレスの指定のため、192.168.1.0の最後は0とすることに注意
/etc/mysql/my.cnf
[mysqld]
log-bin=mysql-bin  →もとのファイルではlog_binとなっていたが、log-binでいいようだ。
server-id=1001
として、service mysql restart

2 スレーブで
 mysql > GRANT ALL PRIVILEGES ON *.* TO 'repl'@localhost IDENTIFIED BY 'password';

 my.cnfの編集
 [mysqld]
log-bin=mysql-bin
server-id=1002 として service mysql restart

3 マスターで
mysql > FLUSH TABLES WITH READ LOCK;
mysql > SHOW MASTER STATUS;
 このとき、Fileのmysql-bin.00000?(6桁数字) Positionの3桁数字 をメモしておく

別のコンソールで
# mysqldump -u root -p mydb --lock-all-tables > mydbdump.db によりデータを保存

もとのコンソールで
mysql > UNLOCK TABLES;

4 データの移動
 mydbdump.dbをスレーブに移動

5 スレーブで
# mysql -u repl -p mydb < mydbdump.db

mysql > CHANGE MASTER TO
  MASTER_HOST='192.168.1.XXX',
  MASTER_USER='repl',
  MASTER_PASSWORD='password',
  MASTER_LOG_FILE='mysql-bin.000031', ←3でメモした値
  MASTER_LOG_POS=285; ←〃

mysql > START SLAVE;

※以上だが、実際にはうまくいかなかった。原因はいくつかあった。
http://pyoonn.hatenablog.com/entry/2015/01/09/133102が参考になりました。どうやらコネクトしてないようだった。
# mysql -h 192.168.*.* -u repl で、接続確認しても、エラー
マスターで
grant all privileges on *.* to repl@"192.168.58.%" identified by 'password' with grant option;
で特権を与える。192.168.58.*のワイルドカードのホストのreplからアクセス可能に
スレーブで確認するには
mysql>SHOW SLAVE STATUS\G
このとき、Slave_IO_Running: Yesが表示されればOKだが、まだ、だめ
・さらに、iptablesがじゃましてないか確認したが、ディフォルトでOFFなってたので、関係なかった。
・そこで、
 http://d.hatena.ne.jp/uriyuri/20081024/1224798772を参考にさせていただいた。
/etc/mysql/my.cnfの設定では
bind-address = 127.0.0.1
bind-address = (接続したいマシンのIPアドレス)
と、接続先を追加していくか、または、どのIPからも接続許可したいなら、いっそbind-addressをコメントアウトすればよいということらしい。
 これで、なんとか、動くようになった。

※ひとつレプリケーションで注意が必要なことがあるようだ。
http://nippondanji.blogspot.jp/2009/03/mysql10.html にあるように
 スレーブのデータは変更しないということ。
 グループウエア等の設定では、十分注意が必要なところなようだ。




0 件のコメント:

コメントを投稿