MyISAM o InnoDB en WordPress: ¿Qué es mejor? ¿Cómo convertir las tablas?

Cuando te pones a optimizar en serio una web, a hacer WPO en profundidad, llega un momento en que tienes que entrar en el rendimiento de la base de datos, un factor muy relevante, tanto en el consumo de recursos como en la velocidad de carga de tus páginas.

¿Por qué es importante la base de datos para la optimización de WordPress?

Como ya sabrás, WordPress es un sistema de creación web dinámico, y esto significa ni más ni menos que tu web existe solo cuando tu sitio recibe una visita, lo que desencadena una serie de acciones para mostrar el contenido de tus páginas.

Básicamente, el servidor recibe la visita y el motor de WordPress realiza una serie de consultas a la base de datos para mostrar en el tema, mediante funciones PHP y llamadas SQL, el contenido de cada página.

Lo podríamos resumir en que con WordPress o cualquier CMS dinámico tu web no existe hasta que alguien la visita. Se crea en tiempo real para el visitante.

Y esto no es malo en sí, es el modo en que funciona prácticamente todo Internet: consultas a bases de datos que, en base a las cookies del visitante y el contenido existente almacenado, muestran contenido más o menos personalizado al visitante.

Dicho esto, el rendimiento del motor de la base de datos, su optimización, velocidad, es vital para la generación lo más rápida posible del contenido dinámicamente.

Es cierto que, como hemos visto, podemos resolver consultas comunes mediante sistemas de caché, pero en algún momento hay que revisar en la base de datos para mostrar el contenido actualizado, y cuanto más optimizada esté mucho mejor.

Por este motivo hemos visto en otros artículos cómo optimizar diversos aspectos de la base de datos, como estos:

¿Qué es eso de MyISAM e InnoDB?

¡Vamos a ello!

MyISAM e InnoDB son motores de almacenamiento en bases de datos MySQL, o sea, que son la parte del gestor de la base de datos que se encarga del almacenamiento, gestión y recuperación de las tablas de la base de datos.

Las principales diferencias entre MyISAM e InnoDB, en breve, sería estas:

  • InnoDB tiene bloqueo a nivel de fila, MyISAM sólo puede hacer bloqueo a nivel de tabla.
  • InnoDB tiene una mejor recuperación en caso de fallos.
  • MyISAM tiene índices de búsqueda
    FULLTEXT

    , InnoDB no lo tuvo hasta MySQL 5.6 (Feb 2013).

  • InnoDB implementa transacciones, claves externas y restricciones de relación, MyISAM no.

Más ampliamente, para que lo entiendas si no eres muy técnico, la diferencia principal entre MyISAM e InnoDB es sobre todo la velocidad de carga para diferentes tipos de operaciones.

Por ejemplo, InnoDB es más eficaz con consultas del tipo

SELECT

, y más lento en las tipo

INSERT

o

UPDATE

. Es por esto que normalmente InnoDB se utiliza más en bases de datos muy grandes, con muchas conexiones entre los datos.

MyISAM es justo lo contrario,

INSERT

y

UPDATE

se ejecutan más rápido que en InnoDB, pero

SELECT

es más lento.

MyISAM se utiliza más para bases de datos pequeñas en las que se cambian datos de forma muy frecuente y abundante. En estos casos, MyISAM tiene mejor rendimiento porque los comandos con

INSERT

y

UPDATE

son más rápidos.

Por otro lado, MyISAM no tiene recuperación automática en caso de fallos, pero puedes reparar tablas.

Un punto a favor de MyISAM es que las tablas son normalmente más pequeñas, ocupan menos espacio en disco que las tablas InnoDB.

Vamos, que no hay un motor mejor, cada uno tiene su utilidad.

Entonces ¿cuál uso para WordPress?

Aunque todas las nuevas instalaciones de WordPress crean la base de datos con InnoDB, en realidad no siempre será la mejor opción. De hecho incluso hay bases de datos de WordPress con tablas en InnoDB y tablas en MyISAM.

Es muy común encontrarse bases de datos con tablas en ambos motores sobre todo en instalaciones antiguas. Debido a que inicialmente WordPress usaba MyISAM, luego, al instalar plugins, empiezan a convivir con InnoDB.

Como norma general, si tu web es más de lectura, si no necesita hacer grandes y persistentes procesos de lectura y escritura, entonces es mejor MyISAM, pero si tienes una web en la que generas mucho contenido, o un Ecommerce, la elección más lógica sería InnoDB.

Resumiendo, si me preguntas mi opinión, yo te recomiendo InnoDB para la mayoría de las webs creadas con WordPress, mientras que MyISAM solo para usos muy especializados (estáticos principalmente) de WordPress.

Además, por compatibilidad, también es la mejor opción optar por InnoDB pues todas las nuevas versiones de MySQL usan InnoDB, todos los plugins se programan actualmente para usar InnoDB y es lo que menos problemas te dará en conjunto.

¿Cómo migro tablas de MyISAM a InnoDB?

Si ya lo tienes claro, y quieres migrar tablas de MyISAM a InnoDB para aprovechar sus mejoras de rendimiento objetivas en sitios dinámicos, el proceso puedes hacerlo de dos maneras.

Primero, haz una copia de seguridad de la base de datos

