Cuando se trata de migrar una web en WordPress de un servidor a otro, suelo tomarme el tiempo de hacerlo más o menos manualmente. O sea, que no utilizo (aún) un plugin (como Duplicator). Siempre que sea posible me gusta aprender a hacer las cosas de forma manual para que, cuando pase a hacerlas de forma asistida, haya podido asimilar un conocimiento de base que me ayude a prevenir y solucionar dificultades en el proceso.

Errores al importar la base de datos MySQL

El caso es que nunca había tenido ninguna dificultad destacable, dejando a un lado los comprensibles tropiezos del comienzo. Hasta que hace unas semanas me tropecé con un escollo un poco más grande de lo normal. Estaba instalando un WordPress directamente en el servidor del alojamiento definitivo y encontré dificultades persistentes importando los datos de ejemplo del tema que íbamos a utilizar. Me decidí a instalarlo en local y ver si el problema era del alojamiento.

Desde el servidor en local (en mi ordenador) no tuve ningún inconveniente, así que hice la instalación del WordPress de la última versión que había en el momento (4.3.3, creo recordar). Instalé el tema e importé los datos de ejemplo, sin contratiempos. Hasta aquí todo perfecto.

El siguiente paso era ya el habitual: copia de seguridad de ficheros por ftp, copia de la base de datos con PHPMyAdmin por otro, llevarlo todo al servidor online, hacer los ajustes de cambio de dominio… pero no. Me daba un error recurrente al importar la base de datos y no me admitía el formato de la base de datos.

Errores de importación base de datos MySQL (utf8 -> utf8mb4)

Cambios en WordPress y MySQL

Después de darle unas cuantas vueltas encontré información en la Web sobre un cambio a partir de la versión 4.2 de WordPress según el cual —si la base de datos está alojada en un servidor de bases de datos MySQL versión 5.5.3 o superior (entre otras condiciones)— la codificación de las tablas de la base de datos pasará de “utf8” a “utf8mb4”.

El caso es que mi servidor local —origen— tenía una versión superior a la 5.5.3 de MySQL y por lo tanto la base de datos codificada en “utf8mb4”, mientras que el alojamiento destino —en 1and1— tenía un servidor MySQL 5.1, de versión inferior a la de corte, y no poseía la funcionalidad de utilizar la nueva codificación. De ahí los errores en la importación de los datos.

La solución

Independientemente de que ya hay formas más automatizadas de hacer la conversión del formato de codificación de caracteres de la base de datos yo opté por una solución más “directa”: instalar de nuevo en local una versión de WordPress anterior a la 4.2 y sobre ésta el tema y la importación de contenido. En este caso, aunque mi versión local de MySQL era superior a la que comienza a admitir la codificación en “utf8mb4” el WordPress no hizo uso de ella y las tablas fueron exportables 100%.

Me decanté por esta solución puesto que no era mucho trabajo volver a instalar y en caso de la conversión de la base de datos, cualquier error no percibido podría dejar rastros que en el futuro causaran algún funcionamiento inesperado de la web. En todo caso me imaginé qué hubiera ocurrido si hubiera ocurrido lo mismo en alguno de los proyectos que realizo completamente en local hasta que están listas para migrar a sus alojamientos online definitivos… y se me ponen los pelos de punta 😀

Una vez la web en marcha en su alojamiento definitivo actualicé a la última versión de WordPress sin miedo a tener problemas con la codificación (que sigue siendo la más limitada “utf8”).

Conclusión

A la hora de desarrollar un sitio web en WordPress en local para posteriormente subirlo a su servidor online, es importante tener en cuenta:

  • Si tenemos un WordPress 4.2 o superior funcionando sobre un servidor MySQL 5.5.3 o superior creará las tablas codificadas en “utf8mb4”.
  • Si el servidor MySQL de nuestro alojamiento es de una versión anterior a la 5.5.3 no será compatible con “utf8mb4” por lo que tendremos problemas de compatibilidad de codificación en la importación de la base de datos y nos dificultará la migración.

En este caso podemos plantearnos:

  • Actualizar o cambiar el alojamiento a uno con MySQL 5.5.3 o superior.
  • Realizar el desarrollo y puesta a punto del sitio web el local en una versión de WP inferior a la 4.2 (poco recomendable pues no sabemos si al actualizar en vivo pueden haber cambios en el funcionamiento).
  • Hacernos con una herramienta de conversión de bases de datos MySQL que nos resuelva la papeleta y comprobar que nos funciona bien antes del “momento de la verdad”.

Referencias

La madre del cordero: The utf8mb4 Upgrade

La solución con plugin: Migrating a WordPress site from utf8mb4 to utf8

La referencia en el Codex de WordPress: Version 4.2 (WordPress Codex)

La referencia en Ayuda WordPress: WordPress 4.2 comienza la recta final

La referencia en MySQL.com: Changes in MySQL 5.5.3 (2010-03-24, Milestone 3)

Más sobre Unicode UTF8 -> UTF8MB4: 10.1.11 Upgrading from Previous to Current Unicode Support