Tablas Federadas
19-01-2011 por Jose
A continuación explicaremos los pasos a seguir para la configuración y uso de las tablas federadas en MySQL, en servers distintos.
1) En primer lugar comprobar conexion entre hosts:
- Puerto por defecto mysql '3306'.
- Aplicar las reglas necesarias en el Firewall
.
2) Habilitar la conexión remota en my.cnf.
- comentar la líneaskip-networking así:
#skip-networking
- habilitar ip's
bind-address=0.0.0.0 (cualquier ip, no recomendado)
3) Habilitar usuario externo en mysql remoto:
- GRANT ALL PRIVILEGES ON db_base.* TO db_user @'IP_HOST' IDENTIFIED BY 'db_passwd';
Una vez configurado y comprobado:
4) Habilitar motor FEDERATED en my.cnf:
- añadir la línea 'federated':
[mysqld]
federated
5) Crear las tablas federadas:
-asignar motor a tabla:
ENGINE=FEDERATED CONNECTION='scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name;
- Ej.:
CREATE TABLE `tabla_federada` (
`id_tabla` int(10) unsigned NOT NULL AUTO_INCREMENT,
`campo_1` varchar(64) NOT NULL,
`campo_2` varchar(64) NOT NULL DEFAULT '',
PRIMARY KEY (`id_tabla`)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1CONNECTION='mysql://usu_rem:pass_rem@10.0.0.200:3306/db_rem/tabla_rem';
Sincronizar dos tablas en MySQL05 Ene 2010 Author: Andphe In: MySQL |
Hace unos días en el trabajo, me pidieron que duplicara un sitio de manera que tuviesen bases de datos separadas pero compatieran la información de los usuarios, si en una de las dos instalaciones se hacía una modificación a los datos de un usuario, estos cambios debían hacerseen la otra base de datos, y viceversa; el problema se agravaba cuando era necesario además tener en cuenta que podían registrarse nuevos usuarios y eliminarlos también, con todo y validar que solo se usara una cuenta de correo por usuario.Entre las opciones estaba modificar el software para que al grabar lo hiciera en las dos bases de datos, otra opción era usar la replicación de mysql, otra correrun evento cron que pasara datos de una tabla a la otra y solo permitir registros y eliminaciones en una de las instancias y muchas más ideas locas.Trataba a toda costa de no incurrir en modificar el software, la idea de tener que modificar el moodle y la aplicación y tener que pasar por el proceso otra vez de probar todo y no crear mas errores, me daba alientos para buscar otra solución, lareplicación la descarté porque necesitaba que ambas tablas pudieran ser escritas, el cron me daba un lag entre actualizaciones que no deseaba (un usuario registrado en un lado y no poder entrar al otro, podría tratar de registrarse de nuevo y eso añadiría complejidad), aunque realmente era lo mas cercano a lo que buscaba sobretodo después de descubrir mk-table-sync que prometía hacer lo que yonecesitaba.Después de investigar por largo rato, me encontré con una solución perfecta, un motor de almacenamiento para MySQL incluido desde la versión 5.0.3 llamado FEDERATED, lo que este motor permite es usar localmente una tabla remota, así como lo lee, una de las bases de datos usaría una tabla remota, y todas las acciones en cualquiera de los dos lados afecta al otro lado porque en realidad siemprese ha estado usando una sola tabla; MySQL hace el truco analizando las consultas y enviando a travéz de la API de MySQL las consultas a la otra base de datos.Lo primero será verificar que se cuenta con el motor y que está activo, tras ejecutar la consulta SHOW ENGINES; entre los resultados debe ver un registro para FEDERATED cuyo valor para el campo Support debe ser YES, en caso contrario debeprimero activarlo; en mi caso particular uso Ubuntu lo activé editando el archivo /etc/mysql/my.cnf con privilegios de root, y añadiendo en la sección [mysqld] del archivo una línea con el texto: federated, ahora solo queda guardar el archivo y reiniciar el mysql (sudo /etc/init.d/mysql restart)Así se hace: Supongamos que se tienen 2 bases de datos bd1 y bd2 ambas tienen una tabla usuario con la...
Regístrate para leer el documento completo.