かれこれ3日ほどはまったので恥を忍んでここに記載しておきます :x001:
構成は以下の通りです。
Windows8:192.168.0.99。mysqlrplshowを実行する
└centos:192.168.0.100。master。Windows8上のvmwareで起動
└centos:192.168.0.101。slave。同じくWindows8上のvmwareで起動
レプリケーション自体は簡単にできましたが、どうしてもmysqlrplshowができません。
スレーブからのレプリケーションユーザーが認識されないようです。
mysqlrplshowだけならまだしも、mysqlfailoverでもスレーブが認識されません。
そのためなんとしても解決したかったのです・・・。
エラーの内容
以下のようなエラーが延々とで続けました・・・
# master on 192.168.0.100: ... connected. # Finding slaves for master: 192.168.0.100:3306 Error connecting to a slave as repl@192.168.0.101: Query failed. 1227: Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT pr ivilege(s) for this operation WARNING: There are slaves that had connection errors. # Replication Topology Graph No slaves found. ・・・・・ # master on 192.168.0.100: ... connected. # Finding slaves for master: 192.168.0.100:3306 Error connecting to a slave as repl@192.168.0.101: Cannot connect to the slave server. Error 1045: Access denied for user 'repl'@'192.168.0.99' (using password: YES) WARNING: There are slaves that had connection errors. # Replication Topology Graph No slaves found.
原因
原因はreport_hostにありました。
どうやらこのツールではhostsではなくreport_hostの名称をつかっているようです。
そしてこのreport_hostの名称が名前解決できないとつながらないようです。
結論から言いますと、report_hostにそれぞれのIPアドレスを入れてやることで、名前解決不要のまま実行できました。
以下マスター(192.168.0.100)のmy.cnf
[root@localhost /]# vim /usr/my.cnf [mysqld] server_id=100 skip-name-resolve sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES log-bin=mysql-bin log-slave-updates gtid-mode=ON #disable-gtid-unsafe-statements enforce-gtid-consistency master_info_repository=TABLE relay_log_info_repository=TABLE report_host=192.168.0.100
以下スレーブの(192.168.0.101)のmy.cnf
[root@localhost /]# vim /usr/my.cnf [mysqld] server_id=101 skip-name-resolve sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES log-bin=mysql-bin log-slave-updates gtid-mode=ON #disable-gtid-unsafe-statements enforce-gtid-consistency master_info_repository=TABLE relay_log_info_repository=TABLE report_host=192.168.0.101
なぜ気づいたか
http://docs.oracle.com/cd/E17952_01/workbench-en/mysqlrplshow.html
を参考にしました。
SHOW SLAVE STATUS、SHOW MASTER STATUS、and SHOW SLAVE HOSTS
がそれぞれ実行できなくてはならないとあります。
私がマスターでshow slave hostsを実行するとHostが空っぽ・・・
mysql> show slave hosts -> ; +-----------+------+------+-----------+--------------------------------------+ | Server_id | Host | Port | Master_id | Slave_UUID | +-----------+------+------+-----------+--------------------------------------+ | 101 | | 3306 | 100 | 02250d7e-097c-11e3-80b5-000c2953a9d6 | +-----------+------+------+-----------+--------------------------------------+ 1 row in set (0.00 sec)
このHostを設定するのがreport_hostであり、report_hostは名前解決できないといけません。
だから面倒なのでIPを設定したのです。
実行結果
C:\Program Files (x86)\MySQL\MySQL Workbench CE 5.2.47\utilities>mysqlrplshow --master=user:pass@192.168.0.100 --discover-slaves-login=user:pass # master on 192.168.0.100: ... connected. # Finding slaves for master: 192.168.0.100:3306 # Replication Topology Graph 192.168.0.100:3306 (MASTER) | +--- 192.168.0.101:3306 - (SLAVE)
最後でも少しはまりました・・・
–master=user:pass@192.168.0.100 で指定するuserとpassは、SHOW SLAVE STATUS、SHOW MASTER STATUS、and SHOW SLAVE HOSTSが実行できるユーザーでなくてはいけません。これはいいでしょう。
–discover-slaves-login=user:passで指定するのはレプリケーション用のユーザーではないようです。
レプリケーションユーザーを指定すると以下のようなエラーがでました。
Error connecting to a slave test as repl@192.168.0.101: Query failed. 1227: Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation WARNING: There are slaves that had connection errors.
マスターにアクセスして show slave hosts 等でレプリケーションのサーバーを確認する。
その後レプリケーション側のサーバーにアクセスして何かしているようなので、–discover-slaves-loginにはレプリケーションユーザーではなく、
レプリケーション側にログインできる (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation 権限のユーザーのようです。
よくわかりませんが・・・