Pregunta

Ok, estoy ejecutando una configuración con un solo maestro y varios esclavos.Todas las escrituras pasan por el maestro y se replican en los esclavos, que se utilizan estrictamente para lecturas.

Ahora tengo un procedimiento almacenado (no una función) que es llamado por un disparador en una inserción.Según los documentos de MySQL, para los activadores de replicación registran la llamada al activador, mientras que los procedimientos almacenados en realidad registran el resultado del procedimiento almacenado.

Entonces, mi pregunta es, cuando se active mi disparador, ¿replicará tanto el disparador como los resultados del procedimiento que llama (lo que resultará en que el procedimiento se ejecute efectivamente dos veces)?¿O simplemente replicará el disparador y hará que los esclavos vuelvan a ejecutar el procedimiento almacenado por su cuenta?

Gracias

¿Fue útil?

Solución

En MySQL 5.0 (y MySQL 5.1 con registro binario basado en declaraciones), solo se registra la consulta de llamada, por lo que en su caso, se registraría INSERT.

En el esclavo, se ejecutará INSERT y luego se volverá a ejecutar el disparador en el esclavo.Entonces, el disparador debe existir en el esclavo y, suponiendo que así sea, se ejecutará exactamente de la misma manera que el maestro.

En MySQL 5.1, existe un registro binario basado en filas, que registrará solo las filas que se cambian, por lo que el disparador no se volverá a activar en el esclavo, pero todas las filas que cambiaron aún se propagarán.

Otros consejos

Además de la excelente respuesta de Harrison:

  • Suponiendo que las bases de datos estén sincronizadas (esquema, datos, misma versión) para empezar, debería funcionar
  • Si no es así, es posible que esté utilizando algo no determinista en sus consultas o disparador.Arregla eso.
  • Independientemente de cómo utilice la replicación, debe tener monitoreo para verificar que los esclavos estén siempre sincronizados.Sin ningún control, se desincronizarán (sutilmente) y no lo notarás.MySQL no tiene una función automática incorporada para verificar esto o solucionarlo.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top