These release notes were created with the assistance of MySQL HeatWave GenAI.
The LDAP SASL authentication plugin could not be installed successfully when the Option Tracker component was already installed. (Bug #37983282)
-
Important Change:
IFNULL()
used in aLIKE
clause raisedER_CANT_AGGREGATE_2COLLATIONS
. This was due to the fact thatIFNULL()
returns a binary collation and the collation derivationNONE
, butNONE
was not allowed in this context, leading to the error.We solve this problem by making a slight change in semantics such that we lower the strength of collation derivation
NONE
to be less than the strength of any other collation derivation. This means that, when an expression with derivationNONE
is used, the other operand determines the comparison collation to be used byLIKE
. This should have minimal impact on existing functionality, and has required no changes in our existing test suite.We also change collation aggregation to consider only collations with the same (and highest) strength when determining the result collation. We also rename the previous
IGNORABLE
derivation toNULL
, since it is used only for nulls, and since it is no longer ignorable given thatNONE
now has lesser strength.In addition, we leave a gap in the strength values for the former
NONE
strength, in order that as fewCOERCIBILITY()
calls as possible return values that are incompatible with the previous implementation.See Collation Coercibility in Expressions, for more information. (Bug #37285902)
CREATE TABLE
with a generated column expression, such as aCHECK
constraint, which referenced a non-ASCII identifier caused a syntax error if the current client character set was not compatible with UTF-8 (for example, GBK). (Bug #30453221)
Group Replication: Defining
TASK_EVENT_TRACE
ingcs_profile.in
broke the build of GCS/XCOM in MySQL Server's Group Replication GCS component, returning errors similar to member reference type 'connection_descriptor *' is a pointer; did you mean to use '->'?. (Bug #38042851)macOS: It is now possible to compile the server on MacOS using
-DWITH_KERBEROS
.macOS: Aligned the buffer used for reading status variables. This fixes a potential issue with MacOS/M1 platforms.
Upgraded the bundled
libcurl
library to version 8.14.1. (Bug #38042758)MySQL Server now supports CMake 4, ensuring compatibility with future CMake versions where support for versions prior to 3.10 is expected to be discontinued. (Bug #38027636)
Use
-DWITH_PROTOBUF=system
for relevant.proto
files, which can reduce build times. (Bug #38022751)Removed a warning in
gcs_xcom_networking.cc
. (Bug #38021787)The system
bzip2
library is now located bycmake
before linking with-lbz2
. (Bug #38005363)-
MySQL Server now requires GCC version 11 or later to compile.
As part of this change, support for ARM systems using RHEL7 is removed in this release, due to the lack of availability of GCC 11 on that platform. (Bug #38004285)
-
Removed workaround for old versions of CMake.
NoteThe minimum version of CMake supported for building MySQL is 3.14.6.
(Bug #37901122)
The included ICU library has been upgraded to version 77-1. (Bug #37870791)
The included
zstd
library has been upgraded to version 1.5.7. (Bug #37869972)Warnings raised by Clang 20 for non-trivially copyable types, deprecated literal operators, and incorrect
main
function declarations are no longer generated. (Bug #37785251)Removed warnings observed when compiling the server with Clang 20. (Bug #37785251)
Disabled
clang::musttail
when building with GCC 15. (Bug #37776018)Worked around an issue with list handling in certain older versions of CMake. (Bug #37709169)
Some compiler features tests did not pass when building with
-fprofile-use
. (Bug #37707556)On RHEL 9, MySQL Server is now built using GCC 14. (Bug #37702396)
The version of Boost needed to build MySQL has been raised from 1.85.0 to 1.87.0. (Bug #37403602)
The linker tried to use the empty Cmake variable
${ICU_LIBRARIES}
, even though the correct library (ext::icu
) was already linked elsewhere. (Bug #36524167)Compiling on macOS looked explicitly for
openssl@1.1
but now looks for the genericopenssl
symlink instead, to allow foropenssl@3
. (Bug #35468370)On MacOS, silenced deprecation warnings generated by Xcode 14; this includes suggestions to use
snprintf(3)
instead ofsprintf(3)
, and warnings about possible loss of precision when converting from 64-bit to 32-bit integers. (Bug #34776172)
-
When a UDF registered by a component is running, it cannot be unregistered, and so the component cannot be uninstalled (
UNINSTALL COMPONENT
is rejected with an error). When the component was uninstalled twice while the UDF was running, the first attempt failed (as expected), but the second one succeeded, causing the library to be unloaded, leading to issues with the UDF and possibly an unplanned server exit.This occurred because the component's deinitialization function cleared the container of registered UDFs even when it did not succeed, so the second uninstallation skipped deregistration. We fix this by storing the status of previous registrations in such cases. (Bug #35772996)
-
The MySQL server's dynamic loader has been improved such that, when loading a component, its services are no longer registered until after the component's
init()
method has been called. This has the following implications for component behavior:For developers, it is no longer necessary to perform sanity checks to ensure that needed data structures are present before calling the component's service methods.
For users, components should be more reliable especially in situations where components are loaded and unloaded with great frequency.
See MySQL Components, for more information. (WL #16918)
Microsoft Windows: An in-place upgrade of MySQL Server using MySQL Configurator failed when a Windows service name other than the default had been used. (Bug #37917039)
Microsoft Windows: When upgrading a server from 8.0 to a higher series, MySQL Configurator did not persist custom server settings in the
my.ini
file. (Bug #37481548)Microsoft Windows: When upgrading a MySQL Server using MySQL Configurator, the process hung in the "Starting the server and upgrading system tables" step if a custom error log name was used. (Bug #37463478)
Microsoft Windows: MySQL Configurator allowed additions of duplicate users, such as users defined with the same user name and host name, and then created them as different users on the server. With this fix, in GUI mode, a duplicate user is rejected with an error message, and in CLI mode, a duplicate user specified with
--add-user
is ignored. (Bug #37460190)Microsoft Windows: When used in CLI mode, MySQL Configurator now accepts a file path for the environment variable
MYSQL_PWD
, allowing the password to be specified in a file. (Bug #37460173)Microsoft Windows: When used in CLI mode, MySQL Configurator always rejected a root password shorter than 4 characters in length. With this fix, the restriction applies only for new configurations. In addition, the password option is no longer mandatory except for new configurations. (Bug #37460061)
-
Microsoft Windows: As MySQL Enterprise Edition 9.4.0 includes a new The MySQL Enterprise Firewall Component), intended to be a replacement for the now deprecated MySQL Enterprise Firewall plugin, the MySQL Configurator now supports enabling the firewall component and upgrading to it from the firewall plugin:
For new server configurations: Users can choose to enable the new firewall component.
For server reconfigurations: Users can choose to disable the firewall, enable the new firewall component (if the firewall was not enabled before), keep the old firewall plugin, or upgrade the firewall plugin to the firewall component.
For server upgrades: If the firewall was enabled on the server before, users can choose to keep the old firewall plugin, or upgrade it to the firewall component.
See MySQL Server Configuration with MySQL Configurator and MySQL Server Configuration with MySQL Configurator for details. (WL #16760)
-
The default value of
back_log
is increased to 10000.See
back_log
for information on Linux configuration parameters which must be set to make MySQL Server resistant to connection bursts. (WL #16888) It is now possible to limit the maximum amount of physical memory used by MySQL Server when determining the default values of configuration variables, using
server_memory
. (WL #16938)
-
As part of ongoing work to transition from MySQL plugins to MySQL components, the API used to write MySQL plugins is now deprecated and subject to removal in a future version of MySQL. This change has the following effects:
The MySQL server's
--early-plugin-load
option is deprecated. Starting the server with this option now raises a deprecation warning.A deprecation warning is now issued whenever a keyring plugin is loaded.
Keyring Components Versus Keyring Plugins, provides a summary of the differences between keyring plugins and keyring components. See also Key Migration Using a Migration Server, for information about migrating from a keyring plugin to a keyring component. (WL #16574)
The system variable
temptable_use_mmap
, deprecated in version 8.0.26, is removed in this version. (WL #16745)The SQL functions
MD5()
andSHA1()
are deprecated as of this release and scheduled for removal in a future release. (WL #16955)
-
Packaging: This release includes a MySQL Enterprise Firewall component (see The MySQL Enterprise Firewall Component) intended to replace the firewall plugin, which is now deprecated and thus subject to removal in a future version of MySQL. The component implements most of the plugin's functionality, with the exception of account profiles, which are deprecated in the plugin and not supported by the component.
If you are not already using MySQL Enterprise Firewall and wish to perform a clean installation of the firewall component, see Installing the MySQL Enterprise Firewall Component. For help with upgrading a current installation of the firewall plugin, see Upgrading to the MySQL Enterprise Firewall Component. Prior to upgrading the firewall plugin to the firewall component, you must convert any account profiles you may be using with the plugin to group profiles; Migrating Account Profiles to Group Profiles; provides assistance with this task.
MySQL Enterprise Firewall is a commercial feature available as part of MySQL Enterprise Edition; see MySQL Enterprise Firewall, for more information. (WL #16570)
Memory management has been improved to prevent potential memory leaks, which could occur in certain error handling scenarios. (Bug #37826893)
The
information_schema.innodb_cmp_per_index
table sometimes returned unknown values for database name and table name under certain conditions, such as when tables and indexes were evicted from the cache. (Bug #37820227)Fixed an issue relating to importing tables. (Bug #37621360)
The default value of
innodb_change_buffer_max_size
has been changed to 5. This update aims to strike a balance between the benefits of change buffering for IO-bound workloads and the potential negative impact on in-memory workloads when a larger portion of the buffer pool is dedicated to change buffering. (WL #16968)
-
macOS: When mysqld was started without
--plugin-dir
, but with--basedir
, where the base directory did not end in a slash character (/
), and mysqld was configured to load thekeyring_file
component, server startup failed with errors. This caused problems for the macOS installer for MySQL, leading it not to set the password for the root account. (Bug #36816216)References: See also: Bug #36398484.
Debian packages for installing MySQL can now be run by users other than root. This helps prevent issues for Debian or Ubuntu systems that require rootless installations. (Bug #37765153)
RPM and Yum repository installation are now supported for Red Hat Enterprise Linux and Oracle Linux 10. (Bug #37592019)
Under heavy memory usage, when attempting to execute a JavaScript stored procedure, the first
context.parse()
call inSP::init()
raised an out-of-memory error. Subsequently, a secondcontext.parse()
call was made asynchronously; this could succeed if other sessions had cleared the memory in the meantime. This meant that an error was reported by the MLE component's error handler, but—since the second call succeeded—MLE returned a status code indicating success. Now in such cases,CALL
is rejected with an out-of-memory error. (Bug #37952656)Upgraded the bundled version of Graal Maven to 24.2.1.0.1. (Bug #37938310)
The included GraalVM and the Truffle library used by the MLE component have been upgraded to versions 23.1.7 and 24.2.1, respectively. (Bug #37833200)
When mysqldump was from a MySQL 9.2.0 or later distribution, mysqldump
--routines
did not work properly with servers from previous versions, because it could not find the Information SchemaLIBRARIES
table. Now in such cases, mysqldump skips this table and does not try to dump it. (Bug #37498680)The MySQL
BIT
type is now supported for use in JavaScript stored routines. For type conversion rules and other information, see JavaScript Stored Program Data Types and Argument Handling. (WL #16885)-
JavaScript programs using the MySQL Multilingual Engine component now supports libraries written in WebAssembly (see
https://webassembly.org/
). Such a library can be created usingCREATE LIBRARY ... LANGUAGE WASM
and the hexadecimal or base64-encoded representation of a compiled WebAssembly program as shown here:CREATE LIBRARY test_lib LANGUAGE WASM AS $$AGFzbQEAAAABFwVgAABgAX8Bf2ACf38Bf2ABfwBgAAF/AwYFAAECAwQEBQFwAQICBQYBAYICg gIGCAF/AUGQiAQLB4sBBwZtZW1vcnkCAAxhZGRfdG9fc3RhdGUAAQpteV9hZGRfaW50AAILX2luaXRpY WxpemUAABlfX2luZGlyZWN0X2Z1bmN0aW9uX3RhYmxlAQAZX2Vtc2NyaXB0ZW5fc3RhY2tfcmVzdG9yZ QADHGVtc2NyaXB0ZW5fc3RhY2tfZ2V0X2N1cnJlbnQABAkHAQBBAQsBAAovBQMAAQsVAEGACEGACCgCA CAAaiIANgIAIAALBwAgACABagsGACAAJAALBAAjAAs=$$;
NoteWe have wrapped the lines of the WebAssembly code in this example for legibility. To reproduce the statement locally, you should remove any linefeeds appearing between the leading and trailing
$$
delimiters.You can compile WebAssembly from code written in C, C++, or any other language that can be built with LLVM (see
https://llvm.org/
), using Emscripten (seehttps://emscripten.org/
) or another compiler toolchain which supports WebAssembly as a target.Once you have created the WebAssembly library, you can import it into a MySQL JavaScript program like this:
mysql> CREATE PROCEDURE test_wasm_lib() LANGUAGE JAVASCRIPT -> USING (test_lib) -> AS $$ -> console.clear() -> console.log("test_lib keys: ", Object.keys(test_lib)) -> $$; Query OK, 1 row affected (0.01 sec)
Calling
test_wasm_lib()
and thenmle_session_state()
produces a list of functions provided by the library, as shown here:mysql> CALL test_wasm_lib(); Query OK, 1 row affected (0.01 sec) mysql> SELECT mle_session_state("stdout"); +---------------------------------------------------+ | mle_session_state("stdout") | +---------------------------------------------------+ | test_lib keys: __indirect_function_table,_emscripten_stack_restore, _initialize,add_to_state,emscripten_stack_get_current,memory, my_add_int | +---------------------------------------------------+ 1 row in set (0.00 sec)
WebAssembly code is parsed during execution of
CREATE LIBRARY
. In the output ofSHOW CREATE LIBRARY
, WebAssembly code is shown as was used in the originalCREATE LIBRARY
statement, as autf8mb4
(base64 encoding) or hexadecimal (binary encoding) string. WebAssembly code is not displayed in theLIBRARY_DEFINITION
column of the Information SchemaLIBRARIES
table.As part of this work, the following objects are implemented in MySQL JavaScript programs:
APIs specific to MySQL (such as using
session
orml
) are not supported in WebAssembly libraries. The WASI API (seehttps://wasi.dev/
) is not currently supported; this means that MySQL WebAssembly libraries cannot make use of system, clock, or I/O calls.WebAssembly libraries are supported as a feature by the MySQL Option Tracker component (MySQL Enterprise Edition—see Option Tracker Supported Components).
For further information and examples, see Using WebAssembly Libraries. (WL #16794, WL #16824, WL #16834, WL #16951)
JavaScript language support provided by the MySQL Multilingual Engine component now conforms to the ECMAScript 2024 Language Specification (ECMA-262, 15th Edition) as shown at
https://262.ecma-international.org/15.0/
. (WL #16887)
-
MySQL now supports JSON duality views, which provide a way to expose data stored in relational tables as JSON documents. Such views can be created, altered, dropped, and viewed using
CREATE JSON DUALITY VIEW
andALTER JSON DUALITY VIEW
(both implemented in this release);DROP VIEW
andSHOW CREATE VIEW
now work with JSON duality views as well as SQL views.For users of MySQL Enterprise Edition, JSON duality views are updatable using
INSERT
,UPDATE
, orDELETE
statements, so that updates of such a view cause corresponding updates on the base table or tables to be performed. Updatable JSON duality views are supported in MySQL Enterprise Edition only.As part of this work, MySQL also now supports an
ETAG()
function which returns a 128-bit hash for each row; this value is shown in aSELECT
from a JSON duality view, as shown here:mysql> SELECT * FROM jdv1; +---------------------------------------------------------------------------------------------------------------------+ | data | +---------------------------------------------------------------------------------------------------------------------+ | {"_id": 1, "key": "base64:type252:bG9uZ19ibG9iX2RhdGE=", "_metadata": {"etag": "0bb9af42e15001173759fba65c7893f6"}} | +---------------------------------------------------------------------------------------------------------------------+
See the description of this function for more information.
You can obtain information about existing JSON duality views from the following Information Schema tables which have been implemented in this release:
JSON_DUALITY_VIEWS
: Provides per-view information about JSON duality views.JSON_DUALITY_VIEW_COLUMNS
: Provides information about columns defined in JSON duality views.JSON_DUALITY_VIEW_LINKS
: Describes parent-child relationships between JSON duality views and their base tables.JSON_DUALITY_VIEW_TABLES
: Provides information about tables referenced by JSON duality views.
In addition, for users of MySQL Enterprise Edition, the JSON duality views feature is supported by the Option Tracker component (see Option Tracker Supported Components).
See JSON Duality Views, for more information and examples. (WL #16616, WL #16617, WL #16618, WL #16619, WL #16623)
MySQL Server now logs the total number of logical CPUs and physical memory accessible to the server in the error log. This information is always logged, regardless of the log verbosity. (WL #16940)
The internal
pfs_get_thread_statement_locker_vc()
function contained debugging code that was inadvertently included in release builds. (Bug #37743667)
The
VECTOR_TO_STRING()
function did not set its output collation correctly. (Bug #37815490)
-
Important Change: Added the mysql client
--commands
option, which enables or disables most mysql client commands.This option is disabled by default. To enable it, start the client with
--commands
or--commands=ON
.For a complete list of all commands affected by this option, and additional information, see mysql Client Options. (WL #16949)
References: See also: Bug #36416568, Bug #38066040.
-
InnoDB: To improve debugging, the
buf_page_t
andbuf_block_t
structure's metadata is now printed to the error log. (Bug #35115629)References: See also: Bug #35115601.
Group Replication: Added the error
ER_GRP_RPL_APPLIER_THD_KILLED
, to distinguish when the applier thread has been terminated using SQL KILL, rather than stopped by an error. (Bug #37764717)-
NDB Replication: It is now possible to divide binary logging for a MySQL Cluster or for individual
NDBCLUSTER
tables into equal portions or “slices” between multiple MySQL servers.For dividing binary logging for an entire cluster into slices, this
NDB
release implements two mysqld startup options. The--ndb-log-row-slice-count
option determines the number of slices, and thus the number of servers sharing binary logging.--ndb-log-row-slice-id
identifies the slice for which this MySQL server is responsible. See the descriptions of these options for more information.Division of binary logging into slices can be performed for a specific
NDB
table by adding rows to thendb_replication
table with appropriate values for thebinlog_row_slice_count
andbinlog_row_slice_id
columns which have been added to this table. If you are upgrading an existing setup, you may need to perform an ALTER TABLE statement, or drop and re-create the table to obtain this functionality. For further information and examples, see Per-table binary log slicing. (WL #15413) Increased the historical 1024-byte limit when printing the current query during signal handling to 1073741824 (1024 * 1024 * 1024). (Bug #37603354)
Binary packages that include
curl
rather than linking to the systemcurl
library have been upgraded to usecurl
8.14.1. (Bug #37389565)
-
Important Note; Group Replication: The Group Communication System (GCS) handles Group Replication communication between members, and keeps track of the group membership and connections between all group members. Membership tracking includes the membership's current and previous two iterations. When a member leaves, the remaining members in the group keep a record of the departing member but stop communicating with it until it returns. For example: The group contains members M1, M2, and M3. M3 leaves the group; M1 and M2 stop communicating with M3. When a new member (M4) joins, it learns the previous iterations of this group's membership and attempts to communicate with all servers, including those from previous iterations (in this case, M3).
In the event that some previous servers were gone and did not return, the new member continuously tried to connect to the missing servers; in some conditions, these ongoing connection attempts could introduce network latency affecting group member communication.
In order to avoid this issue, connections to servers that belong to iterations of the group membership are now stopped after 5 minutes, which should be sufficient time to re-establish valid connections without imposing a continuing impact on group communication. (Bug #37704514)
-
Performance: Redundant conditions in some queries optimized away in MySQL 8.0 were no longer removed in later versions, leading to a significant drop in the performance of such queries. (Bug #117907, Bug #37808260)
References: This issue is a regression of: Bug #30112096.
-
NDB Cluster: Following an upgrade from NDB 8.0 to NDB 8.4, all data nodes in the cluster underwent an unexpected simultaneous restart. This occurred when the transaction coordinator had no scan state, leading to protocol timeout; the resulting misalignment in protocol states caused data nodes to shut down unexpectedly. This is fixed by extending existing handling of an unexpected
SCAN_NEXTREQ
signal to cover the case when the scan is already stateless. (Bug #37994985)References: This issue is a regression of: Bug #37022901.
NDB Cluster: Concurrent
ALTER TABLE
statements could cause delays of up to 100 *TransactionDeadlockDetectionTimeout
before failing with a lock wait timeout when a client held a conflicting row lock, stalling the accompanyingget_commit_count()
call. The retry mechanism has been adjusted to identify locking issues sooner. (Bug #37955025)-
InnoDB: A check whether the table is referenced by a foreign key was performed for every row update, even when it was not required.
The check is no longer performed unless it is required. (Bug #37867653)
InnoDB: The return value from
pthread_setaffinity_np
was not properly interpreted when setting processor affinity for threads during buffer pool creation. As a result, no error was returned even if setting affinity failed. (Bug #37825544)-
InnoDB: When rebuilding a primary key, the server sometimes encountered issues when duplicates were present, potentially leading to the server stopping unexpectedly.
Our thanks to Xizhe Zhang and the team at Alibaba for the contribution. (Bug #37822992)
InnoDB: Fixed an issue relating to dropping columns that were part of an index. (Bug #37726881)
InnoDB: MySQL Community Edition binaries included unnecessary OpenTelemetry symbols, due to unprotected static arrays. (Bug #37689163)
InnoDB: The double write buffer was unnecessarily large. When calculating the number of segments per file, one extra segment was always added, whereas an extra segment should be added only if the number of
Double_write
instances is not divisible by the number ofdblwr
files. (Bug #37684656)InnoDB: Fixed an issue relating to DELETE operations. (Bug #37478594)
InnoDB: Creating a secondary index on a
VARCHAR
column could allocate more memory than configured, with the amount allocated being directly related to the value ofinnodb_ddl_buffer_size
, leading to errors similar to ERROR 1136 (21S01): Column count doesn't match value count at row 1. (Bug #37233273)InnoDB: Fixed an issue relating to indexing spatial datatype columns. (Bug #36682518)
InnoDB: The
temptable
handler did not terminate cleanly during server shutdown, potentially causing the server to terminate unexpectedly. This issue has been addressed by implementing a mechanism to track and properly clean up temptable objects associated with each thread. (Bug #36538081)-
InnoDB: A long semaphore wait crash could occur when a redo log consumer lagged behind after a failed MySQL Enterprise Backup incremental backup, preventing the redo log writer thread from advancing. Error messages were returned similar to the following:
[Warning] [MY-013934] [InnoDB] Redo log writer is waiting for MEB redo log consumer which is currently reading LSN=23335640211468 preventing reclamation of subsequent portion of the redo log. Consider increasing innodb_redo_log_capacity.
(Bug #36330455)
-
InnoDB: Fixed an issue relating to range queries on tables. (Bug #31360522)
References: See also: Bug #38063122.
Partitioning: Truncating a partition was rejected with a duplicate entry error when the partition ID exceeded
INT_MAX
, preventing creation of new partitioned tables. To mitigate this issue, theTable_partition_values_pk
class constructor now usesulonglong
instead ofint
for the object ID. (Bug #35912852)Replication: When using replication in a chain,
CREATE TABLE ... AS SELECT
sometimes resulted in inconsistent entries in the binary log, potentially causing replication to break on downstream servers. Error messages related to this issue included errors resulting from missingSTART TRANSACTION
statements in the log. (Bug #37986380)Replication: Fixed an internal memory management issue in
libs/mysql/binlog/event/event_reader.cpp
. (Bug #37371443)-
Replication: During semisync replication, when the length of the binary log suffix exceeded six digits (
.999999
), so that the next log file became—for example—mysql-bin.1000000
, the replication protocol unexpectedly changed from semisynchronous to asynchronous.Our thanks to Wuhao Cao and Karry Zhang and the team at Alibaba for the contribution. (Bug #115861, Bug #113813, Bug #37024069, Bug #36246779)
Group Replication: The
Gr_empty_consensus_proposals_count
system status variable was not updated as expected. (Bug #37937927)-
Group Replication: In an unstable network environment, a Group Replication InnoDB Cluster with
group_replication_paxos_single_leader=ON
experienced several long-running transactions that became stuck in thewaiting for handler commit
state. As a consequence,group_replication_set_as_primary()
was forced to wait, which in turn blocked other incoming queries and rendered the cluster unwritable.The issue involving long-running transactions stuck in
waiting for handler commit
occurred as follows: During an intermittent network partition, a secondary node incorrectly assumed the leader role due to outdated or inaccurate membership information. This resulted in conflicts in synode number allocation, causing transactions originating from the primary node to remain incomplete.We fix this by making sure that a secondary node always reflect the latest, accurate state before pushing the view message to Paxos. This ensures that outdated or inconsistent membership information does not lead to conflicts in leadership or synode number allocation. (Bug #37764970)
References: See also: Bug #117424, Bug #37237959, Bug #37645674.
-
NDB Cluster APIs: Excluding a
VARCHAR
column from an event definition resulted in an Invalid schema object version error. (Bug #37766391)References: See also: Bug #31848270.
RPM installations on Fedora 24 could not be completed because conflicting packages were pulled from upstream. This fix adds the proper obsoletes to block the conflicting packages. (Bug #37976913)
-
In certain cases,
expr
BETWEEN
(whereexpr
ANDexpr
expr
is a complex expression) led to an assert insql\sql_base.cc
. (Bug #37952274)References: This issue is a regression of: Bug #113506, Bug #36137690.
Some triggers which called stored routines did not always execute correctly. (Bug #37915445)
-
The internal function
transform_table_subquery_to_join_with_derived()
did not restore the current query block properly following invocation, leading to an assert. (Bug #37884336)References: See also: Bug #37832605.
Removed a potential memory leak in
item_cmpfunc.cc
. (Bug #37883669)Using the
HLL()
function (MySQL MySQL HeatWave only) with aCAST()
operation toUNSIGNED
on a column, along with aSTRCMP()
operation and aNULL
in theWHERE
clause, now behaves as expected. Previously, this returned errors similar to Assertion `!null_value || is_nullable()' failed. (Bug #37839325)A view using a CTE which contained a subquery was not always handled correctly. (Bug #37832605)
The server failed to start in a Docker container if component_keyring_encrypted_file or component_keyring_file was enabled and
binlog_encryption
was set toON
, due to issues with accessing the keyring data file. (Bug #37821740)Removed a warning caused by an assertion that set rather than compared a value in
sql/opt_costconstantcache.cc
. (Bug #37814484)Installing Oracle packages for MySQL on an Ubuntu 25.04 system was not possible where MySQL was already installed using the system's APT repositories. (Bug #37804480)
On Fedora 24, Oracle MySQL RPMs could not be installed due to package conflicts when MariaDB was already installed on the system. With this fix, the conflicts are not properly handled to allow MySQL Server to be installed successfully. (Bug #37798784)
-
Improved a previous fix for an issue in which client connections were not always terminated correctly during shutdown. (Bug #37755594)
References: This issue is a regression of: Bug #35854919.
-
Hit an assert in
INTERSECT
when the computed number of chunks exceeded 65535, which can happen if the number of estimated rows is very high, or because theset_operations_buffer_size
system variable is set too low.This fix adds a missing check for this situation. If we need more than 2 chunk file sets, we revert to index temp table based deduplication. To alert the user, this information is presented in a note for the query, and in the optimizer trace.
As part of this fix, the block size used for
set_operations_buffer_size
is increased from 128 to 1024. (Bug #37742092) The Fedora 42 RPM installation packages have been adapted to accommodate the merged
/usr/bin
and/usr/sbin
directories in Fedora 42 and later. (Bug #37737658)Performance of fulltext searches using
InnoDB
, particularly for phrase searches, has been improved. The efficiency ofdoc_id
matching has been enhanced. (Bug #37682648)Queries against the
performance_schema.keyring_keys
table caused issues when thekeyring_okv
plugin (see Using the keyring_okv KMIP Plugin) was installed but not configured correctly. (Bug #37655299)Removed an assertion from
sql/sql_resolver.cc
. (Bug #37601389)A subquery which was part of a condition that had more than one subquery and whose strategy was already finalized as
IN-to-EXISTS
was checked for materialization, leading to problems. The check for materialization was made because one of the other subqueries which was part of the condition had its strategy finalized asMATERIALIZATION
. We address this by adding checks so that only those subqueries which should be materialized are looked into. (Bug #37587388)-
The fix for Bug #30875669 was not actually included in the code for the mysql client when the bug was closed. The changes are now implemented. (Bug #37572191)
References: See also: Bug #30875669.
mysql_secure_installation did not check whether the root passwords had expired, as expected. (Bug #37563088)
An init file having one or more single lines, each containing multiple SQL statements, sometimes gave rise to errors during initialization. (Bug #37559598)
-
Some sequences of
CREATE TABLE
andDROP TABLE
statements were not handled correctly. (Bug #37534068)References: This issue is a regression of: Bug #35721121.
Removed a performance regression introduced by work done in MySQL 9.2.0 on the caching SHA-2 authentication plugin. (Bug #37523469)
UPDATE ... SET ...
could not always be rolled back successfully. (Bug #37489167)Multiple
DEFAULT
column expressions inCREATE TABLE
statements were not always handled correctly. (Bug #37436220)-
Queries having a correlated subquery which performed aggregation were sometimes (incorrectly) rejected with duplicate key errors during execution.
This issue was introduced by a previous fix which removed the restoration of the original reference slice (
set_ref_item_slice(REF_SLICE_SAVED_BASE)
) duringJOIN::cleanup()
execution under the assumption that this was not necessary. As a result, temporary table field references from previous executions were not cleared, leading to attempts to insert duplicate keys into temporary tables triggering the error Can't write; duplicate key in table.We fix this by restoring the original reference slice during cleanup, ensuring that any stale references are discarded. (Bug #37415167)
References: See also: Bug #32141711. This issue is a regression of: Bug #35856247.
On some Windows systems, after installing MySQL Server 9.1 with the MSI installer, the server failed to start. This was because those systems did not have Visual C++ Redistributable v.14.42 or later installed. The MySQL Server MSI installer now checks for that requirement and refuses to start installation unless it is satisfied. (Bug #37365476)
-
Unquoted semicolon characters (
;
) within comments were not always flagged as errors, in spite of the fact that they are not allowed. (Bug #37117875)References: See also: Bug #38063286.
Removed a potential memory leak from the
keyring_aws
plugin. (Bug #36684413)A query using a nested aggregate function which contained a subquery was not always properly handled. (Bug #36421727)
-
When attempting to transform a subquery to a derived table, certain cases were not always considered. (Bug #36421710)
References: This issue is a regression of: Bug #36921175.
Setting
max_join_size
led to improper processing of some nested queries. (Bug #35625769)The transform of a scalar subquery into a join with a derived table where the subquery is in the
SELECT
list and the containing query is implicitly grouped should be allowed, but was rejected when thesubquery_to_derived
optimizer switch was enabled. (Bug #35150438)-
EXPLAIN ANALYZE FORMAT=JSON
did not handle queries with subqueries correctly whenexplain_json_format_version
was equal to1
.Our thanks to Peiyuan Liu and the Tencent team for the contribution. (Bug #117995, Bug #37285902)
It was possible to use
PERSIST
orPERSIST_ONLY
withSET TRANSACTION ISOLATION LEVEL
, even though this should not be allowed, and later caused errors on server restart. Now attempting to do so causes the statement to be rejected withER_GRP_RPL_UNSUPPORTED_TRANS_ISOLATION
. (Bug #115619, Bug #36854635)The query rewrite plugin (see The Rewriter Query Rewrite Plugin) did not work properly when the server was run with
autocommit=OFF
. (Bug #115437, Bug #36784795)MIN()
, when used as a window function, did not ignore nulls as expected. (Bug #113631, Bug #36182490)-
It was possible in a window frame specification using
RANGE
frame units to have anORDER BY
expression containingRAND()
. This broke an invariant in theRANGE
frame specification; that the values be monotonically ascending or descending. We solve this issue by disallowing a non-deterministicORDER BY
expression when combined withRANGE
units; this is now rejected with an error.This also fixes a related issue in which
RANGE
unit comparison failed when computing the frame limits forBETWEEN CURRENT ROW AND
where the row value being compared was unsigned and could be less thanafter_value
FOLLOWINGafter_value
, leading to underflow and a possible incorrect result. In such cases, we now reject the operation with an error.See Window Function Frame Specification, for more information. (Bug #111510, Bug #35521787)