We are in the process of migrating this forum. A new space will be available soon. We are sorry for the inconvenience.

MySQL replicación circular


Power
30/10/2009, 16:44
Hola,
Cita Publicado inicialmente por Duke
No sucede eso porque todo esta marcado con tiempos. Nunca nada sucede AL MISMO TIEMPO, entonces quien actualice 1 milesima de segundo despues será el valor definitivo.
Creo que, a pesar de ello, hay un conflicto cuando hay edición de registros en ambos servidores e inserciones y se está sin interconexión.

Si primero actualiza A y después B, cuando vuelva la conexión, se tomará como valores para ese registro los del último que actualizó (B).

Pero ¿qué pasará con el resto de tablas con campos relacionados con ese y que sufrieron inserciones a raiz de la edición del registro por parte de A?
No se borrarán, y sin embargo son incorrectas.

Creo que, por ejemplo, para un programa de contabilidad no serviría la replicación master-master.

Saludos

Duke
30/10/2009, 12:12
No sucede eso porque todo esta marcado con tiempos. Nunca nada sucede AL MISMO TIEMPO, entonces quien actualice 1 milesima de segundo despues será el valor definitivo.

Power
30/10/2009, 11:06
Hola,
Cita Publicado inicialmente por Duke
No, no funciona así.

Si se crea en A un registro con Id: 1, y al mismo tiempo se crea en B otro registro, lo asigna automáticamente con id: 2, unos pares y otros impares. Asi funciona.

Si se corta el enlace, cuando vuelve, lo que hace es sincronizarse solo.
Perdona Duke, al leer http://www.howtoforge.com/mysql_mast...er_replication me había saltado los comentarios.

Efectivamente poniendo en el my.cnf de A:
Código:
auto_increment_increment= 2
auto_increment_offset   = 1
Y en el my.cnf de B:
Código:
auto_increment_increment= 2
 auto_increment_offset   = 2
Se soluciona el problema.
Los campos autoincrementales de A se crean con números impares y los de B con números pares.
Una brillante solución.

El problema que sí parece que hay es en la edición de un mismo registro en A y en B cuando la comunicación entre A y B está cortada.
Cuando se restablece la comunicación, cada uno de los servidores trata de actualizar sobre el otro ese registro (que es diferente en cada servidor).
A eso no le veo solución sencilla.

Saludos

tolai
30/10/2009, 09:54
Muy interesante el tema... si al final lo haces, me gustaría que contases como lo hiciste y los problemas con los que te encontraste.

Un saludo.

Power
30/10/2009, 00:22
Hola,

Muchas gracias Duke.
Pues me has animado a probarlo.

Saludos

Duke
30/10/2009, 00:16
No, yo lo he puesto en marcha en un sitio muy visitado y funciona de maravillas.

Power
30/10/2009, 00:14
Hola,
Cita Publicado inicialmente por Duke
No, no funciona así.

Si se crea en A un registro con Id: 1, y al mismo tiempo se crea en B otro registro, lo asigna automáticamente con id: 2, unos pares y otros impares. Asi funciona.

Si se corta el enlace, cuando vuelve, lo que hace es sincronizarse solo.
Entonces de maravilla.
¿Tiene algún problema este tipo de replicación?

Saludos

Duke
30/10/2009, 00:08
No, no funciona así.

Si se crea en A un registro con Id: 1, y al mismo tiempo se crea en B otro registro, lo asigna automáticamente con id: 2, unos pares y otros impares. Asi funciona.

Si se corta el enlace, cuando vuelve, lo que hace es sincronizarse solo.

Power
29/10/2009, 23:08
Hola,

Muchas gracias Duke.

Me parece entender que una replicación master-master es un replicación A -> B y B -> A a la vez. ¿Es así?

Mientras haya conexión entre los dos servidores, los datos estarán sincronizados.
Pero si se corta un rato y, durante el corte, en A se crean registros de una tabla con un campo con clave primary y autoincrement y en B se hace lo mismo, cuando vuelva la conexión, me imagino que habrá problemas por intentar crear registros con esa clave duplicada.
¿Es así?.

Saludos

Duke
29/10/2009, 22:27
Tengo experiencia en el tema, si te interesa te doy una mano.

Power
29/10/2009, 21:52
Hola Duke,

Muy interesante el artículo.
Gracias.

Saludos

Duke
29/10/2009, 21:42
Lo que puedes hacer es algo que se llama Replicación Master-Master.

http://www.howtoforge.com/mysql_mast...er_replication

Aqui tienes una guia de como hacerlo.

Saludos,

Power
29/10/2009, 19:39
Hola,

Estoy liado con una aplicación web para un empresa.

Se trata de un servidor en Internet que tendrá la base de datos MySQL principal.
Ahí accederán y modificarán datos diversos usuarios.

Por otro lado, en la oficina, para mayor seguridad y rapidez, tendrán otro servidor con la base de datos MySQL local, replicada de la principal.
Desde la oficina, también modificarán datos en la base de datos local.

¿Cómo hacer para mantener sincronizadas las dos bases de datos?.

Con la replicación normal de MySQL, cualquier cambio en la base de datos principal, actualiza la base de datos local.

Pero ¿cómo hago para que los cambios en la base de datos local también se sincronicen sobre la base de datos principal?

He leído algo de que existe la posibilidad de replicación circular:
A -> B -> A
Pero no sé si esto funciona bien o da problemas.

¿Me podríais echar una mano?
Gracias.

Saludos