2011-08-06 16 views
5

Estoy buscando aclarar un poco de confusión. Tengo una configuración maestro + esclavos. Tengo un maestro y 3 esclavos. Todas las escrituras (INSERT|UPDATE|DELETE) pasan al maestro. Todas las lecturas (SELECT) van a uno de los esclavos, que se elige al azar. Todas mis tablas están usando el motor de almacenamiento InnoDB.Transacciones y Replicación Maestro + Esclavo

Tengo curiosidad por saber cómo MySQL/InnoDB maneja las transacciones en esta configuración. Si MySQL escribe cada cambio dentro de la transacción en el binlog, entonces todo debería estar bien. Sin embargo, puedo ver que hay algunos problemas importantes si el binlog no se escribe hasta que se haya comprometido la transacción.

¿Alguien puede explicar lo que está sucediendo dentro de MySQL durante la transacción con la replicación en su lugar?

Respuesta

0

Generalmente, si una transacción no se escribe en el registro binario hasta que se confirma. Suponiendo que la tabla es transaccional, todas las declaraciones en la transacción se agrupan en una sola instrucción BEGIN \ COMMIT.

0

Según this, los esclavos solo pueden ver los cambios una vez que se ha confirmado la transacción.

Las transacciones que fallan en el maestro no afectan a la replicación en absoluto. La replicación de MySQL se basa en el registro binario donde MySQL escribe sentencias de SQL que modifican los datos. Una transacción que falla (por ejemplo, debido a una violación de clave externa, o porque se revierte) no se escribe en el registro binario, por lo que no se envía a los esclavos.

Y this confirma:

El registro binario es accidente de fallos. Solo los eventos completos o las transacciones se registran o se vuelven a leer.

Cuestiones relacionadas