MySQLレプリケーション環境のすべてのスレーブサーバーのIPアドレスとユーザー名を抽出するコードを書いています。
誰かがコンソールで実行できる関数、変数などを知っていて、my.cnf
ファイルを調べなくてもこれらの情報を取得できますか?
マスターサーバー:
SELECT * FROM information_schema.PROCESSLIST AS p WHERE p.COMMAND = 'Binlog Dump';
これは、すべての接続されたスレーブ、それらのIPアドレス、ユーザー、および最後にスレーブとして接続されてからの接続時間を示します。
登録されたすべてのスレーブがマスターに接続していることを報告する興味深い方法があります。
コマンドは SHOW SLAVE HOSTS; と呼ばれます。
これはスレーブのIPを直接表示しませんが、マスターとスレーブを独自の方法で構成することができます。
MySQL 5.5では、SHOW SLAVE HOSTSを実行するだけです。そしてあなたはこのようなものを手に入れます:
MySQL> show slave hosts;
+-----------+------+------+-----------+
| Server_id | Host | Port | Master_id |
+-----------+------+------+-----------+
| 106451148 | | 3306 | 106451130 |
+-----------+------+------+-----------+
1 row in set (0.00 sec)
MySQL> show variables like 'server_id';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| server_id | 106451130 |
+---------------+-----------+
1 row in set (0.00 sec)
示されているように
列1はスレーブのサーバーIDです
列2は、report-Host変数で指定されたスレーブの名前です(デフォルトでは空白)。
列3は、マスターに接続するスレーブのポート番号です
列4はスレーブのマスターサーバーIDです(これをマスターから実行します)
MySQL 5.1以降のバージョンでは、デフォルトで次のようになります。
MySQL> show slave hosts;
Empty set (0.01 sec)
MySQL>
これをスレーブの/etc/my.cnfに追加することにより、各スレーブにホスト名を割り当てることができます
report-Host=MySQLSlave_10.1.2.3
Mysqlを再起動すると、/ etc/my.cnfに入力したとおりに名前が表示されます
ピリオドが受け入れられない場合は、次のようにダッシュにしてください:
report-Host=MySQLSlave_10-1-2-3
次に、以下を実行します
WA LA、あなたはIPアドレスを持っています
Mysqlにログインし、SHOW FULL PROCESSLISTを実行します。スレーブのIPアドレスを取得します。