Я пишу код для извлечения IP-адреса и имени пользователя всех подчиненных серверов в среде репликации MySQL.
Кто-нибудь знает какую-либо функцию, переменную или что-то еще, что я могу запустить в консоли и получить эту информацию, не глядя в my.cnf
файл?
На главном сервере:
SELECT * FROM information_schema.PROCESSLIST AS p WHERE p.COMMAND = 'Binlog Dump';
Это показывает все подключенные ведомые устройства, их IP-адреса, пользователя и даже время, в течение которого они были подключены с момента последнего подключения в качестве ведомых.
Есть интересный способ сообщить обо всех зарегистрированных подчиненных устройствах, подключенных к мастеру.
Команда называется ПОКАЗАТЬ РАБОЧИЕ ХОЗЯЙКИ;
Это не будет напрямую отображать 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 - это идентификатор ведомого сервера
столбец 2 - имя ведомого устройства, как указано в переменной хоста отчета (по умолчанию пусто)
столбец 3 - номер порта ведомого устройства, подключенного к ведущему
столбец 4 - это идентификатор главного сервера подчиненного (запустите его с главного сервера)
В версиях 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-адреса подчиненных.
Я бы попробовал войти в mysql и посмотреть на глобальные переменные:
mysql -u [dbuser] -p -e "show global variables";