Migrar a MySQL 8.0 no es solo cambiar de versión. El salto toca compatibilidad, comportamiento del optimizador, collations, autenticación y expectativas de aplicaciones. El error fundamental radica en asumir compatibilidad solo porque el esquema importa correctamente.
Qué suele romper primero
Cambio de plugin de autenticación
MySQL 8.0 usa caching_sha2_password por defecto, reemplazando mysql_native_password. Drivers antiguos (PHP < 7.4, conectores JDBC viejos) no soportan el nuevo método y fallan con errores crípticos.
-- Verificar plugin de usuario existente
SELECT user, plugin FROM mysql.user WHERE user NOT IN ('mysql.sys','mysql.session','mysql.infoschema');
-- Crear usuario compatible con drivers antiguos
CREATE USER 'appuser'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
-- O cambiar plugin de usuario existente:
ALTER USER 'appuser'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
Collations: el problema silencioso
utf8mb4_0900_ai_ci reemplaza utf8mb4_unicode_ci como collation por defecto. Esto causa errores de comparación en JOINs entre tablas con collations distintos. La solución es normalizar todo a utf8mb4_unicode_ci explícitamente.
Checklist pre-migración
- Inventario de objetos: tablas, vistas, procedimientos, triggers, funciones
- Validación con
mysqlcheck --all-databases --check --auto-repair - Dump completo con
--routines --triggers --eventsantes de cualquier cambio - Probar restauración del dump en instancia limpia de 8.0
- Ejecutar el Upgrade Checker disponible desde MySQL 5.7.14
Conclusión
La validación no termina con el arranque del servicio. Requiere pruebas funcionales reales, comparación de planes de ejecución del optimizador y un rollback probado antes de declarar la migración exitosa.