Desarrollo y bases de datos
Convertir base de datos MyISAM a InnoDB, cambiando el motor de almacenamiento
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 protegida
Trabaja desde una carpeta privada fuera de public_html, con un nombre de volcado nuevo. 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 && test -s 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
Si mysqldump devuelve un error, no continúes ni consideres válido el archivo parcial. La exportación de rutinas requiere permisos; si falla, revisa qué objetos necesita la aplicación antes de omitirlos. Los eventos, si existen, también deben inventariarse y exportarse con las opciones y permisos adecuados. El checksum detecta cambios posteriores en el archivo, pero no demuestra que la copia esté completa. Los permisos de solo lectura tampoco la hacen inmutable.
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. Desactiva sus correos, cobros, webhooks y tareas automáticas para no duplicar acciones de producció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 las claves primarias, los índices (incluidos FULLTEXT), los tipos de fila y la compatibilidad de la aplicación con el cambio de motor. Confirma el espacio libre tanto para el clon como para reconstruir sus tablas. 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 `', REPLACE(TABLE_SCHEMA, '`', '``'), '`.`', REPLACE(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
Usa COUNT(*) para recuentos exactos: TABLE_ROWS puede ser una estimación, especialmente después de convertir a InnoDB. 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. Antes de restaurar las credenciales anteriores, identifica y conserva las operaciones recibidas en la base nueva; volver sin conciliarlas perdería esos cambios. Una vez resuelto ese punto, vuelve 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
- Cerrar consultas MySQL en ejecución Identifica consultas MySQL lentas o bloqueadas y distingue entre detener una sentencia y cerrar su c...
- Clonar base de datos Duplica una base MySQL creando antes el destino y sus permisos en cPanel, y copiando después estruct...
- Conexión remota y segura al servidor MySQL Protege una conexión MySQL remota mediante un túnel SSH y configura por separado las credenciales SS...
- Crear una base de datos y su usuario con el asistente de cPanel Crea una base MySQL, su usuario y la asociación de permisos desde el asistente de cPanel para obtene...
¿Algo no cuadra o ha cambiado? Cuéntanoslo y lo revisamos.