2011-04-29 15 views
29

En MySQL, tengo dos bases de datos diferentes, llamémoslas A y B.MySQL: se une a bases de datos en diferentes servidores ¿Utiliza Python?

base de datos reside en el servidor A , mientras que la base de datos reside en el servidor Bserver2.

Ambos servidores {A, B} son físicamente cerca uno del otro, pero están en máquinas diferentes y tienen diferentes parámetros de conexión (otro nombre de usuario, contraseña diferente, etc).

En tal caso, ¿es posible realizar una unión entre una tabla que está en la base de datos A, en una tabla que está en la base de datos B?

Si es así, ¿cómo lo hago, programáticamente, en python? (Estoy usando python 's MySQLDB para interactuar por separado con cada una de las bases de datos).

+0

¿Sería mejor si hubiera pedido un medio para realizar una transacción distribuida en varias bases de datos alojadas en diferentes rdbms? –

+2

Consulte esto sería útil: http://winashwin.wordpress.com/2012/08/22/mysql-federated-table/ –

Respuesta

22

Intente utilizar FEDERATED Storage Engine.

Solución: es posible utilizar otro DBMS para recuperar datos entre dos bases de datos, por ejemplo, usted podría hacerlo usando servidores vinculados en MS SQL Server (ver sp_addlinkedserver procedimiento almacenado). De la documentación:

Un servidor vinculado permite el acceso a consultas distribuidas y heterogéneas contra orígenes de datos OLE DB.

+0

Ah ha. Eso es nuevo para mí. +1 – Jaydee

+0

interesante.Cuando creo un 'FEDERATED Storage Engine', necesito 'enlazar' a la base de datos donde realmente están los datos, ¿verdad? en tal caso, ¿los detalles de la conexión se guardan de forma segura en la base de datos que crea la conexión? – user3262424

+1

@ user540009 No he encontrado mucho en el manual. Pero hay algo: http://dev.mysql.com/doc/refman/5.1/en/federated-create-server.html. Permite almacenar propiedades de conexión en otra tabla del sistema 'mysql''servers'. – Devart

3

Es muy simple: seleccionar datos de un servidor, seleccionar datos de otro servidor y agregar usando Python. Si desea realizar consultas SQL con JOIN, coloque el resultado de ambos servidores en tablas separadas en la base de datos local SQLite y escriba SELECT con JOIN.

+1

pero es posible que tenga que seleccionar millones de filas de 2 servidores cada vez, que tipo de falsificaciones ventaja de la JOIN no? – Flo

+1

correcto, pero si necesita agregar algunos datos para algún tipo de informe, esta es la solución rápida y sucia. – Anatolij

+0

Los motores de almacenamiento federados @Flo también contienen datos para hacer posible las uniones, el problema de rendimiento también persiste en el caso de tablas pesadas. Optaría por utilizar este método en lugar de motores de almacenamiento federados. –

3

No. No es posible hacer la unión como lo desea. Pero es posible que pueda resolver algo replicando uno de los servidores en el otro para la base de datos individual.

Un conjunto de datos está bajo el control de una copia de MySQL y el otro conjunto de datos está bajo el control de la otra copia de MySQL. La consulta solo puede ser procesada por uno de los servidores (MySQL).

Si crea una copia de la segunda base de datos en el primer servidor o viceversa (la que obtiene la menor cantidad de actualizaciones es la mejor) puede configurar la replicación para mantener la copia actualizada. Luego podrá ejecutar la consulta como lo desee.

Cuestiones relacionadas