pt-online-schema-change (si se abusa de él) no puede salvar el día

En esta publicación de blog, discutiremos pt-online-schema-change y cómo usarlo correctamente.

¿Siempre usas pt-osc?

La alteración de tablas grandes aún puede ser una tarea de DBA problemática, incluso ahora que han mejorado DDL en línea funcionalidad en MySQL 5.6 y 5.7. Algunos tipos de ALTER siempre están fuera de línea o, a veces, son demasiado costosos para ejecutarlos en un maestro de producción ocupado.

Entonces, en algunos casos, es posible que desee aplicar uno
ALTERAR primero en los esclavos, sacando el tráfico de la piscina uno por uno y llevándolo de vuelta después del
ALTERAR se hace. Finalmente, podemos promover uno de los esclavos ya modificados para que sea un nuevo maestro, por lo que el tiempo de inactividad/mantenimiento se minimiza en gran medida. El maestro anterior se puede cambiar más tarde, sin afectar la producción. Por supuesto, este método funciona mejor cuando el cambio de esquema es compatible con versiones anteriores.

Hasta aquí todo bien, pero hay otro problema. Digamos que la mesa es enorme, y
ALTERAR toma mucho tiempo en el esclavo. Cuando se trata de un tipo de bloque ALTER DML (quizás cuando se utiliza MySQL 5.5.x o anterior, etc.), habrá un largo retraso del esclavo (si la tabla está escrita por el subproceso SQL de replicación al mismo tiempo, por ejemplo) . Entonces, ¿qué hacemos para acelerar el proceso y evitar el retraso del esclavo alterado? Una tentación que podría tentarlo es ¿por qué no usar pt-online-schema-change en el esclavo, que puede hacer ALTER sin bloqueo?

Vamos a ver cómo funciona. Necesito reconstruir una tabla esclava grande con MySQL versión 5.6.16 («alteración nula» fue hecho en línea desde 5.6.17) para recuperar espacio en disco después de eliminar algunas filas.

Este ejemplo muestra el proceso (db1 es el maestro, db2 es el esclavo):

La herramienta siempre se trabaja durante la operación, y la mesa recibe algunos escritos sobre el maestro:

que se aplican en el esclavo de inmediato, ya que la tabla permite escribir todo el tiempo.

¡Hecho! No hay retraso esclavo, y la mesa se reconstruye. Mamá. . . solo asegúrese de que los datos sean consistentes entre maestro y esclavo (puede usar pt-table-checksum):

¡No, no es! Al esclavo claramente le faltan las actualizaciones que ocurrieron durante una carrera pt-osc. ¿Por qué?

La explicación es sencilla. tu
puntoen líneaesquemacambio se basa en disparadores. Los activadores se utilizan para asegurarse de que las entradas posteriores a la tabla original también se llenen con la copia temporal de la tabla, porque las dos tablas son coherentes cuando se produce el cambio de la tabla final al final del proceso. Entonces, ¿cuál es el problema aquí? Es el formato de registro binario: en Replicación basada en ROW, los disparadores no se activan en el esclavo! Y mi profesor trabaja en modo FILA:

Entonces, si lo usé
puntoen líneaesquemacambio en el maestro, el problema de la inconsistencia de datos no ocurre. ¡Pero usarlo en el esclavo solo es peligroso!

Conclusiones

Cada vez que lo usas
puntoen líneaesquemacambio, asegúrese de que no se está ejecutando en una instancia esclava. Entonces, escalé este informe de error: https://bugs.launchpad.net/percona-toolkit/+bug/1221372. Incluso en algunos casos, usando una normal
ALTERAR funcionará bastante bien. Como en mi ejemplo, para reconstruir la tabla por separado en cada esclavo en modo sin bloqueo, solo necesitaría actualizar a la última versión 5.6.

Por cierto, si se pregunta acerca de la replicación de Galera (usada en Percona XtraDB Cluster, etc.) ya que también usa un formato basado en ROW, eso no es un problema. Los disparadores de pt-osc se crean en todos los nodos gracias a la naturaleza de replicación síncrona de escribir en todas partes. No importa qué nodo haya iniciado
puntoen líneaesquemacambio y en qué otros nodos escriben sus aplicaciones al mismo tiempo. ¡Sin esclavos, no hay problema! ⁇

Author: Ing. Luis

A lo largo de conocer Windows y otros sistemas operativos me eh encontrado con diversos tipos de error, ahora brindo soluciones según mi experiencia-

Deja un comentario