【问题标题】:MySQL -- Joins Between Databases On Different Servers Using Python?MySQL——使用 Python 连接不同服务器上的数据库?
【发布时间】:2011-08-15 12:33:42
【问题描述】:

MySQL 中,我有两个不同的数据库——我们称它们为AB

数据库A 驻留在服务器server1 上,而数据库B 驻留在服务器server2 上。

两台服务器 {A, B} 物理上彼此靠近,但位于不同的机器上并且具有不同的连接参数(不同的用户名、不同的密码等)。

在这种情况下,是否可以在数据库A 中的表与数据库B 中的表之间执行连接?

如果是这样,我该如何以编程方式在python 中处理它? (我使用pythonMySQLDB分别与每个数据库进行交互)。

【问题讨论】:

标签: python mysql


【解决方案1】:

尝试使用FEDERATED Storage Engine

解决方法:可以使用另一个 DBMS 在两个数据库之间检索数据,例如,您可以使用 MS SQL Server 中的链接服务器(请参阅sp_addlinkedserver 存储过程)。来自文档:

链接服务器允许访问针对 OLE DB 数据源的分布式异构查询。

【讨论】:

  • 啊哈。这对我来说是一个新的。 +1
  • 有趣。当我创建FEDERATED Storage Engine 时,我需要“链接”到数据实际所在的数据库,对吧?在这种情况下,连接详细信息是否安全地保存在创建连接的数据库中?
  • @user540009 我在手册中没有找到很多内容。但是有一些东西 - dev.mysql.com/doc/refman/5.1/en/federated-create-server.html。它允许将连接属性存储在另一个系统表mysql.servers.
【解决方案2】:

非常简单——从一台服务器中选择数据,从另一台服务器中选择数据,然后使用 Python 进行聚合。如果您想使用JOIN 进行 SQL 查询 - 将两台服务器的结果放入本地 SQLite 数据库中的单独表中,然后将 SELECT 写入 JOIN

【讨论】:

  • 但是你可能每次都要从2台服务器中选择数百万行,这不正是JOIN的优势吗?
  • 没错,但如果您需要为某种报告汇总一些数据 - 这是快速而肮脏的解决方案。
  • @Flo 联合存储引擎还保存数据以使连接成为可能,如果表很重,性能问题也会持续存在。我会选择使用这种方法而不是联合存储引擎。
【解决方案3】:

没有。无法按照您的意愿进行连接。但是您可以通过将其中一台服务器复制到另一台服务器以用于单个数据库来解决问题。

一个数据集受一个 MySQL 副本的控制,另一个数据集受另一个 MySQL 副本的控制。该查询只能由其中一台 (MySQL) 服务器处理。

如果您在第一台服务器上创建第二个数据库的副本,反之亦然(更新最少的那个最好),您可以设置复制以使副本保持最新。然后,您将能够根据需要运行查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 2011-04-15
    • 2014-08-07
    相关资源
    最近更新 更多