为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁星coding 2019-09-03 16:34:18
我有两个不同的服务器server1和server2,现在我已经db1在server1和db2中server2。我试图像这样在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 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

是的,它可以在MySQL中使用。

有问类似的问题以前也。您必须使用FEDERATED ENGINE来执行此操作。这个想法是这样的:


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


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';


查看完整回答
反对 回复 2019-09-03
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

这是一种破解,它不是一个连接,但我使用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   |

+--------|-----+

至少对于我的用例,这将两个查询快速拼接在一起,输出等同于连接,然后我可以将输出管道输出到任何需要它的工具中。

查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 481 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信