web-dev-qa-db-ja.com

マスターサーバーからスレーブのIPアドレスとユーザー名を見つける方法は?

MySQLレプリケーション環境のすべてのスレーブサーバーのIPアドレスとユーザー名を抽出するコードを書いています。

誰かがコンソールで実行できる関数、変数などを知っていて、my.cnfファイルを調べなくてもこれらの情報を取得できますか?

7
Kourosh Samia

マスターサーバー:

SELECT * FROM information_schema.PROCESSLIST AS p WHERE p.COMMAND = 'Binlog Dump';

これは、すべての接続されたスレーブ、それらのIPアドレス、ユーザー、および最後にスレーブとして接続されてからの接続時間を示します。

12
CSTobey

登録されたすべてのスレーブがマスターに接続していることを報告する興味深い方法があります。

コマンドは 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

次に、以下を実行します

  1. スレーブホストを表示します。
  2. アンダースコア文字で区切られた PHP explode function を使用し、配列の2番目の要素を取得します
  3. PHP関数str_replace を使用し、ダッシュ(-)をピリオド(。)に置き換えます。

WA LA、あなたはIPアドレスを持っています

8
RolandoMySQLDBA

Mysqlにログインし、SHOW FULL PROCESSLISTを実行します。スレーブのIPアドレスを取得します。

3
potfur