Limpiar y optimizar base de datos de WordPress

Comparte con tus amigos










Enviar

Existen multitud de puntos a los que atacar para optimizar WordPress. Más aún si estamos hablando de un proyecto que comenzó mal desde el principio: plantilla nulled, configuraciones nefastas y ningún control a la hora de publicar contenido o hacer modificaciones.




Estas tres cuestiones hicieron que el servidor estuviese lleno de posts íntegros de spam, spam oculto en posts ya publicados, comentarios pendientes de revisión con más spam todavía, imágenes subidas a tamaño original, plugins a destajo… Tras eliminar el spam y quitar plugins, toca limpiar y optimizar la base de datos de WordPress con alguno de los métodos que detallo.

Recuerda hacer una copia de seguridad de tu base de datos antes de realizar cualquier acción sobre ella. También deberías evitar hacerlo en un entorno en producción.

Reparar, limpiar y optimizar la base de datos desde WordPress

WordPress dispone de una herramienta para reparar, limpiar y optimizar la base de datos con un solo click. Esta opción no requiere acceso a phpMyAdmin y funciona a través de una dirección URL específica. Para utilizarla debes insertar en el fichero wp-config.php la línea: define('WP_ALLOW_REPAIR', true); y tras ello acceder a la dirección URL http://dominio.com/wp-admin/maint/repair.php, donde aparecerá dos opciones.

Utilidad de WordPress para optimizar las tablas de la base de datos.

Opciones para reparar la base de datos de WordPress.


Simplemente selecciona la opción que desees: Reparar la base de datos o Reparar y optimizar la base de datos. El proceso no requerirá ninguna otra acción por tu parte, aunque eso sí, bloqueará la base de datos impidiendo cualquier modificación en ella.

Al finalizar, se recomienda establecer WP_ALLOW_REPAIR a false o bien eliminar la línea que hace referencia a esta opción.

Es posible que también veas esta opción cuando la base de datos de WordPress se corrompe o, en algunas ocasiones, cuando actualizamos a una nueva versión de WordPress.

Optimizar WordPress con WP-Optimize

Aunque es posible realizar la optimización de manera manual mediante sentencias SQL, hay plugins que nos facilitan la tarea. Uno de ellos es WP-Optimize con más de medio millón de descargas y que dispone de las siguientes opciones para optimizar las tablas de la base de datos:

  • Eliminar todas las revisiones de entradas publicadas. WordPress guarda todos los cambios que se realizan en cada entrada. Estas revisiones no serán necesarias si ya has publicado el post y mantiene la versión definitiva y publicada.
  • Limpiar borradores automáticos y publicaciones de la papelera. Cada cierto tiempo, WordPress guarda el contenido que estas redactando en borradores. Si decides no continuar con la redacción de esa publicación, esta queda guardada como borrador también.
  • Eliminar comentarios spam y comentarios en la papelera. Permite eliminar los comentarios marcados como SPAM y los comentarios que ya enviaste a la papelera con un solo click.

Plugin para optimizar WordPress.

Pantalla de opciones de WP-Optimize.


El mensaje al pie, de color rojo, dice: Atención: No seleccione los elementos marcados en rojo, podría tener resultados inesperados. Así avisan los desarrolladores de que las siguientes opciones podrían fallar. Territorio hostil.

  • Eliminar opciones transitorias. Las opciones transitorias son la “huella” que dejan themes y plugins tras su desinstalación y que quedan en nuestra base de datos sin relación. Hay que ser conscientes de que WP-Optimize puede no interpretar correctamente qué opciones son transitorias y hacernos un estropicio.
  • Eliminar pingbacks. Sabiendo que son los pingbacks, en mano de cada usuario está si desea eliminarlos o no. Normalmente cuando tu theme no los publica.
  • Eliminar trackbacks. La misma decisión que con los pingbacks, utiliza esta opción si no te son útiles.
  • Clean post meta data, Clean comment meta data y Clean orphaned relationship data. Estas tres últimas opciones son las incorporadas de manera más reciente. Buscan metadatos y datos huérfanos, que no tengan relación con entradas o comentarios de nuestro WordPress.

A la derecha, encontramos la acción “Optimizar tablas de la base de datos” y el botón de “Procesar” para ejecutar la limpieza de la BBDD. WP-Optimize también permite consultar estadísticas sobre las tablas de nuestra instalación así como programar tareas de autolimpieza de manera automática.

Optimizar la base de datos de WordPress con el plugin WP-Sweep

Otro plugin que cumple con funciones para mejorar el rendimiento la database es WP-Sweep. Es el segundo que utilicé y, para mi gusto, mejor que WP-Optimize. Está dividido en seis secciones y en cada una de ellas varias opciones que permiten saber qué porcentaje ahorra o conocer con detalle a qué afecta.

  • Opciones de limpieza para posts. Todo el contenido relacionado con entradas y páginas: revisiones, autoborradores, posts en la papelera…
  • Limpieza de comentarios. Permite borrar comentarios pendientes de moderación, comentarios marcados como SPAM o metadatos de comentarios de posts borrados.
  • Borrado de información usuarios. Optimiza la base de datos eliminando información de usuarios que ya no existen en nuestro WordPress.
  • Limpieza de términos. Limpia las relaciones entre taxonomías y los contenidos. Si tenemos publicaciones programadas o en borradores, no es recomendable utilizar esta opción.
  • Opciones transitorias. Las transient options son las opciones que quedan en caché durante un tiempo. Estas pueden ser que afecten a los usuarios cerrando su sesión o vaciando su carrito de la compra, por ejemplo.
  • Optimizar las tablas. Esta última opción permite optimizar las tablas de nuestra base de datos (wp_options, wp_posts, wp_comments…).

