2011-04-29 127 views
29

MySQL中,我有两个不同的数据库 - 我们称它们为ABMySQL - 在不同服务器上使用Python连接数据库?

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

两个服务器{AB}是物理上靠近彼此,但在不同的机器和具有不同连接参数(不同的用户名,不同的密码等)。

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

如果是这样,我该怎么做,编程方式,在python? (我正在使用pythonMySQLDB分别与每个数据库交互)。

+0

如果您要求在由不同rdbms托管的多个数据库上执行分布式事务的意思,它会更好吗? – 2011-05-02 15:40:25

+2

请参考这将有所帮助:http://winashwin.wordpress.com/2012/08/22/mysql-federated-table/ – 2012-08-24 07:40:46

回答

22

尝试使用FEDERATED Storage Engine

解决方法:可以使用其他数据库管理系统两个数据库之间检索数据,例如,你可以使用链接的服务器 MS SQL Server中做到这一点(见sp_addlinkedserver存储过程)。从文档:

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

+0

啊哈。这对我来说是新的。 +1 – Jaydee 2011-04-29 15:49:40

+0

有趣。当我创建一个'FEDERATED存储引擎'时,我需要'链接'到数据库的实际位置,对吧?在这种情况下,连接细节是否安全地保存在创建连接的数据库中? – user3262424 2011-04-29 16:38:10

+1

@ user540009我在手册中没有找到很多。但有一些东西 - http://dev.mysql.com/doc/refman/5.1/en/federated-create-server.html。它允许将连接属性存储在另一个系统表“mysql'.'servers'中。 – Devart 2011-05-05 06:45:03

3

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

+1

但您可能必须每次从2个服务器中选择数百万行,哪种假冒JOIN的优点不是吗? – Flo 2011-04-29 13:47:14

+1

这是正确的,但如果你需要汇总一些数据的某种报告 - 这是快速和肮脏的解决方案。 – Anatolij 2011-04-29 13:58:30

+0

@Flo联邦存储引擎也为了使联接成为可能而持有数据,在表格​​繁重的情况下,性能问题也会持续存在。我会选择使用此方法而不是联合存储引擎。 – 2013-03-04 12:32:00

3

不可以按照您的意愿进行连接。但是,您可以通过将其中一台服务器复制到另一台服务器来为各个数据库分类。

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

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

相关问题