MySQL 26.10 Release Notes  /  Changes in MySQL 26.10.0 (2026-10-20)

Changes in MySQL 26.10.0 (2026-10-20)

Audit Log Notes

  • Fixed an issue relating to Audit Log filter UDF error-message formatting. (Bug #39472337)

Compilation Notes

  • The version of Boost needed to build MySQL has been raised from 1.87.0 to 1.92.0. (Bug #40006694)

  • MySQL CMake configuration could fail with newer Cyrus SASL versions when plugins present in older library releases were unavailable. Plugin files are now copied on a best-effort basis, permitting builds with both older and newer plugin sets. (Bug #39964171)

  • RapidYAML 0.16.0 is now bundled for use as an optional dependency of opentelemetry-cpp when built with -DWITH_CONFIGURATION=ON. (Bug #39894165)

  • MySQL Server could fail to compile with GCC 16.1 due to warnings treated as errors. (Bug #39688586, Bug #39688855, Bug #39671507, Bug #39670670, Bug #39670901)

  • MySQL source builds can now be configured with OpenSSL 4.0. Compatibility updates were also made for curl, libfido2, and gRPC. (Bug #39102340)

Component Notes

  • MySQL command services did not return stored-procedure output parameters from prepared CALL statements. Prepared-statement multi-result support now returns those parameters as a result set to component consumers. (Bug #39836178)

  • The public mysql_command_services API now supports password-authenticated local Classic Protocol connections through the write-only MYSQL_COMMAND_PASSWORD option. Any non-null value, including an empty string, selects normal authentication to the local server; null retains embedded behavior. Connections remain server-local and one-shot, and option-file settings are rejected. (Bug #39817209)

  • Components using mysql_account_database_security_context_lookup can now query an account's lock state through the read-only Boolean account_locked option exposed by mysql_security_context_options. (Bug #39702733)

  • With the default command-service DOM consumer, mysql_use_result() could return a non-NULL result containing metadata for a nonempty query while mysql_fetch_row() immediately returned NULL. A private cursor now exposes the materialized rows while preserving unbuffered-result semantics, row lengths, fetch-driven counts, cleanup, and metadata lifetime. Errors were returned similar to the following:

    Result: mysql_use_result() returns a non-NULL MYSQL_RES with valid metadata, 
    but MYSQL_RES::data and MYSQL_RES::data_cursor are NULL. 
    Therefore, mysql_fetch_row() returns NULL immediately.

    (Bug #39671681)

  • The default command-service DOM consumer could return incomplete MYSQL_FIELD metadata, including a null catalog and zero metadata-name lengths. It now returns catalog def with length 3 and supplies the byte lengths of the remaining metadata names, matching libmysql and Classic Protocol results. (Bug #39667008)

  • Fixed an issue relating to concurrent operations during deinitialization of the connection_control component. (Bug #39564040)

  • MySQL REST Service (MRS) is now available as a MySQL Server component, component_mysql_rest_service, enabling HTTPS endpoints without a separate MySQL Router process.

    To install, and confirm it is running, run the following:

            INSTALL COMPONENT 'file://component_mysql_rest_service';
            SELECT mysql_rest_service_restart();
            SHOW GLOBAL STATUS LIKE 'mysql_rest_service.state';

    Dynamic global system variables configure the service:

    • mysql_rest_service.http_port: sets the HTTPS port; the default is 33443.

    • mysql_rest_service.ssl_cert: defines the TLS certificate

    • mysql_rest_service.ssl_key: the name of the SSL key file

    • mysql_rest_service.ssl_cipher: the TLS 1.2 cipher list.

    • mysql_rest_service.io_worker_threads: the I/O worker count; zero enables automatic sizing.

    • mysql_rest_service.http_max_connections: the HTTP connection limit; the default is 1024.

    • mysql_rest_service.http_max_request_body_size: the request body size limit. Default is 16MiB.

    • mysql_rest_service.http_max_response_body_size: the response body size limit. Default is 16MiB.

    The following status variables provide observability:

    • mysql_rest_service.current_http_port: the active port number.

    • mysql_rest_service.current_tls_cert: current value of mysql_rest_service.ssl_cert system variable

    • mysql_rest_service.current_tls_key: current value of mysql_rest_service.ssl_key system variable

    • mysql_rest_service.current_tls_cipher: current value of mysql_rest_service.ssl_cipher system variable

    • mysql_rest_service.current_io_worker_threads: the number of active IO worker threads

    • mysql_rest_service.state: one of the following values:

      • STOPPED: The component is loaded and the MRS backend is not running.

      • STARTING: Backend startup is in progress.

      • WAITING_FOR_METADATA: Startup is waiting for required MRS metadata and will retry.

      • READY: The embedded MRS backend and HTTP listener are running.

      • STOPPING: Backend startup cancellation or runtime shutdown is in progress.

      • ERROR: Backend startup failed irrecoverably or a running backend terminated unexpectedly. See the MySQL Server error log.

    The following UDFs enable you to manage the MRS:

    • mysql_rest_service_start(): Starts the REST Service backend, asynchronously.

    • mysql_rest_service_stop(): Stops the REST Service backend, synchronously.

    • mysql_rest_service_restart(): Restarts the REST Service backend, asynchronously.

    Note

    Each UDF requires the MYSQL_REST_SERVICE_ADMIN privilege.

    (WL #17018, WL #17019)

  • The Health Monitor, formerly only available on MySQL HeatWave, is now available in MySQL Community Edition.

    Linux provides the complete metric set, macOS supports basic memory, filesystem, and CPU collection, and Windows is not supported in this release. Unavailable metrics appear as SQL NULL in the corresponding Performance Schema columns.

    See Health Monitor Component for more information. (WL #15292, WL #17324, WL #17325, WL #17327, WL #17334)

Connection Management Notes

  • Fixed an issue relating to failed-authentication tracking and delays by the connection_control component. (Bug #39564049)

Deprecation and Removal Notes

  • Important Change: MySQL no longer supports OpenSSL versions older than 1.1.1. Build checks, packaging requirements, help text, and version guards now enforce the new minimum. (Bug #39546984)

Firewall Notes

  • Microsoft Windows: An upgrade could fail if the Firewall component was installed on the source version. The upgrade incorrectly selected the Firewall plugin's stored procedure upgrade path. (Bug #39735395, Bug #120932)

InnoDB Notes

  • InnoDB: A previous InnoDB deadlock fix made row-size estimates more accurate for B-tree operations, but also made CREATE TABLE and ALTER TABLE validation stricter. As a result, some table definitions accepted by earlier MySQL LTS releases were unexpectedly rejected or produced warnings, disrupting existing applications.

    As of this release, the legacy validation behavior is preserved for most DDL operations while retaining the accurate estimate where it is needed to prevent B-tree deadlocks. ALTER TABLE ... ALGORITHM=INSTANT continues to use the stricter calculation to safely handle large default values.

    Our thanks to Paweł Olchawa and the team at Percona, and Meng-Hsiu Chiang and the team at Amazon for their contribution. (Bug #120323, Bug #39249507)

    References: See also: Bug #39129182.

  • When the external MeCab parser failed during deferred FULLTEXT tokenization, a base row could be committed without complete token postings, causing searches to miss the row. Parser failures now produce a client warning, including for autocommit statements. Errors were returned similar to the following:

    Mecab: parse() failed: too long sentence..

    (Bug #39838534)

  • The error log now reports warnings when the history-list length crosses innodb_max_purge_lag and when purge lag begins delaying DML. Existing purge-lag configuration controls the behavior; no new system variables were added.

    Our thanks to Tony Chen and the team at Amazon for the contribution. (Bug #39742241, Bug #120529)

  • After an exported table was modified, its tablespace discarded, and an older exported image imported, point lookups could return rows or values from the discarded tablespace generation. Stale Adaptive Hash Index entries are now treated as misses so lookups fall back to normal B-tree traversal. (Bug #39661793)

  • After ALTER TABLE ... IMPORT TABLESPACE failed, stale pages from the discarded tablespace could later trigger an assertion during eviction. Failed-import cleanup now preserves the index space identifier required to remove stale Adaptive Hash Index entries. Errors were returned similar to the following:

    [ERROR] [MY-013183] [InnoDB] Assertion failure: btr0sea.cc:1082:block->page.id.space() == index->space

    (Bug #39661792)

  • Fixed an issue relating to null input supplied to the InnoDB redo-log consumer UDF. (Bug #39632565)

    References: See also: Bug #34085310, Bug #36004840.

  • Fixed an issue relating to SHOW CREATE output for short non-SQL stored-program or library bodies. (Bug #39361183)

  • Fixed an issue relating to validation of index pages during transportable tablespace import. (Bug #39295605)

  • Fixed an issue relating to parser nesting for InnoDB full-text Boolean Mode expressions. (Bug #39234789)

  • Fixed an issue relating to concurrent COPY ALTER operations.

    Our thanks to George Ma and the team at Alibaba for the contribution. (Bug #39134921)

  • Fixed an issue relating to renaming columns used by self-referencing InnoDB foreign keys. (Bug #39091341)

  • In debug builds, concurrent foreign-key operations with the adaptive hash index enabled could trigger an index-lifetime assertion. InnoDB now protects the referenced table throughout the foreign-key check. Errors were returned similar to the following:

    Assertion failure: btr0sea.cc:1070:block_held_in_private || index_cant_be_freed

    (Bug #37746147)

  • After the final redo-recovery batch, InnoDB could write and evict every page loaded into the buffer pool, increasing recovery time and causing later rereads. It now writes and evicts only pages with buffered changes and sorts the flush lists. (Bug #37296558)

  • High-concurrency READ COMMITTED workloads could perform poorly on NUMA systems because repeatedly closing read views acquired a global mutex and copied the active transaction set. Read-view objects can now be reused without taking that mutex solely for closure.

    Our thanks to Bin Wang of ChinaMobile for the contribution. (Bug #37050908, Bug #116005)

  • During InnoDB recovery, an MLOG_FILE_EXTEND record for a tablespace that could not be opened could be treated as incomplete and then skipped. Recovery now tracks missing tablespaces correctly and treats non-skippable open failures as fatal. (Bug #34575037)

  • Rebuilding an InnoDB table with ALGORITHM=INPLACE could produce a substantially larger .ibd file than ALGORITHM=COPY. Page-allocation hints now help fill newly assigned extents. On older affected releases, setting innodb_segment_reserve_factor to 0.03 can reduce file growth. (Bug #27362028, Bug #89158)

  • If InnoDB page reorganization produced a size mismatch, InnoDB could continue using the reorganized page without recording the corresponding redo. A later insert followed by a server crash could consequently cause recovery failure or page corruption. The mismatch is now treated as fatal rather than allowing inconsistent redo state to continue. (Bug #116574, Bug #37258813)

  • InnoDB now caches parsed index metadata per thread while parsing redo logs rather than repeatedly allocating and reconstructing temporary objects. This improves redo parsing and Read Replica Applier performance without changing SQL syntax, interfaces, or file formats.

    Our thanks to Alex Xing for the contribution. (Bug #106768, Bug #33975600, WL #17287)

  • The uncompressed externally stored InnoDB LOB prefix-copy path could read beyond the remaining destination-buffer capacity after an inline prefix had already been copied. The external read now accounts for the copied prefix length. (Bug #104884, Bug #33340548)

JSON Duality Views

  • JSON Relational Duality Views now support table- and column-level CHECK and NO CHECK annotations for ETAG participation, and column-level UPDATE and NO UPDATE annotations for field mutability. CHECK is the table-level default, and columns inherit table settings unless explicitly overridden. Modifying a NO CHECK field does not change the ETAG, and primary-key columns cannot be marked UPDATE. For example:

            JSON_DUALITY_OBJECT(
              WITH (UPDATE, CHECK)
              "status": status WITH (NO UPDATE, NO CHECK)
            )

    DML rejects missing values having an effective CHECK annotation and modifications to NO UPDATE fields. JSON_DUALITY_VIEW_COLUMNS exposes effective settings through ALLOW_CHECK and ALLOW_UPDATE. SHOW CREATE VIEW, mysqldump, and replication preserve the annotations; dumps use /*!261000 ... */ comments so older servers restore views using their own semantics. Replicas must be upgraded before a source replicates DDL containing the new syntax. (WL #17054)

Logging Notes

  • Microsoft Windows: Failure to open a new error log could close the descriptor owned by an existing stream; retrying with that stream could trigger a CRT assertion and prevent error-log recreation. Delete-pending handles are now redirected to NUL without invalidating the stream, allowing a later retry to recreate the error log. (Bug #32901809)

  • Fixed an issue relating to keyring logging when a log-item lookup fails. (Bug #39658440)

MySQL Programs Notes

  • Fixed an issue relating to mysqldump processing of server-provided table identifiers. (Bug #39905165)

  • Fixed an issue relating to mysqldump validation of server-provided result, identifier, database, and table metadata. (Bug #39832176, Bug #39832186, Bug #39832202)

  • The mysql client's interactive -p input could truncate or mishandle passwords longer than 79 bytes, including token-style credentials, causing authentication failures. Interactive input now accepts longer credentials without requiring them on the command line. Errors were returned similar to the following:

    ERROR 9125 (HY000): An error occurred while validating the access token. 
            Please acquire a new token and retry.

    Using the command-line workaround could also produce:

            mysql: [Warning] Using a password on the command line interface can be insecure.

    Our thanks to Hanchun Liu for the contribution. (Bug #120663, Bug #39621454)

Optimizer Notes

  • Microsoft Windows: Fixed an issue relating to formatting unusually long query identifiers. (Bug #39883066)

  • Fixed an issue relating to column-identifier validation for histogram operations. (Bug #39882926)

  • Fixed an issue relating to argument-length validation for windowed BIT_OR() and BIT_AND(). (Bug #39882731)

  • Fixed an issue relating to range handling during group index skip scans. (Bug #39867741)

  • Fixed an issue relating to privilege checks for join operations. (Bug #39740479)

  • Fixed an issue relating to repeated correlated outer-field references in nested queries. (Bug #39603658)

  • Fixed an issue relating to optimizer handling of IN predicates. (Bug #39603649)

  • Fixed an issue relating to optimization of nested subquery expressions used with IN or NOT IN. (Bug #39603575)

  • Fixed an issue relating to multi-join plans. (Bug #39197517)

  • If explain_json_format_version=2, JSON EXPLAIN output for a WEEDOUT AccessPath did not include an access_type attribute. (Bug #37925474)

  • With the hypergraph optimizer, an ORDER BY on a trailing part of a multi-valued index could add an unnecessary sort even when a single-point range fixed the array key part. Ordered range scans can now use trailing key parts to provide the requested ordering. (Bug #37543247)

  • The hypergraph optimizer could undercount the one-time cost of materializing an IN subquery and select materialization when per-row IN-to-EXISTS lookups were cheaper. Materialized temporary-table costs and sizes are now calculated from the appropriate access path. (Bug #36834773)

  • EXPLAIN FORMAT=TREE now provides the Note 1003 warning containing the transformed query, including for INSERT and REPLACE statements using VALUES. This exposes transformations such as subquery-to-semijoin conversion. (Bug #36784038)

  • EXPLAIN FORMAT=TREE now emits the transformed-query Note 1003 warning available with traditional EXPLAIN, including for INSERT and REPLACE statements using VALUES. Output is similar to:

    Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a` from `test`.`t2` semi join (`test`.`t1`) where (`test`.`t1`.`a` = `test`.`t2`.`a`)

    (Bug #36784038, Bug #115454)

    References: See also: Bug #36784901.

  • optimizer_switch and optimizer_trace accepted values such as o and of as valid flag values. Exact matches are now required. Invalid values return ER_WRONG_VALUE_FOR_VAR and leave the variable unchanged. (Bug #36596561)

  • EXPLAIN FORMAT=JSON could omit used_key_parts for an index_merge access path. Key parts are now collected recursively from index-merge, row-ID intersection, and row-ID union child scans. (Bug #35206957)

  • With the hypergraph optimizer enabled, single-table UPDATE or DELETE statements using ORDER BY and a subquery converted to a hash semijoin or antijoin could modify the wrong rows. An update through a view with CHECK OPTION could also use incorrect rows or fail when required row identifiers were not preserved. (Bug #121038, Bug #39822725)

  • Grouped aggregate queries using GROUP_INDEX_SKIP_SCAN for distinct aggregates followed by a window function could return null or zero aggregate values, duplicate groups, or incorrect row counts. (Bug #119323, Bug #38627346)

  • Queries exposing the same derived-table expression under different output aliases could report both result columns with the later alias even though their values were correct. This affected populated results ordered by RAND() and empty results using the optimizer. The hypergraph optimizer was not affected. (Bug #118729, Bug #38249983, Bug #39734461)

  • Equality index ranges containing an IS NULL key part could lose the NULL_RANGE flag, causing unsuitable records_per_key() statistics to be used when eq_range_index_dive_limit was reached. The flag is now propagated for every applicable equality range so records_in_range() is used.

    Our thanks to Kaiwang Chen and the team at Tencent for the contribution. (Bug #117776, Bug #37743879)

  • Optimizer trace output now includes a test_if_cheaper_ordering object describing how candidate indexes for ORDER BY or GROUP BY were evaluated. Per-index values include is_covering, select_limit, index_scan_cost, rows, chosen, and the rejection cause.

    Our thanks to Tianfeng Li and the team at Tencent for the contribution. (Bug #116355, Bug #37171976)

  • With optimizer_switch set to index_merge_union=off, an index-merge plan for disjunctive conditions could omit a disjunct and return incomplete results. For example, a query expected to return four rows instead returned: Empty set (0.00 sec).

    Our thanks to Kun Qin for the contribution. (Bug #114885, Bug #36584358)

  • On Linux, a RESOURCE_GROUP optimizer hint in a prepared statement was not applied by EXECUTE or subsequent executions. The hint now remains effective across executions without leaking to later statements on the connection.

    Our thanks to Dmitry Lenev and the team from Percona for the contribution. (Bug #112011, Bug #35696738)

  • Iterator-based EXPLAIN output now reports partitions selected after explicit PARTITION(...) restrictions and optimizer pruning. EXPLAIN FORMAT=TREE and supported EXPLAIN ANALYZE plans include partition names in operation text, while JSON v2 provides a structured partitions array.

    This information is available for supported InnoDB and NDB base-table accesses and represents the plan-time candidate read set, not partitions physically visited at runtime. Traditional EXPLAIN and JSON v1 are unchanged. (WL #17309)

Packaging Notes

  • The bundled libevent library was upgraded from 2.1.11 to 2.1.13. (Bug #40007263)

  • Installing commercial MySQL packages on EL10 aarch64 could fail because client programs and manual pages conflicted with files supplied by mariadb11.8. Package metadata now declares additional obsoletes to resolve these conflicts. Errors were returned similar to the following:

    Error: Transaction test error:
      file /usr/bin/mysql conflicts between attempted installs of mariadb11.8 and 
      mysql-commercial-client

    (Bug #39758376)

  • The bundled TIRPC library was upgraded to version 1.3.7. (Bug #39703871)

  • The bundled OpenTelemetry dependencies were upgraded from opentelemetry-cpp 1.23.0 to 1.27.0 and from opentelemetry-proto 1.7.0 to 1.10.0. (Bug #39491307)

  • Rebuilding MySQL source RPMs on minimal EL8 or EL9 systems could fail because required dependencies were omitted from mysql.spec.in.

    Our thanks to Simon Mudd for the contribution. (Bug #120895, Bug #39894524)

Performance Schema Notes

  • The component-facing psi_thread.h header now uses psi_thread_v7. PSI_THREAD_VERSION values 4 through 6 are deprecated for plugins. (Bug #39802197)

  • After an asynchronous replica restarted, its I/O and SQL threads could appear in INFORMATION_SCHEMA.PROCESSLIST but remain absent from performance_schema.processlist until replication was stopped and restarted. Foreground system threads with process-list IDs are now retained, and an empty user name is represented as system user. (Bug #36042255, Bug #113202)

Plugin Notes

  • As of this release, authentication_webauthn server plugin is now available in MySQL Community Edition, enabling FIDO-device authentication for multifactor and passwordless access. Community source and server packages include the plugin and applicable dependencies.

    See WebAuthn Pluggable Authentication for more information. (WL #17342)

Replication Notes

  • With Change Stream Applier enabled, performance_schema.threads could report a PROCESSLIST_ID for the replica SQL thread that differed from INFORMATION_SCHEMA.PROCESSLIST. The identifier now remains stable during CSA session creation. (Bug #39933596)

  • Fixed an issue relating to Group Replication message-decoding limits. (Bug #39905199)

  • Fixed an issue relating to sender validation for Group Replication messages. (Bug #39851456)

  • Fixed an issue relating to Group Replication UDF lifecycle handling during plugin unloading. (Bug #39838541)

  • Fixed an issue relating to Group Replication recovery-state validation. (Bug #39832216)

  • Under certain circumstances, after recovery from a network partition, a group could lose quorum and remain in a reconnection loop that blocked writes after networking stabilized. Connection delegation now uses a single nonblocking publication attempt, allowing normal reconnection handling to retry. Errors were returned similar to the following:

    MY-013781: "Error sending connection delegation command"

    (Bug #39767762)

  • Fixed an issue relating to error handling while mysqlbinlog rewrites events. (Bug #39659682)

  • Fixed an issue relating to Group Replication peer-address handling. (Bug #39654054)

  • Fixed an issue relating to validation by asynchronous_connection_failover_add_managed(). (Bug #39603374)

  • The GTID for an XA COMMIT or XA ROLLBACK could become visible before XA RECOVER stopped listing the completed XID. XA RECOVER now hides the finalized transaction before the GTID is externalized. (Bug #36505659)

  • After XA PREPARE made its GTID visible in gtid_executed, XA RECOVER could still omit the prepared XID. The XID is now made visible before the GTID state is updated, so waiting for the GTID guarantees that another session can observe the prepared transaction. (Bug #35872823)

  • Replaying a CTAS binary log through mysqlbinlog into a server with binary logging disabled could fail instead of restoring the logged tables and rows because an additional transaction produced an invalid transaction boundary. Parser-started CTAS transactions are now suppressed for binlog-applier threads.

    Our thanks to Venkatesh Duggirala and the team at Google for the contribution. (Bug #120757, Bug #39743645)

  • On a binlogless replica using relay-log recovery, parallel replication, and commit-order preservation, replicated FLUSH PRIVILEGES statements could leave gaps in mysql.gtid_executed. After restart, the replica could request already-applied transactions, resulting in duplicate errors or failure when the source had purged the required binary logs. Errors were returned similar to the following:

    Cannot replicate because the source purged required binary logs. 
    Replicate the missing transactions from elsewhere, or provision a new replica from backup

    (Bug #115613, Bug #36849620)

  • With the MySQL communication stack, multiple members on one multihomed host could fail to join when they used different IP addresses but the same SQL port. Local members are now identified by their configured endpoint rather than all local interfaces. The XCom stack still requires distinct localAddress ports. Errors were returned similar to the following:

    [ERROR] [MY-011735] [Repl] Plugin group_replication reported: 
    '[GCS] Error connecting to all peers. Member join failed. Local port: 3306'
    [ERROR] [MY-011735] [Repl] Plugin group_replication reported: 
    '[GCS] The member was unable to join the group. Local port: 3306'

    (Bug #110773, Bug #36055146)

  • After a replica worker applied a rewritten statement, SHOW PROCESSLIST and performance_schema.threads could continue displaying the completed statement while the worker was idle. Query-event cleanup now clears the displayed state.

    Our thanks to Marcelo Altmann for the contribution. (Bug #99200, Bug #31140932)

Security Notes

  • Fixed an issue relating to server-supplied RSA public-key handling during client-side SHA-2 authentication. (Bug #39883040)

  • Fixed an issue relating to runtime key-type validation by keyring UDFs. (Bug #39838747)

  • Fixed an issue relating to client parsing of WebAuthn assertion challenge packets. (Bug #39740347)

  • Fixed an issue relating to resource cleanup during Enterprise Encryption digest-function initialization. (Bug #39665448)

  • Fixed an issue relating to nullable input supplied to keyring_key_generate(). (Bug #39633350)

  • Fixed an issue relating to nullable numeric arguments supplied to audit_api_message_emit_udf(). (Bug #39633136)

SQL Syntax Notes

  • ALTER TABLE ... EXCHANGE PARTITION could move rows that violated the destination table's CHECK constraints or exchange tables whose generated columns used different expressions. Rows are now checked in both directions, including when WITHOUT VALIDATION skips partition-bound checks, and mismatched generated-column definitions are rejected. Errors were returned similar to the following:

    ERROR 3819 (HY000): Check constraint 't_swap_chk_1' is violated.

    (Bug #120206, Bug #39634208)

X Plugin Notes

  • Fixed an issue relating to arguments supplied to MySQL X Plugin UDFs. (Bug #39839185)

Functionality Added or Changed

  • Important Change: MySQL Server now supports a four-part release identity in the form MAJOR.MINOR.PATCH.UPDATE, with an empty update component represented as zero. The complete version is available through VERSION_WITH_UPDATE(), the read-only global version_with_update variable, mysqld --version-with-update, and new client-library APIs:

            SELECT VERSION_WITH_UPDATE();
            SELECT @@version_with_update;
    mysqld --version-with-update

    Existing interfaces, including VERSION(), version, the classic handshake, numeric version IDs, and existing C APIs, retain three-part compatibility semantics. mysql_upgrade_history records exact update transitions without changing upgrade compatibility decisions.

    See mysql_upgrade_history File for more information. (Bug #40013285, WL #17318)

  • The command-service option MYSQL_COMMAND_BYPASS_MAX_CONNECTIONS can now be set before connection. Its default of true preserves administrative admission; setting it to false makes an embedded session subject to max_connections without using the reserved extra slot. (Bug #39980933)

  • The mysql_thd_attributes service now exposes a read-only is_substatement Boolean, enabling components to distinguish top-level statements from stored-function and trigger execution. (Bug #39980910)

Bugs Fixed

  • Microsoft Windows: Fixed an issue relating to client console output handling. (Bug #39472263)

  • During connection handshakes, clients could retain capability flags unsupported by the server and assume that unavailable features had been negotiated. (Bug #40022563)

  • For encrypted X Protocol connections, the Tls_key_exchange_algorithm and Tls_sign_algorithm session status variables could remain empty despite an active TLS session. (Bug #39980717)

  • Fixed an issue relating to CDATA validation by LOAD XML. (Bug #39938954)

  • Fixed an issue relating to stack-depth handling for nested ROW expressions during statement preparation. (Bug #39925442)

  • Fixed an issue relating to account host matching. (Bug #39911722)

  • Fixed an issue relating to stack-depth handling for deeply nested parenthesized UNION expressions. (Bug #39911701)

  • Fixed an issue relating to parser resource controls for complex statements containing common table expressions. (Bug #39905175)

  • Fixed an issue relating to mysqlbinlog handling of user-variable events. (Bug #39905157)

    References: See also: Bug #29028491.

  • Fixed an issue relating to path restrictions during component loading. (Bug #39905086)

  • Fixed an issue relating to XML value parsing. (Bug #39905057)

  • Fixed an issue relating to validation of binary JSON values. (Bug #39872033)

  • Fixed an issue relating to uninstalling component_telemetry. (Bug #39839041)

  • Fixed an issue relating to argument validation by mysql_query_attribute_string(). (Bug #39838999)

  • When MeCab rejected a document during deferred full-text tokenization, an INSERT or UPDATE could commit without a client warning even though the row received no or only partial FULLTEXT index entries. Clients now receive a warning, and the autocommit OK response includes the updated warning count. The error log could contain output similar to the following:

            [ERROR] [MY-011123] [Server] Mecab: parse() failed: too long sentence..

    (Bug #39838534)

  • Fixed an issue relating to raw remote file handling by mysqlbinlog. (Bug #39832258)

    References: See also: Bug #39068649.

  • Fixed an issue relating to multifactor-authentication request handling in the client library. (Bug #39832236)

  • Fixed an issue relating to binary log row-event processing. (Bug #39784720)

  • Fixed an issue relating to client-library validation of temporal values in prepared-statement result rows. (Bug #39740351)

  • Fixed an issue relating to InnoDB full-text cache monitoring. (Bug #39729888)

  • Fixed an issue relating to argument evaluation by ST_BUFFER_STRATEGY(). (Bug #39679888)

  • Fixed an issue relating to WebAuthn client assertion generation. (Bug #39665344)

  • Fixed an issue relating to memory handling during server initialization. (Bug #39659472)

  • Fixed an issue relating to validation of clone storage locators. (Bug #39633821)

  • Fixed an issue relating to spatial data conversion. (Bug #39616304)

  • Fixed an issue relating to stack use during JSON path evaluation. (Bug #39616228)

    References: See also: Bug #23106330.

  • Fixed an issue relating to client authentication packet validation. (Bug #39603366)

  • Fixed an issue relating to replication protocol packet validation. (Bug #39603354)

  • Fixed an issue relating to Classic Protocol temporal-value validation. (Bug #39603337, Bug #39603346)

  • Fixed an issue relating to updates of InnoDB tables containing many indexed virtual columns. (Bug #39593341)

  • Fixed an issue relating to client/server capability negotiation. (Bug #39539681)

  • Fixed an issue relating to InnoDB online DDL conversion handling.

    Our thanks to George Ma and the team at Alibaba for the contribution. (Bug #39362553)

  • GROUP_CONCAT() with ORDER BY could trigger a debug assertion when later input rows contained NULL argument values. Errors were returned similar to the following:

    mysqld-debug: ./sql/field.cc:5428: virtual String* Field_time::val_str(String*, String*) 
    const: Assertion `!is_null()' failed.

    (Bug #39280089)

  • Fixed an issue relating to replication sender reconnect handling. (Bug #39254877)

  • Fixed an issue relating to InnoDB index construction. (Bug #39193436)

  • Fixed an issue relating to IndexMerge query processing. (Bug #39147848)

  • Fixed an issue relating to InnoDB foreign-key rollback handling. (Bug #39147834)

  • Fixed an issue relating to InnoDB memory allocation calculations.

    Our thanks to Hongyu Qiao and the team at Tencent for the contribution. (Bug #39123849)

  • Fixed an issue relating to duplicate-key reporting during parallel InnoDB DDL. (Bug #38987922)

  • Fixed an issue relating to memory use and cancellation handling for JSON_ARRAYAGG() workloads. (Bug #38973857)

  • After a global privilege was granted and partially revoked for a schema, a subsequent GRANT for the same account could fail with ERROR 3901. Errors were returned similar to the following:

    ERROR 3901 (HY000): 'GRANT' privilege for database 'sys' exists both 
            as partial revoke and mysql.db simultaneously. It could mean that the 
            'mysql' schema is corrupted.

    (Bug #38921524)

  • Fixed an issue relating to corruption handling by ibd2sdi. (Bug #38810796)

  • Fixed an issue relating to InnoDB rollback for full-text indexed tables. (Bug #38547442)

  • Fixed an issue relating to table-rebuild DDL processing. (Bug #38305379)

  • Large JSON_ARRAYAGG() window frames could become progressively slower and remain in the executing state after KILL QUERY. Materialization now avoids unnecessary JSON-value copying, and buffered processing responds promptly to cancellation. (Bug #37878680)

    References: See also: Bug #38973857.

  • Fixed an issue relating to InnoDB tablespace import after crash recovery.

    Our thanks to Chong Lee and the team at Alibaba for the contribution. (Bug #37380231)

  • Fixed an issue relating to InnoDB reads using older transaction views after tablespace import. (Bug #36999166)

  • In servers built with Debug Sync, an unset debug_sync_timeout could cause some debug actions to assert or abort instead of being ignored. A zero timeout now consistently disables Debug Sync.

    Our thanks to Kamil Holubicki and the team at Percona for the contribution. (Bug #35776658, Bug #112259)

  • Fixed an issue relating to ROLLUP query execution. (Bug #35763384)