如何从主服务器查找从属服务器的IP地址和用户名?

如何从主服务器查找从属服务器的IP地址和用户名?

我正在编写代码来提取 MySQL 复制环境中所有从属服务器的 IP 地址和用户名。

是否有人知道我可以在控制台中运行任何函数、变量或其他东西并检索这些信息而无需查看文件my.cnf

答案1

在主服务器上:

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

这将显示所有已连接的从属设备、它们的 IP 地址、用户,甚至自上次作为从属设备连接以来的连接时间。

答案2

有一种有趣的方法可以报告所有已注册的从属设备连接到主设备。

该命令称为显示从属主机;

这不会直接显示从属设备的 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 列是从服务器的名称,如报告主机变量中指定的那样(默认为空白);
第 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 爆炸函数,以下划线字符分隔,并取数组的第二个元素
  3. 使用PHP 函数 str_replace,将破折号 (-) 替换为句点 (.)

WA LA,你有一个 IP 地址

答案3

登录mysql并执行SHOW FULL PROCESSLIST。您将获得从属IP地址。

答案4

我会尝试登录 mysql 并查看全局变量:

mysql -u [dbuser] -p -e "show global variables";

相关内容