2012-04-06 11 views
5

Tengo un myisam único servidor mysql RAM de 32 GB que se ejecuta en la configuración predeterminada. Quiero cambiar el tipo de motor a InnoDB de una tabla para evitar bloqueos de tabla. Tiene 50 millones de registros y el tamaño en el disco es de alrededor de 15 GB. Estoy usando mysql versión 5.5 Supongo que tendré que agregar las siguientes opciones y reiniciar mysql.Cambiando el tipo de tabla a InnoDB

innodb_buffer_pool_size=1G 
innodb_log_file_size=100M 
innodb_file_per_table=1 

¿Qué más se considera necesario al cambiar el tipo de motor?

Respuesta

13

En realidad, ejecutará un comando para convertir cada tabla.

que va más rápido para ordenar primero la tabla:

ALTER TABLE tablename ORDER BY primary_key_column; 

A continuación, ejecute el comando alter:

ALTER TABLE tablename ENGINE = INNODB; 

Puede ser que tome un tiempo si la tabla es muy grande, y va a utilizar mucho de su CPU ....

+0

Mi pregunta es sobre los cambios en la configuración de my.cnf que se deben realizar ya que el cnf actual no tiene ningún parámetro relacionado con innodb. – shantanuo

+0

La siguiente solución sugiere "MOSTRAR MOTORES" que le dirá si necesita más cambios en su archivo my.cnf. Si es así, solo asegúrese de que "skip-innodb" esté comentado. Recuerde reiniciar su motor mysql con gracia. –

+0

En ese caso, InnoDB se ejecutará en los valores predeterminados. Mi pregunta es sobre qué valores predeterminados se deben cambiar. ¿O funcionará bien en el largo plazo con la configuración predeterminada? He incluido brevemente los 3 parámetros más importantes, pero no quería saber más. – shantanuo

7

en primer lugar comprobar si su base de datos soporta el motor InnoDB (apuesto a que es compatible;)):

SHOW ENGINES\G 

Si es así, ya hay por defecto innodb related parameters en su lugar, comprobar con:

SHOW VARIABLES LIKE '%innodb%' 

y tratar de entenderlos y alterar el a sus necesidades específicas. Incluso si usa los parámetros predeterminados, ahora está bien jugar con tablas InnoDB.

Si desea crear sólo las tablas InnoDB, puede cambiar su motor de almacenamiento por defecto, ya sea para su sesión actual con: SET storage_engine=INNODB; o en su configuración por defecto utilizando el motor de almacenamiento de conexión opción .

Por cierto, la manera más rápida de convertir una tabla a InnoDB no es la manera descrita anteriormente. Uno puede hacer lo siguiente para convertir una tabla en InnoDB simplemente insertando los datos:

CREATE TABE new AS SELECT * FROM old WHERE 1<>1; 
ALTER TABLE new ENGINE = INNODB; 
INSERT INTO new SELECT * FROM old; 

Por supuesto que hay que añadir los índices que necesita de forma manual, pero por lo general su pena el tiempo (y el dolor) Ahorro en comparación con el ALTER TABLE ... en tablas un poco más grandes.

+0

¿Por qué no se acepta la respuesta mucho más útil? +1 de mi parte – fancyPants

Cuestiones relacionadas