Cómo cambiar el motor de una base de datos y una tabla MySQL

GuíasBases de datosLinuxMySQLProgramacionSistemasSQL

Un motor de base de datos es el software subyacente que los sistemas gestores de bases de datos utilizan para realizar las operaciones de lectura, escritura, creación y borrado de datos. La mayoría de los sistemas gestores de bases de datos incorporan su propia API para permitir la interacción entre el usuario y el motor de base de datos. En esta guía vamos a ver cómo cambiar el motor de una base de datos y de una tabla MySQL.

Los dos motores de base de datos más utilizados en MySQL son MyISAM e InnoDB. MyISAM es el motor clásico de MySQL y el que se establecía por defecto en versiones anteriores a la 5.5 de MySQL. Funciona bien para aplicaciones sencillas, pero tiene ciertas limitaciones, puesto que, por ejemplo, no soporta ni transacciones ni claves foráneas. Por el contrario, InnoDB soporta todo esto, por lo que además de ser un motor más eficiente, se adapta mejor a las aplicaciones que se crean a día de hoy con casi cualquier lenguaje de programación.

Si tienes acceso root a tu servidor, podrás cambiar el motor de bases de datos que MySQL usa por defecto, además, de cambiar el motor individualmente para bases de datos y tablas, algo que vamos a ver a continuación. Haremos todo desde la línea de comandos, por lo que necesitarás conectarte a MySQL desde la línea de comandos.

Cómo cambiar el motor MySQL por defecto

Cuando creas una tabla dentro de una base de datos, ésta utilizará el motor de base de datos que esté establecido por defecto en MySQL si no lo seleccionas explícitamente. Vamos a ver cómo saber cuál es el motor de base de datos por defecto de MySQL y cómo puedes cambiarlo.

Saber cuál es el motor MySQL por defecto

Si quieres saber cuál es el motor de bases de datos de MySQL que está establecido por defecto, conéctate a mysql a través de la consola (mysql -u nombre_usuario -p) y ejecuta esta sentencia:

SHOW ENGINES;

Se mostrará un listado con todos los motores soportados junto con su description y características que soporta cada uno. El motor que está establecido por defecto es el que se indica como DEFAULT.

Cambiar el motor MySQL por defecto

Es posible cambiar el motor que MySQL utiliza por defecto para así no tener que configurar individualmente cada base de datos o cada tabla. Una vez cambiado, todas las tablas que crees utilizarán el motor seleccionado, a no ser que escojas otro durante la creación de las mismas. Para cambiar el motor de base de datos por defecto sigue estos pasos:

  1. Editar el archivo my.cnf de tu sistema local o de tu servidor. Este archivo estará en la carpeta /etc en sistemas CentOS y Fedora, o en la carpeta /etc/mysql en sistemas Ubuntu y Debian.
  2. El archivo my.cnf está dividido en varias secciones. Vete a la sección [mysqld] y localiza la siguiente línea, en donde MOTOR será el motor por defecto que está establecido actualmente:
    default-storage-engine=MOTOR
  3. Debes reemplazar MOTOR por el nombre del motor que quieres utilizar, que habitualmente será MyISAM o InnoDB. En caso de que escojas el motor InnoDB, asegúrate de que la línea skip-innodb está comentada. Puedes comentarla con un símbolo sostenido tal que así:
    #skip-innodb
  4. Guarda el archivo my.cnf y sal del editor de texto.
  5. Ahora debes reiniciar el servidor MySQL para que se cargue la nueva configuración y los cambios surtan efecto. Puedes hacerlo con uno de estos dos comandos:
    • El sistemas CentOS y Fedora:
      service mysqld restart
    • En sistemas Ubuntu o Debian:
      service mysql restart
  6. Una vez se reinicie MySQL, conéctate a mysql y ejecuta la siguiente consulta para verificar si el motor establecido por defecto se ha cambiado correctamente:
    SHOW ENGINES

Y esto es todo, veamos ahora cómo cambiar el motor te tabas individuales.

Cómo cambiar el motor de una tabla MySQL

Antes de ver cómo cambiar el motor MySQL de una tabla, vamos a ver cómo ver cuál utiliza actualmente.

Saber cuál es el motor MySQL de una tabla

Para saber cuál es el motor MySQL que utiliza una tabla, conéctate a mysql a través de la consola (mysql -u nombre_usuario -p) y ejecuta esta sentencia:

SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES where TABLE_SCHEMA = 'base_de_datos';

Debes reemplazar base_de_datos por el nombre de la base de datos que quieres consultar. El comando mostrará una lista con todas las tablas de la base de datos, junto con el motor que utilizan.

Si tienes phpMyAdmin instalado, también puedes obtener el motor si seleccionas una tabla y haces clic en al pestaña Operaciones del menú superior derecho.

Cambiar el motor MySQL de una tabla

Para cambiar el motor de una tabla que ya existe, puedes conectarte a MySQL desde la terminal (mysql -u nombre_usuario -p) y ejecutar estas sentencias, reemplazando base_de_datos por el nombre de la base de datos y nombre_tabla por el nombre de la tabla :

USE base_de_datos;
ALTER TABLE nombre_tabla ENGINE = InnoDB;

En este ejemplo hemos escogido el motor InnoDB, pero puedes escoger cualquier otro.

Si usas phpMyAdmin, también lo puedes cambiar si seleccionas una tabla de una base de datos y haces clic en al pestaña Operaciones del menú superior derecho.

Selecciona el motor que prefieras y guarda los cambios.

Cuando creas una tabla en MySQL, ésta utilizará el motor establecido por defecto, algo que ya has visto cómo cambiar en el primer apartado de esta guía. Sin embargo, también es posible cambiarlo tanto durante su creación mediante la sentencia ENGINE.

  • Por ejemplo, si quieres crear una tabla con el motor InnoDB debes hacerlo así:
    CREATE TABLE nombre_tabla (...) ENGINE InnoDB;
  • Si por el contrario quieres crear una tabla con el motor MyISAM debes hacerlo así:
    CREATE TABLE nombre_tabla (...) ENGINE MyISAM;

También puedes consultar la guía para crear bases de datos y tablas MySQL.