sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es la mejor manera de sincronizar bidireccionalmente datos dinámicos en tiempo real usando mysql?

No se gana mucho rendimiento al replicar su base de datos en dos maestros. Sin embargo, hay una pequeña conmutación por error ingeniosa si codifica su aplicación correctamente.

La configuración Maestro-Maestro es esencialmente la misma que la configuración Esclavo-Maestro pero tiene ambos Esclavos iniciados y un cambio importante en sus archivos de configuración en cada caja.

Maestro MySQL 1:

auto_increment_increment = 2
auto_increment_offset = 1 

Dominar MySQL 2:

auto_increment_increment = 2
auto_increment_offset = 2

Estos dos parámetros aseguran que cuando dos servidores se peleen por una clave principal por algún motivo, no se dupliquen ni eliminen la replicación. En lugar de incrementarse en 1, cualquier campo de incremento automático se incrementará de forma predeterminada en 2. En un cuadro, comenzará el desplazamiento desde 1 y ejecutará la secuencia 1 3 5 7 9 11 13, etc. En el segundo cuadro, comenzará el desplazamiento en 2 y corre a lo largo de 2 4 6 8 10 12 etc. Según las pruebas actuales, el incremento automático parece tomar el siguiente número libre, no uno que haya salido antes.
Ej. Si el servidor 1 inserta los 3 primeros registros (1 3 y 5) cuando el servidor 2 inserta el 4, se le dará la clave de 6 (no 2, que se deja sin usar).

Una vez que haya configurado eso, inicie ambos como esclavos.
Luego, para verificar que ambos funcionan bien, conéctese a ambas máquinas y ejecute el comando SHOW SLAVE STATUS y debe tener en cuenta que tanto Slave_IO_Running y Slave_SQL_Running ambos deben decir "SÍ" en cada casilla.

Luego, por supuesto, cree algunos registros en una tabla y asegúrese de que una casilla solo inserte claves primarias impares y la otra solo incremente las claves pares.

Luego haga todas las pruebas para asegurarse de que puede realizar todas las aplicaciones estándar en cada caja y replicarla en la otra.

Es relativamente simple una vez que está funcionando.
Pero como se ha mencionado, MySQL lo desaconseja y recomienda que se asegure de tener en cuenta esta funcionalidad al escribir el código de su aplicación.

Editar: Supongo que, en teoría, es posible agregar más maestros si se asegura de que las compensaciones sean correctas, etc. Sin embargo, de manera más realista, podría agregar algunos esclavos adicionales.