Hace poco tuve un aplicativo en el que necesitaba mantener acceso dos tablas con un mismo contenido, en bases de datos diferentes, en servidores diferentes. Las opciones de replicación de mysql funcionan perfectamente pero en este caso era necesario que que en la base de datos esclava también se pudieran aplicación operaciones de modificación como inserts, updates, delete, etc.
Las dos tablas por supuesto debían mantenerse iguales para que todo funcionara..
Tras mucho molestar con triggers y leer las opciones de replicación que ofrece mysql encontré un motor de mysql llamado
FEDERATED, lo que hace este motor es crear una clase de link desde una base datos en una tabla hacia otra que esté en otro servidor. Todas las operaciones que ejecutemos en la tabla federada se realizarán en la tabla principal.
Este motor solo está disponible en versiones 5 o posteriores de mysql. Hay que comprobar desde consola con el siguiente comando y verificar que el motor esté activo:
show engines;Si todo está bien, debería aparecer esta linea:
| FEDERATED | YES | Federated MySQL storage engine Si aparece que NO, o no aparece hay que mirar editar el archivo /etc/my.cnf y adicionar o cambiar a federated=ON. Creo que en algunos casos cuando no está compilada toca recompilar el mysql :S.
Luego de crear la tabla en el servidor principal, creen en el o los secundarios la tabla federada:
CREATE TABLE usuario (
idusuario INT(11) NOT NULL AUTO_INCREMENT,
nombreusuario VARCHAR(32) NOT NULL DEFAULT '',
PRIMARY KEY (idusuario),
INDEX name (name),
INDEX other_key (other)
)
ENGINE=FEDERATED
CONNECTION='mysql://usuario@192.168.0.77:3306/colegio/usuario';Las dos últimas líneas son las importantes, la que marca que es una tabla federada (ENGINE=FEDERATED) y la que establece los datos de conexión (
mysql://usuario@servidor_remoto:puerto/base_de_datos/tabla).