2009-06-18 22 views
12

¿Cuál sería la forma más rápida de agregar una nueva columna en una gran tabla mysql?Agregue una nueva columna en una gran tabla mysql

La columna Alterar tabla crea una copia de la tabla completa y luego reemplaza la anterior con la nueva tabla de creación. Mientras se está ejecutando este proceso, la tabla original es legible, pero todas las inserciones y actualizaciones están estancadas.

En las tablas grandes, la copia puede llevar mucho tiempo, ¿hay alguna forma de reducirla?

+0

pregunta relacionada: http://stackoverflow.com/questions/1645215/how-do-i-add-a-column-to-large-sql-server-table –

+1

Considere innodb_log_file_size sintonización (Pero tenga cuidado, ver http://www.mysqlperformanceblog.com/2011/07/09/how-to-change-innodb_log_file_size-safely/) e innodb_log_buffer_size. Para obtener más información, consulte mi respuesta aquí: http://stackoverflow.com/a/12688184/1148030 –

Respuesta

5

Estás atrapado haciendo ALTER TABLE. La mejor manera posible de lidiar con esto de manera efectiva es utilizar una configuración MASTER-MASTER.

Primero puede modificar MASTER1 y simplemente usar MASTER2 en producción. Luego cambias y haces exactamente lo contrario.

2

No haga esto vivo en un sistema activo. Para un sistema activo, haga esto mientras retira el sistema para un mantenimiento regular.

+0

Es posible realizar la actualización en un cuadro esclavo, pero ¿hay alguna forma no manual de volver a crear las actualizaciones en el servidor real? ? el registro binario o algo así. La forma manual sería registrar cada inserción o actualización y la aplicación en el mismo orden. – Maraino

1

Suponiendo una tabla InnoDB:

  1. Copia {tabla existente} a {nueva tabla} sin datos (sólo esquema)
  2. comandos
  3. mesa de Uso Alter añadir/modificar columnas en nueva tabla (debería funcionar en un instante)
  4. tabla existente MYSQLDUMP (utilizando una sola transacción, --no-drop-table, etc) en el archivo
  5. importar archivo de volcado en {Nueva tabla} (esto, puede tomar un tiempo, pero la tabla anterior aún utilizable durante este período)
  6. d Durante el período de mantenimiento, abandone {Old Table} y cambie el nombre {New Table} a {{Old Table} anterior.
Cuestiones relacionadas