Nunca insistiré bastante en esto, y no deberías tomártelo a la ligera. Da igual el método que elijas, pero siempre, siempre, antes de tocar nada en una base de datos haz una copia de seguridad.

Si utilizas un plugin de seguridad como iThemes Security, que ya sabes que suelo recomendarlo, lo tienes muy fácil. Solo tienes que ir a la administración de tu WordPress, en

Seguridad > Copia de seguridad de base de datos

y activar el módulo.

Puedes enviártela por correo, guardarla en el servidor o ambas cosas.

También puedes hacerlo directamente en PHPMyAdmin, la herramienta de gestión de bases de datos que encontrarás en tu hosting.

Simplemente a la pestaña de exportar y descarga la base de datos. En caso de desastre la podrás importar de nuevo en la pestaña «Importar».

Segundo, comprueba que tienes suficiente espacio

Antes de ponerte a convertir tablas de MyISAM a InnoDB asegúrate de tener suficiente espacio en disco en tu servidor como para almacenar tanto las tablas antiguas como las nuevas durante el proceso.

Así, si el tamaño de tu base de datos previo es de 50 Mb deberías tener más del doble de eso antes de la migración (de hecho mucho más).

Además, debes tener en cuenta que las tablas InnoDB ocupan más espacio que las tablas MyISAM, otro aspecto a tener en cuenta.

Esto es así porque durante el proceso de la operación ALTER TABLE coexisten durante un tiempo los dos tipos de tablas, y si el proceso se interrumpe por falta de espacio puede provocar una importante pérdida de datos.

De nuevo, me remito al punto anterior: haz una copia de la base de datos antes de pasar al siguiente paso.  En caso de desastre siempre tendrás una copia que restaurar.

Migrar de MyISAM a InnoDB con comandos SQL

Llegados a este punto, el modo más rápido de hacer la migración es mediante comandos SQL. Ni siquiera tienes que salir de PHPMyAdmin pues ahí tienes una consola para ejecutarlos.

Una vez ahí tenemos los siguientes comandos…

Migrar de MyISAM a InnoDB tablas concretas de una base de datos

Si solo tienes que convertir algunas tablas el comando sería como en este ejemplo:

ALTER TABLE wp_posts ENGINE=InnoDB;
ALTER TABLE wp_postmeta ENGINE=InnoDB;

En este caso estamos convirtiendo a InnoDB las tablas

wp_posts

y

wp_postmeta

.

Migrar de MyISAM a InnoDB todas las tablas de una base de datos

Si son todas las tablas las que quieres convertir entonces el comando sería así:

mysql -e "SELECT concat('ALTER TABLE ',TABLE_NAME,' ENGINE=InnoDB;')  
FROM Information_schema.TABLES 
WHERE TABLE_SCHEMA = 'nombre_de_mi_base_de_datos'  AND ENGINE =  'MyISAM'  AND TABLE_TYPE='BASE TABLE'" | tail -n+2 > alter.sql

Como puedes ver en el código, tienes que cambiar el nombre de la base de datos de ejemplo por el de la tuya.

Migrar de MyISAM a InnoDB con PHPMyAdmin

También puedes hacerlo con la misma interfaz de PHPMyAdmin.

Simplemente abre tu base de datos y haz clic en una tabla, a continuación pulsa en la pestaña «Operaciones» y ahí encontrarás una sección en la que cambiar el motor.

Cuando termines con esa tabla repite el proceso con el resto que quieras convertir.

Migrar de MyISAM a InnoDB con WP-CLI

Pues sí, también puedes convertir tablas MyISAM a InnoDB mediante la interfaz de comandos WP-CLI de WordPress.

Sería así:

wp db query "SELECT CONCAT('ALTER TABLE ', TABLE_SCHEMA,'.', TABLE_NAME, ' ENGINE=InnoDB;') FROM information_schema.TABLES WHERE ENGINE = 'MyISAM'" --skip-column-names > db_optimize.sql
wp db query < db_optimize.sql
rm db_optimize.sql

¿Es seguro migrar de MyISAM a InnoDB?

Sí, no suele haber problema alguno nunca, pero además, como tienes una copia de seguridad de la base de datos siempre estás a salvo ¿verdad? ¿la tienes?

¿Qué beneficios tiene migrar de MyISAM a InnoDB?

Pues, tirando de comodín universal te diré que … depende.

Puedes repasar arriba del todo las características de cada motor de almacenamiento, y de ahí puedes extraer algunos, como estos:

  • Compatibilidad: WordPress y prácticamente todos los plugins usan InnoDB.
  • Rendimiento de lectura y escritura: InnoDB es simplemente mejor para muchas operaciones de lectura y escritura.
  • El editor de WordPress se notará más ligero con InnoDB, esto suele ser bastante aparente.
  • En general la administración de WordPress es más ligera con InnoDB.

Actualmente en lo único en que pierde frente a InnoDB es en el tamaño de la base de datos, pero compensa con todo lo demás.

Pero vamos, que los tiene, que ya tardas.

La entrada MyISAM o InnoDB en WordPress: ¿Qué es mejor? ¿Cómo convertir las tablas? la publicó primero Fernando Tellado en Ayuda WordPress. No copies contenido, no dice nada bueno de ti a tus lectores.

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *