MySQL 8.3 Release Notes  /  Changes in MySQL 8.3.0 (2024-01-16, Innovation Release)

Changes in MySQL 8.3.0 (2024-01-16, Innovation Release)

Audit Log Notes

Authentication Notes

  • Microsoft Windows: The server-side authentication_ldap_sasl plugin which performs SASL-based LDAP authentication is now supported on Windows platforms. This means that Windows client programs can now use GSSAPI with Kerberos for authentication using the authentication_ldap_sasl_client plugin.

    See SASL-Based LDAP Authentication, for more information. (WL #14056)

Compilation Notes

  • Microsoft Windows: MySQL did not compile correctly using Visual Studio 2022. (Bug #35967676)

  • Improved the -DWITH_ZLIB=system check. (Bug #35968195)

  • The minimum version of Clang required for compiling MySQL was raised from Clang 10 to Clang 12. (Bug #35868054)

  • On macOS, the OpenTelemetry component would not compile with the system protobuf library and instead required the bundled version by using the -DWITH_PROTOBUF=bundled CMake option. (Bug #35821812)

  • Removed compiler warnings relating to code signatures when using XCode 14 or later. (Bug #35818055)

  • On Windows, enabled the __cplusplus macro when compiling with Visual Studio. (Bug #35808500)

  • MySQL now bundles the Boost C++ libraries and has removed support for using local or external sources. Now only the bundled Boost libraries are used when compiling MySQL.

    This change also removes the CMake build options WITH_BOOST, DOWNLOAD_BOOST, and DOWNLOAD_BOOST_TIMEOUT. (Bug #35805629)

  • Removed references to unsupported platforms, such as SUSE 12, EL6, and Ubuntu 16/18.

    Additional changes: added WITH_ZLIB to the WITH_SYSTEM_LIBS CMake option, which was removed from it in MySQL 8.0.30, and set WITH_FIDO to 'none' if all authentication plugins are disabled. (Bug #35795161)

    References: See also: Bug #34015600.

  • Changed the default standard C++ language version needed to compile MySQL from C++17 to C++20. (Bug #35781622)

  • Added alternate OpenSSL system package support on EL8 by passing openssl3-fips to -DWITH_SSL CMake option, which already supported openssl3. Authentication plugins such as LDAP and Kerberos are disabled since they do not support these alternative versions of OpenSSL. (Bug #35638881)

  • On Linux, added mold (version 2 and higher) linker support. This adds a new -DWITH_LD=mold|lld option; by default, this is empty, which causes the standard linker to be used. This option is not supported on Enterprise Linux, which must use the ld linker.

    This change also removes the -DUSE_LD_LLD CMake option in favor of passing in lld to the new option. (Bug #34099162)

  • Enabled "-Wdocumentation" in MYSQL_MAINTAINER_MODE when building with Clang, and corrected the inaccurate documentation comments it revealed. (Bug #31037561)

  • Improved the cycle timer for the s390x architecture.

    Our thanks to Jonathan Albrecht for the contribution. (Bug #112845, Bug #35949958)

  • For compiling on Linux, changed the no-error=deprecated-declarations flag to no-deprecated-declarations for the OpenSSL 3 library.

    Our thanks to karry zhang for the contribution. (Bug #112209, Bug #35755328)

Component Notes

  • The MySQL Enterprise Data Masking and De-Identification component now includes the ability to flush the data on the secondary or replica into memory. This can be done in either of the ways described here:

    For more information, see the descriptions of these items as well as MySQL Enterprise Data Masking and De-Identification. (WL #15738)

  • MySQL Enterprise Edition now supports collecting server metric data in the OpenTelemetry format using the component_telemetry component. This data is then forwarded to a configurable endpoint where it can be used by any OpenTelemetry-compatible system.


    Telemetry metrics are supported by MySQL Enterprise Edition on Linux platforms only.

    See Telemetry. (WL #15200)

Configuration Notes

  • Microsoft Windows: On Windows, the MySQL Configurator option to 'Update the Start menu link' did not function. (Bug #35848493)

  • Microsoft Windows: On Windows, MySQL Configurator can now perform in-place upgrades. For example, MySQL Server 8.3.0 can replace an existing MySQL Server 8.2.0 installation that includes updating and renaming the data directory. (WL #15882)

Deprecation and Removal Notes

  • InnoDB: The --innodb and --skip-innodb server options were deprecated in MySQL 5.6 and have had no effect since that time. These options have now been removed.


    The InnoDB storage engine is always enabled, and it is not possible to disable it.

    (WL #10909)

  • InnoDB: Removed the InnoDB memcached plugin, which was deprecated in MySQL 8.0.22. (WL #15116)

  • Replication: A number of server options and variables relating to MySQL Replication which were deprecated in previous versions of MySQL, have been removed from MySQL 8.3. Attempting to use any of these now causes the server to raise a syntax error. The effected options and variables are listed here:

    • --slave-rows-search-algorithms: The algorithm used by the replication applier to look up table rows when applying updates or deletes is now always HASH_SCAN,INDEX_SCAN, and is no longer configurable by the user.

    • log_bin_use_v1_events: This allowed source servers running MySQL 5.7 and newer to replicate to earlier versions of MySQL which are no longer supported or maintained.

    • --relay-log-info-file, --relay-log-info-repository, --master-info-file, --master-info-repository: The use of files for the applier metadata repository and the connection metadata repository has been superseded by crash-safe tables, and is no longer supported. See Replication Metadata Repositories.

    • transaction_write_set_extraction

    • group_replication_ip_whitelist: Use group_replication_ip_allowlist instead.

    • group_replication_primary_member: No longer needed; check the MEMBER_ROLE column of the Performance Schema replication_group_members table instead.

    (WL #11007, WL #12899, WL #12927, WL #13161, WL #13959, WL #13951, WL #15861)

  • Replication: When global transaction identifiers (GTIDs) are used for replication, transactions that have already been applied are automatically ignored, which means that IGNORE_SERVER_IDS is not compatible with GTID mode; the use of this option together with GTID-based replication was deprecated in MySQL 8.0, and is no longer allowed in MySQL 8.3. If gtid_mode is ON, CHANGE REPLICATION SOURCE TO with a non-empty IGNORE_SERVER_IDS list is now rejected with an error. Likewise, if any existing replication channel was created with a list of server IDs to be ignored, SET gtid_mode=ON is also rejected. Before starting GTID-based replication, check for and clear any ignored server ID lists on the servers involved; you can do this by checking the output from SHOW REPLICA STATUS. In such cases, you can clear the list by issuing CHANGE REPLICATION SOURCE TO with an empty list of server IDs, like this:


    For more information, see CHANGE REPLICATION SOURCE TO Statement, and Restrictions on Replication with GTIDs. (WL #11005)

  • Group Replication: Group Replication recovery no longer uses View_change_log_event for marking changes in group membership in the binary log; instead, when all members of a group are MySQL version 8.3.0 or later, members share compressed recovery metadata, and no such event is logged when a new member joins the group. The recovery metadata includes the GCS view ID, GTID_SET of certified transactions, and certification information.

    As part of this work, the group_replication_view_change_uuid system variable is now deprecated, and you should expect its removal in a future version of MySQL. No replacement or alternative for this variable is planned. (WL #14595)

  • API: The following deprecated C API functions have been removed:

    mysql_shutdown() was deprecated in MySQL 8.0; mysql_set_ssl() was deprecated in MySQL 8.0.35 and MySQL 8.2.0; the remainder of the functions listed were deprecated in MySQL 5.7.11.

    Due to these changes, the MySQL C API library version is raised from 22.1 to 23.0. (Bug #36029117, WL #10911, WL #11092, WL #13448)

  • The compiler now emits a deprecation warning for the mysql_stmt_bind_param() C API function, which was deprecated in MySQL 8.2.0 and superseded by mysql_stmt_bind_named_param(). (Bug #35819974)

  • The --character-set-client-handshake and --old-style-user-limits server options were formerly used for compatibility with very old versions of MySQL which are no longer supported or maintained. Since they no longer serve any useful purpose, both options have been removed. (WL #13221, WL #13229)

  • The FLUSH HOSTS statement, deprecated in MySQL 8.0.23, has been removed. To clear the host cache, truncate the Performance Schema host_cache table or use mysqladmin flush-hosts instead. (WL #14330)

Replication with GTIDs

  • This release extends the format of global transaction identifiers (GTIDs) used in MySQL Replication and Group Replication with tags to enable identification of groups of transactions. This enhancement makes it possible to assign a unique name to the GTIDs of a specific group of transactions. For example, transactions containing data operations can easily be distinguished from those arising from administrative operations simply by comparing their GTIDs.

    The new GTID format is UUID:<TAG>:NUMBER, in which <TAG> is an arbitrary string up to 8 characters long. This is enabled by setting the value of the gtid_next system variable to AUTOMATIC:<TAG>. This tag persists for all transactions originating in the current session (unless changed using SET gtid_next), and is applied at commit time for such transactions, or, when using Group Replication, at certification time. It is also possible to set gtid_next to <UUID>:<TAG>:NUMBER to set the UUID of a single transaction to an arbitrary value, along with assigning it a custom tag. In both cases, the user is responsible for making sure that the tag is unique to a given replication topology.

    The original UUID:NUMBER format for GTIDs continues to be supported unchanged, as implemented in previous versions of MySQL; changes to existing replication setups using GTIDs are not required.

    Setting gtid_next to AUTOMATIC:<TAG> or <UUID>:<TAG>:NUMBER requires a new TRANSACTION_GTID_TAG privilege which is added in this release; this is true both on the originating server as well as for the PRIVILEGE_CHECKS_APPLIER for the replica applier thread. This also means that an administrator can now restrict the use of SET @gtid_next=AUTOMATIC:<TAG> or SET @gtid_next=<UUID>:<TAG>:NUMBER to a desired set of MySQL users or roles so that that only those users related to a given data or operational domain can commit new transactions with assigned tags.

    Interaction with upgrades: When upgrading from a previous version of MySQL to MySQL 8.3, the TRANSACTION_GTID_TAG privilege is granted automatically to any user accounts or roles which already have the BINLOG_ADMIN privilege.

    The built-in functions GTID_SUBSET(), GTID_SUBTRACT(), and WAIT_FOR_EXECUTED_GTID_SET() are compatible with tagged GTIDs.

    For more information, see Changing GTID Mode on Online Servers. See also the descriptions of the gtid_next system variable and the TRANSACTION_GTID_TAG privilege. (WL #15294)


  • When running OPTIMIZE TABLE on a table with a FULLTEXT index, the index was not fully optimized at the expected time, and thus an extra pass was required. (Bug #35502793)

  • This release implements the following two status variables for tracking the use of the deprecated INFORMATION_SCHEMA.PROCESSLIST table:

    (WL #16085)

MySQL Enterprise Notes

  • Data-masking components now support specifying a dedicated schema to store the related internal masking_dictionaries table. Previously, the mysql system schema provided the only storage option. The new component_masking.masking_database read-only variable enables setting and persisting an alternative schema name at server startup. (WL #15733)

Optimizer Notes

  • The hashing algorithm employed yielded poor performance when using a HASH field to check for uniqueness. (Bug #109548, Bug #34959356)

Packaging Notes

  • Important Change: The GnuPG build key (A8D3785C) used to sign MySQL downloadable packages has been updated. The previous GnuPG build key (3A79BD29) expired on 2023-12-14. For information about verifying the integrity and authenticity of MySQL downloadable packages using GnuPG signature checking, or to obtain a copy of our public GnuPG build key, see Signature Checking Using GnuPG.

    Due to the GnuPG key update, systems configured to use may report a signature verification error when upgrading to MySQL 8.0.36 and higher or to MySQL 8.3.0 and higher using apt or yum. Use one of the following methods to resolve this issue:

    1. Manually reinstall the MySQL APT or YUM repository setup package from

    2. Download the MySQL GnuPG public key and add it your system GPG keyring.

Performance Schema Notes

  • Executing SELECT * from performance_schema.data_locks on a server under heavy load could cause MySQL to consume too much memory and close unexpectedly.

    As of this release, memory used executing such a query is now instrumented with memory/performance_schema/data_container, enabling you to observe memory consumption. (Bug #35240825)

  • Executing SELECT * from performance_schema.data_locks on a server under heavy load could cause a deadlock in InnoDB. (Bug #35068461)

    References: See also: Bug #35240825.

  • When executing a stored program, the Performance Schema instrumentation caused some unnecessary overhead.

    As of this release, all stored procedure micro instructions (statement/sp/%), except statement/sp/stmt, are disabled by default. (Bug #27934653)

  • The performance of the Performance Schema statement instrumentation has been improved. Specifically, collecting MESSAGE_TEXT data is now more efficient. (Bug #112621, Bug #35916912)

  • Under certain circumstances, under load, the Performance Schema could return the same row twice, despite having a unique key defined. This issue could occur for query digests, user names, host names, and account names (user@host). (Bug #110555, Bug #35239372)

  • Removed a potential issue with performance_schema.table_handles found through code analysis, but never reported by users. (Bug #108501, Bug #34606682)

Pluggable Authentication

  • Beginning with this release, the behavior of the AUTHENTICATION_PAM_LOG environment variable used in debugging the PAM authentication plugin is changed as follows:

    • Setting AUTHENTICATION_PAM_LOG to an arbitrary value (except as noted in the next item) no longer includes passwords in its diagnostic messages.

    • To include passwords in the diagnostic messages, set AUTHENTICATION_PAM_LOG=PAM_LOG_WITH_SECRET_INFO.

    For more information, see PAM Authentication Debugging. (Bug #74313, Bug #20042010)

Thread Pool Notes

  • Added additional thread pool connection information to the MySQL Performance Schema, as follows:

    • Added a tp_connections table, with information about each thread pool connection.



    For more information about these tables, see Performance Schema Thread Pool Tables. For information about the Thread Pool plugin, see MySQL Enterprise Thread Pool. (WL #15515)

Functionality Added or Changed

  • Important Change; Replication: The binlog_transaction_dependency_tracking server system variable was deprecated in MySQL 8.2.0. In preparation for the eventual removal of this variable, its default value is now WRITESET. There are no plans to replace this variable or its functionality, which is expected later to be made internal to the server. (WL #15861)

  • Important Change: For platforms on which OpenSSL libraries are bundled, the linked OpenSSL library for MySQL Server has been updated to version 3.0.12. Issues fixed in OpenSSL version 3.0.12 are described at (Bug #36033684)

  • Performance; NDB Cluster: The NDB binary log injector uses arena allocation. In some cases, when handling schema changes and keeping track of current state of the binary log, the arena for this was forced by changing thread local pointers, thus attempting to try and catch all allocations performed during epoch processing. At the end of the epoch, those pointers were reset, arena memory was released, and the arena structures discarded; this released the memory, but also required setting it up again for the next epoch. The thread local pointer changes also introduced the risk of memory being allocated wrongly when activating functionality in different subsystems. In this release, we make the following improvements to this functionality:

    • Changes to thread local pointers are removed, and replaced by explicit arguments to provide the arena used for allocation during the epoch.

    • Reuse of the arena for next epoch, thus avoiding the need to set it up again.

    These changes are internal only but should provide a noticeable improvememnt by saving on memory release and re-allocation over successive epochs. (WL #15002)


    These are in addition to those statements added in MySQL 8.1 or otherwise already supported in this regard. For more information, including a listing of all such statements supported in MySQL 8.3, see the description of the group_replication_set_as_primary() function, in the MySQL 8.3 Manual. (WL #15752)

  • Replaced some of the bit functions in include/my_bit.h and sql/join_optimizer/bit_utils.h with standard library functions such as std::popcount() and std::has_single_bit() that were added in C++20. Functions replaced include is_single_bit(), my_clear_highest_bit(), my_bit_log2(), my_round_up_to_next_power(), my_bit(), and my_count_bits(), among others. (Bug #35813111)

  • Added the explain_json_format_version system variable to determine the version of the JSON output format used by EXPLAIN FORMAT=JSON statements. 1 (the default) causes Version 1 to be used; this is the same JSON output format used for all such statements in previous versions of MySQL. Setting this variable to 2 causes the server to use the Version 2 format, also introduced in this release, for EXPLAIN FORMAT=JSON output. The Version 2 format is based on access paths, and is intended to provide better compatibility with future versions of the MySQL Optimizer.

    For more information and examples, see Obtaining Execution Plan Information. (WL #15684)

Bugs Fixed

  • Important Change; Replication: When binlog_transaction_dependency_tracking was set to WRITESET or WRITESET_SESSION, while binlog_format was MIXED, dependencies were not tracked for statement parts of a transaction, and were not properly calculated, leading to collisions betweens transactions on MTA replicas.

    Because using the writeset information for conflict detection in this way can lead to false negatives, we now limit the usage of writesets for conflict checks to row-based logging only (binlog_format=ROW). (Bug #35931702)

  • InnoDB: The InnoDB table statistics were not updated by bulk loaded statements. (Bug #35889669)

  • InnoDB: LHS and RHS comparison values were added to their associated error handlers. (Bug #35814266)

  • InnoDB: Improved recv_apply_hashed_log_recs() to better handle the DB_CORRUPT error code. (Bug #35595808)

  • InnoDB: The hash function used by the adaptive hash index (AHI) was improved to increase performance. (Bug #35449386)

  • InnoDB: If change buffer entries are present during startup, a disabled innodb_validate_tablespace_paths option will no longer be enforced and instead the MySQL server will proceed to validate all tablespaces. Otherwise, secondary indexes could end up corrupted. (Bug #35208990)

  • InnoDB: During concurrent DDL and DML operations, DDL could fail if the online log grew too large. Buffer handling was improved to prevent this issue. (Bug #35115601)

  • InnoDB: When clearing an AHI index from all buffer pool pages, the block state would potentially change to BUF_BLOCK_MEMORY before acquiring the block mutex thus causing an unexpected halt. (Bug #35037114)

  • InnoDB: The Innodb_row_lock_current_waits variable could show a non-zero value when there were no row locks.

    Our thanks to Bin Wang for the contribution. (Bug #112532, Bug #35849707)

  • InnoDB: Removed redundant code related to handling FIL_PAGE_LSN during recovery.

    Our thanks to Alexi Xing for the contribution. (Bug #108731, Bug #34687854)

  • Replication: It was possible in some cases when an error occurred while applying an event for the error reported to apply to the previous event rather than to the current one. (Bug #35945223)

  • Replication: Enabling binlog_transaction_compression on the source suppressed ER_RPL_MTA_STATISTICS messages on the replica. (Bug #35923771)

  • Replication: An issue with calculating the current number of bytes used for Log_event events in Performance Schema memory instrumentation made it appear as though the sql/replica_sql thread on the replica grew endlessly and never decreased in size. (Bug #35546877)

  • Replication: Stopping replication while replicating CREATE TABLE AS SELECT caused the server to exit. (Bug #33934013)

  • Group Replication: The memory/group_rpl/Gcs_message_data::m_buffer key in the Performance Schema setup_instruments table sometimes reported negatives values when running in single-primary mode. (Bug #35940509)

  • Group Replication: Following a major outage, when all instances were reachable, rebooting the cluster hung and failed rejoining instances.

    This happened in such cases because the old secondaries retained old credentials to connect to the nodes, leading to a partial connection, in which, when a second server tried to rejoin the group, it was able to contact the primary and send an add_node() command to it, but could not be contacted in turn by the primary. The solution, is to validate that, when receiving an add_node(), we have established bi-directional communication with the new node. (Bug #35763950)

    References: See also: Bug #34898318.

  • Group Replication: Removed a potential memory leak in xcom_tcp_server_startup(). (Bug #35594709)

  • Group Replication: The monitor I/O thread for a managed replication channel (channel with asynchronous connection failover mechanism enabled) might fail for any of several reasons for which the error log entry lacked any root cause and reported only the following: [Warning] [MY-013684] [Repl] The Monitor IO thread failed to detect if the source belongs to the group majority on the source (host: port:3310 network_namespace:) for channel 'read_replica_replication'. (Bug #35082638)

  • Group Replication: A lock instituted by Transaction_monitor_thread::start() in plugin/group_replication/src/group_actions/ was never explicitly released. (Bug #35064211)

  • Group Replication: The timeout set by group_replication_set_as_primary() did not terminate DDL statements. (Bug #35042876)

  • Group Replication: A forced START GROUP_REPLICATION while a replication channel was in an error state could lead to an unplanned server exit. (Bug #34724344)

  • Group Replication: Removed a possible memory leak in plugin/group_replication/src/ (Bug #110518, Bug #35226747)

  • macOS: The secure_file_priv system variable did not always work correctly on Mac OS. (Bug #30274493)

  • Microsoft Windows: Improved exception handing to ensure that the output is correct in debug mode. (Bug #35944853)

  • JSON: Added missing checks for error handling to NULLIF(), COALESCE(), and the shift

    (>>) operator. (Bug #35513196)

    References: See also: Bug #31358416.

  • JSON: JOIN and GROUP BY handled some JSON column values differently. (Bug #101048, Bug #31969607)

  • For building Enterprise Linux 8 RPMs, the build scripts now point to a newer strip command (under /opt/rh/gcc-toolset-12), and they now check that the corresponding dwz tool is available. (Bug #36086236)

  • BIO_get_mem_data() used an incorrect argument type.

    Our thanks to Samuel Chiang for the contribution. (Bug #35950004)

  • Removed an assertion failure at CreateIteratorFromAccessPath() in (Bug #35944739)

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

  • During shutdown, InnoDB purging of threads can sometimes (depending on the volume of data) take a considerable amount of time to complete its work; this could leave users with the impression that the shutdown process had hung. This fix adds adds an externally visible systemd notification indicating that this step is in progress. (Bug #35902058)

  • In some cases, calling a loadable function installed by an improperly initialized plugin caused an unplanned shutdown. (Bug #35889261)

  • When the MYSQL_FIREWALL plugin was configured to use a custom schema, but failed to initialize properly during the server startup, subsequent errors and failures could occur. (Bug #35853298)

  • Some nested queries with GROUP BY were not handled correctly. (Bug #35846402, Bug #35945822)

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

  • The access path for dbug_dump in debug mode used the wrong value.

    Our thanks to Tianfeng Li for the contribution. (Bug #35835858)

  • Equality propagation replaced a non-nullable (primary key) column inside a CAST() with a nullable column without changing the nullability of the CAST expression. (Bug #35829972)

    References: See also: Bug #34898903.

  • MySQL could not be built using -DPROTOBUF_BUILD_SHARED_LIBS=OFF. (Bug #35827217)

  • mysqld -D printed some of its error logging information to stdout. (Bug #35810857, Bug #35830459)

  • Removed an assert in HashJoinIterator::Init(), in (Bug #35789589)

  • Removed an assertion seen when a table value constructor with an ORDER BY clause was used as an IN or EXISTS subquery. (Bug #35785452)

  • In limited cases, passing data to the MD5() encryption function could halt the server. (Bug #35764496)

  • Some subselects from views were not always handled correctly. (Bug #35738548)

  • While performing an operation such as the bulk renaming of many tables, simultaneously executing a data definition statement similar to CREATE TABLE ... SELECT could stop the server unexpectedly. (Bug #35735937)

  • Improved handler state resource allocation. (Bug #35713711)

  • UPDATE HISTOGRAM did not behave as expected in all cases.

    UPDATE HISTOGRAM did not behave as expected in all cases. (Bug #35710404)

  • EXPLAIN ANALYZE did not always produce the expected result. (Bug #35710383)

  • An error occurred during subquery resolution. (Bug #35710373)

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

  • Some row subqueries were not always handled correctly. (Bug #35710218)

  • Refreshing of used table information is now postponed to the start of the next execution, just after tables have been opened, and we know that all table objects are in a proper state. (Bug #35710213)

  • Some HAVING queries did not produce expected results. (Bug #35710183)

  • Removed an assertion in (Bug #35703114)

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

  • Removed an assert in (Bug #35686098)

  • Some recursive CTEs did not function as expected. (Bug #35654240)

  • The combination of INSTALL COMPONENT and SET GLOBAL with a subquery could cause the server to exit. (Bug #35647759)

  • Some queries using OVER (PARTITION ...) were not always executed successfully. (Bug #35627798)

  • Some subqueries with ROLLUP were not always handled correctly. (Bug #35621842, Bug #35804794)

  • When performing EXPLAIN FORMAT=TREE for certain queries, the cost of reading the first row for an Append access path was lower than for the first child input access path, which should not be possible. (Bug #35590128)

  • Removed an assertion in IsBitSet(), in sql/join_optimizer/ (Bug #35590108)

  • Removed the CPACK_COMPONENT_GROUP_INFO_DISPLAY_NAME configuration option from the Windows installation MSI interface. Now the INFO_BIN and INFO_SRC files are always installed. (Bug #35529968)

  • When attempting a subquery-to-derived transformation, an ER_FIELD_IN_GROUPING_NOT_GROUP_BY error was not thrown, even when a field in the projection list was neither part of the GROUP BY, nor was functionally dependent on one. (Bug #35508108)

  • Some queries using windowing functions were not always handled correctly. (Bug #35471471)

  • In debug builds, a case-altered column name could cause the server to exit. (Bug #35449266)

  • MySQL Server installation packages contained two copies of the INFO_SRC file. (Bug #35400142)

  • Setting a user variable inside the argument of a window function, which in turn was evaluated using the window frame buffer, led to an assert. Setting of user variables inside expressions is already deprecated; this fix merely avoids the assert. (Bug #35390341, Bug #36008133)

    References: This issue is a regression of: Bug #32644631, Bug #32802301.

  • Removed an assert in Item_typecast_signed::val_int(). (Bug #35049440)

  • Improved the output from my_print_stacktrace(), which prints the stack trace when MySQL terminates unexpectedly. (Bug #34904177, Bug #36027494)

  • The error message parser in utilities/ did not handle escaped apostrophe characters correctly. (Bug #34637697)

  • After privileges had been granted to a role, revoking from the role a privilege which had not been granted to it explicitly appeared to succeed, and no error or warning was returned. (Bug #34063709)

  • Some SELECT DISTINCT queries were not always handled correctly. (Bug #33725447)

  • Removed an assertion failure in sql/ (Bug #112503, Bug #35846221)

  • Removed an assertion in sql/ (Bug #112498, Bug #35846192)

  • Sme queries having the form SELECT AVG(...) OVER (PARTITION BY ...) were not always handled correctly. (Bug #112460, Bug #35710179, Bug #35845413)

  • Upgrading MySQL using an official MySQL Yum or SUSE repository always enables the MySQL service. Now it enables the service only after installing, and preserves (and does not edit) the existing value while upgrading. (Bug #112382, Bug #35823558)

  • MEM_ROOT::AllocBlock() did not satisfy the condition minimum_length > wanted_length, due to a mismatch between block size and mininum_length. A successful return (false) from ForceNewBlock() is expected to have a new block supporting minimum_length, but this assumption failed when mininum_length was larger; thus AllocBlock() did not conform to its contract.

    This fix is based on a contribution from Kaiwang Chen. (Bug #112304, Bug #35793743)

  • The same query returned different results using the NO_BNL optimizer hint. (Bug #112296, Bug #35788971)

  • In debug builds, using the NTH_VALUE() window function with an empty logical range produced an assertion error. (Bug #111562, Bug #35537311)

  • Ordering a nested block where the ORDER BY contained a window function raised an assert in sql/ (Bug #111306, Bug #34856256, Bug #35471522)

  • Several functions did not have a default data-type assignment for their arguments, which could affect prepared statements by raising an assertion error in debug builds. These default types now are assigned:

    • DOUBLE for format_bytes() and format_pico_time()

    • BIGINT for ps_thread_id()

    (Bug #110677, Bug #35287798)

  • A VALUES statement in a correlated lateral or (other) dependent subquery yielded an incorrect result. (Bug #109252, Bug #110076, Bug #34852090, Bug #35087820)

  • If the argument to a window function contained a subquery, the access path of that subquery was printed twice by EXPLAIN FORMAT=TREE. We fix this by ensuring that we ignore duplicate paths in such cases. (Bug #103609, Bug #32855925)

  • In some cases, selecting from a view leaked a small amount of memory. (Bug #103133, Bug #32764586)

  • A WHERE condition using the IN() operator with a table value constructor returned all rows. An example of an affected query would be SELECT * FROM t1 WHERE a IN (VALUES ROW(5), ROW(55)). (Bug #98268, Bug #30775369)

  • The --wait command-line option did not function with the mysql client. (Bug #31422, Bug #11747227)