Tiempo de lectura: 4 min
El caso de foros.puntocomunica.com
Cuando una comunidad en phpBB acumula actividad durante años, es habitual enfrentarse a un problema técnico en alojamientos compartidos: el bloqueo de la base de datos al superar el espacio contratado. Esta situación impide escribir nuevos registros y deja el foro inaccesible hasta que se libera almacenamiento en el servidor.
Recientemente he solucionado este problema en la base de datos de los foros de Puntocomunica. Veamos los pasos realizados para recuperar el servicio sin perder mensajes ni cuentas de usuario.
Table of Contents
Identificar y vaciar las tablas temporales de phpBB
El primer paso para desbloquear la base de datos consiste en entrar a phpMyAdmin y aplicar la operación Vaciar (TRUNCATE) sobre las tablas que guardan datos temporales o regenerables. A diferencia del borrado habitual, la orden TRUNCATE vacía la tabla y libera el espacio de forma directa:
- Sesiones activas y claves (
phpbb_sessionsyphpbb_sessions_keys): Acumulan miles de registros de visitantes y bots. Al vaciarlas, el único efecto es que los usuarios conectados deben iniciar sesión de nuevo. - Índices y resultados de búsqueda (
phpbb_search_results,phpbb_search_wordmatchyphpbb_search_wordlist): Ocupan gran parte del peso de la base de datos. Vaciar estas tablas libera muchos megabytes al instante. Tras recuperar el acceso al foro, basta con entrar al Panel de Administración (Mantenimiento > Índice de búsqueda) para regenerar el índice. - Registros de auditoría (
phpbb_log): Guarda el historial de acciones administrativas y errores del sistema. Se puede vaciar sin afectar al contenido del foro.
Durante esta limpieza es importante no tocar las tablas principales como phpbb_users, phpbb_topics o phpbb_posts, ya que contienen los usuarios y las publicaciones.
Compactar el espacio con OPTIMIZE TABLE
Una vez vaciadas estas tablas y restablecido el acceso, comprobé que el tamaño total de la base de datos apenas había bajado en el panel del hosting. Esto sucede porque los motores de almacenamiento de MySQL y MariaDB mantienen reservado el espacio fragmentado en el disco.
Para recuperar ese espacio real, ejecuté la sentencia OPTIMIZE TABLE desde la pestaña SQL de phpMyAdmin (también se puede hacer seleccionando las tablas desde la interfaz gráfica):
OPTIMIZE TABLE phpbb_posts, phpbb_topics, phpbb_users, phpbb_log, phpbb_sessions, phpbb_search_wordlist;Si prefieres optimizar absolutamente todas las tablas de la base de datos de golpe en una única consulta SQL, puedes utilizar la siguiente sentencia con el listado completo:
OPTIMIZE TABLE phpbb_acl_groups, phpbb_acl_options, phpbb_acl_roles, phpbb_acl_roles_data, phpbb_acl_users, phpbb_attachments, phpbb_banlist, phpbb_bbcodes, phpbb_bookmarks, phpbb_bots, phpbb_config, phpbb_config_text, phpbb_confirm, phpbb_disallow, phpbb_drafts, phpbb_ext, phpbb_extensions, phpbb_extension_groups, phpbb_forums, phpbb_forums_access, phpbb_forums_track, phpbb_forums_watch, phpbb_groups, phpbb_icons, phpbb_lang, phpbb_log, phpbb_login_attempts, phpbb_migrations, phpbb_moderator_cache, phpbb_modules, phpbb_notifications, phpbb_notification_emails, phpbb_notification_types, phpbb_oauth_accounts, phpbb_oauth_states, phpbb_oauth_tokens, phpbb_poll_options, phpbb_poll_votes, phpbb_posts, phpbb_privmsgs, phpbb_privmsgs_folder, phpbb_privmsgs_rules, phpbb_privmsgs_to, phpbb_profile_fields, phpbb_profile_fields_data, phpbb_profile_fields_lang, phpbb_profile_lang, phpbb_ranks, phpbb_reports, phpbb_reports_reasons;Alternativamente, desde la interfaz gráfica de phpMyAdmin puedes seleccionarlas todas de manera masiva bajando al final del listado, haciendo clic en Marcar todas y seleccionando Optimizar la tabla en el menú desplegable.
Limitaciones para automatizar el proceso en hosting compartido
Para evitar que la base de datos vuelva a llenarse, la opción habitual en MySQL consiste en activar el programador de eventos (SET GLOBAL event_scheduler = ON;) y crear una tarea periódica. Sin embargo, en alojamientos compartidos como IONOS, los proveedores restringen los privilegios de superusuario (SUPER) y devuelven el error #1227 - Acceso negado.
Ante esta limitación de permisos en el servidor, las alternativas para el mantenimiento preventivo pasan por configurar tareas externas desde el panel del alojamiento mediante comandos mysqlcheck --optimize (si el plan incluye tareas Cron, que me parece que no…) o realizar limpiezas periódicas de forma manual desde el panel de phpBB y phpMyAdmin.
NOTA: Acabo de encontrar un artículo en el Centro de Ayuda de IONOS al respecto. Lo revisaré.
