MySQL 8.3 Release Notes
In some cases, calling
audit_log_read(
audit_log_read_bookmark()
) led to an Out of memory
error.
(Bug #35957453)
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 (Without Proxying), for more information. (WL #14056)
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)
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:
A flush can be performed manually, using the
masking_dictionaries_flush()
function which is added in this release.
The component can be configured to flush the memory
periodically, leveraging the Scheduler component, by setting
the new
component_masking.dictionaries_flush_interval_seconds
system variable to an appropriate value.
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 now supported by MySQL Enterprise Edition on Linux, Windows, and MacOS platforms. In previous versions Telemetry was only supported on Linux.
See Telemetry. (WL #15200)
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)
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:
CHANGE REPLICATION SOURCE TO IGNORE_SERVER_IDS = ();
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_kill(): Use
mysql_real_query() or
mysql_query() to execute a
KILL statement instead.
mysql_list_fields(): Use
mysql_real_query() or
mysql_query() to execute
SELECT * FROM
instead.
(This is roughly equivalent to executing the statement in
the mysql client after starting it with
the table LIMIT 0--column-type-info
option.)
The char *def member the
MYSQL_FIELD structure was used by this
function only, and has also been removed.
mysql_list_processes(): Use
mysql_real_query() or
mysql_query() to execute a
SHOW PROCESSLIST statement
instead.
mysql_refresh(): Use
mysql_real_query() or
mysql_query() to execute a
FLUSH statement instead.
Due to the removal of this function, the mysqladmin flush-threads command is also removed.
mysql_reload(): Use
mysql_real_query() or
mysql_query() to execute a
FLUSH PRIVILEGES statement
instead.
mysql_shutdown(): Use
mysql_real_query() or
mysql_query() to execute a
SHUTDOWN statement instead.
mysql_ssl_set(): Use
mysql_options() with the
appropriate options to specify certificate and key files,
encryption ciphers, and so on.
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)
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:
Deprecated_use_i_s_processlist_count
provides a count of the number of references to the
PROCESSLIST table in queries since the
server was last started.
Deprecated_use_i_s_processlist_last_timestamp
stores the time the PROCESSLIST table was
last accessed. This is a timestamp value (number of
microseconds since the Unix Epoch).
(WL #16085)
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)
The hashing algorithm employed yielded poor performance when
using a HASH field to check for uniqueness.
(Bug #109548, Bug #34959356)
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
repo.mysql.com 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:
Manually reinstall the MySQL APT or YUM repository setup package from https://dev.mysql.com/downloads/.
Download the MySQL GnuPG public key and add it your system GPG keyring.
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)
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)
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)
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.
Added the following columns to the
tp_thread_state table:
TIME_OF_ATTACH,
MARKED_STALLED, STATE,
EVENT_COUNT,
ACCUMULATED_EVENT_TIME,
EXEC_COUNT, and
ACCUMULATED_EXEC_TIME
Added the following columns to the
tp_thread_group_state table:
EFFECTIVE_MAX_TRANSACTIONS_LIMIT,
NUM_QUERY_THREADS,
TIME_OF_LAST_THREAD_CREATION,
NUM_CONNECT_HANDLER_THREAD_IN_SLEEP,
THREADS_BOUND_TO_TRANSACTION,
QUERY_THREADS_COUNT, and
TIME_OF_EARLIEST_CON_EXPIRE.
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)
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 https://openssl-library.org/news/openssl-3.0-notes/. (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)
Group Replication:
group_replication_set_as_primary()
now waits for DDL and DCL statements to complete before a new
primary is elected. This includes these statements:
ALTER DATABASE,
ALTER FUNCTION,
ALTER INSTANCE,
ALTER PROCEDURE,
ALTER SERVER,
ALTER TABLESPACE,
ALTER USER,
ALTER VIEW,
CREATE DATABASE,
CREATE FUNCTION,
CREATE PROCEDURE,
CREATE ROLE,
CREATE SERVER,
CREATE SPATIAL REFERENCE SYSTEM,
CREATE TABLESPACE,
CREATE TRIGGER,
CREATE USER,
CREATE VIEW,
DROP DATABASE,
DROP FUNCTION,
DROP PROCEDURE,
DROP ROLE,
DROP SERVER,
DROP SPATIAL REFERENCE SYSTEM,
DROP TABLESPACE,
DROP TRIGGER,
DROP USER,
DROP VIEW,
GRANT,
RENAME TABLE, and
REVOKE.
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)
Important Change; Replication:
When binlog_transaction_dependency_tracking
(deprecated) 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: 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:127.0.0.1 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/group_actions_transaction_controller.cc
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/certifier.cc.
(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 #113668, Bug #35513196, Bug #36198403)
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
access_path.cc.
(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 failed to
initialize properly during server startup, this led to errors in
the server log and sometimes unplanned termination of
mysqld.
(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
hash_join_iterator.cc.
(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, when we know that all table objects are in a proper state. (Bug #35710213, Bug #36030073)
Some HAVING queries did not produce expected
results.
(Bug #35710183)
Removed an assertion in
hash_join_iterator.cc.
(Bug #35703114)
References: This issue is a regression of: Bug #34940000.
Removed an assert in
composite_iterators.cc.
(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/join_optimizer.cc.
(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/comp_err.cc 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/field.cc.
(Bug #112503, Bug #35846221)
Removed an assertion in
sql/sql_resolver.cc.
(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/sql_executor.cc.
(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:
(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)