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.