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

Ya sea por requerimientos de aplicaciones al actualizar, o cambios en el desarrollo, se puede hacer necesario cambiar el motor de almacenamiento en una base de datos, requisito por ejemplo necesario al actualizar Moodle desde una versión antigua a la 3.3, el cual requiere InnoDB como sitema de almacenamiento.

Aunque existen varias opciones, bajo nuestra experiencia la forma más sencilla es genenerar y descargar un backup .sql de la base de datos, reemplazar las coincidencias oportunas para el motor en uso, por ejemplo MyISAM por InnoDB y volver a importar, de esta forma MySQL hará las modificaciones oportunas para que todos los datos se almacecen usando el nuevo motor.

Obtener copia de la base de datos

Si tienes experiencia usando la terminal la forma más sencilla es utilizar mysqldump, de esa forma podrás generar una copia de seguridad al vuelo sin necesidad de descarga:

mysqldump -uUSUARIO_MYSQL -pPASSWORD BASE_DE_DATOS > nombre-fichero.sql

En caso contrario puedes descargar la copia desde Copias de seguridad, Descargar una copia de seguridad de la base de datos MySQL.

Modificar el motor de almacenamiento

Si realizaste el backup vía SSH, lo más sencillo es usar el comando sed para hacer el reemplazo, si queremos cambiar de MyISAM a Innodb, ejecutamos:

sed -i "s/MyISAM/InnoDB/" FICHERO.sql

Este comando hará el reemplazo de todas las coincidencias.

Si has descargado la copia en tu equipo, deberás abrir el fichero con un editor de código tipo Sublime Text o Visual Studio, y usando la opción de búsqueda y reemplazo, buscar MyISAM y reemplazar todas las coincidencias por InnoDB.

Importar base de datos modificada

Finalmente deberás eliminar todas las tablas de la base de datos en uso, lo puedes hacer desde phpMyAdmin y tras esto importar el fichero .sql modificado.

Para este fin podrás usar de igual forma phpMyAdmin si descargarte el .sql en tu equipo, o vía mysql si estás en la terminal:

mysql -uUSUARIO_MYSQL -pPASSWORD NOMBRE_BASE_DATOS < FICHERO.sql

Recuerda que si tienes dudas o no estás seguro del procedimiento indicado, siempre puedes contactarnos y nosotros nos encargaremos de todo el proceso.