Tutorial completo de MySQL 8: instalación, administración, tipos de datos y backup (2026)

MySQL se configura mediante el fichero my.cnf (Linux/macOS) o my.ini (Windows). Contiene las variables del servidor que se aplican al arrancar: tamaños de buffer, límites de conexiones, rutas de ficheros de log, zona horaria, charset... Ajustar esta configuración es esencial para exprimir el rendimiento del servidor y evitar problemas en producción.

En este capítulo cubrimos las variables más importantes, dónde está el fichero de configuración, cómo cambiar variables sin reiniciar y cómo interpretar el estado del servidor.

Ubicación del fichero de configuración

# Ver qué ficheros de configuración lee MySQL en el arranque
mysqld --help --verbose 2>/dev/null | grep "Default options" -A2

# Ubicaciones típicas en Linux:
# /etc/mysql/my.cnf
# /etc/mysql/mysql.conf.d/mysqld.cnf   (Ubuntu)
# /etc/my.cnf                           (RHEL/CentOS)
# /etc/my.cnf.d/mysql-server.cnf       (Rocky/AlmaLinux)

# Ver la configuración actual sin fichero
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"

Variables más importantes

[mysqld]
# ── Charset por defecto ──────────────────────────────────────────────────────
character-set-server   = utf8mb4
collation-server       = utf8mb4_unicode_ci

# ── Memoria ──────────────────────────────────────────────────────────────────
# InnoDB buffer pool: cuánta RAM dedicar a cachear datos e índices InnoDB
# Regla: en un servidor dedicado a MySQL, el 70-80% de la RAM disponible
innodb_buffer_pool_size = 2G

# Tamaño máximo de un paquete (afecta a BLOB, INSERT multifila, GROUP_CONCAT)
max_allowed_packet = 64M

# ── Conexiones ───────────────────────────────────────────────────────────────
max_connections = 200           # máximo de conexiones simultáneas
wait_timeout    = 600           # segundos antes de cerrar una conexión inactiva
interactive_timeout = 600

# ── Logs ────────────────────────────────────────────────────────────────────
# Slow query log: registra consultas que tardan más de N segundos
slow_query_log         = 1
slow_query_log_file    = /var/log/mysql/slow.log
long_query_time        = 2      # registrar consultas de más de 2 segundos
log_queries_not_using_indexes = 1

# General log: registra TODAS las consultas (¡solo en desarrollo!)
# general_log         = 1
# general_log_file    = /var/log/mysql/general.log

# Binary log: necesario para replicación y point-in-time recovery
log_bin                = /var/log/mysql/mysql-bin.log
binlog_expire_logs_seconds = 604800   # mantener 7 días de binlogs

# ── Zona horaria ─────────────────────────────────────────────────────────────
default-time-zone = '+00:00'   # UTC recomendado para servidores en producción

Cambiar variables sin reiniciar (SET GLOBAL)

-- Cambiar una variable en tiempo real (se resetea al reiniciar)
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 1;
SET GLOBAL max_connections = 300;

-- Ver el valor actual
SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'slow%';

-- En MySQL 8, puedes usar SET PERSIST para guardar en un fichero:
SET PERSIST max_connections = 300;   -- persiste al reiniciar
-- Se guarda en /var/lib/mysql/mysqld-auto.cnf

Métricas de estado

-- Conexiones activas y máximo alcanzado
SHOW STATUS LIKE 'Threads_connected';
SHOW STATUS LIKE 'Max_used_connections';

-- Consultas ejecutadas
SHOW STATUS LIKE 'Queries';
SHOW STATUS LIKE 'Slow_queries';

-- InnoDB buffer pool hit rate (debe ser > 99%)
SHOW STATUS LIKE 'Innodb_buffer_pool_read%';
-- Si Innodb_buffer_pool_reads es muy alto, aumentar innodb_buffer_pool_size

-- Uptime del servidor
SHOW STATUS LIKE 'Uptime';

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP