mysql - 多服务器集群设置。如何跟踪哪个服务器正在连接到父 mysql?

标签 mysql database cluster-computing

我设置了 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/

相关文章:

mysql - 如何计算默认实例没有的行中的值?

php - SQL 查询还是面向对象的设计?

java - Hadoop 配置 - 集群

java - 在 Hadoop 中,框架在哪里保存普通 Map-Reduce 应用程序中 Map 任务的输出?

cassandra - 从同一台机器上运行多个 cassandra 节点(一个集群)?

MySQL 数据库() 与数据库名称

mysql - SELECT cols, (SELECT 内部查询) AS innercol FROM 表 WHERE innercol 某事

php - php if() 中的多个 OR 似乎没有正确响应。测试数组值和所有。我究竟做错了什么?

python - Django 中不存在搜索

ruby-on-rails - 为什么在 rspec 测试中创建并存储在数据库中的项目,但应用程序看不到它存储