MySQL 9.6 Release Notes  /  Changes in MySQL 9.6.0 (2026-01-20, Innovation Release)

Changes in MySQL 9.6.0 (2026-01-20, Innovation Release)

Note

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

Audit Log Notes

  • Updated the audit_log_rotate_on_size system variable to require the AUDIT_ADMIN privilege for modification. (Bug #38620615)

  • MySQL now supports a more modular and efficient auditing system with the introduction of the Audit Log component. This update splits the monolithic Audit Log software into smaller, more manageable components, encapsulated into MySQL components, making it easier to install, manage, and maintain. The new component-based architecture allows for improved flexibility and customization, enabling users to easily configure audit log settings, such as output file location, format, and buffer size. With this enhancement, MySQL provides a more streamlined and user-friendly auditing experience, allowing you to focus on monitoring and analyzing your database activities with greater ease.

    See MySQL Enterprise Audit Component for more information. (WL #12716)

Compilation Notes

  • MySQL Server's clang-tidy configuration now consistently disables all brace checks, including hicpp-braces-around-statements, to prevent duplicate diagnostics. (Bug #38601902)

  • A number of unused symbols were removed from the code base. (Bug #38557463)

  • The cmake macro MYSQL_CHECK_PROTOBUF did not properly handle multiple calls when using system protobuf. Errors were returned similar to the following:

            ADD_LIBRARY cannot create imported target
            "ext::libprotobuf" because another target with the same
            name already exists.

    (Bug #38417986)

Configuration Notes

  • The mysqlx_port server variable was not persisted in the my.ini file when set through the Type and Networking configuration page. (Bug #38728671)

  • MySQL Configurator treated single-quotes (') as part of the password.

    The configurator now correctly handles quoted passwords by removing any quotes, double quotes, or backticks from the beginning and end of the password. (Bug #38069029)

  • Server file permissions were not applied as specified with --server-file-permissions-access. Full access was granted regardless of the value defined. (Bug #38068994)

  • --slow-query-log-file could be used even if the slow query log was not enabled. (Bug #38068822)

  • It was possible to set the --general-log-file CLI option when the general log was disabled.

    As of this release, an error is returned. (Bug #38068775)

  • --open-win-firewall could be used when TCP/IP connections were disabled.

    As of this release, --open-win-firewall can only be used when TCP/IP connections are enabled. (Bug #38068699)

  • Updating the password with MySQL Configurator took a long time. (Bug #37459271)

Doxygen Notes

  • A number of issues were corrected in the Server API documentation.

    Our thanks to Daniƫl van Eeden for the contribution. (Bug #114671, Bug #117516, Bug #37329988, Bug #37615382, Bug #36526371)

Replication with GTIDs

  • MySQL Server now supports a new GTID set data structure, providing a simpler, more modern, and efficient library for handling Global Transaction IDs. This implementation replaces the existing library, offering improved maintainability and performance. (WL #16076)

InnoDB Notes

  • InnoDB: InnoDB redo logging error messages now include the current LSN and redo log capacity information, and the MONITOR output has been enhanced to display redo log capacity details. (Bug #37645185)

  • InnoDB: If an XA PREPARED transaction existed during a server shutdown or crash, restarting the server with a non-zero --innodb-force-recovery value caused InnoDB to incorrectly change the transaction state from PREPARED to ACTIVE. This could lead to issues ranging from assertion failures to rolling back the PREPARED transaction. (Bug #35659774)

  • InnoDB: InnoDB now generates unique rowid values in tables without primary keys more efficiently. (Bug #13395168)

  • InnoDB: The field fk_max_recusive_level in dict_table_t struct is no longer used and has been removed.

    Our thanks to Xiaocong Ding for the contribution. (Bug #119063, Bug #38492574)

  • InnoDB: If the server closed during transaction commit, transactions in an already committed state could remain in the undo log. If the transaction is already committed, it is cleared from trx_sys->rw_trx_list during recovery, but is not cleared from active_tw_trxs of the trx_sys->shards. This invalid transaction stored in the trx_sys->shards could cause errors or assertions in the execution of the later queries.

    As of this release, during cleanup on startup, processed transactions are not added to trx_sys->shards.

    Our thanks to Yewei Xu and the team at Tencent for the contribution. (Bug #118515, Bug #38132549)

  • InnoDB: When selecting blob data after a small partial update, incorrect results may be returned due to inconsistencies in the Multi-Version Concurrency Control (MVCC) for blob objects. (Bug #114138, Bug #36342348)

  • InnoDB: Concurrent execution of FLUSH TABLE FOR EXPORT with DROP TABLE and DML operations could result in a deadlock. (Bug #110485, Bug #35221441)

  • Fixed an issue related to bulk inserts. (Bug #38208188)

  • MySQL Server now supports a new startup option, container_aware, which controls the server's ability to discover and adhere to CPU and memory resource limits set by a container. (WL #16937)

JavaScript Programs

  • GraalVM performance metrics are now available on Windows. (Bug #38498718)

  • The SHOW CREATE LIBRARY command generated HEX representations of binary libraries on x86_64 architectures with FFFFFF patterns before each byte with the high bit set.

    Our thanks to Akshat Nehra and the team at Amazon for the contribution. (Bug #118927, Bug #38458235)

JSON Duality Views

  • The table IDs reported in the I_S views for JSON Duality Views differed from those reported by ORACLE DB due to differences in calculation order, leading to inconsistent REFERENCED_TABLE_ID values when multiple Content_tree_nodes referred to the same base table. (Bug #38624596)

Logging Notes

Optimizer Notes

  • Fixed an issue relating to Common Table Expressions (CTE). (Bug #38573285)

  • Using the coalesce or any_value functions with specific JSON operations, such as json_search and json_remove, could cause an assertion failure. (Bug #38549573)

  • Negative year values were accepted as valid datetime values by one method, but not by another.

    Negative year values are now always reported as errors. (Bug #38487373)

  • Fixed issues relating to executing specific SELECT queries. (Bug #38465147, Bug #38465178)

  • Fixed an issue related to executing specific SQL queries. (Bug #38448700)

  • Fixed an issue relating to SHOW CREATE TABLE. (Bug #38298692)

  • Queries which used REGEXP took longer to execute as prepared statements than as direct queries. (Bug #114056, Bug #36326728)

Packaging Notes

  • For platforms on which OpenSSL libraries are bundled, the linked OpenSSL library for MySQL Server has been updated to version 3.0.18. For more information, see OpenSSL 3.0 Series Release Notes. (Bug #38632932)

Performance Schema Notes

  • Important Change: It is now possible to view accounts which have been temporarily locked, using the new Performance Schema table TEMPORARY_ACCOUNT_LOCKS.

    The Performance Schema table, HOST_CACHE, was extended with the following columns:

    • COUNT_ACCOUNT_LOCKED_ERRORS: The number of errors caused by a permanently locked account.

    • COUNT_TEMPORARY_ACCOUNT_LOCKED_ERRORS: The number of errors caused by a temporarily locked account.

    (Bug #37378977, WL #16803)

  • Fixed an issue relating to querying variables. (Bug #38100668)

  • Performance Schema did not capture SQL or digests for prepared statements from non-MySQL clients. (Bug #114480, Bug #36445818)

  • Negative numbers on digests in WHERE were not parsed properly.

    Our thanks to Yakir Gibraltar for the contribution. (Bug #110045, Bug #35078042)

  • The following logs are now instrumented for Telemetry Logging:

    • Slow Query Log

    • General Log

    See The setup_loggers Table and Configuring Log Telemetry. (WL #17167)

Pluggable Authentication

  • Connecting to a MySQL server with a non-existing user now consistently returns an "Access denied for user" error message, regardless of the username length or MySQL version. Previously, errors were returned similar to the following:

            ERROR 1045 (28000): Access denied for user
            'foo'@'localhost' (using password: NO), ERROR
            1524 (HY000): Plugin 'mysql_native_password' is not
            loaded

    (Bug #36527984)

Security Notes

  • Fixed an issue relating to authentication. (Bug #118447, Bug #38077617)

  • The error message returned when attempting to create a user with an existing user name was unclear. (Bug #28331, Bug #11746738)

  • MySQL now supports enhanced security and flexibility with the relocation of MD5() and SHA1() SQL functions to a separate component, allowing for greater control over deprecated hashing algorithms and improved compliance with security standards. You can install the classic_hashing component to continue using MD5() and SHA1() functions in your applications, ensuring a seamless transition and maintaining the integrity of your database operations. This update enables you to choose whether to utilize these functions, promoting a more secure environment by avoiding unacceptable hashing algorithms as defined by industry standards.

    See Legacy Hashing Component for more information. (WL #16956)

SQL Syntax Notes

  • MySQL Server now supports table-level DML tagging for JSON duality views. You can explicitly specify allowed DML operations (INSERT, UPDATE, DELETE) per table when defining a JSON duality view. Restrictive tags (NO INSERT, NO UPDATE, NO DELETE) are also supported to explicitly disallow specific operations. You can specify combinations of these tags. At runtime, JSON duality views validate incoming DML operations against the configured tags and accept or reject operations accordingly. This provides per-table control over write operations within a single duality view definition. The behavior is compatible with Oracle DB JSON duality views.

    See CREATE JSON DUALITY VIEW Statement for more information. (WL #17053)

Functionality Added or Changed

  • The bundled version of opentelemetry-cpp was upgraded to version 1.23.0. (Bug #38483354)

  • As of this release, GROUPING() is permitted in queries without ROLLUP. (Bug #38168051)

Bugs Fixed

  • InnoDB: Under certain circumstances, when using the que_eval_sql interface, a race condition could occur. (Bug #118705, Bug #38310595)

  • mysqltest did not print the symbolic error code (error name) for failed SQL statements. (Bug #38743161)

  • Running SET PERSIST on a system variable after an upgrade can result in duplicate variable entries across different sections in mysqld-auto.cnf. (Bug #38680162)

  • Binary log purged before persited binlog_expire_* options were loaded. (Bug #38554467)

  • Fixed an issue relating to changing users and roles. (Bug #38492547)

  • Linux debug builds started with the --basedir option set to an existing absolute path will no longer assert that local_mysql_home ends with a specific character. (Bug #38483568)

  • Releasing MDLs before the Auto_releaser has run could cause asserts in debug builds due to locks not being released. (Bug #38430539)

  • When 2 of 6 instances in a geographically dispersed InnoDB Cluster lost connectivity, the primary server became unresponsive, causing the COMMIT and INSERT operations to become unresponsive as well. (Bug #38380392)

  • Fixed an issue related to user name handling. (Bug #38355483)

  • mysqldump's --order-by-primary option sorted data by every index on the table, instead of just sorting by the primary key. (Bug #38284832)

  • Fixed several issues relating to Thread Pool blocking connections from closing. (Bug #38170188, Bug #36782728, Bug #38549372)

  • Under certain circumstances, when used for an upgrade, mysqlpump altered the SQL mode and collation of stored procedures. (Bug #38154661)

  • Fixed several issues in the parser. (Bug #37866044, Bug #38483735)

  • Upgraded the MySQL Server to use non-deprecated OpenSSL algorithms for enhanced security and compatibility. (Bug #33951773)

  • It was possible to specify a password expiry policy for externally authenticated users. (Bug #32724080)

  • GTID gaps were generated because of the replica- skip-errors option. (Bug #28590993)

  • Database names containing a backslash were not correctly quoted when using the --routines option with mysqldump. (Bug #22240504)

  • If server was started on Windows platforms with --skip-grant-tables, privileges were not checked and remote connections were not permitted. As a result, the server might not start. (Bug #118805, Bug #38328780)

  • (Bug #97091, Bug #30381098)

  • A memory management issue occurred in the CSV engine when meta files became inaccessible.

    Our thanks to Yan Huang for the contribution. (Bug #93394, Bug #28987279)

  • Trailing comments on the !includedir or !include directives in the MySQL configuration file could prevent the server from starting. (Bug #87657, Bug #26750972)


PREV   HOME   UP