2012-06-01 17 views
13

Tengo una replicación de Mysql maestro-esclavo (s) con tablas MyISAM. Todas las actualizaciones se realizan en el maestro y las selecciones se realizan en el maestro o en los esclavos.mysql - ¿los bloqueos se propagan sobre la replicación?

Parece que deberíamos bloquear manualmente algunas tablas cuando realizamos ciertas actualizaciones. Si bien este bloqueo de escritura está en las tablas, no se pueden realizar selecciones en la tabla bloqueada. ¿Pero qué hay de los esclavos? ¿El bloqueo se propaga?

Di que tengo table_A y table_B. Inicié un bloqueo en table_A y table_B en el maestro y comencé a realizar la actualización. En este momento, ninguna otra conexión puede leer table_A y table_B fuera del master? Pero, ¿qué sucede si en este momento otra conexión intenta leer las tablas de un esclavo, pueden hacerlo?

+1

Hola Adam, ¿has encontrado una respuesta a esto? – davide

+2

Este es un argumento para pasar a InnoDB: para evitar bloqueos de tabla. –

Respuesta

2

Todo lo que replica MySQL se puede encontrar en los registros binarios.

Puede ejecutar el siguiente comando para ver los detalles.

show global variables like 'log_bin%'; 

log_bin_basename le indicará la ruta a sus registros binarios con el nombre de archivo base.

y ejecutar

show binary logs 

para encontrar los archivos binarios que están actualmente presentes en su servidor.

Puede verificar los comandos reales que se escriben en el archivo usando el comando mysqlbinlog junto con el nombre del archivo o ejecutando show binlog events ... desde la CLI de MySQL.

Además, compruebe qué binlog_format está utilizando.

Básicamente, el bloqueo de las tablas no se propaga directamente a los esclavos, pero en ese momento, whey ejecutará las actualizaciones realizadas y realizarán un bloqueo de la tabla actualizada si es necesario.

0

Hasta donde yo sé, los bloqueos de escritura no se propagan en el binlog, puede verificarlo haciendo una prueba rápida y mirando el binlog. Si desea evitar problemas en el maestro también y por alguna razón no puede migrar a InnoDB considere la posibilidad de integrar algo como GET_LOCK() en su aplicación en lugar de bloquear por completo una tabla. MyISAM es bastante dudoso cuando se trata de concurrencia.

Cuestiones relacionadas