我正在编写代码来提取 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
然后执行以下操作
- 显示从属主机;
- 使用PHP 爆炸函数,以下划线字符分隔,并取数组的第二个元素
- 使用PHP 函数 str_replace,将破折号 (-) 替换为句点 (.)
WA LA,你有一个 IP 地址
答案3
登录mysql并执行SHOW FULL PROCESSLIST。您将获得从属IP地址。
答案4
我会尝试登录 mysql 并查看全局变量:
mysql -u [dbuser] -p -e "show global variables";