Por qué migrar ahora: fin de vida y exposición a CVE
El fin de vida oficial de MySQL 8.0 es el 30 de abril de 2026, según el calendario Oracle Lifetime Support (oracle.com/support/lifetime-support/). A partir de esa fecha, Oracle ya no publica parches de seguridad para la rama 8.0.x, independientemente de la gravedad de una CVE. Los servidores que permanecen en 8.0 acumulan una deuda de seguridad que crece con cada CPU (Critical Patch Update) trimestral de Oracle, sin que se resuelva nunca.
MySQL 8.4 es la primera versión designada LTS en la historia de MySQL. Oracle garantiza su soporte hasta abril de 2032 (dev.mysql.com/doc/relnotes/mysql/8.4/). A diferencia de las ramas de innovación 8.1, 8.2 y 8.3 — publicadas entre 2023 y 2024 sin soporte extendido — la 8.4 recibe parches de seguridad y correcciones de estabilidad a largo plazo.
Cambios incompatibles que debes conocer antes de la migración
—
mysql_native_passwordeliminado: el plugin de autenticaciónmysql_native_passwordha sido eliminado definitivamente en MySQL 8.4 (solo estaba deprecado en 8.0). Cualquier cuenta de usuario que dependa de este plugin fallará al conectarse de inmediato tras la actualización. Aplicaciones PHP anteriores a PHP 8.1, WordPress sin PDO configurado correctamente y clientes JDBC heredados son los casos más habituales.- Cambio del parámetro
authentication_policy: el valor por defecto pasa acaching_sha2_password, y cualquier líneadefault_authentication_pluginenmy.cnfes ignorada con una advertencia. Debe reemplazarse porauthentication_policy. - Eliminación de
innodb_file_format: la variableinnodb_file_formatse ha eliminado. Las tablas creadas conROW_FORMAT=COMPRESSEDsiguen funcionando, pero cualquier intento de establecerinnodb_file_formaten tiempo de ejecución produce un error. - Cambios en el tipo JSON: MySQL 8.4 refuerza la conformidad JSON/SQL. Funciones como
JSON_TABLE()yJSON_VALUE()pueden comportarse de manera diferente. Valida las tablas con columnas JSON grandes en un entorno de prueba antes de pasar a producción. - Juego de caracteres y cotejamiento:
utf8mb4yutf8mb4_0900_ai_cisiguen siendo los valores por defecto, pero MySQL 8.4 rechaza con más rigor las columnas declaradas comoutf8(alias deutf8mb3). Puede ser necesaria una migración de cotejamiento para bases de datos históricas creadas bajo MySQL 5.7. - Variables de sistema eliminadas o renombradas: varias variables presentes en 8.0 y marcadas como deprecadas han sido eliminadas en 8.4 — especialmente
innodb_undo_tablespaces,slave_*(reemplazadas porreplica_*) yquery_cache_*. - Replicación: los nombres de variables relacionadas con la replicación han pasado definitivamente a la terminología
source/replica. Cualquier script o herramienta de monitoreo que llame aSHOW SLAVE STATUSdebe actualizarse aSHOW REPLICA STATUS.
Requisitos previos antes de comenzar
Una migración de motor de base de datos en producción no se improvisa. Tres condiciones deben cumplirse: una copia de seguridad verificada, conocimiento exacto de tu versión actual y una verificación de compatibilidad de la aplicación.
- Copia de seguridad completa y verificada: ejecuta
mysqldump --all-databases --single-transaction --routines --events > backup_pre_migration.sqly verifica que el archivo sea legible. Una copia de seguridad no verificada no es una copia de seguridad. - Versión actual y motores de tablas: ejecuta
SELECT VERSION();y lista las tablas no InnoDB desdeinformation_schema.tables. Cualquier tabla MyISAM o MEMORY debe evaluarse antes de la actualización. - Compatibilidad de la aplicación: identifica el plugin de autenticación de cada cuenta con
SELECT user, host, plugin FROM mysql.user;. Cualquier usuario enmysql_native_passworddebe migrarse acaching_sha2_password. - Espacio en disco disponible: una actualización in-place puede duplicar temporalmente el espacio ocupado por los archivos ibdata. Verifica que haya al menos un 20% de espacio libre en la partición
/var.
Procedimiento de migración MySQL 8.0 → 8.4 LTS en un VPS
Copia de seguridad completa con verificación
Ejecuta
mysqldump --all-databases --single-transaction --routines --events --triggers > /root/backup_mysql80_$(date +%Y%m%d).sql. Verifica el final del archivo contail -5 /root/backup_mysql80_*.sql: la última línea debe ser-- Dump completed on …. Almacena el archivo fuera del VPS antes de continuar.Auditoría de cuentas y plugins de autenticación
Ejecuta
SELECT user, host, plugin FROM mysql.user ORDER BY plugin;. Para cada usuario enmysql_native_password, ejecutaALTER USER 'nombre'@'host' IDENTIFIED WITH caching_sha2_password BY 'contraseña';. Actualiza la cadena de conexión de cada aplicación afectada antes de la actualización.Verificación de variables deprecadas en my.cnf
Abre
/etc/mysql/mysql.conf.d/mysqld.cnfy elimina o reemplaza:default_authentication_plugin→authentication_policy = caching_sha2_password,slave_*→replica_*,innodb_undo_tablespaces,query_cache_size,query_cache_type. Cualquier variable desconocida impide que MySQL 8.4 arranque.Parada limpia del servicio y snapshot
En un VPS Proxmox o KVM, toma un snapshot antes de tocar los paquetes. Luego:
systemctl stop mysqly verifica que el servicio está detenido consystemctl status mysql.Añadir el repositorio MySQL 8.4 y actualizar paquetes
En Debian 12 / Ubuntu 22.04: descarga el paquete de configuración del repositorio MySQL desde
dev.mysql.com/downloads/repo/apt/, instálalo condpkg -i mysql-apt-config_*.deb, selecciona MySQL 8.4 LTS en el menú, luego ejecutaapt-get update && apt-get install mysql-server.Actualización de tablas del sistema
En el primer arranque de MySQL 8.4, el motor actualiza las tablas del sistema automáticamente. Verifica en los logs:
journalctl -u mysql -n 50 | grep -i 'upgrade\|error'. Si la actualización automática no se ejecutó, lanza manualmentemysql_upgrade --user=root --password.Verificación post-actualización
Conéctate y verifica la versión:
SELECT VERSION();debe devolver8.4.x. Luego ejecutamysqlcheck --all-databases --auto-repair --user=root --password. Revisa el log de errores/var/log/mysql/error.log.Test funcional de la aplicación
Reinicia tu aplicación y verifica los puntos sensibles: conexión a la base de datos, autenticación de usuarios, consultas en columnas JSON, procedimientos almacenados. El error
The server requested authentication method unknown to the clientindica una cuenta aún enmysql_native_passwordno migrada.Limpieza y activación de la monitorización
Elimina el archivo de copia de seguridad local una vez confirmada la copia externa. Verifica tu herramienta de monitorización: algunos nombres de métricas cambiaron entre 8.0 y 8.4. Programa una revisión del log de errores MySQL a las 24h y 72h post-migración.
MariaDB 11.x: cuándo preferir esta alternativa
MariaDB 11.x es un fork de MySQL que ha divergido significativamente desde la versión 10.3. Hay casos concretos donde MariaDB 11.x es más adecuado que actualizar a MySQL 8.4, y casos donde no lo es.
Prefiere MariaDB 11.x si tu aplicación usa características propias de MariaDB (tablas versionadas por el sistema, secuencias, motor Spider, Galera Cluster nativo); si necesitas un clúster multi-maestro sin la complejidad de MySQL Group Replication; o si quieres permanecer en un fork que mantiene mysql_native_password por defecto, lo que simplifica la migración de aplicaciones heredadas. MariaDB 11.4 LTS tiene soporte hasta 2029.
Prefiere MySQL 8.4 LTS si tu aplicación fue desarrollada y probada específicamente contra MySQL (ORM como Laravel Eloquent o Hibernate que aprovechan funcionalidades propias de MySQL); si usas MySQL Enterprise para funciones como el audit plugin o el Thread Pool comercial; o si tu proveedor de hosting solo soporta copias de seguridad optimizadas para MySQL (Percona XtraBackup). La migración de MySQL 8.0 a MariaDB 11.x es una migración entre motores distintos, más arriesgada y fuera del alcance de esta guía — merece un procedimiento dedicado con pruebas de integración completas.
Rollback posible en las primeras 24 horas: si tomaste un snapshot del VPS antes de la actualización, restaurarlo devuelve el servidor al estado de MySQL 8.0 en minutos. Sin snapshot, el rollback desde un dump SQL es posible pero más lento. No elimines la copia de seguridad ni el snapshot hasta después de 72 horas de producción estable en MySQL 8.4.
MySQL 8.0 vs MySQL 8.4 LTS vs MariaDB 11.x
Desplace la tabla
| Criterio | MySQL 8.0 | MySQL 8.4 LTS | MariaDB 11.x |
|---|---|---|---|
| Soporte de seguridad | Terminado (30 abr. 2026) | Hasta abril de 2032 | Hasta 2029 (11.4 LTS) |
| mysql_native_password | Presente (deprecado) | Eliminado | Presente por defecto |
| Clúster multi-maestro | Group Replication | Group Replication | Galera Cluster nativo |
| Compatibilidad apps MySQL | Nativa | Nativa | Mayoritaria, algunas diferencias |
| Licencia | GPL + Enterprise comercial | GPL + Enterprise comercial | LGPL (MariaDB Foundation) |
Resolución de problemas: errores comunes tras la migración
—
ERROR 1045 (28000): Access deniedtras la actualización: verifica el plugin de autenticación de la cuenta conSELECT plugin FROM mysql.user WHERE user='nombre';. Si sigue siendomysql_native_password, ejecutaALTER USER … IDENTIFIED WITH caching_sha2_password BY '…';.Unknown system variable 'default_authentication_plugin': esta variable ya no se reconoce en 8.4. Retírala demy.cnfy reemplázala porauthentication_policy = caching_sha2_password.- MySQL no arranca tras la actualización: consulta
/var/log/mysql/error.log. El error más frecuente es una variable de sistema desconocida enmy.cnf. Comenta las variables una a una hasta identificar el origen. - Rendimiento degradado en consultas de ordenación: MySQL 8.4 aplica el orden de los índices con más rigor. Ejecuta
EXPLAINen las consultas lentas y verifica que los índices cubrientes siguen utilizándose.ANALYZE TABLE nombre_tabla;fuerza la actualización de estadísticas. - Tabla
performance_schema.replication_applier_statusno encontrada: algunas tablas deperformance_schemafueron renombradas. Actualiza las consultas de monitorización usando los nuevos nombres documentados endev.mysql.com/doc/refman/8.4/en/performance-schema.html.
Pasar a MySQL 8.4 LTS: lo esencial
Migrar de MySQL 8.0 a MySQL 8.4 LTS es una actualización in-place realizable en menos de una hora en un VPS bien preparado. Los dos puntos de fallo más habituales son la eliminación de mysql_native_password — que rompe las conexiones de aplicaciones heredadas si las cuentas no se han migrado — y las variables de sistema eliminadas en my.cnf, que impiden arrancar el servicio. Una auditoría previa de estos dos puntos reduce el riesgo a casi cero. Para stacks que necesitan mysql_native_password o un clúster multi-maestro sin complejidad de configuración, MariaDB 11.4 LTS es una alternativa seria, siempre que la migración se trate como una operación separada con sus propias pruebas de integración.