Guarde un bloqueo de pt-online-schema-change con pt-archiver

Este artículo trata sobre cómo salvarse de un accidente pt-online-schema-change aprovechar pt-archiver y ejecuta consultas para garantizar que los datos se migren con precisión. Le mostraré cómo continuar con el proceso de copia de datos y cómo apagarlo de manera segura. pt-online-schema-change a través de operaciones manuales como RENAME TABLE y DROP TRIGGER mandamientos El proceso normal para recuperarse de un accidente pt-online-schema-change es colocar los disparadores en su tablero original y colocar el nuevo tablero creado por el script. Entonces vete pt-online-schema-change. En este caso, esto no fue posible.

Recientemente, un cliente necesitaba agregar una columna de clave principal a una tabla muy ocupada (con aproximadamente 200 millones de filas). La tabla tenía una sola clave en una columna (llamada our_id debajo). El cliente estaba preocupado por el retraso del esclavo y quería asegurarse de que hubiera poco o nada. Esto, como el hecho de que no puede agregar una clave principal como DDL en línea en MySQL y Percona Server 5.6, significaba que la respuesta obvia era usarla. pt-online-schema-change.

Debido a la sensibilidad de su entorno, solo podían permitir una ventana corta para los bloqueos de metadatos iniciales y tendrían que hacer manualmente el intercambio desplegable que pt-online-schema-change generalmente se hace automáticamente. Aquí es donde no-drop-triggers y no-swap-tables ingresar. En teoría, los disparadores se ejecutarán indefinidamente para mantener sincronizadas las tablas nuevas y antiguas una vez. pt-online-schema-change está completo. Creamos el siguiente comando:

Puede ver algunas de las especificaciones de las otras banderas y por qué las usamos en el Manual del kit de herramientas de Percona.

Una vez que ejecutamos el comando, el cliente se preocupó, ya que sus herramientas de monitoreo no mostraban ningún trabajo realizado (que es diseño, pt-online-schema-change no quieres dañar tu entorno de carrera). El cliente corrió strace -p para asegurarse de que funcionó. Esta no fue una gran elección ya que fracasó pt-online-schema-change.

En este punto, sabemos que la aplicación (y la administración) no nos permite realizar nuevos bloqueos de metadatos para crear disparadores en la tabla, ya que hemos pasado por nuestra ventana de bloqueo de metadatos.

Entonces, ¿cómo nos recuperamos?

Primero, comencemos con una pizarra limpia. Emitimos los siguientes comandos para crear una nueva tabla, donde __largetable_new es la tabla creada por pt-online-schema-change:

Ahora los disparadores en la mesa original, largetable actualice la nueva tabla vacía que tiene nuestro nuevo esquema.

Ahora afrontemos el problema de traducir los datos que ya están allí. largetable a __largetable_new. Aquí es donde pt-archiver ingresar. Creamos el siguiente comando:

lo usamos pt-archiver para copiar lentamente los registros de forma no destructiva a la nueva tabla en función de our_id y WHERE 1=1 (todos los registros). En este punto, revisamos periódicamente el directorio de datos de MySQL en el transcurso de un día con ls -l para comparar las dimensiones de la mesa.

Una vez que los archivos de la tabla tenían casi el mismo tamaño, realizamos conteos en las tablas. Notamos algo interesante: la nueva tabla tenía miles de registros más que la tabla original.

Esto nos preocupó. Nos preguntábamos si nuestro “pirata” estaba equivocado. En este punto, hemos hecho algunas preguntas de verificación:

Nos enteramos de que había registros más antiguos que no existían en la mesa en vivo. Esto significa que pt-archiver y el activador DELETE pueden haberse perdido entre sí (es decir, pt-archiver ya estaba en una transacción pero no había escrito registros en la nueva tabla hasta que ya se había disparado el activador DELETE).

Comprobamos con más preguntas:

;

)

; DELETE Nuestro resultado mostró 4000 registros adicionales en la nueva tabla. Esto muestra que terminamos con registros adicionales que se eliminaron de la tabla original. Realizamos otras consultas en sus datos para verificar también.

Esto no fue un gran problema para nuestra aplicación y podría tratarse fácilmente con uno simple. pt-online-schema-change consulta basada en el índice único (es decir, si no existe en la tabla original, elimínelo de la nueva).

Mesa grande

pt_osc_website_largetable_del

(

GASSUTABELLA__mesa_grande_vecchia;

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