MySQL 8.4 Release Notes
These release notes were created with the assistance of HeatWave GenAI.
macOS:
It is now possible to compile the server on MacOS using
-DWITH_KERBEROS
.
Solaris: Clang and GCC now can be used for compiling MySQL on Solaris. (Bug #30562248)
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)
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)
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)
The linker tried to use the empty Cmake variable
${ICU_LIBRARIES}
, even though the correct
library (ext::icu
) was already linked
elsewhere.
(Bug #36524167)
On MacOS, silenced deprecation warnings generated by Xcode 14;
this includes suggestions to use snprintf(3)
instead of sprintf(3)
, and warnings about
possible loss of precision when converting from 64-bit to 32-bit
integers.
(Bug #34776172)
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)
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)
Important Change:
Added the mysql client
--commands
option, which enables
or disables most mysql client commands.
This option is enabled by default. To disable it, start the
client with --commands=OFF
or
--skip-commands
.
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.
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)
Binary packages that include curl
rather than
linking to the system curl
library have been
upgraded to use curl
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 signifcant 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 misalignement 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 accompanying
get_commit_count()
call. The retry mechanism
has been adjusted to identify locking issues sooner.
(Bug #37955025)
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 of dblwr
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 of
innodb_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, the Table_partition_values_pk
class
constructor now uses ulonglong
instead of
int
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 missing
START
TRANSACTION
statements in the log.
(Bug #37986380)
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 for the contribution. (Bug #115861, Bug #37024069)
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 the waiting 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 obsoletions to block the conflicting packages. (Bug #37976913)
Some triggers which called stored routines did not always execute correctly. (Bug #37915445)
A view using a CTE which contained a subquery was not always handled correctly. (Bug #37832605)
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.
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 of doc_id
matching has been enhanced.
(Bug #37682648)
Queries against the
performance_schema.keyring_keys
table caused issues when the keyring_okv
plugin (see Using the keyring_okv KMIP Plugin) was installed
but not configured correctly.
(Bug #37655299)
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.
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
and DROP TABLE
statements were
not handled correctly.
(Bug #37534068)
References: This issue is a regression of: Bug #35721121.
UPDATE ... SET
...
could not always be rolled back successfully.
(Bug #37489167)
Multiple DEFAULT
column expressions in
CREATE 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)
)
during JOIN::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.
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.
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.
With optimizer_switch
set to
subquery_to_derived=on
, some
queries with ROLLUP
were not handled
properly.
(Bug #36314993)
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 the subquery_to_derived
optimizer switch was enabled.
(Bug #35150438)
An error in include/assert_grep.inc
could
lead to erroneous results from any file that included it.
Out thanks to Ke Yu for the contribution. (Bug #116239, Bug #37105430, Bug #37675340)
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)