A diferencia de otras bases de datos relacionales donde no es posible tener varios motores diferentes, en MySQL o MariaDB, su sucesora nacida de la compra de MySQL por parte de Oracle hace ya unos años; podemos usar varios y de hecho podemos tener unas tablas con un motor y otras con otro.
Aunque hay más opciones básicamente se usan dos y cada día más solo uno de ellos, de ahí el motivo de esta entrada.
Sin entrar en detalles técnicos podemos decir que MyISAM es el motor antiguo de base de datos de MySQL. Es un motor de base de datos algo primitivo, porque no permite hacer transacciones de tipo ACID. Y os preguntaréis qué es esto. Pues básicamente para que las transacciones sean ACID debe haber una serie de bloqueos para evitar, por ejemplo, que dos procesos escriban a la vez el mismo dato.
Esto provoca por un lado dos cosas. Lo primero que haya dejado de usarse por defecto y que en sitios donde hay mucha escritura (por ejemplo una tienda online donde se manejan stocks que deberían manejarse de forma ACID siempre) siempre debe usarse InnoDB. Lo segundo, es que por esa falta de «seriedad» el sistema a priori es más rápido haciendo ciertas operaciones, sobre todo de lectura (porque no debe esperarse a que la tabla se desbloquee).
Y digo «a priori más rápido» porque es verdad que InnoDB al ser el motor de base de datos actual de MySQL y MariaDB está en constante desarrollo y mejora. MyISAM no. Por lo que en sus sucesivas mejoras va consiguiendo superar a MariaDB hasta en cosas en las que antiguamente era peor, como la velocidad en ciertas consultas.
WordPress cuando se instala en base de datos, podéis ver el detalle de cómo lo hace en la función wp_get_db_schema(), no indica un motor por defecto, así que se usa el que utiliza en la base de datos donde se está instalando. Como WordPress funciona en cualquier caso, pues a priori, esto es algo transparente para vosotros.
¿Qué suele pasar? Pues depende pero por lo general:
De todas maneras, puede pasar de todo, hasta que el usuario sea medio consciente de este tema y haya cambiado ya algunas tablas o todas a InnoDB.
Mover tablas de un motor de base de datos a otro es bastante sencillo y no suele dar problemas, pero al ser algo bastante importante y con cierto volúmenes de datos, a veces sí los haya. Así que nada mejor que antes de tocar nada hacer una copia de seguridad de la base de datos.
Si buscáis por la red hay muchas formas de hacerlo, usando por ejemplo phpMyAdmin es bastante sencillo, pero como es una tarea que se me repite, tengo preparado un script que os dejo a continuación. Varios detalles antes de usarlo:
Aquí tenéis el script y abajo os comento brevemente qué hace.
<?php $dbname = 'nombre de la base de datos'; $mysqli = @new mysqli( DB_HOST, DB_USER, DB_PASS, $dbname ); if ($mysqli->connect_errno){ die('No se puede conectar a: ('.$mysqli->connect_errno.') '.$mysqli->connect_error); } $results = $mysqli->query('SHOW TABLES'); if ($results === false || $mysqli->connect_errno){ die('Problemas ejecutando consulta de visualización de tablas: ('.$mysqli->connect_errno.') '.$mysqli->connect_error); } while ($row = $results->fetch_assoc()){ $thisTable = $mysqli->query('SHOW TABLE STATUS WHERE Name = \''.$row['Tables_in_' . $dbname].'\'')->fetch_assoc(); if ($thisTable['Engine'] === 'MyISAM') { echo '<b>Cambiando de MyISAM a InnoDB</b> '.$row['Tables_in_' . $dbname].'<br />'; $mysqli->query('ALTER TABLE '.$row['Tables_in_' . $dbname].' ENGINE = InnoDB'); } $mysqli->query('CHECK TABLE '.$row['Tables_in_' . $dbname]); $mysqli->query('ANALYZE TABLE '.$row['Tables_in_' . $dbname]); $mysqli->query('REPAIR TABLE '.$row['Tables_in_' . $dbname]); $mysqli->query('OPTIMIZE TABLE '.$row['Tables_in_' . $dbname]); } echo '<br />Hecho.';
Lo que hace, como podéis ver es:
Y lo dicho, antes de hacer nada, siempre una copia de seguridad por si acaso.
Nota: Hay una valoración incrustada en esta entrada, por favor, visita esta entrada para valorarla.RedSys aparte de los pagos normales, llamados autorizaciones, acepta una variedad de operaciones: desde autorizaciones…
WooCommerce permite ordenar los productos de una forma nativa, para poder presentar primero los que…
Cada vez que hay una actualización grande del núcleo WordPress, por defecto WordPress te instala…
Una pantalla LCD es una pantalla delgada y hecha de cristal líquido. Se usa en…
De todos los plugins que existen para Gravity Forms, que son numerosos porque la propia…
Un CMS, como WordPress, facilita la creación y gestión de contenido en la web, sin…