MySQL 8.0 Release Notes
For general information about upgrades, downgrades, platform support, etc., please visit https://docs.oracle.com/cd/E17952_01/mysql-8.0-relnotes-en/.
Downgrade from MySQL 8.0 to MySQL 5.7 (or from a MySQL 8.0 release to a previous MySQL 8.0 release) is not supported. The only supported alternative is to restore a backup taken before upgrading.
The utf8mb3
character set will be replaced by
utf8mb4
in a future MySQL version. The
utf8
character set is currently an alias for
utf8mb3
, but will at that point become a
reference to utf8mb4
. To avoid ambiguity
about the meaning of utf8
, consider
specifying utf8mb4
explicitly for character
set references instead of utf8
.
(WL #10778)
MySQL source code has been converted to Google style rules using clang-format. (Bug #27414321)
Sun RPC is being removed from glibc
.
CMake now detects and uses
libtirpc
if glibc
does not
contain Sun RPC. (You might find it necessary to install
libtirpc
and rpcgen to
take advantage of this CMake feature.)
(Bug #27368272, Bug #89168)
The minimum version of the Boost library for server builds is now 1.66.0. (Bug #27137349, Bug #88540)
When building from source, the provided CMake
script assumed that JUnit and Ant were installed and available
at set paths. If this was not the case, building the GCS Java
wrapper resulted in build errors. To address this a new
CMake option
WITH_ANT=path_name
has been added
to the build script, and which works in a similar way to the
existing WITH_BOOST
CMake
option. Set
WITH_ANT
to the path of a
directory where the Ant tarball, or an already unpacked archive,
is saved. When WITH_ANT
is not
set, or is set with the special value system
,
the build assumes a binary ant exists in
$PATH
.
Similarly, the CMake
option
ENABLE_DOWNLOADS
already exists to
download required libraries during a build, such as the Google
Test distribution. Now, when
ENABLE_DOWNLOADS
is set, and JUnit
or Ant are not found they are downloaded as part of the build
process.
(Bug #26678793)
A new CMake option,
BUNDLE_RUNTIME_LIBRARIES
, enables
bundling of runtime libraries with server MSI and Zip packages
for Windows.
(Bug #27584796, Bug #89771)
systemd service files now increase
LimitNOFILE
to 10000, to accommodate higher
default settings in MySQL 8.0.
(Bug #27530282)
The new WITH_SYSTEM_LIBS
CMake option, when enabled, selects the
system
value for any of the following options
that are not set explicitly:
WITH_EDITLINE
,
WITH_ICU
,
WITH_LIBEVENT
,
WITH_LZ4
,
WITH_PROTOBUF
,
WITH_SSL
,
WITH_ZLIB
.
(Bug #27356668, Bug #89136)
The version of the compiled-in zlib
library
is now available at runtime as the value of the
version_compile_zlib
system
variable. Thanks to Daniël van Eeden for the patch.
(Bug #27235065, Bug #88825)
Incompatible Change:
These deprecated compatibility SQL modes have been removed:
DB2
, MAXDB
,
MSSQL
, MYSQL323
,
MYSQL40
, ORACLE
,
POSTGRESQL
,
NO_FIELD_OPTIONS
,
NO_KEY_OPTIONS
,
NO_TABLE_OPTIONS
. They can no longer be
assigned to the sql_mode
system variable or
used as permitted values for the mysqldump
--compatible
option.
Removal of MAXDB
means that the
TIMESTAMP
data type for
CREATE TABLE
or
ALTER TABLE
is treated as
TIMESTAMP
, and is no longer
treated as DATETIME
.
For MySQL 5.7 applications that use SQL modes removed in MySQL 8.0, statements may fail when replicated from a MySQL 5.7 master to a MySQL 8.0 slave, or may have different effects on master and slave. To avoid such problems, applications that use modes removed in MySQL 8.0 should be revised to avoid them. (WL #8383, WL #9465)
The following features related to account management have been removed:
Using GRANT
to create users.
Instead, use CREATE USER
.
Following this practice makes the
NO_AUTO_CREATE_USER
SQL
mode immaterial for GRANT
statements, so it too is removed.
Using GRANT
to modify account
properties other than privilege assignments. This includes
authentication, SSL, and resource-limit properties. Instead,
establish such properties at account-creation time with
CREATE USER
or modify them
afterward with ALTER USER
.
IDENTIFIED BY PASSWORD
'
syntax
for hash_string
'CREATE USER
and
GRANT
. Instead, use
IDENTIFIED WITH
for
auth_plugin
AS
'hash_string
'CREATE USER
and
ALTER USER
, where the
'
value is in a format compatible with the named plugin.
hash_string
'
Additionally, because IDENTIFIED BY
PASSWORD
syntax has been removed, the
log_builtin_as_identified_by_password
system variable is superfluous and has been removed.
The PASSWORD()
function.
Additionally, PASSWORD()
removal means that
SET PASSWORD
... =
PASSWORD('
syntax is no longer available.
auth_string
')
The old_passwords
system
variable.
For MySQL 5.7 applications that use features removed in MySQL 8.0, statements may fail when replicated from a MySQL 5.7 master to a MySQL 8.0 slave, or may have different effects on master and slave. To avoid such problems, applications that use features removed in MySQL 8.0 should be revised to avoid them and use alternatives when possible. (Bug #27455708, WL #10774)
perror is more flexible in understanding its
arguments. For example, for the
ER_WRONG_VALUE_FOR_VAR
error,
perror understands any of these arguments:
1231
, 001231
,
MY-1231
, or MY-001231
, or
ER_WRONG_VALUE_FOR_VAR
. If an
error number is in the range where MySQL and operating system
errors overlap, perror displays both error
messages.
(Bug #27462408)
The new INFORMATION_SCHEMA.KEYWORDS
table lists the words considered keywords by MySQL and, for each
one, indicates whether it is reserved. This table provides
applications a runtime source of MySQL keyword information. See
The INFORMATION_SCHEMA KEYWORDS Table.
In addition, if you build MySQL from source, the build process
generates a keyword_list.h
header file
containing a array of keywords and their reserved status. This
file can be found in the sql
directory
under the build directory. This file may be useful for
applications that require a static source for the keyword list.
(WL #8989)
RPM and Debian packages now add the current MySQL series to the
share
directory name (for example
share/mysql-8.0
).
(Bug #27638192, Bug #26990531)
Messages written to the error log now indicate the subsystem in
which the event occurred. Possible subsystem values are
InnoDB
(the InnoDB
storage
engine), Repl
(the replication subsystem),
Server
(otherwise).
(WL #11150)
Installing or upgrading using Debian packages now presents a
dialog with an option for setting the default authentication
plugin to mysql_native_password
. This may be
useful for backward compatibility at some installation sites.
(Bug #27454287, Bug #27667294)
The compile_innodb script is no longer used and has been removed from MySQL distributions. Thanks to Alexey Kopytov for the suggestion. (Bug #27448099, Bug #89437)
A new Performance Schema table
log_status
provides information
that enables an online backup tool to copy the required log
files without locking those resources for the duration of the
copy process. When the log_status
table is queried, the server blocks logging and related
administrative changes for just long enough to populate the
table, then releases the resources. The
log_status
table informs the online
backup which point it should copy up to in the master's binary
log and gtid_executed
record, and the relay
log for each replication channel. It also provides relevant
information for individual storage engines, such as the last log
sequence number (LSN) and the LSN of the last checkpoint taken
for the InnoDB storage engine.
The BACKUP_ADMIN
privilege is required for
access to the log_status
table.
(Bug #27599831, WL #9452)
Performance Schema objects now have a default character set of
utf8mb4
.
(Bug #27407745)
MySQL 8.0 builds now use OpenSSL rather than yaSSL as the default SSL library. MySQL no longer supports building using yaSSL, and source distributions no longer include yaSSL.
The WITH_SSL
CMake option no longer permits
bundled
(use yaSSL) as a valid value, and the
default option value has changed from bundled
to system
(use the version of OpenSSL
installed on the host system).
In place of yaSSL, wolfSSL may be used as a functionally equivalent alternative that has a GPLv2-compatible license. In addition, wolfSSL (like OpenSSL) supports the TLSv1.2 protocol, which yaSSL does not.
For instructions about building MySQL from source using wolfSSL,
see the extra/README-wolfssl.txt
file in a
MySQL source distribution. The
WITH_SSL
CMake
option now permits wolfssl
as a valid value.
To use -DWITH_SSL=wolfssl
, you
must follow the instructions in
README-wolfssl.txt
.
(Bug #26671671, WL #8998)
MySQL now supports FIPS mode, if compiled using OpenSSL 1.0.2,
and an OpenSSL library and FIPS Object Module are available at
runtime. FIPS mode imposes conditions on cryptographic
operations such as restrictions on acceptable encryption
algorithms or requirements for longer key lengths. The
ssl_fips_mode
system variable
enables control of FIPS mode on the server side. The
--ssl-fips-mode
client option
enables control of FIPS mode on the client side for these
programs: mysql,
mysqladmin, mysqlbinlog,
mysqlcheck, mysqldump,
mysqlimport, mysqlpump,
mysqlshow, mysqlslap,
mysqltest, mysqlxtest,
mysql_secure_installation, and
mysql_upgrade. See
FIPS Support.
(WL #8102)
Incompatible Change: These geometry collection changes have been implemented:
The standard GeomCollection
name for the
geometry collection data type is supported as a synonym for
the GeometryCollection
data type name.
The GeomCollection()
function
is supported as a synonym for the
GeometryCollection()
function.
GeomCollection
and
GeomCollection()
are the
preferred data type and function names.
Incompatibility: As a consequence of the change in preferred
data type name, some
INFORMATION_SCHEMA
tables,
statements such as SHOW CREATE
TABLE
, and the
ST_GeometryType()
function that
display data type information now display
GEOMCOLLECTION
rather than
GEOMETRYCOLLECTION
. Applications that look
for GEOMETRYCOLLECTION
should be adjusted to
account for this change.
For more information, see GeometryCollection Class, and MySQL-Specific Functions That Create Geometry Values. (WL #2388)
Reduction of compiler and platform differences in GIS handling of floating-point results enables simplification of related test cases that no longer need rounding to avoid spurious test failures. Thanks to Daniel Black for the patch. (Bug #26540102, Bug #87223, Bug #27462294)
When using MySQL as a document store, the use of
SPATIAL
indexes on geometry-valued columns
using the X DevAPI is now fully supported. Previously, a spatial
index could be created, but the spatial reference system
identifier (SRID) was not included in the indexed column, so the
index was not used by the optimizer. The SRID
attribute is now added to the indexed column.
(Bug #27568243)
Socket files used with X Plugin tests are now limited to 22-character file names. (Bug #27460677, Bug #89464)
The fix for Bug #26328274 resulted in an assertion in debug builds when an empty host name was used for X Plugin connections. The issue is now fixed. (Bug #27266584, Bug #88925)
X Plugin did not populate the password cache when a user account
with no password set was used with the PLAIN
authentication method. This caused later authentication attempts
to fail. The password cache is now correctly populated with an
entry if the user account's password is empty.
(Bug #27257722)
X Plugin now supports the RESTART
SQL statement, which was added in MySQL 8.0.4 to enable a MySQL
server instance to be restarted from within a client session.
(Bug #27245319)
MySQL Shell connections using X Protocol can use either TCP or Unix sockets as of version 8.0.4. This fix allows the use of encryption protocols with UNIX socket connections, so user accounts that require encrypted connections are able to connect. (Bug #27192091)
The fix for Bug #26647488, which corrected the handling of the
DATETIME
data type, now also correctly
decodes messages received from older versions of the plugin that
do not have the new field available to identify the data type.
(Bug #27169735)
X Plugin connection attempts using the X Protocol did not return an error when the default database specified in the connection options was invalid, and the connection was allowed with a null default database. Connection attempts using the classic MySQL protocol did return an error and disallowed the connection. X Protocol connection attempts now also disallow the connection if an invalid schema is specified. (Bug #26965020)
X Plugin is now loaded by default, meaning there is no longer any need to install the plugin. (WL #11040)
InnoDB:
The ibd2sdi serialized dictionary information
(SDI) extraction utility for InnoDB
tablespaces now supports a --pretty
option
that controls JSON pretty print formatting of SDI data. Pretty
print formatting is enabled by default. Disabling pretty print
formatting using --skip-pretty
reduces the
size of extracted SDI data.
(Bug #27546514)
InnoDB: To improve startup performance on systems with large buffer pools, buffer pool initialization is now multithreaded. (Bug #22963374, Bug #80784)
InnoDB: The following redo logging optimizations were implemented:
User threads can now write concurrently to the log buffer without synchronizing writes, and add dirty pages to the flush list in a relaxed order.
Dedicated log writer threads are now responsible for writing redo log records from the log buffer to the system buffers and flushing the system buffers to the redo log files.
System variables were added for configuring the use of spin delay by user threads waiting for flushed redo:
innodb_log_wait_for_flush_spin_hwm
:
Defines the maximum average log flush time beyond which
user threads no longer spin while waiting for flushed
redo.
innodb_log_spin_cpu_abs_lwm
:
Defines the minimum amount of CPU usage below which user
threads no longer spin while waiting for flushed redo.
innodb_log_spin_cpu_pct_hwm
:
Defines the maximum amount of CPU usage above which user
threads no longer spin while waiting for flushed redo.
The innodb_log_buffer_size
configuration option is now dynamic, which permits resizing
of the log buffer while the server is running.
For more information, see Optimizing InnoDB Redo Logging. (WL #10310)
macOS:
The macOS installer now asks the user for the
root
password to use rather than generating a
random one.
(Bug #22608157, Bug #80144)
macOS:
The MySQL preference pane included with the macOS installer now
includes a setting that specifies which
my.cnf
file the server should read when
started by launchd.
(Bug #19775549, Bug #74214)
Solaris: On Solaris, MySQL can now be built with Developer Studio 12.6. (Bug #27055190, Bug #88316, Bug #28165246, Bug #91214)
Logging during data directory initialization (for example, using mysqld --initialize) has changed:
The startup message indicates that the server is running in initialization mode.
A message is written indicating when initialization has completed.
The message about the CA certificate being self-signed is suppressed.
(Bug #27557952, Bug #89693)
The -log
suffix is no longer appended to the
server version string if logging is enabled. This affects, for
example, the value of the
version
system variable.
(Bug #27532097, Bug #89626)
Server shutdown lines written to the error log now include the server version. (Bug #27522788, Bug #87910)
SHOW CREATE TABLE
normally does
not show the ROW_FORMAT
table option if the
row format is the default format. This can cause problems during
table import and export operations for transportable
tablespaces. MySQL now supports a
show_create_table_verbosity
system variable that, when enabled, causes
SHOW CREATE TABLE
to display
ROW_FORMAT
regardless of whether it is the
default format.
(Bug #27516741)
Performance Schema memory instrumentation overhead was reduced. (Bug #27500610)
During data directory initialization, the server created objects
using sql_mode=''
. Now the
server uses the default
sql_mode
value (which, among
other settings, includes strict mode).
(Bug #27476029, Bug #89495)
The collations defined in
mysql-test/std_data/Index.xml
are for test
purposes only and should not be used otherwise. Comments were
added to the file to make this clear because some users were
using them in non-test environments.
(Bug #27421838)
RESET PERSIST
no longer performs
an implicit commit.
(Bug #27374791)
For a persisted variable, the SET_TIME
column
of the Performance Schema
variables_info
table now reflects
the time at which the variable was persisted, not server startup
time.
(Bug #25677422)
Previously, SHOW CREATE TABLE
did
not show the collation for a column if the collation was the
same as the table default, even if the collation was explicitly
specified at table-creation time. Now, SHOW
CREATE TABLE
always shows the column collation if the
collation was explicitly specified, even if the collation is the
same as the table default.
(Bug #11754608, Bug #46239)
Important Change:
When NO_ZERO_DATE
SQL mode is
enabled, ALTER TABLE
rejects
attempts to add DATE
or
DATETIME
columns that are
declared NOT NULL
to a nonempty table if no
DEFAULT
is specified for that column. Since a
generated column has no default value, this restriction also
prevented addition of a generated DATE NOT
NULL
or DATETIME NOT NULL
column to
a nonempty table. Since the expression used to generate the
column can be used in place of the missing default for
determining the column value, this restriction is now lifted for
generated columns.
(Bug #27252354)
Important Change:
For ANALYZE TABLE
... UPDATE HISTOGRAM
statements, the WITH
clause is now
optional. If not specified, the default value for
N
BUCKETSBUCKETS
is 100.
(Bug #89909, Bug #27637968)
InnoDB: The server was stopped before a fatal error message was written to the error log. (Bug #27626478)
InnoDB: When determining if a wait lock could be granted, locks held by victim transactions that were being rolled back were ignored. (Bug #27607235)
InnoDB:
An error occurred in
Sdi_Decompressor::decompress()
when compiling
a debug build using GCC 7.2.0.
(Bug #27565889)
InnoDB: An assertion was raised when registering buffer pool chunks during parallel creation of multiple buffer pools. A mutex is now used to protect registration of buffer pool chunks in the buffer pool chunk map. (Bug #27565865)
InnoDB: Enabling the standard monitor caused an error. (Bug #27534041)
InnoDB: An internal field used to mark a column as hidden was changed from a boolean field to an enum field to support additional levels of column visibility. (Bug #27499518, Bug #89553)
InnoDB: An invalid zlib-related Valgrind failure reported that a conditional jump or move depends on uninitialized value. (Bug #27482740, Bug #89509)
InnoDB:
An incorrect GROUP BY
result was returned
when using the TempTable
storage engine and a
NO PAD
collation.
(Bug #27454796)
InnoDB: An incorrect compression length value in a page compression function caused hole punching to be skipped the first time pages are compressed. (Bug #27399897)
InnoDB:
Starting the server with an incorrect
--log-bin
option value raised an
assertion, and subsequent attempts to start the server with a
correct --log-bin
value or
without the --log-bin
option
continued to produce assertion failures.
(Bug #27393317)
InnoDB:
A large object (LOB) reference was not updated when a LOB was
inserted during an UPDATE
operation.
(Bug #27368662)
InnoDB:
After restarting the server, a TRUNCATE
TABLE
operation raised an assertion due to table flags
that were inconsistent with remote data directory information
stored in memory.
(Bug #27367639)
InnoDB:
Attempting to create a temporary table in a file-per-table
tablespace using
CREATE TEMPORARY
TABLE ... TABLESPACE
syntax failed to report an error.
Temporary tablespaces are only permitted in the temporary
tablespace.
(Bug #27361662)
InnoDB: A latch taken on the first page of a large object (LOB) was not released before another thread attempted to allocate the page, causing a deadlock. (Bug #27360492)
InnoDB: Converting an implicit lock to an explicit lock was optimized by the introduction of a member variable that tracks the smallest active transaction ID.
Thanks to Zhai Weixiang for the patch. (Bug #27353468, Bug #89127)
InnoDB:
The mysql.innodb_ddl_log
and
mysql.innodb_dynamic_metadata
tables, which
are used internally by the InnoDB
storage
engine, are now protected. DDL and DML operations on these
tables are no longer permitted, and the tables no longer appear
in INFORMATION_SCHEMA
query results.
(Bug #27353455, Bug #89129)
InnoDB:
Upgrading a MySQL 5.7 instance with an
innodb_page_size
setting of 4K
caused mysql_upgrade to fail with a
“Specified key was too long; max key length is 768
bytes” error when creating or modifying system tables.
The error was suppressed to permit the
mysql_upgrade client to run on an instance
with an innodb_page_size
setting of 4K.
(Bug #27338431)
InnoDB: The recovery process could not properly determine space_id values, causing the server to exit. (Bug #27331936)
InnoDB:
An ALTER TABLE
operation that
modified the nullability of an indexed column raised an
assertion. InnoDB
incorrectly assumed that a
new primary key must be added instead of created from an
existing unique key.
(Bug #27330454, Bug #89087)
References: This issue is a regression of: Bug #24397406.
InnoDB:
After an ALTER
TABLE ... IMPORT TABLESPACE
operation, metadata could
not be retrieved correctly from the
INFORMATION_SCHEMA.INNODB_COLUMNS
table.
(Bug #27322099)
InnoDB:
An INSERT
operation involving a
large object (LOB) value raised an assertion. After splitting a
LOB fragment, there was insufficient space for a directory
entry.
(Bug #27320977)
InnoDB:
On a server using the utf8mb4 character set, an
INSERT
or
UPDATE
during an
ALTER TABLE
operation that
changed the row format of a table that included a virtual column
caused an index corruption.
(Bug #27319084)
InnoDB:
The data retrieved from
INFORMATION_SCHEMA.INNODB_COLUMNS
was incorrect for tables containing a virtual column.
(Bug #27316037)
InnoDB: The server failed to start after recovery due to an invalid keyring file. The keyring file created from backup was empty. (Bug #27307740)
InnoDB: A deadlock between background threads, one attempting to evict a full-text search table from the cache, and the other attempting to synchronize a table, caused InnoDB Cluster nodes to fail. (Bug #27304661)
InnoDB:
A typo was corrected in an InnoDB
recovery
message. Thanks to Daniël van Eeden for the patch.
(Bug #27287979, Bug #27010613, Bug #88185)
InnoDB:
A message stating that encryption algorithm support is missing
was reported during InnoDB
recovery.
(Bug #27286020)
InnoDB: A missing or mismatched keyring file caused an assertion failure at startup. (Bug #27278324)
InnoDB: An error was returned indicating that encryption support was missing when checking the space ID of an encrypted tablespace file. (Bug #27278100)
InnoDB: A debug message that prints a “too many open files” warning is now only printed if the number of open files reaches a limit of 300. (Bug #27277844)
InnoDB: Failure to skip predicate locks when releasing gaps locks raised debug assertions, as did failure to remove the supremum record bit prior releasing gaps locks on the supremum. (Bug #27272806, Bug #27294066)
InnoDB: A tablespace ID discovery failure occurred when starting the server on a cloned data directory. (Bug #27265874)
InnoDB:
An unprotected global variable
(fil_n_file_opened
) caused an assertion when
shutting down the server.
(Bug #27265473)
InnoDB: An assertion that is no longer valid was raised when checking for pending I/O on the file in use. (Bug #27263206)
InnoDB: An empty general tablespace caused a failure when upgrading to MySQL 8.0. The empty data file was expected to have a specific number of pages. (Bug #27261822)
InnoDB:
A startup failure occurred because a directory specified by the
--innodb-directories
option
contained a keyring data file. The
--innodb-directories
option
should only recognize InnoDB
tablespace
files.
(Bug #27253116)
InnoDB: A function that calculates the increase in minimum bounding rectangle (MBR) size incorrectly returned 0, resulting in R-tree corruption. (Bug #27237472)
InnoDB:
A REPLACE
operation on a
temporary table raised an assertion.
(Bug #27225649, Bug #27229072)
InnoDB:
An online ALTER TABLE
operation
on a table accompanied by concurrent DML on the same table
raised an assertion. An end-of-log check was not performed prior
to accessing the DML log to determine the length of a virtual
column.
(Bug #27158030)
InnoDB: When the addition of a virtual index failed, the virtual index that was freed was not removed from the lists of virtual column indexes. (Bug #27141613)
InnoDB: Adding a virtual column and index in the same statement caused an error. (Bug #27122803)
InnoDB: An undo tablespace truncate operation raised an assertion. The check that determines if undo tablespace segments are inactive was invalid. (Bug #27114068)
InnoDB: When the TempTable storage engine was unable to allocate memory using temporary files and mmap, an invalid error was reported indicating that the defined on-disk storage engine would be used instead. (Bug #26990375)
InnoDB:
Latch order was incorrectly defined in debug instrumentation
causing a latch order violation during an
INSERT
operation.
(Bug #26983412)
InnoDB:
A tablespace import operation on a server with a default row
format of REDUNDANT
raised an assertion
failure.
(Bug #26960215)
InnoDB: A stored field based on a generated column permitted the base column to have a NULL value. (Bug #26958695)
InnoDB: Evaluation of a subquery in a resolving function raised an assertion. (Bug #26909960)
InnoDB:
Locks related to data dictionary operations caused degradation
in CREATE TABLE
performance.
(Bug #26848711, Bug #87827)
InnoDB:
A LOCK INSTANCE FOR BACKUP
operation was able to acquire a backup lock without waiting for
a concurrent DDL operation to finish.
(Bug #26831155, Bug #87812)
InnoDB:
An incorrectly specified
innodb_data_file_path
or
innodb_temp_data_file_path
value returned a syntax error that did not specify the name of
the system variable that caused the initialization failure.
(Bug #26805833)
InnoDB:
An handler that was opened for a TRUNCATE
TABLE
operation caused the operation to assert. The
server now closes open handlers before dropping the table.
The patch for this bug also improves
TRUNCATE TABLE
error messages
related to foreign key constraints, and makes it possible to
truncate a corrupted table.
(Bug #26710839)
InnoDB: An online DDL operation that rebuilds the table raised an assertion when the last insert log record to be applied was split across two pages. (Bug #26696448, Bug #87532)
InnoDB: An assertion was raised when attempting to generate a virtual column value dependent on an off-page large object value that was not yet stored. (Bug #26625652)
InnoDB: An R-tree search counted delete-marked records, causing it to find more records than present in the clustered index. As result, the valid R-tree index was marked as corrupted. (Bug #26381207)
InnoDB:
A RENAME TABLE
operation that
renamed the schema failed to rename full-text search common
auxiliary tables that were left behind when the full-text search
index was removed previously, resulting in a assertion failure
when attempting to drop the old schema.
(Bug #26334149)
InnoDB: An assertion was raised when a thread attempted to read a record containing BLOB data while another thread was writing the same data to external pages. (Bug #26300119)
References: This issue is a regression of: Bug #23481444.
InnoDB: Column prefixes for externally stored columns exceeded the amount of available memory in the online log. (Bug #25928471)
InnoDB: A problematic lock that was introduced to protect writing of dynamic metadata changes to the redo log during a checkpoint was removed. A mutex is now used instead. The checkpoint LSN was also adjusted to protect dynamic metadata changes. (Bug #25834374)
InnoDB:
InnoDB
failed to account for a virtual column
when using the column offset to search an index for an
auto-increment column.
(Bug #25076416)
InnoDB: An invalid debug condition caused a buffer pool chunk allocation failure, which resulted in an assertion failure when a purge thread attempted to access an unallocated chunk. (Bug #23593654)
References: This issue is a regression of: Bug #21348684.
InnoDB:
Threads were prevented from entering the
InnoDB
storage engine due to ticket
acquisition deadlocks.
(Bug #23476050)
Partitioning:
An error returned by the storage engine while executing
ALTER TABLE
EXCHANGE PARTITION
was not handled correctly by the
server.
(Bug #27320682)
Replication:
Empty XA transactions that have been rolled back should not be
recorded in the binary log or added to the set of transactions
in the gtid_executed
system
variable. However, if rolled-back empty XA transactions were
executed after an empty XA transaction ending with an
XA COMMIT ... ONE PHASE
statement, they were
being incorrectly added to the binary log as an XA
ROLLBACK
statement, and also to the gtid_executed
system variable. The issue is now fixed.
(Bug #27435974)
Replication:
When the system variable
gtid_next
was set to AUTOMATIC,
empty XA transactions that were rolled back and not recorded in
the binary log, were being incorrectly added to the set of
transactions in the
gtid_executed
system variable,
causing an inconsistency. The rolled-back empty XA transactions
are no longer recorded in
gtid_executed
.
(Bug #27407670)
Replication:
The value of LAST_CONFLICT_FREE_TRANSACTION
in the
replication_group_member_stats
Performance Schema table was not correctly synchronized across
group members.
(Bug #27317431)
Replication: When a member is joining a group there is a chance of the request to join being rejected. If the rejection resulted in a retry, for example because the seed member being contacted was not in the group, then there was a possibility of the retry cycle continuing infinitely. (Bug #27294009)
Replication:
The default binary log expiration period of 30 days is now set
as the default for the
binlog_expire_logs_seconds
system variable, instead of the deprecated
expire_logs_days
system
variable.
binlog_expire_logs_seconds
now
defaults to a value of 2592000 (30*24*60*60 seconds), and
expire_logs_days
now defaults
to zero.
In MySQL 8.0.3 and 8.0.4, the effects of
binlog_expire_logs_seconds
and
expire_logs_days
were
cumulative. From MySQL 8.0.11, this is no longer the case, and
the new behavior is as follows:
If you specify a non-zero value for both variables, only the
value of
binlog_expire_logs_seconds
is used to determine the binary log expiration period, and
the value of
expire_logs_days
is
ignored.
If you specify a non-zero value for only one variable, that value is used to determine the binary log expiration period, and the default for the other is not applied.
If you specify a value for neither of the variables, the
default of 30 days from
binlog_expire_logs_seconds
is used as the binary log expiration period.
An error message is issued if you attempt to set one of the
variables dynamically when the other is already set, and a
warning message is issued if you specify a non-zero value for
both variables at startup. A deprecation warning is also issued
if you set a value for
expire_logs_days
.
To disable automatic purging of the binary log, specify a value
of 0 explicitly for
binlog_expire_logs_seconds
, and
do not specify a value for
expire_logs_days
. For
compatibility with earlier releases, automatic purging is also
disabled if you specify a value of 0 explicitly for
expire_logs_days
and do not
specify a value for
binlog_expire_logs_seconds
. In
that case, the default for
binlog_expire_logs_seconds
is
not applied. You no longer need to set both variables to zero to
disable automatic purging.
(Bug #27252658)
Replication:
The DDL statements CREATE
DATABASE
, ALTER
DATABASE
, and DROP
DATABASE
are no longer allowed to execute in parallel
with other statements on a multithreaded slave. These statements
require an exclusive metadata lock on the schema, causing a
theoretical possibility of a deadlock when
slave_preserve_commit_order=1
is set on the replication slave.
(Bug #27165446)
Replication:
On a replication slave with binary logging disabled, an empty
DDL statement (for example, due to a replication filter) raised
an assertion. With binary logging enabled,
BEGIN
and
COMMIT
statements would be
written to the binary log to produce a transaction, but these
statements were not available with binary logging disabled,
causing the assertion. MySQL Server now checks for the situation
where the DDL transaction is empty and is not marked as started,
and handles it without raising the assertion.
(Bug #27164661)
Replication:
A new system variable
rpl_read_size
is available to
set the minimum amount of data in bytes that is read from the
binary log files and relay log files. The default read size is
8KB. If heavy disk I/O activity for these files is impeding
performance for the database, increasing the read size might
reduce file reads and I/O stalls if the files are not being
cached by the operating system.
Note that a buffer the size of this value is allocated for each thread that reads from the binary log and relay log files, including dump threads on masters and coordinator threads on slaves. Setting a large value might therefore have an impact on memory consumption for servers.
Thanks to the Facebook team for the patch. (Bug #27147095)
Replication:
On a server with GTIDs enabled, if RESET
MASTER
was used when a transaction had been flushed
but not yet committed, the server GTIDs were left in an
incorrect state. At this point, the GTID for the transaction had
been added to the set of owned GTIDs, but not yet to the set of
executed GTIDs. The GTID was removed from the binary log when
the content of the uncommitted transaction was cleared by the
RESET MASTER
statement, but the
GTID could not be reused because it was already owned, so the
sequence of GTIDs had a gap.
With this fix, RESET MASTER
acquires a global read lock to ensure that no transactions are
in commit stage during its operation, and no new transactions
enter into commit stage during its operation. If there are any
ongoing commits, RESET MASTER
waits until they are complete. The global read lock is released
when the reset is finished, and then storage engines are
notified of the successful reset. If FLUSH
TABLES WITH READ LOCK
has already been executed for
the thread, RESET MASTER
does not
retry the lock.
(Bug #27041759)
Replication:
Attempts to set a GTID for an unsafe or empty XA transaction
using a SET @@SESSION.GTID_NEXT
statement
were not being handled correctly. On a server with
gtid_mode
set to
OFF
or OFF_PERMISSIVE
, and
enforce_gtid_consistency
set to
OFF
, setting a GTID for an unsafe XA
transaction (creating or dropping a temporary table) caused an
inconsistency in the server's GTID violation counter and raised
an assertion. Testing also showed that setting a GTID for an
empty XA transaction caused an incorrect sequence of events to
be written to the binary log. Both these situations are now
handled correctly.
(Bug #27041402, Bug #88272)
Replication:
The error message issued for a server stop while rotating the
binary log did not state the correct cause for the issue. The
error message has been enhanced to include the actual error
causing the server stop as part of the message. A new error
ER_OOM_SAVE_GTIDS
has also been
added for the situation where an out-of-memory error occurred
while saving the set of GTIDs from the last binary log into the
mysql.gtid_executed
table.
(Bug #27040070, Bug #88262)
Replication:
The statements
CREATE USER IF
EXISTS
(or IF NOT EXISTS
) and
ALTER USER IF
EXISTS
(or IF NOT EXISTS
) were
written to the binary log even when the query resulted in an
error. MySQL Server now checks for errors that cause these
queries to fail (for example, an invalid plugin was specified),
and does not log the statement in that situation. Note that if
these statements succeed but have no effect on the master
because the condition is not met, the statements are written to
the binary log, as the condition might be met on a replication
slave (see Bug #25813089, Bug #85733).
(Bug #26680035)
References: See also: Bug #25813089, Bug #85733.
Replication: Following the introduction of support for atomic DDL in MySQL 8.0, a replication slave that supports atomic DDL can diverge from a replication master at an earlier MySQL version that does not support atomic DDL. If the DDL statement can only be partly applied, the slave using MySQL 8.0 rolls back the whole DDL statement, but the master using an earlier version might commit the valid parts of the DDL statement. An error message is now logged in the event of an unsuccessful commit for an atomic DDL statement on the master and the slave, and you should check that the states of the master and the slave have not diverged before proceeding. (Bug #26133488)
Replication:
When GTIDs are enabled on a replication master and slave, and
the slave connects to the master with the
MASTER_AUTO_POSITION=1
option set, the master
must send the slave all the transactions that the slave has not
already received, committed, or both. If any of the transactions
that should be sent by the master have been already purged from
the master's binary log, the master sends the error
ER_MASTER_HAS_PURGED_REQUIRED_GTIDS
(1789) to the slave, and replication does not start.
The message provided for the error
ER_MASTER_HAS_PURGED_REQUIRED_GTIDS
has been changed to provide advice on the correct action in this
situation, which is for the slave to replicate the missing
transactions from another source, or for the slave to be
replaced by a new slave created from a more recent backup. The
message advises that the master's binary log expiration period
can be revised to avoid the situation in future. In addition,
the master now identifies the GTIDs of the purged transactions
and supplies them in its error log in the warning message
ER_FOUND_MISSING_GTIDS
(11809),
so that you do not need to calculate the missing GTIDs manually.
(Bug #26004541, Bug #29769293)
Replication: For updates to virtual generated columns containing the BLOB data type, both the old and the new BLOB values are required by some storage engines for replication. This fix extends the same behavior to JSON and GEOMETRY data types, which are based on the BLOB data type and so produce the same issue when the old value is not stored. (Bug #25873029)
Replication:
A behavior change in MySQL 8.0.0 moved the identification of
generated columns from before to after the calculation of the
write set for binary logging. This caused an issue with NDB
cluster replication, because that storage engine omits the
generated columns from the log event if they are unnecessary,
leading to NULL
values being set for them by
the applier thread on the replication slave. The identification
of generated columns has now been moved back to before the write
set calculation, so that the issue does not occur.
(Bug #25827408)
Replication:
On a multithreaded replication slave (with
slave_parallel_workers
greater
than 0), the slave's lag behind the master was not being
reported by the Seconds_Behind_Master
field
for SHOW SLAVE STATUS
. The value
is now reported correctly. Thanks to Robert Golebiowski for the
patch.
(Bug #25407335, Bug #84415)
Replication:
A plus sign (+
) can be used with a GTID set
in the statement SET @@GLOBAL.GTID_PURGED
to
indicate that the specified GTID set does not intersect with
gtid_executed
. The plus sign
was also being permitted for GTID sets specified for the
functions GTID_SUBSET()
and
GTID_SUBTRACT()
, where it was not
meaningful. The plus sign can no longer be specified with these
functions. Also, error messages relating to the SET
@@GLOBAL.GTID_PURGED
operation have been improved.
(Bug #24675979)
Replication:
When invoked with the options
--read-from-remote-server
and --hexdump
,
mysqlbinlog was not able to produce a hex
dump of the binary log contents following an SQL statement that
generated an autoincrement value, referenced a user-defined
variable, or invoked RAND()
. The event types
for these events are followed by an informational row query log
event, and mysqlbinlog caches the original
event for printing when the subsequent row query log event is
received. The pointer to the memory containing the original
event was invalidated when the subsequent event was received, so
the original data could not be accessed to produce the hex dump.
The issue has now been fixed.
(Bug #24674276)
Replication: A number of changes were made to the binary log decoding procedure to improve handling of invalid or corrupted binary log entries. (Bug #24365972)
Replication:
Following the introduction of binary logging for XA transactions
WL#6860,
an assertion could be raised in debug builds during replication
from a master with the feature to a slave without the feature,
if MASTER_AUTO_POSITION=1
was set on the
slave. The assertion has been removed, so that debug builds now
have the same behavior as non-debug builds, and can attempt
replication of unsupported event types whether or not
MASTER_AUTO_POSITION=1
is set.
(Bug #20677683)
Replication:
When using
group_replication_ip_whitelist
,
it was possible to configure a group so that it functioned even
though all members could not establish the internal group
communication connection to each other, resulting in
inconsistent behavior. Now, incoming connections are accepted if
the IP is in the white list or if the IP belongs to a current
member of the XCom configuration. This ensures members are
always able to create the internal network required for group
communication.
(Bug #87834, Bug #26846549, Bug #27406775)
Group Replication:
When MySQL was started with
--plugin-load='group_replication.so'
but Group Replication was not started, starting an asynchronous
slave channel resulted in an unresponsive server.
(Bug #27584141)
Group Replication: Group Replication failed to start if certain required variables were persisted, or if persisted variables were not set in proper timestamp order. (Bug #27545544, Bug #27522405)
Group Replication:
Group Replication files have been moved from the
rapid
directory to the
plugin
directory.
(Bug #27413789)
Group Replication:
Conflict detection uses schema and table names as part of the
Primary Key Equivalent (PKE) in order to detect and disallow
conflicting transactions. The value of
lower_case_table_names
changes
how schema and table names are stored and externalized;
depending on the value, this could persist a table named
T1
as t1
. Such a
difference in a group could cause inconsistencies. Now, members
must all have the same value for
lower_case_table_names
.
(Bug #27401817)
Group Replication: Using an IP address or hostname in any Group Replication related configuration on macOS was failing. (Bug #27376511, Bug #89123, Bug #27604471)
Group Replication: Changing the Group Replication required settings incorrectly on online secondary members could result in an unexpected halt. (Bug #27317478, Bug #27157202)
Group Replication:
After issuing START
GROUP_REPLICATION
the
gtid_mode
system variable is
locked to prevent any modification to its value until the group
is online. Any attempt to modify
gtid_mode
during this time is
blocked. As part of the process of starting Group Replication
the server needs to set
super_read_only=off
, which has
dependencies on locks acquired by
SET GTID_MODE
.
This could result in Group Replication hanging and there was no
possibility to connect to the server to resolve the situation.
To prevent this situation, when it is not possible to acquire
the locks needed by SET
GTID_MODE
the operation aborts.
(Bug #27312241)
Group Replication: In the unlikely event of the group failing to start, for example because no seed member could be contacted, there is a one minute period where the group retries the start process. Attempting to modify a Group Replication plugin option during this period could result in an unexpected halt. Now, attempting to modify a Group Replication plugin option during plugin start or stop results in error. (Bug #27275312)
Group Replication: Attempting to uninstall the Group Replication plugin on a server configured to start the plugin automatically at boot could result in a deadlock. Now, the uninstall process checks to ensure that the plugin is not in the process of starting and fails gracefully if it is. (Bug #27179336)
Group Replication: Group Replication uses transaction write set extraction for conflict detection on group members. A performance regression was found in this process during detailed performance analysis, which is handled by optimizing memory allocation has been for write set extraction and memory copy operations. In addition, foreign key write sets are now collected only when the current table actually has foreign keys. (Bug #27016053)
Group Replication: In a multi-primary group, when a member was also configured with a asynchronous replication channel, there was a possibility that the asynchronous channel could start before Group Replication started. This could result in the asynchronous channel processing transactions before the member became an online member of the group, causing issues when members tried to join the group. The fix ensures that asynchronous channels on group members do not start until the member has become online. (Bug #26648393)
Linux: Builds on Alpine Linux now take advantage of AIO support. (Bug #27327874)
macOS: On macOS, mysql_config --libs did not list any SSL libraries. (Bug #27232576)
Microsoft Windows:
On Windows, the RESTART
statement
is implemented by having mysqld fork, with
one process acting as a monitor to the other, which acts as the
server. This makes determining the server process to attach to
for debugging more difficult. To alleviate this, starting the
server with --gdb
now suppresses
forking. A side effect is that for a server started with this
option, RESTART
simply exits and
does not restart.
(Bug #27273229)
JSON:
The JSON_QUOTE()
function could
in some situations write the quoted string to the same buffer
that holds the input string, which could lead to wrong results.
Now a check is made to be sure that it does not attempt write
into the same buffer that it is reading from.
(Bug #27312444)
JSON:
JSON_SEARCH()
no longer performs
any modification of cached Json_path
objects,
now making any needed updates to a String
object that represents the path instead. This saves on the
number of round trips required between the path's
Json_path
and String
representations, which speeds up execution. In addition, the
one_or_all
and
escape_char
arguments to
JSON_SEARCH()
were unnecessarily cached;
these arguments are no longer cached, which should also improve
this function's execution time.
(Bug #87383, Bug #26614455)
References: See also: Bug #21450084, Bug #77785, Bug #21472872.
A check was implemented based on data dictionary version information to prevent starting the MySQL 8.0 server with a data directory created by a later MySQL release. The check was necessary to prevent an in-place downgrade, which is currently not supported. (Bug #27708249)
Protected data dictionary tables are no longer accessible by statements placed in a server initialization file. (Bug #27674311, Bug #90010)
Data dictionary and INFORMATION_SCHEMA
version numbers were synchronized with the new MySQL server
version number.
(Bug #27674285)
The server did not handle correctly certain
LIKE
queries using a
BLOB
column with a prefix index.
(Bug #27660560)
For builds configured using
-DWITH_PROTOBUF=SYSTEM
, building
failed on systems with Protobuf 3.5 installed.
(Bug #27638713, Bug #89915)
The microseconds part of timestamps stored with persisted
variables in mysqld-auto.cnf
was always
000000.
(Bug #27629719)
Debian packages now handle dependencies for MeCab plugin dictionary files. Fedora packages now handle dependencies for both MeCab packages, not just the utf-8 package. (Bug #27612730, Bug #27613539)
The change in MySQL 8.0.11 for platforms that use systemd to run
mysqld as a normal process
(Type=notify
) and communicate using a socket
file did not work on SLES before SLES 12.2.
(Bug #27604999)
The NON_UNIQUE
column in the
INFORMATION_SCHEMA.STATISTICS
table
had type BIGINT
prior to MySQL
8.0, but became VARCHAR
in MySQL
8.0 with the introduction of the data dictionary. The
NON_UNIQUE
column now has an integer type
again (INT
because the column
need not be as large as BIGINT
).
(Bug #27593348, Bug #89793)
With some inputs, ST_Crosses()
could cause a server exit.
(Bug #27576700)
Some error messages were being written to the error log with an error ID of 0 rather than a legitimate error ID. (Bug #27575608)
mysql_upgrade did not set
MYSQL_SERVER_PUBLIC_KEY
correctly, leading to
failure to read the key file.
(Bug #27568278)
If autocommit
was disabled,
mysql_upgrade produced an error when
upgrading from MySQL 5.7 to 8.0.
(Bug #27549249)
For debug builds, displaying very long stage names from the
PROCESSLIST_STATE
column of the Performance
Schema threads
table could raise an
assertion.
(Bug #27545688)
gtid_purged
handling had a
memory leak.
(Bug #27537968, Bug #89645)
Using SET
PERSIST
to persist
optimizer_trace_offset
resulted
in an incorrect variable value after server restart.
(Bug #27536421)
The validate_password
component could leak
memory.
(Bug #27521770, Bug #89597)
A typo in sql/handler.h
was corrected.
Thanks to Su Tristan for the patch.
(Bug #27516280, Bug #89594)
The Performance Schema
variables_info
table displayed
incorrect VARIABLE_SOURCE
and
VARIABLE_PATH
values for variables set within
option files specified by !include
or
!includedir
directives.
(Bug #27514223)
References: This issue is a regression of: Bug #25563891.
After upgrading from MySQL 5.7 to MySQL 8.0, the first attempt
to start the server on a MySQL 5.7 data directory with
--default-time-zone
set to a
specific time value such as "+00:00"
caused
the server to exit.
(Bug #27512609, Bug #89584)
Lookups of character set internal numbers was not thread safe and could cause memory leaks. (Bug #27507950)
Using the -DWITH_LIBEVENT=system
and -DWITH_ICU=system
CMake options together caused configuration
to fail.
(Bug #27505535, Bug #89398)
Some messages were being written to the server error log using client error IDs. (Bug #27503787, Bug #89562)
When run in key migration mode, the server could report an error for successful operations. (Bug #27493997)
Upgrades from MariaDB to MySQL Community Edition failed on Fedora 27. (Bug #27484835)
ALTER TABLE
could hang in a
Waiting for tablespace metadata lock
state.
(Bug #27472087, Bug #89487)
Selecting from the Performance Schema
status_by_thread
or
variables_by_thread
table was not
thread safe and could yield incorrect results.
(Bug #27471510)
INSERT ... ON DUPLICATE KEY UPDATE
could be
handled improperly if a source table produced no rows.
(Bug #27460607)
SET
PERSIST_ONLY
ignored
--skip-grant-tables
and continued
to perform checking against the dynamic privileges needed to set
system variables.
(Bug #27455943)
For RPM packages and Docker RPM packages, the included
my.cnf
file now includes information
indicating how to revert to the previous default authentication
plugin (changing caching_sha2_password
to
mysql_native_plugin
), for compatibility with
older clients.
(Bug #27454015, Bug #27675380)
In string comparisons using >
, only one
operand was handled as utf32
.
(Bug #27452148)
A server exit during InnoDB
initialization
caused AddressSanitizer (ASan) to report a memory leak. The
patch also implements proper handling of the data dictionary
properties table in cases where the table contains data that
cannot be parsed.
(Bug #27447981, Bug #89433)
With -DWITH_SSL=system
, if
CMake could not find the system OpenSSL
libraries and header files, it produced confusing messages. Now
it exits immediately with an error.
(Bug #27447874)
Configuring with the
-DWITH_INNODB_EXTRA_DEBUG=ON
CMake option resulted in a linker error.
(Bug #27444255, Bug #89412)
Configuring with
-DWITH_ZLIB=system
resulted in a
linker error.
(Bug #27435371, Bug #89373)
Metadata from result sets for UNION ALL
queries could say NEWDATE
rather than
DATE
.
(Bug #27422376)
In builds with Undefined Behavior Sanitizer enabled, negation of -922337203685477580 could cause a server exit. (Bug #27419181)
With protocol compression enabled, a spurious assertion could be raised. (Bug #27418207, Bug #89324)
References: This issue is a regression of: Bug #17922198.
Performance related to fetching tablespace objects from the data dictionary to populate the data dictionary cache was improved. (Bug #27402243)
If the server was started with
--skip-grant-tables
, clients that
authenticate with the caching_sha2_password
plugin were unable to connect.
(Bug #27400095, Bug #89267)
Linux RPM and Debian packages now include dependency information for the Perl JSON module required to run the MySQL test suite. Linux RPM packages now include dependency information for the Perl Digest module required to run the MySQL test suite. (Bug #27392800, Bug #89250, Bug #27392808, Bug #89244)
A new system variable,
default_collation_for_utf8mb4
,
is provided for internal use by replication. The system variable
is set to the default collation for the
utf8mb4
character set. The value of the
variable is replicated from a master to a slave so that the
slave can correctly process data originating from a master with
a different default collation for utf8mb4
.The
variable is primarily intended to support replication from a
MySQL 5.7 or older master server to a MySQL 8.0 slave server, or
group replication with a MySQL 5.7 primary node and one or more
MySQL 8.0 secondaries. The default collation for
utf8mb4
in MySQL 5.7 is
utf8mb4_general_ci
, but it is
utf8mb4_0900_ai_ci
in MySQL 8.0. The variable
is not present in releases earlier than MySQL 8.0, so if the
slave does not receive a value for the variable, it assumes the
master is from an earlier release, and sets the value to the
previous default collation
utf8mb4_general_ci
.
The default utf8mb4
collation is used in the
following statements:
CREATE TABLE
and
ALTER TABLE
having a
CHARACTER SET utf8mb4
clause without a
COLLATION
clause, either for the table
character set or for a column character set.
CREATE DATABASE
and
ALTER DATABASE
having a
CHARACTER SET utf8mb4
clause without a
COLLATION
clause.
Any statement containing a string literal of the form
_utf8mb4'
without a
some
text
'COLLATE
clause.
(Bug #27389878, Bug #27081073)
DESCRIBE
with
a column name option ignored the column name.
(Bug #27387773, Bug #89224)
When run in key migration mode, the server ignored invalid options. (Bug #27387331)
SHOW GRANTS
for an anonymous user
could cause a server exit.
(Bug #27375069)
Path name normalization could fail for very long path names. (Bug #27368298)
During configuration, CMake assumed that rpcgen was available rather than checking for it. (Bug #27368078)
The client authentication process could use memory after it had been freed. (Bug #27366143)
-DWITH_ZLIB=system
could cause
other CMake feature tests to fail.
(Bug #27356658, Bug #89135)
On some systems, using mysqld --initialize to initialize the data directory was very slow. (Bug #27349579, Bug #89122)
Builds using RPM source packages now use a secure connection if Boost must be downloaded. (Bug #27343289, Bug #89104)
An internal check_datetime_range
function
that converted an ULONGLONG time value raised an assertion on
Windows.
(Bug #27340709)
Too much locking was being done for the
caching_sha2_password
authentication plugin
(one lock/unlock per connection). This is now improved to one
lock/unlock per plugin install/uninstall.
(Bug #27335346)
A CREATE TABLE ...
LIKE
operation that implicitly assigned
'innodb_system'
as the tablespace name for
table partitions raised an assertion.
(Bug #27331588)
SET
PERSIST_ONLY
could store large-valued variables
incorrectly.
(Bug #27322254)
The audit_log
plugin could write statements
to the binary log even with binary logging disabled.
(Bug #27315321)
Certain queries using GREATEST() or LEAST() produced heap-use-after-free errors. (Bug #27312703)
An external_language
column was added to the
mysql.routines
data dictionary table to
support stored routines in different languages. The data stored
in this column can be accessed through the
EXTERNAL_LANGUAGES
column of the
INFORMATION_SCHEMA.ROUTINES
table.
(Bug #27309116, Bug #89038)
It is now prohibited to start the server with a
lower_case_table_names
setting
that is different from the setting used when the server was
initialized. The restriction is necessary because collations
used by data dictionary table fields are determined by the
setting defined when the server is initialized, and restarting
the server with a different setting would introduce
inconsistencies with respect to how identifiers are ordered and
compared.
(Bug #27309094, Bug #89035)
For accounts that authenticated using the
auth_sock
authentication plugin, the server
was unable to accept connections from clients from older MySQL
versions.
(Bug #27306178)
An audit_log
plugin memory leak was
corrected.
(Bug #27302151)
The INFORMATION_SCHEMA.FILES
table
now obtains from storage engines the information needed for the
following columns: LOGFILE_GROUP_NAME
,
LOGFILE_GROUP_NUMBER
,
ROW_FORMAT
, VERSION
.
(Bug #27292586)
Dropping a loadable function did not always remove its entry
from the Performance Schema
user_defined_functions
table.
(Bug #27270498)
To reduce its size and storage footprint, serialized dictionary information (SDI) is now generated in a compact JSON format. (Bug #27265584)
Concurrent execution of
RESET PERSIST
and SET
PERSIST
from multiple sessions could cause a server
exit.
(Bug #27264789)
Tablespace statistics could be cached even if the statistics-collection process encountered an error. (Bug #27259963)
SET
PERSIST
could fail to find the proper directory into
which to write the mysqld-auto.cnf
file.
(Bug #27253828)
ALTER TABLE
could not create
generated NOT NULL
geometry columns if the
table contained data.
(Bug #27252609)
The Performance Schema
variables_info
table displayed
incorrect VARIABLE_SOURCE
values for
variables that were set in my.cnf
and also
persisted to mysqld-auto.cnf
.
(Bug #27252077)
Improper handling of plugin loading and unloading could cause a server exit. (Bug #27247280, Bug #27297704)
The RESTART
statement did not
work for Ubuntu packages.
(Bug #27245918)
LDAP authentication plugins were not built on FreeBSD. (Bug #27238252)
The server did not handle queries correctly when a cached value
was evaluated as NULL
by a windowing
function, or when its argument was part of a GROUP
BY
with a ROLLUP
operation which
could be evaluated as NULL
.
(Bug #27233287)
Windowing functions such as
LAST_VALUE()
did not work
correctly with tables containing NOT NULL
columns in all cases.
(Bug #27230463)
Role cache invalidation could be performed incorrectly. (Bug #27225806)
Incorrect handling of persisted variables at server startup could result in a server exit. (Bug #27224682)
For upgrades from MySQL 5.7 to 8.0, the
sql_mode
value for object definitions could
contain NOT_USED
.
(Bug #27219709)
JSON_TABLE()
failed if no default
database was selected.
(Bug #27217897)
Adding a unique index to an InnoDB
table on
which multiple locks were held could raise an assertion.
(Bug #27216817)
CREATE VIEW
statements that used
JSON_TABLE()
in the view
definition failed if no database was selected.
(Bug #27189940)
The Doxygen documentation for
CLIENT_SSL_VERIFY_SERVER_CERT
was corrected.
Thanks to Bradley Grainger for the patch.
(Bug #27189363, Bug #88686)
Queries on Performance Schema replication tables could return incorrect results, particularly when the execution plan used an index. (Bug #27184567)
For some statements, the FILE
privilege was not properly checked.
(Bug #27160888)
To better enable setting persisted variables at startup in the
same order they were persisted with
SET
PERSIST
, settings in
mysqld-auto.cnf
are first sorted based on
timestamp (which is now stored in the file).
(Bug #27157520)
Setting the
dragnet.log_error_filter_rules
system variable to a very long value could cause a server exit.
(Bug #27120953)
For platforms that use systemd (see
Managing MySQL Server with systemd), systemd was not always able to
infer the state of a double-forked mysqld
process. Consequently, systemd would attempt to restart
mysqld even when that process terminated with
status 1. systemd is now configured to run
mysqld as a normal process
(Type=notify
rather than
Type=forking
). If the name of a socket file
is specified in the environment variable
NOTIFY_SOCKET
, mysqld
attempts to open a connection for communicating with systemd and
writes its state changes there.
(Bug #27109556, Bug #88463, Bug #26538598, Bug #87210)
ST_IsValid()
returned incorrect
results for some geographic polygons on non-WGS 84 ellipsoids.
(Bug #27074700)
A multiple-insert statement on a table containing a
FULLTEXT
key and a
FTS_DOC_ID
column caused a server error.
(Bug #27041445, Bug #88267)
References: This issue is a regression of: Bug #22679185.
In strict SQL mode, assignment of invalid values to
AUTO_INCREMENT
columns could be handled
incorrectly, resulting in an assertion being raised.
(Bug #27041393, Bug #88273)
Thread stack exhaustion could raise an assertion rather than returning an error. (Bug #27041350, Bug #88277)
SET
PERSIST_ONLY
did not properly consider whether the
runtime validation function for persisted variables should be
invoked.
(Bug #27016247)
The audit_log
plugin could mishandle aborts
of event executions, causing a server exit.
(Bug #27008133)
Some boundary cases for negation of large signed integers were corrected. (Bug #27004880, Bug #27008075)
An ALTER TABLE
operation
attempted to set the AUTO_INCREMENT
value for
table in a discarded tablespace.
(Bug #26935001)
MyISAM
index corruption could occur for
bulk-insert and table-repair operations that involve the
repair-by-sorting algorithm and many (more than 450 million)
rows.
(Bug #26929724, Bug #88003, Bug #28483283)
The Performance Schema could produce
DIGEST_TEXT
values with a trailing space.
This no longer occurs.
(Bug #26908015)
Dropping an index from a system table could cause a server exit. (Bug #26881798)
A prepared statement using
CREATE
TABLE ... SELECT
led to unexpected behavior when it
referred in a GROUP BY
to a view having the
same name.
(Bug #26881703)
With auto-commit disabled and an XA transaction in PREPARED
state, attempts to execute
XA COMMIT
or
XA ROLLBACK
failed.
(Bug #26848877, Bug #87836)
Some diagnostic messages produced by LDAP authentication plugins misleadingly suggested an error when no error had occurred. (Bug #26844713)
Initialization code for mysql_upgrade and mysqlpump was reorganized to avoid assertion failures. (Bug #26802211)
Full-text searches could raise an assertion due to improper handling of errors that occurred while attempting to acquire metadata locks. (Bug #26799898)
A keyring file created by the keyring_file
plugin on a 32-bit server was inaccessible by the
keyring_file
on a 64-bit server, and vice
versa.
(Bug #26793060)
Metadata locks for column statistics were not displayed properly
in the Performance Schema
metadata_locks
and
events_waits_
tables.
(Bug #26772858, Bug #87708)xxx
The my_snprintf
plugin service was removed
and reimplemented using C++11 snprintf
.
(Bug #26696147, Bug #87547)
After an in-place upgrade from MySQL 5.7 to MySQL 8.0 on a server with a large number of tables, server startup failed to complete due to excessive memory consumption during data dictionary creation. (Bug #26486160)
An error occurring in a statement that modifies user privileges could result in deadlock for other transactions attempting to access the user privilege cache. (Bug #26475282)
The thread pool plugin logged too much information for failed connections. (Bug #26368725, Bug #86863)
Enabling multiple components concurrently could result in a server exit. (Bug #26171471, Bug #86514)
A malformed mysqld-auto.cnf
file could
cause a server exit.
(Bug #26085774)
Creating a table in a reserved tablespace did not return an error. (Bug #26073851, Bug #86309)
For debug builds, using KILL
to
terminate a stored routine could raise an assertion. Thanks to
Laurynas Biveinis for the patch.
(Bug #26040870, Bug #86260)
If the init_connect
system
variable was set, its contents could not be executed by clients
with expired passwords, who therefore were prevented from
connecting. Now, if a client has an expired password,
init_connect
execution is
skipped, which enables the client to connect and change
password.
(Bug #25968185)
Dates using the YYYYMMDD
format were
not recognized correctly in a query meeting all three of the
following conditions:
The query performed a left join.
A DATE
column in the inner table
of the join was part of a multi-column primary key.
Every column in the inner table's primary key was compared with another value; this could be either a literal or a column value. (Bug #25949639)
An in-place ALTER TABLE
operation
on a table with foreign keys resulted in a table definition
mismatch. The new table definition passed to storage engine
methods during the ALTER TABLE
execution contained invalid foreign key names.
(Bug #25915132, Bug #85997)
It was possible to assign nonexistent roles to an account as its default roles. (Bug #25755666, Bug #85561)
Using the C API, when trying to execute an
INSERT
prepared statement with
CURSOR_TYPE_READ_ONLY
set, the client hung.
(Bug #25701141, Bug #85105)
RENAME USER
failed even though
the user or role to be renamed was not present in any role
graph.
(Bug #25658586)
MySQL client programs could exit unexpectedly if malformed client/server protocol packets were received. (Bug #25471090)
Memory statistics collected by the Performance Schema could be incorrect due to race conditions. (Bug #25212799)
Incorrect handling by the CONNECTION_CONTROL
plugin of an internal hash led to spurious messages in the error
log and eventual server exit.
(Bug #25052009)
CURRENT_ROLE()
and
ROLES_GRAPHML()
now return a
string with the utf8
character set.
Previously, they incorrectly returned a binary string.
(Bug #24843257)
Killing INSTALL COMPONENT
or
UNINSTALL COMPONENT
could result
in multiple rows for a single component in the
mysql.component
system table.
(Bug #24660436)
Performing SHOW PROCESSLIST
while
running a high load concurrently using the X Plugin could lead
to an unplanned server exit.
(Bug #24621170)
References: See also: Bug #23057045.
The regular expression implementation in MySQL uses a
String
object—intended to be
initialized as empty—to hold the current subject, and used
the literal ""
for this value. This could
interfere with other functions that do likewise. This is fixed
by constructing the String
with a
nullptr
instead.
(Bug #23276471)
mysqlpump could leak memory or exit when errors occurred. (Bug #23102944)
LDML 2.8 collation definitions could cause unexpected server behavior. (Bug #22819030)
Log-opening operations accessed log-name system variables without holding a lock on them. Multiple threads accessing such a variable could lead to a race condition and unexpected server behavior. (Bug #22591899)
When the range optimizer computed the prefix for a string of sufficient length, it was possible for it to truncate the string in the middle of a character, which could lead to assertion and other failures in debug builds. Now steps are taken in such cases to make sure that the string is truncated at a character boundary. (Bug #22475473, Bug #13712655)
Queries having subqueries or expressions in the GROUP
BY
clause could in some situations return random
results, due to reading of uninitialized data.
(Bug #20035304)
References: See also: Bug #21922202.
Queries having subqueries or expressions in a GROUP
BY
clause sometimes returned random results due to
reading of uninitialized data.
(Bug #20035304)
References: See also: Bug #21922202.
The audit_log
plugin did not log placeholder
values for prepared statements.
(Bug #16617026)
ALTER TABLE ... RENAME
operations could lose
foreign keys defined on the table if executed using the
COPY
algorithm.
(Bug #11756183, Bug #48070)
Integer columns in UNION
statements could be cast to
BIGINT
even if a smaller integer
type was more appropriate.
(Bug #11747567, Bug #33004)
Added
ER_REGEXP_INVALID_CAPTURE_GROUP_NAME
(Error 13110).
(Bug #89796, Bug #27597980)
Window function row-buffer handling has been refactored to reduce the number of handler reads by 25%. (Bug #89512, Bug #27484133)
For some frames, the functions
VARIANCE()
,
VAR_POP()
, and
VAR_SAMP()
produced wrong results
when evaluated with the
windowing_use_high_precision
system variable set to false
.
(Bug #89390, Bug #27438725)
Generated columns with a prefix index were not considered when the optimizer attempted to substitute an expression with an equivalent generated column. This prevented use of prefix indexes to speed up queries with predicates employing a generated column expression. (Bug #89291, Bug #27403367)
FIRST_VALUE()
did not always
return NULL
for an empty frame.
(Bug #89116, Bug #27348276)
Regular expression functions accepting optional arguments did
not return NULL
as expected when one or more
of these arguments was passed as an explicit
NULL
.
(Bug #88872, Bug #27252630)
Row-based replication used the wrong set of indexes on the slave. (Bug #88847, Bug #27244826)
When executed with no default database having been chosen,
EXPLAIN
EXTENDED
raised Error 1046 No database
selected instead of the SQL syntax error expected
due to the fact that the EXTENDED
keyword has
been removed.
(Bug #88591, Bug #27153116)
The CMake option OPTIMIZER_TRACE=0
had no
effect on builds and so is no longer used.
(Bug #88520, Bug #27130109)
A SELECT
statement using
GROUP BY
with no constant or aggregate column
failed a check for functional dependencies, correctly, on the
first attempt but succeeded, wrongly, on the next.
(Bug #88474, Bug #27427677)
References: See also: Bug #21807579.
A CREATE
TABLE ... SELECT
statement with a
UNION
in the
SELECT
failed in strict mode for
a DATE
column declared as
NOT NULL
.
(Bug #87711, Bug #27068222)
Prepared statements using nested sub-selects were not always handled correctly. (Bug #87484, Bug #26657904)
The cost estimates for a query containing window functions did
not take into account the cost of PARTITION
BY
or ORDER BY
, nor did they
include the cost of using the frame buffer.
(Bug #87373, Bug #26612356)
References: See also: Bug #26502118.
When processing a query with a subquery, the subquery is no
longer optimized if outer query is known to produce an empty
result; in such cases, EXPLAIN
now shows Not optimized, outer query is
empty
.
This change is made because, when the table used by the outer
query is found empty at optimization, this sets the join column
to NULL
even when defined as not nullable,
which leads to a conflict when optimizing the subquery.
An exception is made if the outer query has aggregates without
any GROUP BY
; this means that it has a
non-empty result, and that any subquery in the
SELECT
list must be evaluated and
optimized, which reopens the nullability issue, which is now
handled correctly for such cases.
(Bug #83115, Bug #24713879)
References: See also: Bug #83216, Bug #24760317.
When selecting from all columns making up a unique key
containing nullable columns, with all columns in the
WHERE
condition set to non-null values, MySQL
did not take into account their uniqueness, with the result that
only_full_group_by
missed detecting a
functionally dependent column.
(Bug #79291, Bug #22279903)
When using a partial index, the optimizer performed a more expensive table lookup instead of using the index, even when the partial index covered the entire set of data needed. (Bug #74359, Bug #19806106)