Editar 2016: recientemente (agosto de 2016) lanzamos gh-ost
, modificando mi respuesta para reflejarla.
Hoy en día existen varias herramientas que le permiten modificar tablas en línea para MySQL. Estos son:
- edición 2016: gh-ost :herramienta de migración de esquemas sin activación de GitHub (descargo de responsabilidad:soy el autor de esta herramienta)
- oak-online- alter-table , como parte del openark-kit (descargo de responsabilidad:soy el autor de esta herramienta)
- pt-online-schema- cambiar , como parte del Percona Toolkit
- Facebook cambio de esquema en línea para MySQL
Consideremos la `ALTER TABLE` "normal":
Una tabla grande tomará mucho tiempo para ALTER
. innodb_buffer_pool_size
es importante, al igual que otras variables, pero en una tabla muy grande todas son insignificantes. Solo lleva tiempo.
Qué hace MySQL para ALTER
una tabla es crear una nueva tabla con un nuevo formato, copiar todas las filas y luego cambiar. Durante este tiempo la mesa está completamente bloqueada.
Considere su propia sugerencia:
Lo más probable es que funcione peor de todas las opciones. ¿Porqué es eso? Debido a que está utilizando una tabla InnoDB, INSERT INTO tablename_tmp SELECT * FROM tablename
hace para una transacción. un enorme transacción. Creará incluso más carga que la normal ALTER TABLE
.
Además, tendrás que cerrar tu aplicación en ese momento para que no escriba (INSERT
, DELETE
, UPDATE
) a su mesa. Si es así, toda su transacción no tiene sentido.
Qué proporcionan las herramientas en línea
No todas las herramientas funcionan igual. Sin embargo, los conceptos básicos son compartidos:
- Crean una tabla "sombra" con esquema alterado
- Crean y usan disparadores para propagar cambios de la tabla original a la tabla fantasma
- Ellos lentamente copie todas las filas de su tabla a la tabla de sombra. Lo hacen por partes:digamos, 1000 filas a la vez.
- Hacen todo lo anterior mientras usted aún puede acceder a la tabla original y manipularla.
- Cuando están satisfechos, intercambian los dos, usando un
RENAME
.
El openark-kit La herramienta ha estado en uso durante 3,5 años. La herramienta Percona tiene algunos meses, pero posiblemente haya sido más probada que la anterior. Se dice que la herramienta de Facebook funciona bien para Facebook, pero no brinda una solución general para el usuario promedio. No lo he usado yo mismo.
Editar 2016: gh-ost
es una solución sin disparadores, que reduce significativamente la carga de escritura maestra en el maestro, desacoplando la carga de escritura de migración de la carga normal. Es auditable, controlable, comprobable. Lo desarrollamos internamente en GitHub y lo lanzamos como código abierto; estamos haciendo todas nuestras migraciones de producción a través de gh-ost
hoy dia. Ver más aquí
.
Cada herramienta tiene sus propias limitaciones, fíjese bien en la documentación.
La forma conservadora
La forma conservadora es usar una replicación Maestro-Maestro Activo-Pasivo, hacer ALTER
en el servidor en espera (pasivo), luego cambie los roles y haga ALTER
nuevamente en lo que solía ser el servidor activo, ahora se volvió pasivo. Esta también es una buena opción, pero requiere un servidor adicional y un conocimiento más profundo de la replicación.