Cómo desbloquear y optimizar una base de datos de phpBB llena en un hosting compartido

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.

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_sessions y phpbb_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_wordmatch y phpbb_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é.

Instalar un servidor local web en Linux con Apache, PHP y PhpMyAdmin (IV): instalar phpMyAdmin

localhost-phpmyadmin

Instalar phpMyAdmin en un servidor local Linux basado en Debian

Lo primero, antes de la instalación, veamos qué es y para qué sirve phpMyAdmin:

phpMyAdmin: Gestión de Bases de Datos MySQL de forma sencilla
phpMyAdmin es una herramienta de software libre escrita en PHP que permite la administración de bases de datos MySQL (o compatibles, como MariaDB) a través de una interfaz web intuitiva. Su principal función es facilitar la gestión de bases de datos, tablas, campos, relaciones, índices, usuarios y permisos, todo ello sin necesidad de utilizar la línea de comandos.

Con phpMyAdmin, los usuarios pueden realizar tareas comunes como crear, modificar y eliminar bases de datos y tablas, así como importar y exportar datos en diversos formatos (como SQL, CSV y XML). También permite ejecutar consultas SQL directamente y visualizar resultados de manera sencilla.

Es especialmente útil para desarrolladores y administradores de sistemas que buscan una forma eficiente y accesible de gestionar sus bases de datos, haciendo que la administración de MySQL sea más accesible tanto para principiantes como para expertos.

Ahora que ya tenemosnuestro servidor Apache y PHP (versión 8.1 en mi caso) y MariaDB instalados en nuestro servidor local Linux (un Ubunte MATE), vamos a describir los pasos para instalar y poner en marcha el gestor de bases de datos phpMyAdmin:

1. Instala phpMyAdmin

Abre una terminal y ejecuta el siguiente comando para instalar phpMyAdmin:

sudo apt install phpmyadmin

2. Configura la instalación

Durante la instalación, se te pedirá que elijas el servidor web que deseas configurar. Selecciona Apache y presiona `Enter`.

Luego, se te preguntará si deseas usar `dbconfig-common` para configurar la base de datos. Selecciona Sí y proporciona la información de la base de datos cuando se te solicite (nombre de usuario y contraseña de MySQL).

3. Configura Apache para phpMyAdmin

Si no se configuró automáticamente, puedes agregar phpMyAdmin a la configuración de Apache. Abre el archivo de configuración de Apache:

sudo nano /etc/apache2/apache2.conf

Agrega la siguiente línea al final del archivo:

Include /etc/phpmyadmin/apache.conf

Guarda y cierra el archivo (en nano, presiona `CTRL + X`, luego `Y` y `Enter`).

4. Habilita las extensiones necesarias

Asegúrate de que las extensiones de PHP necesarias estén habilitadas. Puedes habilitar las extensiones de MySQL y otras que puedan ser necesarias con los siguientes comandos:

sudo phpenmod mysqli
sudo phpenmod mbstring

5. Reinicia Apache

Reinicia el servidor web para aplicar los cambios:

sudo systemctl restart apache2

6. Accede a phpMyAdmin

Ahora puedes acceder a phpMyAdmin abriendo un navegador web y yendo a la siguiente URL: http://localhost/phpmyadmin

7. Inicia sesión

Usa el nombre de usuario y la contraseña de MySQL que configuraste durante la instalación para iniciar sesión.

A tener en cuenta:

– Si quieres mayor seguridad, considera cambiar el nombre de usuario y la contraseña de phpMyAdmin y configurar medidas adicionales como la autenticación HTTP.
– También puedes considerar configurar un firewall para proteger tu servidor. En mi caso, al ser un servidor local para desarrollo, para aprender, no lo considero necesario.

phpmyadmin en localhost

 

NOTA: El «año que viene» seguiremos con más artículos sobre este interesante sistema de gestión de bases de datos. Feliz año!

 

Principales comandos de MariaDB

mariadb_comandos

Como ya hemos visto, (instalar MariaDB en un servidor local), MariaDB es un sistema de gestión de bases de datos relacional (SGBD) que es un fork de MySQL.

MariaDB utiliza SQL como su lenguaje de consulta, al igual que MySQL y PostgreSQL), mientras que SQL (Structured Query Language) es un lenguaje estándar utilizado para interactuar con bases de datos.

Adjunto un listado de los principales comandos de MariaDB con ejemplos para gestionar bases de datos, tablas y datos. Al final, también dejaré u listado con recursos de MariaDB. Vamos allá:

