2008-10-22 17 views
9

Actualmente estoy trabajando para una empresa que tiene un sitio web que ejecuta mysql/php (todas las tablas también usan el tipo de tabla MYISAM).replicación mysql - ¿bloqueo de tabla?

Nos gustaría implementar la replicación, pero he leído en los documentos de mysql y en otros sitios de Internet que esto bloqueará las tablas al hacer las escrituras en el registro binario (que el esclavo dbs eventualmente leerá).

¿Estos bloqueos causarán un problema en un sitio en vivo que es bastante pesado para escribir? Además, ¿hay alguna forma de habilitar la replicación sin tener que bloquear las tablas?

Respuesta

6

Si cambia los tipos de tabla a innodb, se usa el bloqueo de nivel de fila. Además, su replicación será más estable, ya que las actualizaciones serán transaccionales. La replicación MyISAM es un dolor a largo plazo.

Asegúrese de que sus servidores coincidan con la versión, y SIEMPRE asegúrese de apagar el maestro antes de apagar los esclavos. Puede volver a encender el master inmediatamente después de apagar los esclavos, pero tiene que quitarlo.

Además, asegúrese de utilizar las opciones apropiadas de autoextender para InnoDB. Y, mientras lo hace, probablemente querrá migrar desde float y doblar a 'decimal' (lo que significa mysql 5.1.) Eso le ahorrará algunos dolores de cabeza de replicación.

Eso es probablemente un poco más de lo que usted pidió. Disfrutar.

P.s. sí, los bloqueos myisam pueden causar problemas. Además, innodb es más lento que myisam, a menos que myisam esté bloqueando para una gran selección.

+0

Oh, puede haber algún SQL que pueda ejecutar para desactivar la replicación en el maestro, luego sondear el estado de los esclavos hasta que se pongan al día, luego apáguelos. – Chris

0

La solución con el tipo de tabla myisam no es "mejor". Sin embargo, puede salir adelante con eso.

Lo mejor que puede hacer es asegurarse de que su esclavo y maestro ejecute en el mismo hardware (las diferencias FPU pueden crear errores de replicación) y asegurarse de que está ejecutando los mismos números de versión en sus servidores MySQL.

El siguiente enlace responde a sus preguntas. Específicamente, los bloqueos en las tablas MyISAM tienen menos posibilidades de bloquear las escrituras si no hay eliminaciones en curso. Por lo tanto, una tabla que no tenga agujeros de eliminación funcionará más rápido en una configuración replicada.

http://dev.mysql.com/doc/refman/5.1/en/internal-locking.html

Puede mitigar el efecto de 'agujeros' por tener un DBA exportación/importación en caso de paradas programadas periódicamente (sobre todo después de la misa elimina.) También, asegúrese de que sus bases de datos de esclavos no bajan con el maestro todavía se está ejecutando. Eso te ahorrará muchos, muchos problemas.

+0

En realidad, los errores de replicación de diferencia de FPU también pueden ocurrir con innodb, cualquier columna de tabla que use float o double. El error exacto que verá (uno en tantos miles de veces) es un error de diferencia de ancho de columna. – Chris

4

En mi experiencia DBA un sitio de escritura de escritura, la escritura de un registro binario no agrega problemas perceptibles con el bloqueo o el rendimiento en el maestro. Si desea compararlo, simplemente active el inicio de sesión binario. Realmente no creo que las tablas estén bloqueadas para escribir consultas en el registro binario.

El bloqueo de tabla en el esclavo es otra cosa, sin embargo. La replicación es en serie: cada consulta se ejecuta hasta completarse antes de que el esclavo ejecute la siguiente. Por lo tanto, las actualizaciones largas provocarán que la replicación se quede atrás temporalmente. Si su aplicación tiene la intención de usar la replicación para escalar, necesita saber cómo acomodar esto.

Cuestiones relacionadas