2012-01-06 618 views
7

Al agregar una columna a una tabla MyISAM, MySQL creará> Copiar> Colocar> Renombrar. Tengo una tabla que es lo suficientemente grande como para que no se pueda duplicar en el espacio libre restante del servidor. Al intentar agregar una columna, el resultado es el llenado del disco. El tiempo no es un problema aquí, tampoco lo es la disponibilidad de tablas, solo el espacio en disco.MySQL ALTER TABLE en tablas demasiado grandes para duplicar

corto de copiar los datos a otro servidor, truncando, alterar, copiar y hacia atrás, ¿hay una manera de agregar una columna a una tabla MyISAM sin que crear una tabla temporal y duplicar todos los datos?

Respuesta

3

Puede crear una nueva tabla vacía, mover manualmente los datos en trozos (INSERTAR en nuevo, ELIMINAR de un número determinado de filas antiguas), soltar la tabla anterior y cambiar el nombre de la nueva tabla. Esencialmente lo que hace MySQL, pero mover los datos en lugar de copiarlos, lo que debería permitirle usar menos espacio.

+0

Tenía miedo de esto, pero esperaba un enfoque menos manual. Puede ser lo que termine haciendo. – Umbrella

+1

En última instancia, este enfoque falló, llenando el disco a pesar del tamaño de mi sector. MySQL no liberó el disco de las filas eliminadas. Ejecutar OPTIMIZE para decirle a MySQL que libere el disco que llena el disco. – Umbrella

+0

Supongo que habría funcionado mejor con InnoDB, ya que la nueva tabla reutilizaría las páginas gratuitas en el archivo idb. Me temo que no tengo otras ideas, lo siento. –

1

En general trato de mantener suficiente espacio libre para poder reconstruir mi mesa más grande. Esto me permite ejecutar OPTIMIZE TABLE o ALTER TABLE cuando sea necesario.

¿Tiene otro disco montado en su servidor?

Cuando el espacio es demasiado ajustado para reconstruir una tabla determinada, mi solución preferida es mover temporalmente algunas otras tablas a un volumen de disco por separado. Hago esto deteniendo MySQL, moviendo los archivos de datos relevantes (MYD y MYI, o ibd), y luego creando un enlace simbólico en la ubicación original que apunta a la nueva ubicación, y comenzando MySQL. Una vez que la reconstrucción de la mesa finaliza, invierto el proceso para mover las otras tablas a su ubicación original.

+1

Lamentablemente, no hay almacenamiento adicional conectado a este host. – Umbrella

Cuestiones relacionadas