Activar el motor FEDERATED en MySQL

El motor FEDERATED de MySQL, aunque no es muy versátil, puede resultar útil, por ejemplo, para conectarnos directamente a una tabla en otro servidor MySQL sin necesidad de un intermediario, como un script PHP que copie/verifique/vea datos de otro servidor.

El motor FEDERATED no esta habilitado por defecto en instalaciones estándares sobre Linux, no hay que compilar nada, solo agregarle el parametro --federated en el archivo /etc/init/mysql.conf:

#Busquen esta linea en el archivo /etc/init/mysql.conf
exec /usr/sbin/mysqld --federated

Luego de reiniciar el servicio mysql, verán los resultados:

ivancp@ubuntu$ sudo service mysql restart

 

Para ver que motores están disponibles ejecuten SHOW ENGINES en la linea de comando MySQL:

mysql> show engines;
+------------+---------+-----------+--------------+------+------------+
| Engine     | Support | Comment   | Transactions | XA   | Savepoints |
+------------+---------+-----------+--------------+------+------------+
| InnoDB     | YES     | Supports t| YES          | YES  | YES        |
| MRG_MYISAM | YES     | Collection| NO           | NO   | NO         |
| BLACKHOLE  | YES     | /dev/null | NO           | NO   | NO         |
| CSV        | YES     | CSV storag| NO           | NO   | NO         |
| MEMORY     | YES     | Hash based| NO           | NO   | NO         |
| FEDERATED  | YES     | Federated | NO           | MO   | NO         |
| ARCHIVE    | YES     | Archive st| NO           | NO   | NO         |
| MyISAM     | DEFAULT | Default en| NO           | NO   | NO         |
+------------+---------+-----------+--------------+------+------------+
8 rows in set (0.00 sec)

 

Para conectarnos a una tabla remota y consultar que datos contiene, tenemos que crear la tabla, debe ser muy similar a la tabla remota, pueden ayudarse con el comando SHOW CREATE TABLE para ahorrar tiempo y agregar el parámetro CONNECTION al final.

-- Tabla con conexion a una base de datos remota
CREATE TABLE tabla_remota
(
    id     INT NOT NULL AUTO_INCREMENT,
    campo1  VARCHAR(32),
    campo2  INT,
    PRIMARY KEY  (id),
    INDEX campo1 (campo1)
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8
CONNECTION='mysql://usuario:contraseña@1952.168.6.5/base_datos/tabla';

 

Recomendaciones:

  • El único problema es que la consulta puede demorar un poco mas de lo debido, así es que traten de no hacer consultas cuyos resultados sean realmente grandes.
  • Es una pena que aun no esté disponible la posibilidad de conectarse a otros gestores de datos como PostgreSQL o SQL Server, eso sí que sería útil.
  • Deben crear un usuario sin contraseña en la base de datos de destino, para evitar poner la contraseña en la conexión, ya que es fácil de averiguar (con SHOW CREATE TABLE).
  • Las conexiones son permitidas incluso hacia servidores MySQL mas antiguos.
  • Leer la documentación para mas detalles:
    http://dev.mysql.com/doc/refman/5.1/en/federated-storage-engine.html
  • Pueden ayudarse con un Stored Procedure para crear estas tablas FEDERATED.

Espero les sirva.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.