当前位置: 首页 > 知识库问答 >
问题:

从两个不同的服务器连接表

司空福
2023-03-14

我有两个不同的服务器server1server2,现在我有server1中的db1server2中的db2。我试图加入这两个表在MySQL像这样。

Select a.field1,b.field2  
FROM  [server1, 3306].[db1].table1 a  
Inner Join [server2, 3312].[db2].table2 b  
ON a.field1=b.field2  

但是我犯了一个错误。这在MYSQL中是可能的。

共有3个答案

夏英发
2023-03-14

这是一种黑客行为,不是连接,但我使用bash函数让它感觉像是在进行跨服务器查询:

显式版本:

tb2lst(){
    echo -n "("
    tail -n +2 - | paste -sd, | tr -d "\n"
    echo ")"
}

id_list=$(mysql -h'db_a.hostname' -ume -p'ass' -e "SELECT id FROM foo;" | tb2lst)
mysql -h'db_b.hostname' -ume -p'ass' -e "SELECT * FROM bar WHERE foo_id IN $id_list"

+--------|-----+
| foo_id | val |
+--------|-----+
| 1      | 3   |
| 2      | 4   |
+--------|-----+

我编写了一些包装器函数,它们保存在我的bashrc中,因此我的观点是它只是一个命令:

db_b "SELECT * FROM bar WHERE foo_id IN $(db_a "SELECT id FROM foo;" | tb2lst);"

+--------|-----+
| foo_id | val |
+--------|-----+
| 1      | 3   |
| 2      | 4   |
+--------|-----+

至少对于我的用例来说,这将两个查询缝合在一起的速度足够快,以至于输出相当于连接,然后我可以将输出管道到任何需要它的工具中。

请记住,一个查询中的id列表在另一个查询中作为查询文本结束。如果以这种方式“连接”太多数据,操作系统可能会限制查询的长度(https://serverfault.com/a/163390). 所以请注意,对于非常大的数据集来说,这是一个糟糕的解决方案。我发现,对像pymysql这样的mysql库做同样的事情可以绕过这个限制。

端木鹏
2023-03-14

复制将是替代和合适的解决方案。

server1-db1-

注意:如果server2在存储/进程等方面足以承担db1的负载,那么wen可以执行复制。正如“辉煌”提到的是的,联邦将使大量的手工工作和缓慢的过程。

刘昌翰
2023-03-14

之前也有类似的问题。您必须使用联邦引擎来实现这一点。这个想法是这样的:

您必须在另一个远程位置有一个基于该表的联邦表,才能使用您想要的方式。表的结构必须完全相同。

CREATE TABLE federated_table (
    id     INT(20) NOT NULL AUTO_INCREMENT,
    name   VARCHAR(32) NOT NULL DEFAULT '',
    other  INT(20) NOT NULL DEFAULT '0',
    PRIMARY KEY  (id),
    INDEX name (name),
    INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';

[来源答复]

 类似资料:
  • 我构建了一个客户端/服务器聊天应用程序,其中服务器正在侦听IP号码和端口,客户端应该连接到该IP 问题-按以下顺序: > 我在计算机上运行服务器,正在侦听 (127.0.0.1 我还在我的计算机上运行一个客户端(与#1相同的计算机),它成功地连接到服务器(127.0.0.1 我正在从不同的IP运行另一个客户端,但在尝试连接到服务器时(127.0.0.1 我不明白为什么…这是代码: 服务器端: 服务

  • 我正在使用wurstmeister的docker-kafka项目在容器中运行kafka/zoomaster。我使用docker-comup将容器localhost作为变量。 我已经编写了一个Java应用程序,它使用flink连接并使用这个Kafka容器的一个主题。如果我导出一个可运行的罐子,并从我的机器上运行它,它绝对可以正常工作。当我创建下面的图像以从另一个docker容器运行jar时,我在线程

  • 我有一个监听两个不同端口的TCP服务器。我创建了两个不同的套接字,一个在端口8888上,一个在端口6634上。我监听这些端口,然后我在FD_SET中添加两个套接字,并将它们传递给Select()函数...当套接字准备好读取时,我检查FD_ISSET,看看哪个端口上有消息要读取。 不管怎样,当我连接到8888端口时,构思是成功的,我可以向服务器发送和接收。。。当我在客户端ctrl c时,选择函数再次

  • 问题内容: 这是我的问题: 我有服务器A,运行node.js并使用socket.io与客户端(Web浏览器)进行通信。这一切都很好,花花公子。 但是,现在我有了服务器B,也需要通过websocket连接到服务器A,所以我遇到了麻烦。我发现的所有node.js websocket客户端都无法与服务器A上的socket.io一起使用。 所以,这就是我正在努力的情况: 客户端-服务器连接是通过socke

  • 例如,我有两个心率监视器与我的平板电脑配对。我正在使用这样的代码来获取HRM设备列表: 然后,我在GUI中显示一个列表框,其中包含从设备[I]获取的设备名称。名称例如,我选择索引为0的设备。然后我可以访问it人力资源服务和人力资源管理特征: 除了心率,我还需要电池状态。如何访问同一(已选择)设备的电池服务?

  • 日志: 我被困在这里,真的不知道问题是什么。有帮手吗?