猫型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

utilitiesのmysqlfailoverを使う(2)

前回の utilitiesのmysqlfailoverを使う(1)で設定・起動は完了しています。 私の目的は2台のMySQLサーバーを定期的に入れ替えてメンテナンスすることです。 今回はマスターがダウ …

mysql

MySQLのエラー、クエリ、スロークエリのログ

全て /etc/my.cnf の [mysqld] に追記してサーバーを再起動すれば出力されるようになります。 エラーログは開発時には警告も出力しておけばよいでしょう。 クエリログは全てのSELECT …

sqlserver

SQL Server Management Studio でテーブルが変更できない

私は以前はOracleをメインで使用し、そしてここ数年間はMySQLをメインで使用しています。SQL Serverは少しかじった程度といえるでしょう。 こんな私が選択したのはSQL Server Ma …

sqlserver

SQL Server Management Studio の「上位200行の編集」を変更したい

恐らく私が十分に使用できていないだけで、機能はたくさんありそうなSQL Server Management Studio。最近新しいものに入れ替えたら(OS毎再インストールするハメになったのですが)、 …

mysql

MySQLの予約語はバッククォーテーション囲んで使用する

列名に”from”や”to”を使用したいことがあるはずです。 そうした場合は”`”(バッククォーテーション)で囲みましょう。 insert into m …