我设置了 12 个下载服务器,它们的 IP 和登录详细信息都在我的数据库服务器上的 mysql 数据库中。
数据库有一个 dlserver_details 表,其中包含以下字段:
id、服务器名称、位置、域、IP 地址、其他 ip
该表中的每一行都有特定服务器的记录。 如何找出哪个服务器正在连接到mysql,以便mysql可以发送正确的服务器信息?
例如,如果服务器A通过远程sql连接到mysql,则无法知道哪一行属于服务器A。
我 4 年前提出的解决方案是手动为每个服务器分配一个 id 并将其保存在名为 config.php 的文件中 当服务器想要从 mysql 数据库获取其详细信息时,它会发送如下查询:
$serverid = 4;
SELECT * from dlserver_details where id = $serverid
效果非常好。 但问题是,随着我们规模的扩大,这个解决方案并不是很有效。每当我们向集群添加服务器时,我们都必须修改一些文件和数据库。这会减慢速度,因为文件会自动同步到所有下载服务器,然后我必须手动分配正确的服务器 ID 并更新其在数据库中的记录。
有没有合适的解决方案?就像我可以使用 mysql 跟踪哪个主机正在连接到它进行查询,以便它可以自行查找该主机的正确记录吗?
类似于:
假设 mysql ip 是 1.1.1.1,客户端服务器 ip 是 2.2.2.2
表格中的行:
id = 4
ip = 2.2.2.2
servername = Server A
Query: SELECT * FROM dlserver_details WHERE ip = CONNECTING_HOST_IP
这行得通吗?
最佳答案
最终做到了:
... WHERE ip = (Select SUBSTRING_INDEX(host, ':', 1) From information_schema.processlist WHERE ID = connection_id())
关于mysql - 多服务器集群设置。如何跟踪哪个服务器正在连接到父 mysql?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31769523/