Las opciones del plugin se encuentran en Por último, al final de la página, dispone de un botón para aplicar todas las opciones con un único click.

Borrar custom fields o campos personalizados de los posts

Los campos personalizados son una función de WordPress que tienen dos elementos (campo y valor) y permiten añadir ciertos metadatos a las publicaciones como información adicional. En mi caso los utilizo para mostrar el sistema operativo, software o CMS utilizado, así como la versión utilizada en cada artículo que redacto. Aquí los puedes encontrar bajo el título del artículo.

Sin embargo, hay themes y plugins que lo utilizan para guardar configuraciones o valores. Por ejemplo, themes que guardan con un campo personalizado si el post tiene una galería de imágenes o plugins que insertan ahí el número visitas del post. Esto hace que, cuando dejas de utilizar ese theme o ese plugin, la mayoría de las veces continúen esos campos rellenos de manera inútil y ocupando.

En primer lugar utilicé el plugin DX Remove Unused Custom Fields con algo más de 100 instalaciones activas, pero no detectaba ninguna basurilla en los campos personalizados. Así que os explico como actuar directamente en la base de datos a través de una terminal de comandos o de phpMyAdmin.

Debemos acceder al panel de administración de base de datos, en mi caso phpMyAdmin, y allí localizar la tabla wp_postmeta. Hacemos click sobre ella y accedemos a la pestaña Estructura, en el campo meta_key hacemos click sobre el link Valores distintos. De esta manera obtendremos los distintos valores que se guardan, algunos con nombres más descriptivos que permiten saber para qué sirven y otros que no.

Contenido de la tabla "wp_postmeta" de WordPress.

Filas de la tabla wp_postmeta en instalación de WordPress en producción.

En este caso, hay gran parte de campos personalizados o custom fields utilizados por el theme: is_review, minigallery, post_video, rating_type… y la otra gran parte de un antiguo plugin que contabilizaba el impacto de una entrada en las redes sociales. Nueve campos que, multiplicados por miles de entradas, se hacen notar en el rendimiento de la base de datos y con ello del sitio web.

Una vez que hemos identificado (o deducido en algunos casos) la meta_key de aquellos custom fields huérfanos, accedemos a la consola SQL y ejecutamos la sentencia DELETE FROM wp_postmeta WHERE meta_key='MetaKeyAEliminar';

Contenido de la tabla wp_postmeta.

Eliminar tablas de plugins desinstalados

En la revisión de la base de datos, observé también muchas tablas que una instalación nueva de WordPress no posee. Estas se caracterizaban por llevar un segundo prefijo: wp_wfBlokedIpLog, wp_wfLogins, wp_wfScanners o wp_wpsq_all_questions, wp_wpsqt_all_results, wp_wpsqt_custom_forms… Ese wf indicaba que eran tablas del plugin WordFence, mientras que wpsqt lo eran plugin WP Survey And Quiz Tool y una única tabla con nombre wp_websitez_stats que parecía ser del plugin WP Mobile Detector (todos desinstalados).

Borrar tablas de los plugins WordFence, WP Survey And Quiz Tool y WP Mobile Detector.

Tablas con restos de plugins desinstalados.

En phpMyAdmin basta con seleccionar esas tablas, pulsar sobre el desplegable “Para los elementos que están marcados:” y seleccionar Eliminar.

Y nada más, de esta manera optimicé la base de datos de una instalación WordPress de tres años, cerca de 5000 entradas y mucho mucho SPAM. Para los curiosos, el tamaño de la base de datos se redujo de 83MB a 61MB, aunque meses antes había hecho una primera pasada con el plugin WP-Optimize.

Lo recomendable ahora es desactivar los plugins utilizados y, como medida de seguridad extra, cambiar los prefijos de tabla “wp_” que se utilizan en el gestor de instalación de WordPress por defecto.

Compartir es agradecer. Si te ha gustado... ¡compartélo!
Comparte con tus amigos










Enviar

3 Respuestas

  1. Hola Evaristo, Gracias por tus aportes. El problema que tengo en este momento es que se me han colado mas de 186.000 usuarios spam en uno de mis WP y no se como quitármelos de encima de un plumazo. He probado varios plugins pero curran en lotes de 1.000 y es demasiado tiempo. Me gustaría entrar en la BD y machacarlos de una sola vez. ¿Sabes si es posible? Desde ya muchas gracias por tu ayuda.

    • Evaristo GZ dice:

      Hola Jose Luis,

      Puedes hacerlo con un operación que te permitirá borrar directamente sobre la base de datos. Para ello accede a phpMyAdmin y haz una copia de seguridad. Luego en cualquier pestaña que pone SQL inserta esto, que borrará todos los usuarios menos el primero que es por defecto el admin:
      DELETE FROM wp_users WHERE ID!=1

      Te he escrito un email con la info más extensa.
      Un saludo.

  2. benjamin dice:

    hola se puede limpiar la Clean post meta data

Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.