La empresa Oracle ha formado una nueva rama de la base de datos MySQL 9.1.0. Las compilaciones de MySQL Community Server 9.1.0 están preparadas para todas las principales distribuciones de Linux, FreeBSD, macOS y Windows. Como parte del nuevo modelo de lanzamiento implementado el año pasado, MySQL 9.1 se clasifica en las ramas de "Innovación", a las que también se asignará el siguiente lanzamiento significativo de MySQL 9.2. Las ramas de Innovación están recomendadas para aquellos que desean acceder a las nuevas funcionalidades antes, se publican cada 3 meses y se mantienen solo hasta la publicación del siguiente lanzamiento significativo (por ejemplo, después de la aparición de la rama 9.1, se detiene el soporte para la rama 9.0). En el verano del próximo año se planea crear un lanzamiento LTS, recomendado para implementaciones que requieren previsibilidad y un comportamiento constante a largo plazo. Después de la rama LTS se formará una nueva rama de Innovación: MySQL 10.0.
Principales cambios en MySQL 9.1:
- Se ha añadido soporte para la expresión "IF NOT EXISTS" en la operación "CREATE VIEW", lo que permite crear la vista solo si una vista con el nombre especificado aún no existe y evitar el retorno de un error si la vista ya ha sido creada.
- Se ha detenido la carga de triggers durante la ejecución de operaciones que solo están relacionadas con la lectura. Antes, los triggers se cargaban ante cualquier acceso a la tabla, lo que conducía a un consumo de memoria y a una carga en la CPU en situaciones donde los triggers no se utilizaban (por ejemplo, durante la ejecución de consultas SELECT). En MySQL 9.1, el procesamiento y la carga de triggers se han dividido en dos etapas: lectura de metadatos sobre el trigger y análisis + ejecución del trigger. Los datos obtenidos en la primera etapa se guardan una vez y luego se comparten entre las distintas instancias del trigger. El análisis y la ejecución del trigger se realizan solo para las expresiones que conducen a cambios en los datos. Además, para reducir el consumo de memoria, en lugar de asignar estáticamente buffers para el manejo de errores en los triggers, se ha realizado la transición a la asignación dinámica de memoria según sea necesario.
- Se ha ampliado la salida de la operación "EXPLAIN", en la que ahora se muestran datos sobre el uso de la lectura de múltiples rangos (multi-range) y la aplicación de la estrategia de semijoin, donde en las operaciones JOIN se procesan filas solo de una tabla.
- Se garantiza la ejecución atómica de las operaciones «CREATE DATABASE» y «DROP DATABASE» para proteger contra fallos en caso de un cierre inesperado o la aparición de errores a nivel del sistema de archivos durante la ejecución de estas operaciones. Por ejemplo, anteriormente, en caso de un cierre inesperado, se podría haber generado una estructura incompleta y no funcional del almacenamiento de la base de datos, cuya limpieza requería intervención manual.
- En los procedimientos almacenados escritos en JavaScript, se ha añadido soporte para el tipo VECTOR. Los datos con este tipo ahora pueden ser transmitidos en parámetros de entrada y salida.
- Se ha añadido la posibilidad de autenticación al conectarse a la base de datos utilizando el protocolo OpenID Connect.
- Se han corregido 27 vulnerabilidades, de las cuales la más grave (CVE-2024-5535) se ha calificado como crítica (9.1 de 10). Esta vulnerabilidad puede ser explotada de forma remota sin pasar por la autenticación. El problema se debe a la lectura de datos fuera del búfer asignado en la biblioteca OpenSSL y puede provocar un cierre inesperado o fuga de contenido de memoria en la respuesta tras la conexión con el servidor especificando parámetros incorrectos del protocolo.
Fuente: opennet.ru
