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
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:
- Exportar todas las bases de datos con "mysqldump", por ejemplo
- Detener MySQL
- Eliminar los ficheros "ibdata1", "ib_logfile0" y "ib_logfile1"
- Reiniciar MySQL, los ficheros del punto anterior se recrearán con el tamaño controlado
- 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)"