-
MySQL now supports enhanced role management with the introduction of a new option,
activate_mandatory_roles
.If
activate_all_roles_on_login
is enabled,activate_mandatory_roles
is ignored, and both mandatory and granted roles are activated. Ifactivate_all_roles_on_login
is disabled andactivate_mandatory_roles
is enabled, mandatory roles are activated in addition to any default roles associated with the account.If neither are activated, only the account's default roles are activated.
activate_mandatory_roles
is enabled by default. (WL #16597)
Fixed an issue related to audit log strategy. (Bug #38223011)
Improved performance related to adding multiple
general_sql_command.str
fields to an Enterprise Audit filter. (Bug #38053242)Fixed an issue related to
audit_log_read
performance. (Bug #36281295, Bug #38275868)
Security Enhancement: The default value of
caching_sha2_password_digest_rounds
is increased to 10,000. (WL #16974)Under certain circumstances, the keyring component could not read the configuration file if the configured data directory path was shorter than the default path. (Bug #38078884)
General-Purpose Keyring Functions did not handle invalid parameters correctly. (Bug #38055488)
-
Important Change: The default value for the
binlog_transaction_dependency_history_size
server system variable has been increased from 25000 to 1000000 (one million). This variable's maximum value has also been increased, from 1000000 to 10000000 (ten million).This change should not have any immediate effect on existing setups.
See the description of
binlog_transaction_dependency_history_size
for further information. (WL #16439)
Solaris: Clang and GCC now can be used for compiling MySQL on Solaris. (Bug #30562248)
OpenSSL 3 is now used on Solaris. (Bug #38193362)
Upgraded the bundled googletest library to version 1.17. (Bug #38152017)
Upgraded the bundled libbacktrace library to the latest version (April 2025). (Bug #38151970)
MySQL Server now bundles libzip and provides CMAKE options to choose between the bundled or system library when compiling the server. (Bug #38109824)
The minimum required version of CMAKE is now 3.17.5, for supported platforms. (Bug #38090672)
Compiler warnings were logged when building MySQL Server with GCC 15. (Bug #37721464)
-
The
MYSQL_OPTION.OPTION_USAGE.OPTION_NAME
field used a different character set thanPERFORMANCE_SCHEMA.MYSQL_OPTION.OPTION_NAME
.As of this release, the
CLUSTER_ID
,SERVER_ID
, andOPTION_NAME
fields ofMYSQL_OPTION.OPTION_USAGE
useutf8mb4_general_ci
instead ofascii
. (Bug #38230424) The
sql_errno()
method in themysql_command_error_info
service returned 0 when a command failed, instead of the appropriate error code. (Bug #38178087)The server plugin system variable flag
PLUGIN_VAR_NOSYSVAR
was not processed properly. Variables defined with this flag were displayed when they should be hidden. (Bug #37654916)Errors were not handled correctly when using the keyring UDF plugin and executing specific queries with the
keyring_key_generate
function. (Bug #37501458)-
Telemetry component introduces a secret decoding service. This enables you to create your own secret-decoding service for OpenTelemetry.
The following system and status variables were added:
(WL #16647)
Microsoft Windows: If the MySQL Server was configured as a process, not as a service, the Configurator's Starting the server step could take a long time to complete due to delays in detecting when the server was ready to receive connections. (Bug #38068649)
Microsoft Windows: Shared Memory connections,
--enable-shared-memory=true
, failed when they were the only enabled protocol during server configuration. (Bug #38068619)Microsoft Windows: It was not possible to create usernames with escaped characters, using single or double quotes, during new server configuration. (Bug #37459624)
-
Microsoft Windows: When upgrading, for example from version 9.1.0 to 9.2.0, using a non-default port, such as
3307
, messages could be generated indicating a connection issue to port3306
, even if the server configuration is correct and the upgrade is successful. Errors were returned similar to the following:Can't connect to MySQL server on 'localhost:3306' (10061)
(Bug #37459255)
Microsoft Windows: The CLI help for MySQL Configurator now correctly displays the list of supported values for configurable server options. (Bug #37458648)
--config-type
Configurator CLI option did not accept any values. (Bug #38068684)
-
Connection control now supports exempting unknown users from delay criteria, introducing a new system variable
component_connection_control.exempt_unknown_users
that allows administrators to configure whether failed connection attempts without user credentials should be penalized. This enhancement improves the component's ability to handle legitimate connection attempts from load balancers, ensuring better server availability while maintaining effectiveness in thwarting brute force attacks. A new status variableComponent_connection_control_exempted_unknown_users
provides insights into the number of exempted connections.See (xref linkend="to-fill") for more information. (WL #17037)
The
group_replication_allow_local_lower_version_join
system variable, deprecated in MySQL 8.4.0, has now been removed. (WL #16019)The
replica_parallel_type
system variable, deprecated in MySQL 8.0.29, has now been removed. (WL #13955)-
The
SCRAM-SHA-1
authentication method for SASL LDAP authentication is now deprecated, and subject to removal in a future version of MySQL. You are encouraged to useSCRAM-SHA-256
instead.As part of this work, the default value for the
authentication_ldap_sasl_auth_method_name
system variable has been changed toSCRAM-SHA-256
; the valueSCRAM-SHA-1
is now deprecated.For further information, see LDAP Pluggable Authentication. (WL #17022, WL #17034)
-
The following deprecated plugins are removed in this release:
semisync_master
replaced bysemisync_source
.semisync_slave
replaced bysemisync_replica
.
(WL #16801)
-
Fixed an issue related to executing certain UPDATE statements. (Bug #37590580)
References: This issue is a regression of: Bug #31562881.
-
Important Change: The default value for
innodb_log_writer_threads
is now determined in part by whether binary logging is enabled, as shown here:if (log_bin = OFF) { if ([number of logical CPUs] <= 4) { innodb_log_writer_threads = OFF } else { innodb_log_writer_threads = ON } } else { if ([number of logical CPUs] <= 32) { innodb_log_writer_threads = OFF } else { innodb_log_writer_threads = ON } }
When binary logging is disabled (
log_bin
isOFF
), the default is determined as it was in MySQL 9.4 and earlier.This change does not affect the variable's configured value, if set.
For further information, see the description of
innodb_log_writer_threads
in the MySQL documentation; see also Optimizing InnoDB Redo Logging. (WL #16999) -
InnoDB: The
dict_stats_analyze_index()
function could discard optimal index-based access paths, resulting in suboptimal performance for large tables when empty index statistics are read concurrently or an error leads to empty index statistics.Our thanks to Casa Zang and the Tencent team for the contribution. (Bug #33472935)
-
Creating a thread for parallel scan may fail, resulting in assertion failures when it fell back to single-thread mode. Errors were returned similar to the following:
Assertion failure: row0pread.h:306:active >= n_threads
(Bug #38325137)
Under certain circumstances, a virtual index rollback could fail on 32-bit builds of MySQL Server. (Bug #38167527)
-
The
mlog read_1_bytes
comment now accurately reflects a byte size of 1 byte, rather than 2 bytes.Our thanks to Jeong Geun Lee for the contribution. (Bug #38001828)
-
If the buffer pool was very large, it could lead to a large number of chunks required by each buffer pool instance, which could fail if the operating system was unable to allocate the required memory.
As of this release, this allocation is checked to ensure it is allocated correctly. (Bug #37994397)
Fixed an issue relating to modifying the internal FTS configuration. (Bug #37792010)
-
Fixed an issue related to the purge coordinator.
Our thanks to Yin Peng and the Tencent team for the contribution. (Bug #37628911)
Fixed an issue related to virtual indexes. (Bug #37602657)
MySQL Server could behave unpredictably when simultaneously optimizing and updating a table. (Bug #37324137)
-
If the row size exceeded the maximum allowed size due to
innodb_strict_mode=OFF
, confusing warning messages similar to "Cannot add field" could appear in certain situations, such as selecting from a table or dropping a column.Error messages are improved for this scenario. (Bug #37003342, Bug #36768046, Bug #36867372)
-
The
dict_stats_analyze_index()
function in could discard optimal index-based access paths, resulting in suboptimal performance for large tables when empty index statistics are read concurrently or an error return leads to empty index statistics.Our thanks to Casa Zang and the Tencent team for the contribution. (Bug #33472935)
Under certain, rare circumstances, a race condition was possible during a purge operation. (Bug #32679024)
As of this release, the default value of
innodb_change_buffering
isALL
. This improves handling of secondary index updates. (WL #16967)
Size limit for result sets in SQL-callouts from JavaScript stored procedures has been increased to support larger data sizes. (Bug #38413760)
JavaScript language support provided by the MySQL Multilingual Engine component now conforms to the ECMAScript 2025 Language Specification (ECMA-262, 15th Edition) as shown at
https://262.ecma-international.org/16.0/
. (Bug #38358516)Virtual FileSystem paths were not handled correctly by the MLE component. As of this release, paths with redundant or relative directories, such as
./
or../
, are accepted without errors. (Bug #38198011)-
MySQL now supports automatic configuration for the
mle.memory_max
variable setting on-premises, utilizing a formula-based approach to dynamically allocate memory. This ensures that the default value of this variable is calculated as 5% of the total physical memory, capped within a range of 0.4GB to 32GB.For more information, see MLE Component Memory and Thread Usage. (WL #17033)
Parsing very-large, high-precision float numbers in exponential notation, such as
5.0000000000000004e36
, in a JSON column could result in a checksum verification error. (Bug #38033684)Large TIME values inserted into a TIME column became smaller when converted to JSON. (Bug #37458212)
Fixed an issue related to handling JSON key values in the
mysql.user.user_attribute
column when using theALTER USER
statement with a JSON attribute containing a blank ornull
key-value pair. (Bug #31067575)
Using 0 as an explicit request for
AUTO_INCREMENT
columns was allowed. (Bug #38319365)It was possible to delete a singleton child of a JSON Duality View's nested child. As of this release, it is no longer possible to delete a singleton child of a JSON Duality View's nested child. (Bug #38305543)
-
Creating a JSON Duality View with
WHERE
conditions that contained sub-queries resulted in an assertion failure, and the server possibly closing unexpectedly. Errors were returned similar to the following:Assertion `nullptr != dynamic_cast<Target>(arg)' failed.
(Bug #38187473)
INSERT
statements for a JSON Duality View that included anAUTO_INCREMENT
column were rejected even if the column was not part of a join condition. (Bug #38179925)JSON Duality Views exhibited inconsistent behavior with DML queries and SELECT queries when the
derived_merge=off
optimizer hint was used. (Bug #38175557)-
Executing a JSON Duality Views UPDATE statement could result in the server closing unexpectedly. Errors were returned similar to the following:
Address not mapped to object
(Bug #38084877)
component_keyring_kmip
orkeyring_okv
now supportSECRET
key types on Oracle Key Vault (OKV) server 21.10, or higher. (WL #17090)The
keyring_okv
plugin is deprecated and replaced by thekeyring_kmip
component, enabling secure communication with Key Management Interoperability Protocol (KMIP) 1.1-compatible products such as Oracle Key Vault, Gemalto SafeNet KeySecure Appliance, Townsend Alliance Key Manager, and Entrust KeyControl. (WL #16524)
This version includes the MySQL Diagnostic Monitor (mysqldm), a new client tool designed to collect server diagnostic information. To supply to Oracle Support for efficient issue resolution, for example. The mysqldm client tool runs a predefined set of queries on the server, storing the results in JSON format, and provides options for customizing the output directory, number of iterations, and delay between iterations. (WL #16973)
Sorting with row IDs could produce incorrect results when the result came from a hash join reading a table in the temptable engine, where the temporary table is large enough to be stored on disk. (Bug #38418831)
Queries with cyclic joins and equi-join predicates referencing the same tables could exhibit unnecessary complexity during planning due to non-equality predicates not being pushed to existing cycle edges. (Bug #38211194)
-
Queries using semi join with materialization may return incorrect results due to a missing condition.
Our thanks to Jingqi Tian and the team at Alibaba. (Bug #38110792)
Fixed an issue related to query execution. (Bug #37847144)
Separate evaluation functions for
DATE
andDATETIME
values have been introduced, utilizing distinct classes for these data types to optimize server performance. (Bug #37743288)Optimizer could call
EstimateEqualPredicateSelectivity
multiple times for the same join condition in a simple join query. (Bug #36714667)Fixed an issue relating to SQL queries involving correlated scalar subqueries and JSON tables. (Bug #36684370)
Queries using prepared statements to retrieve time type data did not always return expected results, regardless of whether precision was specified. (Bug #36065557)
Using
WHERE IN (NULL,'xx:xx:xx.xxxxxx');
on a TIME column returned an empty set, whereas usingWHERE IN ('xx:xx:xx.xxxxxx')
returned the expected results. (Bug #35500028)Using the
IN()
operator withTIME
columns could return an empty set when a value is matched if the list containsNULL
or empty strings. (Bug #34188599)-
The default values of the following system variables have changed:
explain_format
: changed fromTRADITIONAL
toTREE
explain_json_format_version
: changed from 1 to 2.
(WL #17039)
For platforms on which OpenSSL libraries are bundled, the linked OpenSSL library for MySQL Server has been updated to version 3.0.17. For more information, see OpenSSL 3.0 Series Release Notes. (Bug #38457056)
-
MySQL Server RPM installation on Fedora 42 could fail due to conflicts with MariaDB 11.8 packages. Errors were returned similar to the following:
file /usr/bin/mysqld conflicts between mysql-community-server-8.4.7 and mariadb11.8-server-3:11.8.3, file /usr/share/man/man1/mysql.1.gz conflicts between mysql-community- client-8.4.7 and mariadb11.8, file /usr/lib/systemd/system/mysqld.service conflicts between mysql- community-server-8.4.7 and mariadb11.8-server
(Bug #38384844)
MySQL Server now supports side-by-side installations of different innovation and LTS releases. (Bug #38104701)
Invalid temporal values in the binary protocol were silently adjusted when
SQL_MODE
was set to a non-strict value. As of this release, such values are rejected with an error. (Bug #38352728)-
The following telemetry system variables were enabled by default, resulting in connection failures and log spamming:
As of this release, these variables are disabled by default. (Bug #38345446, Bug #38347061)
-
The default values for the following telemetry endpoint system variables, such as
http://localhost:4318/v1/traces
, caused log spamming and were defined using http instead of https:As of this release, these variables have no default value. (Bug #38133218)
Connections waiting on the connection control plugin were not displayed in the
performance_schema.processlist
table. (Bug #38043683)Queries with the same
SQL_DIGEST
could produce identical summaries, even if they had distinct characteristics, such as differingORDER BY
clauses. The digest computation has been improved to better distinguish between these queries. (Bug #31103386)
-
Client-server handshake errors occured during authentication with the
authentication_oci
plugin, when using the--default-auth
parameter, if the server and client's default authentication methods were different on first connection. Errors were returned similar to the following:An error occurred during the client server handshake.
(Bug #37092159)
-
MySQL Replication supports enhanced security features with encryption now being enabled for all replication connections by default. With this configuration change, the default value of the
SOURCE_SSL
option in the CHANGE REPLICATION SOURCE TO Statement has been changed to1
, the default value of thegroup_replication_ssl_mode
variable has been changed toREQUIRED
, and the default value of thegroup_replication_recovery_use_ssl
variable has been changed toON
.For more information, see Replication Security. (WL #16438)
-
To enable enhanced replication capabilities by default, the default values of
gtid_mode
has been changed toON
. Additionally, the default value ofenforce_gtid_consistency
has been changed fromON
.For more information, see Replication with Global Transaction Identifiers. (WL #8602)
-
Geometry functions now support the inclusion of CRS URN in implicit JSON representation, ensuring that spatial reference system information is preserved when converting geometries to GeoJSON. This enhancement enables accurate representation and updating of geometry values in JSON duality views. It also affects the
ST_AsGeoJSON
function with options 2 and 4, which now always includes a CRS URN. With this update, GeoJSON resulting from an implicit conversion from a geometry type will have an extra "crs" attribute, providing a more comprehensive and accurate geometric representation.See Spatial GeoJSON Functions for more information. (WL #16929)
-
Errors encountered by the
sys.ps_trace_thread
stored procedure were not handled properly.Our thanks to Artem Avetian for the contribution. (Bug #34537707)
-
The sys schema stored procedure,
revoke_schema_privileges_from_all_accounts_except()
is now installed by default. This procedure enables you to revoke privileges on a schema, for all users, except for a defined list of exceptions.See The revoke_schema_privileges_from_all_accounts_except() Procedure for more information. (WL #16996)
-
MySQL Thread Pool now supports automatic hardware-based configuration, allowing it to detect the underlying server hardware and set optimal defaults for better performance. The plugin automatically adjusts its settings based on the number of VCPUs available on the system, and users can still make changes when needed. Additionally, the plugin automatically validates and correct misconfigured parameters, and logs warnings when values are auto-corrected.
The following system variables are affected:
(WL #16621)