猫型iPS細胞研究所

Windows、Linux、iOS、DB、Network

DataBase MySQL

utilitiesのmysqlrplshowを使いたい

投稿日:

かれこれ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 権限のユーザーのようです。
よくわかりませんが・・・

Gooleアドセンス用336

Gooleアドセンス用336

-DataBase, MySQL

執筆者:

関連記事

MySQLにローカルから接続する

リモートから接続するユーザー リモートから接続するユーザーは以下のような感じで作成できます。 $mysql> grant all privileges on *.* to username@’% …

mysql

vmwareをアップデートしたらMySQLが起動しなくなった

[root@centos100 log]# service mysql restart MySQL server PID file could not be found! [失敗] Starting …

mysql

MySQLの時間の計算・比較

列同士を比較する datetime型をそのままプラス・マイナスしてはいけません!! 例えば、 mysql> select * from test; +———————+ …

mysql

MySQLでフラグの列でSELECTする。(複合インデックスの使用条件)

status=’1’とかdelete=’0’といった条件はよく使用することでしょう。 そこでフラグにはどのデータ型がベストなのでしょうか。 INDEX1 …

mysql

MySQLの連続INSERTを高速にする

もししらなければ確実に、そして恐ろしく効果を発揮できると思います。 INSERTを連続実行する際にボトルネックとなるのはコミットです。 オートコミットをオフにするという手もあるのですが、 INSERT …