Conexión a MariaDB

1. Conectar a MariaDB:

mysql -u usuario -p

2. Conectar a una base de datos específica:


mysql -u usuario -p nombre_base_datos

Comandos de gestión de bases de datos

3. Mostrar bases de datos:


SHOW DATABASES;

4. Crear una nueva base de datos:


CREATE DATABASE nombre_base_datos;

5. Eliminar una base de datos:


DROP DATABASE nombre_base_datos;

6. Usar una base de datos específica:


USE nombre_base_datos;

Comandos de gestión de tablas

7. Mostrar tablas en la base de datos actual:


SHOW TABLES;

8. Crear una nueva tabla:


CREATE TABLE nombre_tabla (

id INT AUTO_INCREMENT PRIMARY KEY,


nombre VARCHAR(100),


fecha_creacion DATETIME DEFAULT CURRENT_TIMESTAMP


);

9. Eliminar una tabla:


DROP TABLE nombre_tabla;

10. Modificar una tabla (agregar una columna):


ALTER TABLE nombre_tabla ADD columna_nueva VARCHAR(50);

11. Modificar una tabla (eliminar una columna):

ALTER TABLE nombre_tabla DROP COLUMN columna_nueva;

Comandos de gestión de datos

12. Insertar datos en una tabla:


INSERT INTO nombre_tabla (nombre) VALUES ('Ejemplo');

13. Seleccionar datos de una tabla:


SELECT * FROM nombre_tabla;

14. Actualizar datos en una tabla:


UPDATE nombre_tabla SET nombre = 'Nuevo Nombre' WHERE id = 1;

15. Eliminar datos de una tabla:


DELETE FROM nombre_tabla WHERE id = 1;

Comandos de consulta

16. Filtrar resultados:


SELECT * FROM nombre_tabla WHERE nombre = 'Ejemplo';

17. Ordenar resultados:


SELECT * FROM nombre_tabla ORDER BY fecha_creacion DESC;

18. Contar registros:


SELECT COUNT(*) FROM nombre_tabla;

19. Agrupar resultados:


SELECT nombre, COUNT(*) FROM nombre_tabla GROUP BY nombre;

Comandos de gestión de usuarios y permisos

20. Crear un nuevo usuario:


CREATE USER 'nuevo_usuario'@'localhost' IDENTIFIED BY 'contraseña';

21. Conceder permisos a un usuario:

GRANT ALL PRIVILEGES ON nombre_base_datos.* TO 'nuevo_usuario'@'localhost';

22. Revocar permisos a un usuario:


REVOKE ALL PRIVILEGES ON nombre_base_datos.* FROM 'nuevo_usuario'@'localhost';

23. Mostrar usuarios:


SELECT User, Host FROM mysql.user;

Comandos de administración

24. Mostrar información sobre la base de datos actual:


SHOW TABLE STATUS;

25. Salir de la consola de MariaDB:


EXIT;

Diferencias a tener en cuenta entre MariaDB y MySQL

La mayoría de los comandos que mencioné para MariaDB también son aplicables a MySQL, ya que MariaDB es un fork de MySQL y ambos sistemas comparten una gran parte de su sintaxis y funcionalidad. Sin embargo, hay algunas diferencias y características específicas en cada uno que podrían afectar ciertos comandos o funciones avanzadas.

Características adicionales: MariaDB ha introducido algunas características adicionales y mejoras de rendimiento que no están presentes en las versiones más antiguas de MySQL. Por ejemplo, MariaDB tiene soporte para nuevos motores de almacenamiento y algunas funciones de optimización.

Funciones específicas: Algunas funciones y comandos pueden diferir entre las dos bases de datos. Por ejemplo, MariaDB tiene algunas funciones de análisis y optimización que no están disponibles en MySQL.

Versiones
: Asegúrate de que estás utilizando versiones compatibles. Algunas características pueden estar disponibles en versiones más recientes de uno y no en el otro.

Compatibilidad: Aunque la mayoría de los comandos son compatibles, siempre es recomendable consultar la documentación específica de la versión de MySQL que estás utilizando para asegurarte de que no haya diferencias significativas.

Recursos útiles

Listado de recursos útiles en línea sobre MariaDB, que incluyen documentación oficial, tutoriales, foros y otros materiales que te ayudarán a aprender sobre sus comandos y sintaxis:

Documentación Oficial

1. Documentación de MariaDB:
– MariaDB Documentation:
https://mariadb.com/kb/en/documentation)
– Esta es la fuente más completa y confiable para aprender sobre MariaDB, incluyendo su instalación, configuración, comandos y características.

