Desarrollo y bases de datos

Convertir base de datos MyISAM a InnoDB, cambiando el motor de almacenamiento

Revisado el · mysql · conversion

Una aplicación puede requerir convertir tablas MyISAM a InnoDB. No reemplaces texto globalmente dentro del volcado ni vacíes la base de producción: el cambio debe probarse sobre una copia independiente y conservar el original como reversión.

1. Crear y verificar una copia inmutable

Detén temporalmente las escrituras y genera un volcado. La opción -p solicitará la contraseña sin incluirla en el comando:

umask 077
mysqldump --routines --triggers -u USUARIO_MYSQL -p BASE_DE_DATOS > base-antes-innodb.sql
sha256sum base-antes-innodb.sql > base-antes-innodb.sql.sha256
chmod 400 base-antes-innodb.sql base-antes-innodb.sql.sha256
sha256sum -c base-antes-innodb.sql.sha256

Descarga el volcado y su checksum a otro almacenamiento. No modifiques estos ficheros.

2. Restaurar y revisar un clon

Crea una base y un usuario nuevos, restaura la copia y configura allí un clon de la aplicación:

mysql -u USUARIO_NUEVO -p BASE_NUEVA < base-antes-innodb.sql

Previsualiza las tablas MyISAM y su tamaño:

SELECT TABLE_NAME, ENGINE, TABLE_ROWS, DATA_LENGTH, INDEX_LENGTH
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'BASE_NUEVA'
  AND ENGINE = 'MyISAM';

Revisa claves duplicadas, índices, espacio libre y compatibilidad de la aplicación. La conversión puede bloquear tablas y necesitar espacio adicional.

3. Convertir solo las tablas revisadas

Genera una lista de sentencias exactas, compruébala y ejecuta cada una únicamente en el clon:

SELECT CONCAT('ALTER TABLE `', TABLE_NAME, '` ENGINE=InnoDB;') AS sentencia_a_revisar
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'BASE_NUEVA'
  AND ENGINE = 'MyISAM';

No uses una sustitución global en el .sql: podría alterar datos de usuario, comentarios o configuraciones que contengan la palabra MyISAM.

4. Validar y hacer el cambio

Compara el esquema, los índices y el recuento de filas de todas las tablas entre la base original y el clon. Prueba acceso, búsquedas, escritura, tareas programadas y las operaciones críticas de la aplicación.

Solo después de validar el clon, detén de nuevo las escrituras, sincroniza los cambios finales si corresponde y cambia las credenciales de la aplicación para usar BASE_NUEVA. Mantén la base original intacta y sin escrituras durante el periodo de observación.

Reversión

Si alguna comprobación posterior falla, detén las escrituras y restaura las credenciales anteriores para volver a la base original. Conserva tanto esa base como el volcado verificado hasta confirmar que la conversión es estable.

Si no puedes disponer de un clon o calcular el espacio necesario, contacta con soporte antes de convertir las tablas.

También te puede ayudar

  1. Asistente de bases de datos MySQL
  2. Bases de datos MySQL
  3. Cerrar consultas MySQL en ejecución
  4. Clonar base de datos