MANTENIMIENTO DE MYSQL Y MARIADB: GUÍA PRÁCTICA PARA MANTENER LA BASE DE DATOS SALUDABLE

El mantenimiento de MySQL y MariaDB de forma periódica es una de las tareas más importantes para garantizar el rendimiento, seguridad y estabilidad de cualquier base de datos MySQL o MariaDB. Un buen plan de mantenimiento puede evitar caídas inesperadas, reducir tiempos de respuesta y alargar significativamente la vida útil de los servidores.

¿Por qué es necesario el mantenimiento?

Aunque MySQL y MariaDB son muy robustos, con el paso del tiempo se producen:
  • Fragmentación de tablas y índices
  • Acumulación de datos temporales y logs
  • Estadísticas desactualizadas del optimizador
  • Crecimiento descontrolado de archivos "ibdata1" y "binlogs"
  • Posibles datos corrompidos

Tareas diarias / semanales de mantenimiento

Monitorización básica

  • Uso de CPU, RAM y disco (htop, iotop, MySQL Workbench o herramientas como Percona Monitoring and Management
  • Comprobar conexiones activas:

    SHOW PROCESSLIST;
    SHOW STATUS LIKE 'Threads%';
    

Optimización de tablas

-- Para InnoDB (recomendado)
OPTIMIZE TABLE nombre_tabla;

-- Para todas las tablas de una base de datos
mysqlcheck -o --all-databases

Mantenimiento mensual recomendado

Revisar y purgar binlogssql

PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);
-- O configurarlo automáticamente:
SET GLOBAL expire_logs_days = 7;

Limpiar el slow query log

Identificar y optimizar las consultas más lentas:

SELECT * FROM mysql.slow_log ORDER BY query_time DESC LIMIT 20;

Comprobar integridad de tablasbash

mysqlcheck -c --all-databases

Reiniciar el caché de consultas, si se usa

FLUSH QUERY CACHE;

Mantenimiento avanzado en InnoDB

Reducir el "ibdata1", archivo de system tablespace

Este es uno de los problemas más comunes. La solución más limpia es:
  1. Exportar todas las bases de datos con "mysqldump", por ejemplo
  2. Detener MySQL
  3. Eliminar los ficheros "ibdata1", "ib_logfile0" y "ib_logfile1"
  4. Reiniciar MySQL, los ficheros del punto anterior se recrearán con el tamaño controlado
  5. Importar los dumps

Configuraciones recomendadas en "my.cnf" / "mariadb.cnf"

innodb_file_per_table = 1
innodb_buffer_pool_size = 70% de RAM disponible
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 1# Para máxima seguridad

Buenas prácticas de mantenimiento

  • Backups regulares: Usar mysqldump, Percona XtraBackup, mejor para entornos grandes, o MariaDB Backup.
  • Actualizaciones: Mantener siempre la versión de MySQL/MariaDB actualizada (parches de seguridad).
  • Índices: Revisar periódicamente con "EXPLAIN" y eliminar índices redundantes.
  • Particionamiento: Para tablas muy grandes (> 50-100 millones de filas).
  • Monitorización proactiva: Implementa herramientas como:
    • Percona Monitoring and Management
    • MySQL Enterprise Monitor
    • Prometheus t Grafana

Ejemplo de script básico de mantenimiento semanal

#!/bin/bash
# mantenimiento_mysql.sh

echo "=== Mantenimiento MySQL/MariaDB ==="

# Optimizar y analizar tablas
mysqlcheck -o -A
mysqlcheck -a -A

# Purgar binlogs antiguos
mysql -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 10 DAY);"

# Limpiar slow log si es necesario
echo "Mantenimiento completado: $(date)"