En una replicación de MySQL Master / Slave, ¿qué pasaría si escribo en Slave?

17

Varias preguntas

  • ¿La entrada de Slave permanecerá hasta que haya una inserción / actualización / eliminación en la tabla en el Master que pueda afectar al Slave?

  • Si no es así, ¿cómo me aseguro de que el Esclavo esté sincronizado con el Maestro en adelante (ya sea eliminando la entrada del Esclavo o copiando esa entrada al Maestro manualmente)?

  • Lo más importante, ¿cómo detecto que las tablas no están sincronizadas?

kfmfe04
fuente
explique su pregunta correctamente ...
Abdul Manaf
1
¿No es una relación maestro / esclavo una sincronización unidireccional de maestro a esclavo, pero no al revés? Le pregunto qué pasaría si le escribiera al esclavo en este tipo de configuración.
kfmfe04

Respuestas:

14

Siempre que no realice ninguna instrucción INSERT / UPDATE / DELETE directamente en Slave, su Slave debería estar bien. De lo contrario, la replicación de MySQL podría romperse si INSERTA una nueva fila en mydb.mytable en el Esclavo y, a través de la Replicación, el Esclavo luego detecta un INSERTAR una fila en mydb.mytable con la misma CLAVE PRIMARIA. Esto produce el error 1062 (clave duplicada).

La única forma en que podría escribir en Slave sin romper la replicación MySQL es esta:

  • El maestro tiene bases de datos db1, db2, db3
  • Slave está replicando bases de datos db1, db2, db3 del Master
  • Corres CREATE DATABASE db4;en el esclavo
  • Usted hace INSERT / UPDATE / DELETEs solo para db4 en el Slave
  • No hace INSERT / UPDATE / DELETEs solo para db1, db2, db3 en Slave

Para detectar que un Maestro y un Esclavo no están sincronizados sin descargar ninguna herramienta, elija cualquier tabla y ejecute CHECKSUM TABLE contra una tabla en el Maestro y la copia del Esclavo de la misma tabla.

EJEMPLO

Si tiene una tabla mydb.mytable, ejecute el comando contra ella:

mysql> CHECKSUM TABLE mydb.mytable;

Si los valores no vuelven a ser los mismos, entonces algo no está sincronizado.

Si desea examinar un montón de mesas a granel, puede bajar el MAATKIT de Percona. Necesitará dos herramientas específicas (Percona también tiene el Kit de herramientas de Percona que ellos mismos bifurcaron de MAATKIT, que ahora se promociona más)

o

pt-table-checksumrealizará una TABLA DE CHECKSUM contra todas las tablas en Master y Slave. Puede configurarlo para hacer todas las bases de datos en solo las específicas.

pt-table-syncse puede ejecutar en un Slave contra cualquier mesa. Usando las opciones --print y --sync-to-master, puede ver qué instrucciones SQL deben ejecutarse en el Slave para que coincida perfectamente con el Master. Esta herramienta no funciona con una tabla que carece de una CLAVE PRIMARIA o una CLAVE ÚNICA.

He usado MAATKIT por años. Todavía lo hago Todavía no he probado el kit de herramientas de Percona, pero estoy seguro de que debería ser de la misma calidad que MAATKIT.

RolandoMySQLDBA
fuente
Ty para la respuesta detallada. Pensé que tenía más preguntas, pero creo que sus respuestas han cubierto todos los casos (pt-table-sync parece ser realmente útil).
kfmfe04