support federated mysql client cross-server

federated - MySQL Cross Server Seleccionar consulta



mysql federated no (3)

¿Qué hay de usar tablas federadas en uno de los servidores? cree las tablas federadas basadas en las tablas remotas que usará en la consulta y simplemente ejecute su consulta como si su base de datos fuera local. ejemplo a continuación del sitio MySQL

El procedimiento para usar tablas FEDERATED es muy simple. Normalmente, tiene dos servidores en ejecución, ya sea en el mismo host o en diferentes hosts. (Es posible que una tabla FEDERATED use otra tabla administrada por el mismo servidor, aunque no tiene mucho sentido hacerlo).

Primero, debe tener una tabla en el servidor remoto al que desea acceder utilizando una tabla FEDERATED. Supongamos que la tabla remota está en la base de datos federada y se define así:

CREATE TABLE test_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=MyISAM CHARSET=latin1;

El ejemplo usa una tabla MyISAM, pero la tabla podría usar cualquier motor de almacenamiento.

A continuación, cree una tabla FEDERATED en el servidor local para acceder a la tabla remota:

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

(Antes de MySQL 5.0.13, use COMMENT en lugar de CONNECTION).

¿Es posible escribir una consulta de selección de servidor cruzado utilizando MySQL Client? Básicamente, la configuración es la siguiente.

Base de datos IP del servidor
--------- --------
1.2.3.4 Prueba
Prueba abcd

Deseo escribir una consulta que seleccione las filas de una tabla en la Base de datos de prueba en 1.2.3.4 e inserte el resultado en una tabla en la Base de datos de prueba en abcd
Mis servidores están ubicados a millas de distancia, así que abriré un túnel SSH para conectar los dos.

¿Alguna sugerencia?


Como el cliente mysql solo puede conectarse a un servidor a la vez, la respuesta corta es No. Pero siempre hay una manera ...

Las versiones recientes de mysqldump admiten un parámetro mysqldump que se puede usar para limitar los datos volcados. Esto significa que tiene una forma de ejecutar un SELECT simple (es decir, todas las columnas en una tabla) y producir un SQL válido para INSERT . A continuación, puede canalizar la salida de dicho comando mysqldump para el servidor de origen a un comando mysql al servidor de destino.

Probablemente desee incluir algunas opciones como --no-create-info y --no-add-locks en el comando mysqldump . Pruébelo hasta que el resultado sea exactamente lo que quiere.


mysqldump podría ser una solución como se mencionó anteriormente o podrías intentar usar los SELECT ... INTO OUTFILE y LOAD DATA INFILE ...

MySQL tiene el motor de almacenamiento federado que puede serle útil. Aquí hay más documentación en él http://dev.mysql.com/doc/refman/5.0/en/federated-storage-engine.html Tengo que confesar que no he tenido un gran éxito, pero podría funcionar para tú.

La tercera solución sería hacer el trabajo en su aplicación. Lea en los resultados de la consulta SELECT línea por línea e INSERT en el otro servidor línea por línea. Sin embargo, es posible que tenga algunos problemas con los tipos de datos y el manejo nulo.