2. Guía de referencia de SQL de MariaDB:
– MariaDB SQL Reference: https://mariadb.com/kb/en/sql-reference)
– Aquí encontrarás información detallada sobre la sintaxis SQL específica de MariaDB.

Tutoriales y Guías

3. Tutoriales de MariaDB en el sitio oficial:
– MariaDB Tutorials: https://mariadb.com/kb/en/tutorials
– Una colección de tutoriales que cubren desde lo básico hasta temas más avanzados.

4. Tutoriales de DigitalOcean:
– How To Install MariaDB on Ubuntu:
https://www.digitalocean.com/community/tutorials/how-to-install-mariadb-on-ubuntu-20-04
– How To Use MariaDB:
https://www.digitalocean.com/community/tutorials/how-to-use-mariadb
– DigitalOcean ofrece tutoriales claros y concisos sobre la instalación y uso de MariaDB.

5. Tutoriales de W3Schools:
– W3Schools MariaDB Tutorial:
https://www.w3schools.com/sql/sql_intro.asp
– Aunque W3Schools se centra más en SQL en general, también incluye secciones sobre MariaDB.

Foros y Comunidades

6. Foro de MariaDB:
– MariaDB Community Forum: https://mariadb.com/community
– Un lugar donde puedes hacer preguntas y compartir información con otros usuarios de MariaDB.

7. Stack Overflow:
– Stack Overflow – MariaDB:
https://stackoverflow.com/questions/tagged/mariadb
– Una gran comunidad de desarrolladores donde puedes encontrar respuestas a preguntas específicas sobre MariaDB.

Vídeos y Cursos

8. YouTube:
– Busca «MariaDB tutorial» en YouTube:
https://www.youtube.com/results?search_query=mariadb+tutorial para encontrar una variedad de videos que cubren desde la instalación hasta el uso avanzado.

9. Udemy:
– Cursos de MariaDB en Udemy:
https://www.udemy.com/courses/search/?q=mariadb
– Udemy ofrece cursos pagos y gratuitos sobre MariaDB que pueden ser útiles para aprender a tu propio ritmo.

Otras Herramientas y Recursos

10. MariaDB Knowledge Base:
– MariaDB Knowledge Base: https://mariadb.com/kb
– Un recurso adicional que incluye artículos, guías y preguntas frecuentes sobre MariaDB.

11. GitHub – MariaDB:
– MariaDB GitHub Repository:
https://github.com/mariadb-corporation/mariadb-server
– Aquí puedes encontrar el código fuente y contribuir al desarrollo de MariaDB.

Instalar un servidor local web en Linux con Apache, PHP y PhpMyAdmin (III): instalar MariaDB

consola de MariaDB

Instalar MariaDB en un servidor local Linux basado en Debian

Antes que nada, como este artículo o post es algo extenso, os dejo un índice del mismo, por si queréis ir directamente al paso de la instalación de MariaDB:

1. Introducción

2. ¿Por qué MariaDB?

3. Diferencias entre MariaDB y MySQL

4. Ventajas y Desventajas de MariaDB y MySQL

5. Pasos para la instalación de MariaDB

6. Conclusión y próximos pasos

Continuar leyendo «Instalar un servidor local web en Linux con Apache, PHP y PhpMyAdmin (III): instalar MariaDB»

Cómo instalar MariaDB en Ubuntu 20.04 [Guía de inicio rápido]

mariadb

Guía de inicio rápido de cómo instalar MariaDB en distribuciones Linux basadas en Debian (funciona también con PeppermintOS…)

1.- sudo apt update
2.- sudo apt install mariadb-server
3.- sudo systemctl status mariadb
4.- sudo mysql_secure_installation
5.- sudo mariadb
6.- MariaDB [(none)]> GRANT ALL ON *.* TO ‘admin’@’localhost’ IDENTIFIED BY ‘password’ WITH GRANT OPTION; (cambiar usuario y contraseña)
7.- MariaDB [(none)]>FLUSH PRIVILEGES;
8.- MariaDB [(none)]> exit
9.- mysqladmin -u admin -p version

https://www.digitalocean.com/community/tutorials/how-to-install-mariadb-on-ubuntu-20-04-quickstart-es

NOTA: Desintalar MariaDB en Linux (distribuciones basadas en Debian) para poder reinstalar correctamente:

sudo apt-get purge mariadb-server
Para comprobarlor:
sudo dpkg -l | grep mariadb