Optimizar base de datos WordPress con WP-CLI de forma segura

Optimizar la base de datos de WordPress es, probablemente, la tarea de mantenimiento con mejor relación esfuerzo/beneficio que existe: ganas velocidad sin gastar un euro en hardware. El problema es que nadie la hace. Con los meses, la base acumula revisiones de entradas, transitorios caducados, comentarios de spam y tablas huérfanas de plugins que desinstalaste hace dos años. Las consultas se vuelven más lentas y los tiempos de carga suben, poco a poco, hasta que un día alguien se queja de que «la web va rara». En esta guía verás cómo hacer la optimización de forma segura con WP-CLI, la herramienta de línea de comandos de WordPress: desde la copia de seguridad previa hasta la limpieza y reparación de tablas InnoDB.
Por qué optimizar la base de datos de WordPress mejora el rendimiento
Cada página de WordPress dispara múltiples consultas SQL: opciones, menús, widgets, contenido, metadatos. Si la tabla wp_options ha crecido sin control por transitorios con autoload (hay instalaciones donde pesa varios cientos de MB), cada carga de página arrastra esos datos inútiles. Lo mismo pasa con wp_postmeta, que tras años puede acumular millones de filas.
¿Qué ganas con una optimización periódica? Bastante:
- Consultas más rápidas: una tabla defragmentada reduce el tiempo de respuesta de MySQL/MariaDB.
- Menos memoria PHP: menos datos autoload, menos consumo en cada petición.
- Backups más ligeros: un volcado de 2 GB puede quedarse en 400 MB eliminando residuos.
- Mejor Core Web Vitals: un TTFB más bajo influye directamente en el SEO.
Un caso típico. Tienda WooCommerce con tres años de historial: la tabla de sesiones de clientes (wp_woocommerce_sessions) acumula decenas de miles de filas obsoletas. Limpiarla y optimizarla puede bajar la generación de página de 900 ms a 400 ms. Sin tocar una línea de código.
Requisitos previos: acceso SSH y verificación de WP-CLI
Necesitas acceso SSH al servidor con permisos para ejecutar comandos sobre los archivos de WordPress y la base de datos. La mayoría de hostings serios (VPS, dedicados, planes gestionados avanzados) traen SSH y WP-CLI ya instalados.
Verificar que WP-CLI está disponible
Conéctate por SSH, ve al directorio raíz de tu WordPress y ejecuta:
wp –version && wp core version
¿Sales la versión de WP-CLI y la de WordPress? Perfecto, seguimos. Si el comando no se encuentra, instálalo así:
- Descarga el fichero: curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
- Concede permisos: chmod +x wp-cli.phar
- Muévelo al PATH: sudo mv wp-cli.phar /usr/local/bin/wp
Comprueba también la versión de PHP (php -v) y que tienes MySQL o MariaDB disponible en la línea de comandos, porque lo usaremos para el volcado de seguridad.
Copia de seguridad obligatoria antes de optimizar (mysqldump y WP-CLI)
Nunca optimices sin una copia de seguridad verificada. Ni una excepción. Los comandos que veremos son seguros, sí, pero un error de sintaxis o una caída del servidor a mitad de proceso puede corromper tablas. Y entonces ya no hay guía que valga.
Copia de seguridad con WP-CLI
Lo más rápido es exportar la base completa desde la raíz de WordPress:
wp db export backup_$(date +%Y%m%d).sql
El comando lee nombre, usuario y contraseña directamente del wp-config.php, así que no expones credenciales en el historial del terminal. Un detalle que se agradece.
Copia de seguridad con mysqldump
Si prefieres el método clásico, o necesitas volcar solo tablas concretas:
mysqldump -u usuario_bd -p nombre_bd –single-transaction | gzip > backup_$(date +%Y%m%d).sql.gz
La opción –single-transaction evita bloquear las tablas InnoDB durante el volcado. Crítico en producción. Y comprime siempre el resultado: un SQL sin comprimir ocupa entre 5 y 10 veces más.
Consejo: tras crear el backup, comprueba que no está vacío con ls -lh backup_*.sql.gz y, si puedes, restáuralo en un entorno de pruebas antes de seguir. Un backup sin verificar no es un backup.
Guarda la copia fuera del servidor (S3, Google Drive o tu equipo local vía SCP) antes de pasar a la fase de optimización.
Comandos WP-CLI para optimizar base de datos WordPress de forma segura
Con el backup verificado, ya puedes poner manos a la obra. El punto de partida es wp db optimize, que ejecuta OPTIMIZE TABLE sobre todas las tablas de la instalación:
wp db optimize
¿Quieres limitarlo a tablas concretas? Por ejemplo, las que quedaron más grandes tras una limpieza. Entonces indícalas explícitamente:
wp db optimize wp_posts wp_postmeta wp_options
Antes de optimizar, eso sí, conviene saber qué tablas están fragmentadas. Puedes consultar el tamaño y el overhead con una consulta directa:
wp db query «SELECT table_name, data_length, data_free FROM information_schema.tables WHERE table_schema = DATABASE() AND data_free > 0;»
El campo data_free marca el espacio fragmentado que puedes recuperar. También puedes comprobar el estado de tablas concretas con wp db check y reparar las que den errores con wp db repair. Un detalle que mucha gente pasa por alto: OPTIMIZE TABLE bloquea la tabla mientras se ejecuta. En sitios con tráfico alto, hazlo en horas valle o activa brevemente un modo mantenimiento.
Ojo con el prefijo de tablas: puede no ser wp_. Compruébalo con wp db prefix antes de apuntar a tablas específicas.
Limpieza avanzada: transitorios, revisiones, spam y tablas huérfanas
La optimización física rinde mucho más si antes reduces el volumen de datos innecesarios. Y WP-CLI lo permite sin instalar plugins:
- Transitorios caducados: wp transient delete –expired elimina solo los vencidos. Si sospechas que hay transitorios huérfanos, wp transient delete –all los purga por completo (se regeneran solos, aunque la carga puede subir un momento).
- Revisiones de entradas: wp post delete $(wp post list –post_type=revision –format=ids) las elimina todas. Para prevenir acumulación futura, define en wp-config.php: define(‘WP_POST_REVISIONS’, 5);
- Comentarios spam y papelera: wp comment delete $(wp comment list –status=spam –format=ids) y lo mismo con –status=trash.
- Contenido en papelera: wp post delete $(wp post list –post_status=trash –format=ids) –force la vacía de forma definitiva.
Tablas huérfanas de plugins desinstalados
Los plugins desactivados con «Eliminar» a menudo dejan tablas atrás. Es más frecuente de lo que parece. Lista las tablas y cruza la información con tus plugins activos:
wp db query «SHOW TABLES;»
Las tablas con prefijos de plugins que ya no usas (por ejemplo, restos de versiones antiguas de Yoast, o de wpforms, litespeed, etc.) puedes eliminarlas con wp db query «DROP TABLE nombre_tabla;». Antes de borrar, exporta esa tabla concreta con wp db export tabla_respaldo.sql –tables=nombre_tabla. Por seguridad. Y si trabajas con un multisitio, verifica que la tabla no pertenezca a otro sitio de la red antes de dropearla.
Termina esta fase repitiendo wp db optimize para recuperar el espacio liberado por la limpieza.
Automatizar la optimización con cron y buenas prácticas finales
Esto no es una tarea de una sola vez. La base de datos vuelve a acumular basura, es inevitable. Con una entrada de cron puedes automatizar el proceso semanalmente:
0 4 * * 0 cd /ruta/a/tu/web && wp transient delete –expired && wp db optimize >> /var/log/wp-optimize.log 2>&1
El ejemplo ejecuta la tarea los domingos a las 4:00 AM y registra la salida en un log para que puedas auditarla después. Si tu hosting usa cPanel, añade la tarea desde la sección «Trabajos de cron» apuntando al binario completo de WP-CLI.
Como buenas prácticas finales, ten en cuenta lo siguiente:
- Ejecuta siempre un backup previo automatizado en el mismo cron, antes de la optimización.
- No optimices InnoDB con demasiada frecuencia: en tablas grandes, OPTIMIZE TABLE reconstruye la tabla completa y puede tardar minutos.
- Monitoriza el tamaño de la base de datos tras cada ciclo. Los crecimientos anómalos suelen delatar un plugin que escribe en exceso en wp_options.
- Mantén WP-CLI actualizado con wp cli update para evitar incompatibilidades con nuevas versiones de WordPress.
Con este flujo (backup, limpieza, optimización y automatización) tendrás una base de datos WordPress sana, rápida y sin datos residuales de forma permanente. Si prefieres que un técnico lo configure por ti, o si te surge cualquier problema durante el proceso, en RedServicio (redservicio.net) encontrarás ayuda profesional especializada en administración de WordPress y servidores.





