MySQL 9.5 Release Notes  /  Changes in MySQL 9.5.0 (2025-10-21, Innovation Release)

Changes in MySQL 9.5.0 (2025-10-21, Innovation Release)

Note

These release notes were created with the assistance of MySQL HeatWave GenAI.

Account Management Notes

Audit Log Notes

  • Fixed an issue related to audit log strategy. (Bug #38223011)

  • Improved performance related to adding multiplegeneral_sql_command.str fields to an Enterprise Audit filter. (Bug #38053242)

  • Fixed an issue related toaudit_log_read performance. (Bug #36281295, Bug #38275868)

Authentication Notes

  • Security Enhancement: The default value ofcaching_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)

Binary Logging

  • Important Change: The default value for thebinlog_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 ofbinlog_transaction_dependency_history_size for further information. (WL #16439)

Compilation Notes

  • 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)

Component Notes

  • TheMYSQL_OPTION.OPTION_USAGE.OPTION_NAME field used a different character set thanPERFORMANCE_SCHEMA.MYSQL_OPTION.OPTION_NAME.

    As of this release, theCLUSTER_ID,SERVER_ID, andOPTION_NAME fields ofMYSQL_OPTION.OPTION_USAGE useutf8mb4_general_ci instead ofascii. (Bug #38230424)

  • Thesql_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 flagPLUGIN_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 thekeyring_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)

Configuration Notes

  • Microsoft Windows: If the MySQL Server was configured as a process, not as a service, the Configurator'sStarting 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 as3307, 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 Management Notes

  • Connection control now supports exempting unknown users from delay criteria, introducing a new system variablecomponent_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.

    For more information, see (xref linkend="to-fill"). (WL #17037)

Deprecation and Removal Notes

  • Thegroup_replication_allow_local_lower_version_join system variable, deprecated in MySQL 8.4.0, has now been removed. (WL #16019)

  • Thereplica_parallel_type system variable, deprecated in MySQL 8.0.29, has now been removed. (WL #13955)

  • TheSCRAM-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 theauthentication_ldap_sasl_auth_method_name system variable has been changed toSCRAM-SHA-256; the valueSCRAM-SHA-1 is now deprecated.

    For further information, seeLDAP 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)

SQL Function and Operator Notes

  • Fixed an issue related to executing certain UPDATE statements. (Bug #37590580)

    References: This issue is a regression of: Bug #31562881.

InnoDB Notes

  • Important Change: The default value forinnodb_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 ofinnodb_log_writer_threads in the MySQL documentation; see alsoOptimizing InnoDB Redo Logging. (WL #16999)

  • InnoDB: Thedict_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)

  • Themlog 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)

  • Users could encounter an assertion failure due to a data size and bounds mismatch. Errors were returned similar to the following:

            Assertion failure: ddl0file-reader.cc:193:m_ptr + data_size <        m_bounds.second

    (Bug #37882398)

    References: This issue is a regression of: Bug #37233273.

  • 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 toinnodb_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)

  • Thedict_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 ofinnodb_change_buffering isALL. This improves handling of secondary index updates. (WL #16967)

JavaScript Programs

  • 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 athttps://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 themle.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, seeMLE Component Memory and Thread Usage. (WL #17033)

JSON Notes

  • Parsing very-large, high-precision float numbers in exponential notation, such as5.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 themysql.user.user_attribute column when using theALTER USER statement with a JSON attribute containing a blank ornull key-value pair. (Bug #31067575)

JSON Duality Views

  • Using 0 as an explicit request forAUTO_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 withWHERE 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 thederived_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)

Keyring Notes

  • component_keyring_kmip orkeyring_okv now supportSECRET key types on Oracle Key Vault (OKV) server 21.10, or higher. (WL #17090)

  • Thekeyring_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)

MySQL Programs

  • 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.

    Note

    MySQL Diagnostic Monitor is only available with MySQL Enterprise Edition.

    (WL #16973)

Optimizer Notes

  • 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 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 forDATE andDATETIME values have been introduced, utilizing distinct classes for these data types to optimize server performance. (Bug #37743288)

  • 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)

  • UsingWHERE 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 theIN() 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:

    (WL #17039)

Packaging Notes

  • 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, seeOpenSSL 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)

  • The RPM specification and DEB control files were missing several requirements, making it impossible to build those formats. (Bug #38310603)

  • MySQL Server now supports side-by-side installations of different innovation and LTS releases. (Bug #38104701)

Performance Schema Notes

  • Invalid temporal values in the binary protocol were silently adjusted whenSQL_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 ashttp://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 theperformance_schema.processlist table. (Bug #38043683)

  • Queries with the sameSQL_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)

Pluggable Authentication

  • Client-server handshake errors occured during authentication with theauthentication_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)

Replication Notes

Spatial Data Support

  • 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 theST_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.

    SeeSpatial GeoJSON Functions for more information. (WL #16929)

sys Schema Notes

  • Errors encountered by thesys.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.

    SeeThe revoke_schema_privileges_from_all_accounts_except() Procedure for more information. (WL #16996)

Thread Pool Notes

Bugs Fixed

  • Logical clock handling forCREATE ... SELECT statements has been improved to ensure accurate logical clock values in the replica relay log. (Bug #38383106)

  • Several updates were made to the generated API documentation.

    Our thanks to Daniël van Eeden for the contribution. (Bug #38341735)

  • The server sometimes processed table references incorrectly. (Bug #38001000)


PREV   HOME   UP