Skip to content

Error al actualizar WordPress 4.2 (4.2.2): Parche para el core

database-update-wordpress
database-update-wordpress

El problema apareció al intentar actualizar una instalación con una base de datos un poco grande, concretamente la tabla de options (wp_options). Al intentar actualizar el wordpress aparecía la típica pantalla de “Database update required”:

database-update-wordpress

 

Y aunque le dabas al botón de actualizar la base de datos volvía a aparecer la misma pantalla, un loop infinito.

Al analizar que pasaba exactamente vi que la base de datos trabajaba mucho cada vez que le daba al botón, por lo que quedó claro que no era capas de hacer dicha actualización. Buscando más a fondo encontré una consulta que tardaba mucho en ser completada.

1
"ALTER TABLE wp_options CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"

WordPress lanzaba la actualización de la base de datos, pero esta consulta requería tanto tiempo que daba un timeout a nivel de php, aunque la orden de SQL se ejecutaba con éxito. Pero WordPress no se enteraba de que finalizó correctamente, por lo que no quedaba registrada la actualización, volvía al mismo punto y volvía a ejecutar la misma query. Y nunca salía desde loop.

Hice una pequeña modificación en el core, para verificar si la tabla ya tenía el nuevo collation o no, en caso afirmativo continuar porque ya estaba hecho. Abrí un ticket y envíe el parche.

Es mi primera contribución al core de WordPress, aunque es una chorrada pero bueno, es la primera.

Lo que me llamó la atención fue lo rápido con lo que trataron el parche. En menos de 45 minutos ya había confirmado el fallo, aplicado el parche, mejoraron el parche, lo aplicaron para la siguiente versión 4.2.3 y cerraron el ticket!

Era un problema grave, porque cualquier instalación con una tabla grande podría quedarse a mitad de la actualización y quedar bloqueada. Pero han actuado muy rápido. Eso si, aún no se ha publicado la versión 4.2.3 por lo que habrá instalaciones con este problema, y tendrá que actualizar a mano a 4.2.3 o bien ejecutar la instalación por consola y así evitar el timeout.

También puedes descargar este fichero https://core.svn.wordpress.org/branches/4.2/wp-admin/includes/upgrade.php y que es la versión que contiene el nuevo código. Lo subes por ftp y ya funcionará el dichoso botón.


Leave a Reply