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/.
For new MySQL installations, the USER
and
HOST
columns in the
audit_log_user
table used by MySQL Enterprise Audit now
have definitions that better correspond to the definitions of
the User
and Host
columns
in the mysql.user
system table.
For upgrades to an installation for which MySQL Enterprise Audit is already installed, it is recommended that you alter the table definitions as follows:
ALTER TABLE mysql.audit_log_user DROP FOREIGN KEY audit_log_user_ibfk_1; ALTER TABLE mysql.audit_log_filter CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci; ALTER TABLE mysql.audit_log_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_ci; ALTER TABLE mysql.audit_log_user MODIFY COLUMN USER VARCHAR(32); ALTER TABLE mysql.audit_log_user ADD FOREIGN KEY (FILTERNAME) REFERENCES mysql.audit_log_filter(NAME);
(Bug #23706056)
Microsoft Windows:
For OpenSSL 1.1, the library names have changed for Windows. The
CMake configuration code now accounts for
this. Also, it is now possible on Windows to use
-DWITHOUT_SERVER=1
to build 32-bit client
binaries.
(Bug #28170711, Bug #91223)
The minimum version of the Boost library for server builds is now 1.67.0. (Bug #27866110)
The maximum value was increased from 256 to 1024 for these Performance Schema system variables:
performance_schema_max_cond_classes performance_schema_max_file_classes performance_schema_max_mutex_classes performance_schema_max_rwlock_classes performance_schema_max_socket_classes performance_schema_max_stage_classes performance_schema_max_thread_classes
The default value was increased from 250 to 300 for this Performance Schema system variable:
performance_schema_max_mutex_classes
(Bug #27647918)
For RelWithDebInfo
builds on Linux,
REPRODUCIBLE_BUILD
now defaults to
ON
.
(Bug #27483447)
The default value for the
slave_pending_jobs_size_max
system variable has increased from 16M to 128M. On a
multi-threaded slave ( with
slave_parallel_workers > 0
),
this value sets the maximum amount of memory that is made
available to slave worker queues holding events that have not
yet been applied. The potentially larger memory usage should be
taken into account when calculating the resources required to
deploy a multi-threaded slave. Masters and single-threaded
slaves are not affected by this setting.
The new default is double the recently increased default value
specified by the
max_allowed_packet
system
variable (now 64M). The value of
slave_pending_jobs_size_max
is
a soft limit, so events larger than its value (consisting of one
or more packets) can be queued and processed. However, a large
transaction is held until all the slave workers have empty
queues, and then processed. All subsequent transactions are held
until the large transaction has been completed. The delay to
clear the queues of all the slave workers and the wait to queue
subsequent transactions can cause lag on the replication slave
and decreased concurrency of the slave workers. The value of
slave_pending_jobs_size_max
should therefore be set high enough to accommodate most expected
event sizes.
(WL #11348)
The following data dictionary enhancements were introduced:
An internal method was added to protect against global read locks. The method is called before storing, updating, or dropping data dictionary objects.
Assertion code was added to the data dictionary API to protect against global read locks when storing, updating, or dropping data dictionary objects.
Protection is now implicitly acquired against backup locks and global read locks when an exclusive metadata lock is acquired by a storage engine.
A cost model cache validity check is now performed before releasing a cost model entry.
A data dictionary API function was added for committing and rolling back transactions, and for releasing transactional meta data locks.
(Bug #27937059)
Explicit ASC
or DESC
qualifiers for GROUP BY
clauses are now
deprecated and will be removed in a future MySQL version.
(WL #11459)
The MySQL Enterprise Firewall firewall_whitelist
table now
contains a primary key column named ID
.
(Bug #27164826)
The BIT_AND()
,
BIT_OR()
, and
BIT_XOR()
aggregate functions now
can be used as window functions, if an OVER
clause is present. See Aggregate Function Descriptions.
(WL #11573)
Previously, successful assignments to the
dragnet.log_error_filter_rules
system variable resulted in a Note and a nonzero warning count.
To avoid generating a diagnostic for a successful operation,
this Note is no longer generated. Instead, the
dragnet.Status
status variable
can be consulted to determine the result of the most recent
assignment to
dragnet.log_error_filter_rules
.
(Bug #27910708, Bug #90571)
Previously, log components listed in the
log_error_services
system
variable had to be separated by semicolons. Components now can
be separated by commas. A given setting cannot use both
semicolon and comma separators.
(Bug #27788925, Bug #90268)
The filesort
algorithm (used by the optimizer
to satisfy an ORDER BY
clause when no index
can be used) is now more memory efficient. The primary change is
that the optimizer allocates memory buffers incrementally as
needed, up to the size indicated by the
sort_buffer_size
system
variable, rather than allocating a fixed amount of
sort_buffer_size
bytes up
front. This enables users to set
sort_buffer_size
to larger
values to speed up larger sorts, without concern for excessive
memory use for small sorts. (This benefit may not occur for
multiple concurrent sorts on Windows, which has a weak
multithreaded malloc
.)
In addition, filesort
is less pessimistic
with respect to worst-case scenarios. Previously,
filesort
produced an error without starting
if merge operations or sort-key generation might fail. Now,
because the worst case is unlikely to occur in practice,
filesort
produces an error only for actual
rather than prospective failures.
(WL #11590)
Previously, extended EXPLAIN
output was produced only for
SELECT
statements. Extended
output is now produced for
INSERT
,
REPLACE
,
UPDATE
, and
DELETE
statements as well. (To
display extended output, use SHOW
WARNINGS
following
EXPLAIN
. See
Extended EXPLAIN Output Format.)
(WL #6033)
For Linux, the generic binary distribution compression algorithm changed from Gzip to XZ; and the file extension changed from .tar.gz to .tar.xz. (Bug #28450941, Bug #91889)
Docker disables NUMA-related operations by default, so the mysqld included in Docker images now has NUMA support disabled so that the error log does not fill with NUMA warnings. (Bug #28081363)
RPM .spec
files were updated to reflect the
removal of yaSSL and that OpenSSL is the default SSL library for
all builds.
(Bug #28025427)
For generic Linux .tar.gz
distributions,
the mysqlxtest client has been moved from the
server package to the test package.
(Bug #27744137)
An RPM package for installing ARM 64-bit (aarch64) binaries of MySQL Server on Oracle Linux 7 is now available in the MySQL Yum Repository and for direct download.
Known Limitation for this ARM release: You must enable the Oracle Linux 7 Software Collections Repository (ol7_software_collections) to install this package, and must also adjust the libstdc++7 path. See Yum's Platform Specific Notes for additional details.
The linked OpenSSL library for MySQL Server has been updated to version 1.0.2o. Issues fixed in the new OpenSSL version are described at http://www.openssl.org/news/vulnerabilities.html. (Bug #28025379)
Incompatible Change:
The new spatial functions
ST_Longitude()
and
ST_Latitude()
return the
longitude or latitude, respectively, of their
Point
argument. If called with a second
argument, these functions use the argument to set the longitude
or latitude, respectively, of their Point
argument.
In addition, the ST_X()
and
ST_Y()
functions now interpret
their Point
argument according to its spatial
reference system definition (SRS):
ST_X()
returns the coordinate
value of the axis that appears first in the SRS definition,
and ST_Y()
returns the
coordinate value of the axis that appears second in the SRS
definition.
If ST_X()
and
ST_Y()
are used to set the
longitude or latitude of a Point
argument
that has a geographic SRS, the longitude or latitude value
must be in the proper range for the SRS, or an error occurs.
If spatial data contains geometry values that now are
interpreted differently by
ST_X()
and
ST_Y()
, existing queries using
these functions will return different results, compared to
previous MySQL versions.
(Bug #27125600, Bug #88503, WL #11453)
The EPSG data set containing spatial reference system data for spatial calculations has been upgraded from version 9.2 to 9.3. (Bug #27977721)
Spatial functions that accept geometry arguments and previously
returned an
ER_LONGITUDE_OUT_OF_RANGE
or
ER_LATITUDE_OUT_OF_RANGE
error
for longitude or latitude values out of range now return
ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE
or
ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE
instead. This does not apply to spatial functions that parse or
modify geometries:
ST_
,
xxx
FromText()ST_
,
xxx
FromWKT()ST_
,
xxx
FromWKB()ST_GeomFromGeoJSON()
,
ST_X()
, ST_Y()
,
ST_Longitude()
, and
ST_Latitude()
.
(Bug #27892138)
Previously, the parser recognized USING RTREE
in index specifications, but this could not be specified for any
storage engine. Now USING RTREE
is permitted
for spatial index specifications.
(Bug #27836608)
Indexes on geometry columns now must be spatial indexes.
Consequently, the SPATIAL
keyword is optional
but implicit for creating an index on a spatial column. A
spatial index on a geometry column is not permitted for a
primary key or unique index. Also, ASC
and
DESC
are not permitted for spatial indexes.
(Bug #21087676, WL #11808)
Important Change:
MySQL now allows a query having a WITH ROLLUP
modifier to use DISTINCT
. See
SELECT Statement, for more information.
(Bug #87450, Bug #26640100, Bug #20671578, Bug #76229)
Important Change:
MySQL now allows the use of ORDER BY
with
grouping functions in SELECT
.
statements.
(Bug #86312, Bug #27063525)
Important Change:
MySQL now allows ORDER BY
to be used in a
query having a WITH ROLLUP
modifier. For more
information, see SELECT Statement.
(Bug #86311, Bug #26073513)
Authentication errors returned from a MySQL 8.0.11 server to an X Plugin client were marked as fatal, which caused the client to stop attempting its automatic sequence of authentication attempts using different methods. X Plugin now ignores fatal authentication errors, and subsequent expected errors such as write timeout errors, while the sequence of authentication attempts is in progress. If none of the authentication methods tried are successful, X Plugin now selects and returns the most relevant error message received from the server, which is not necessarily the last error message received. (Bug #28135006)
During the X Plugin automated authentication sequence,
connection attempts are made using different authentication
methods in a pre-set sequence. X Plugin checks before starting
the sequence whether the connection uses SSL or not, and does
not attempt connection with the PLAIN
authentication method if the connection is not encrypted. For
additional verification, a check and error were added so that
the PLAIN
authentication method is disallowed
if attempted when the connection is not encrypted.
(Bug #27691189)
In the event of an authentication failure, X Plugin always
returned the error code ER_ACCESS_DENIED
,
with a custom X Protocol error message for the error situation.
The error codes that are received from the MySQL server for
authentication failures are now passed on to the client instead,
with the standard MySQL error messages that go with them.
(Bug #27675699)
During the X Plugin automated authentication sequence, where
connection attempts are made using different authentication
methods in a pre-set sequence, the error returned after every
failed connection attempt was marked with the severity
FATAL
. Now, the errors are marked as
ERROR
while there are still other
authentication methods to be attempted, and only the final error
that results in disconnection is marked as
FATAL
.
(Bug #27636947)
The X Plugin code was being compiled twice with different preprocessor definitions. (Bug #27267054)
A number of improvements were made to the handling of authentication issues by X Plugin:
The X Plugin automated authentication sequence, where connection attempts are made using different authentication methods in a pre-set sequence, is now halted if an error response indicates that the connection has been broken or reads or writes are timing out.
The automated authentication sequence is also now halted in the event of any fatal error.
The last significant error is now reported for an abandoned authentication sequence, not just the last error that occurred.
A more specific error code and message are now reported if
authentication with the
caching_sha2_password
authentication
plugin is attempted over an unsecure connection.
(Bug #27257774)
In some circumstances, a MySQL server with X Plugin loaded could
experience an unexpected halt during a shutdown process
initiated by a failed start or by the RESTART
command. The issue has now been fixed.
(Bug #25474793, Bug #27259783)
Important Change; Group Replication:
group_replication_exit_state_action
determines how Group Replication behaves when a server instance
leaves the group involuntarily, such as when it is expelled from
the group due to an unstable network connection. When
group_replication_exit_state_action
is
ABORT_SERVER
(the default), the instance
shuts itself down; when its value is
READ_ONLY
, the instance switches itself to
super read-only mode instead, and goes into the Group
Replication ERROR
state.
(WL #11568)
InnoDB:
InnoDB
now supports
ALGORITHM=INSTANT
for the following
ALTER TABLE
operations:
Operations that support ALGORITHM=INSTANT
only modify metadata in the data dictionary. No exclusive
metadata locks are taken on the table during preparation and
execution phases of the operation, and table data is unaffected,
making the operations instantaneous. If not specified
explicitly, ALGORITHM=INSTANT
is used by
default by operations that support it. If
ALGORITHM=INSTANT
is specified but not
supported, the operation fails immediately with an error.
For more information about operations that support
ALGORITHM=INSTANT
, see
Online DDL Operations.
Thanks to the Tencent Games DBA team for the contribution. (Bug #28100103, Bug #91074, WL #11250)
InnoDB: Undo logging is now supported for small updates to large object (LOB) data, which improves performance of LOB updates that are 100 bytes in size or less. Previously, LOB updates were a minimum of one LOB page in size, which is less than optimal for updates that might only modify a few bytes. This enhancement builds upon support added in MySQL 8.0.4 for partial update of LOB data. (WL #11328)
Replication: You can now use a shell pipe to supply an archive of compressed binary log files to mysqlbinlog as streamed input. Previously, the files had to be extracted separately before passing them to mysqlbinlog. Thanks to the Facebook team for this contribution.
In this example, binlog-files_1.gz
contains
multiple binary log files for processing. The pipeline extracts
the contents of binlog-files_1.gz
, pipes the
binary log files to mysqlbinlog as standard
input, and pipes the output of mysqlbinlog
into the mysql
client for execution:
gzip -cd binlog-files_1.gz | ./mysqlbinlog - | ./mysql -uroot -p
(Bug #27445278, Bug #89423)
References: See also: Bug #27836543.
Replication:
The SYSTEM_VARIABLES_ADMIN
and
PERSIST_RO_VARIABLES_ADMIN
privileges have been added to the
mysql.session
reserved account.
(Bug #89873, Bug #27621869)
Replication:
Information about XCom's memory usage has been added to the
Performance Schema tables. The
setup_instruments
table now has an
entry corresponding to the XCom cache, and the
memory_summary_global_by_event_name
table contains the memory usage statistics of the XCom cache.
(WL #9855)
Microsoft Windows:
On Windows, the forking used to implement
RESTART
was suppressible using
the --gdb
option. However, this
was a side effect, performed in addition to the other option
actions done to set up a debugging environment. In non-debug
settings, the new --no-monitor
option may be used for the sole purpose of suppressing forking
the monitor process. For a server started with either
--gdb
or --no-monitor
,
executing RESTART
causes the
server to simply exit without restarting.
(Bug #27801043)
Checking for foreign key relationships by
DROP TABLE
and
DROP DATABASE
was improved. The
check now takes place before any tables are deleted, so that in
the event of a problem the statement fails before making any
changes. Parent and child tables now can be dropped in arbitrary
order, as long as they are dropped by the same DROP
TABLE
statement. In addition, error reporting was
improved for attempts to drop a parent table without dropping a
child table.
(Bug #27821060, Bug #17564464, Bug #70531, Bug #22359539, Bug #79610)
When support for roles was added, the ADMIN
keyword became a reserved keyword. ADMIN
is
now once again a nonreserved keyword.
(Bug #27814204)
When a client shuts down the server, the server now writes a message to the error log indicating which user performed this action. (Bug #26246628, Bug #86635)
Previously, for the
--ssl-mode=VERIFY_IDENTITY
option, the client checked whether the host name that it used
for connecting matched the Common Name value in the certificate
but not the Subject Alternative Name value. Now, if the client
uses OpenSSL 1.0.2 or higher, the client checks whether the host
name matches either the Subject Alternative Name value or the
Common Name value in the server certificate. Thanks to Daniël
van Eeden for a patch on which this change was based.
(Bug #16211011, Bug #68052, Bug #27511233, Bug #89578)
Important Change; JSON:
The JSON_TABLE()
function now
automatically decodes base-64 values and prints them using the
character set given by the column specification.
(Bug #90157, Bug #27729112)
References: See also: Bug #89847, Bug #27613276.
InnoDB:
New columns added to
INFORMATION_SCHEMA.INNODB_TABLES
and
INFORMATION_SCHEMA.INNODB_COLUMNS
tables in
8.0.12 did not appear after upgrading to 8.0.12.
(Bug #28065244)
InnoDB: Large object (LOB) version numbers stored in LOB index entries were left uninitialized at 0 instead of initialized at 1. (Bug #28046298)
InnoDB: Adding a column to a table with a generated column raised an invalid assertion. (Bug #28040201)
InnoDB: An attempt to access freed memory during a checkpoint operation caused the server to exit. (Bug #28039477)
InnoDB: An assertion failure occurred when starting the server with experimental system variables that were unintentionally exposed in normal MySQL builds. (Bug #27899424, Bug #90526, Bug #27898396, Bug #90523, Bug #27898344, Bug #90522)
InnoDB: An invalid system variable setting raised an assertion. (Bug #27898284)
InnoDB: Attempting to move a table from a discarded file-per-table tablespace to a shared tablespace raised an assertion. The operation now produces an error instead. (Bug #27861972)
InnoDB: Potential failures related to page allocation for large objects (LOBs) were not sufficiently handled. (Bug #27852003)
InnoDB: The ngram full-text search parser permitted comma and period characters to be tokenized as words, which caused an inconsistency between boolean and natural language mode search results. Comma and period characters are no longer tokenized. (Bug #27847697)
InnoDB: Checksum mismatches and other issues were caused by concurrent modification of a tablespace header page, and attempting to place a lock on a partially initialized page. (Bug #27823064)
InnoDB:
An I/O error returned by an fsync()
operation
is now treated as a hard error.
(Bug #27805553, Bug #90296)
InnoDB: In a single thread, two minitransactions latched the first page of a large object value (LOB) while another thread attempted to allocate the page, causing a deadlock. (Bug #27777959)
InnoDB:
After upgrading to MySQL 8.0.12, table columns including the
FTS_DOC_ID column were missing from the
INFORMATION_SCHEMA.INNODB_COLUMNS
table.
(Bug #27774145)
InnoDB: An invalid assertion was raised when the optimizer chose a prefix index defined on a virtual column. (Bug #27755892)
References: This issue is a regression of: Bug #19806106.
InnoDB: An in-memory table object for a table being truncated could be opened under improper metadata locking protection.
A new method of preserving the AUTOINC
counter value during a
TRUNCATE
PARTITION
operation was implemented.
(Bug #27754995)
InnoDB: An assertion was raised during a mini-transaction commit that included dirty pages but no redo log records. The mini-transaction did not wait for space in the recently-closed buffer and subsequently marked the page with an invalid current LSN value. After the invalid LSN value was added to the flush list, a delayed mini-transaction added dirty pages with an earlier LSN value, breaking the flush list order.
The
innodb_log_checkpoint_fuzzy_now
debug option was added. Enabling this option forces
InnoDB
to write a fuzzy checkpoint. Also, new
internal redo log module counters were added for tracking LSN
values. The log_lsn_buf_dirty_pages_added
counter tracks the LSN value up to which dirty pages have been
added, and the log_lsn_buf_pool_oldest_lwm
counter tracks the low watermark LSN for the oldest modified
block in the buffer pool.
(Bug #27664539)
InnoDB: The Contention-Aware Transaction Scheduling algorithm (CATS) tracks the number of transactions waiting for another transaction. In the case of a deadlock, the method by which the number of waiting transactions is approximated produced inflated values. (Bug #27646322)
InnoDB:
Attempting to acquire an InnoDB
ticket while
holding a victim transaction lock caused a lock order violation.
(Bug #27626681)
References: This issue is a regression of: Bug #23476050.
InnoDB: An attempt to read a zero-length BLOB value raised an assertion failure during recovery. The BLOB value was not yet completely inserted. (Bug #27617389)
InnoDB: A race condition occurred when acquiring a table lock for a table that was already in memory. (Bug #27586419, Bug #27577704)
References: This issue is a regression of: Bug #26848711.
InnoDB: After restarting the server, attempting to create an encrypted table returned a generic error from the storage engine. (Bug #27577339)
InnoDB: The use of Contention-Aware Transaction Scheduling (CATS) with a spatial index caused a transaction to wait indefinitely. (Bug #27572937)
InnoDB:
Incorrect parsing of a tablespace name that included multibyte
characters caused a DROP DATABASE
operation to fail.
(Bug #27566937)
InnoDB: A check performed to identify temporary tables caused an error when the data dictionary attempted to open a partitioned table. (Bug #27565997)
InnoDB: A schema mismatch error reported during an import tablespace operation failed to print mismatched table flags in a readable format. (Bug #27542720)
InnoDB:
A DDL operation failed to wait for a FULLTEXT
index optimization operation to finish.
(Bug #27326796)
References: This issue is a regression of: Bug #24938374.
InnoDB:
An unnecessary check for read-only transactions was removed from
the trx_set_rw_mode()
function. Thanks to
Sandeep Sethia for the patch.
(Bug #27211287, Bug #88739)
InnoDB: A DDL operation that added a foreign key constraint raised an assertion when it accessed a stale memory object that belonged to the parent table. (Bug #27208858)
InnoDB: A failing assertion occurred after initiating a memcached get operation. (Bug #26876594)
InnoDB: A corrupt index ID encountered during a foreign key check raised an assertion. (Bug #26654685)
InnoDB:
A DROP TABLE
operation on a table
residing in a general tablespace raised an assertion when
checking index status in the post-DDL phase of the operation.
(Bug #26523254)
InnoDB: An internal deadlock during a DDL operation resulted in a long semaphore wait followed by a server exit. (Bug #26225783)
InnoDB: A DDL operation encountered a serious error due to an invalid lock upgrade. (Bug #26225783)
InnoDB: On a Windows 64-bit system, invalid buffer pool configuration values caused the server to exit on startup. (Bug #26100239, Bug #86370)
InnoDB: A debug code block related to mutex type definitions was removed. It no longer differed from the non-debug version of the code block. (Bug #24952279, Bug #83529)
InnoDB:
A server failure during recovery occurred due to a log parsing
buffer overflow. Space is now allocated to the log parsing
buffer dynamically and incremented as necessary until it reaches
the size specified by
innodb_log_buffer_size
.
(Bug #24734190)
InnoDB: Table locking was optimized for concurrent updates on the same table by avoiding costly iterations over the table locks queue.
Thanks to Zhai Weixiang for the contribution. (Bug #18955152, Bug #72948)
Packaging: On Windows, the mysqld.exe --help command displayed unnecessary and unexpected details in the system output, which this fix eliminates. (Bug #27894020)
Partitioning:
Rollback of
ALTER
TABLE ... TRUNCATE PARTITION
statements was not
handled correctly.
(Bug #27603025)
References: See also: Bug #87562, Bug #26710839.
Partitioning: For a partitioned table, partition update time could be incorrect after rebuilding the table or restarting the server. (Bug #27073100)
Replication:
If the option
--skip-log-bin
was specified at server startup to disable binary logging, no
warning message was issued if both
expire_logs_days
and
binlog_expire_logs_seconds
were
set to a nonzero value. The
--skip-log-bin
option meant there were no binary log files to expire, so the
outcome of these binary log expiration period settings (which is
that the expire_logs_days
value
is ignored) had no practical effect. However, the warning
message is now issued, so that the situation can be corrected
before binary logging is enabled for the server.
(Bug #27699608)
Replication:
The log messages generated when a member fails to join the group
have been improved, for example when
group_replication_group_name
on
the member joining the group does not match the seed's
group_replication_group_name
this is now described in the log message.
(Bug #27628695)
Replication:
If a MySQL server is started in crash recovery mode with an
innodb_force_recovery
setting
of 4 or greater, which places InnoDB
into
read-only mode, the semisynchronous replication master plugin
should not be initialized. Due to a change in plugin
initialization order in MySQL 8.0, the server assumed that if
the plugin was registered, it had also been initialized, and
incorrectly attempted to deinitialize it. The handling of this
plugin in crash recovery mode has now been corrected so that the
deinitialization function is not executed when the plugin has
not been initialized.
(Bug #27481872)
Replication:
The use of replication filters or binary log filters can cause
issues when they are applied to tables that are updated with XA
transactions. Filtering of tables could cause an XA transaction
to be empty on a replication slave, and empty XA transactions
are not supported. Also, with the settings
master_info_repository=TABLE
and
relay_log_info_repository=TABLE
on a replication slave, which became the defaults in MySQL 8.0,
the internal state of the data engine transaction is changed
following a filtered XA transaction, and can become inconsistent
with the replication transaction context state.
Due to these issues, the use of replication filters or binary
log filters in combination with XA transactions is not
supported. This fix adds the new error
ER_XA_REPLICATION_FILTERS
, which
is logged whenever an XA transaction is impacted by a
replication filter, whether or not the transaction was empty as
a result. If the transaction is not empty, the replication slave
is able to continue running, but you should take steps to
discontinue the use of replication filters with XA transactions
in order to avoid potential issues. If the transaction is empty,
the replication slave stops. In that event, the replication
slave might be in an undetermined state in which the consistency
of the replication process might be compromised. In particular,
the gtid_executed
set on a slave of the slave
might be inconsistent with that on the master. To resolve this
situation, isolate the master and stop all replication, then
check GTID consistency across the replication topology. Undo the
XA transaction that generated the error message, then restart
replication.
(Bug #27442477)
Replication: When mysqlbinlog was used to read a binary log event larger than 128KB, the read failed because 128KB was returned as the size, instead of the actual size. The issue has now been fixed. Thanks to the Facebook team for the patch. (Bug #27417084, Bug #89326)
Replication:
When a transaction larger than the binary log transaction cache
size (binlog_cache_size
) was
flushed to a temporary file during processing, and the flush
failed due to a lack of space in the temporary directory, the
flush error was not handled correctly. No message was written to
the error log, and the binary log cache was not cleared after
the transaction was rolled back. Now, in this situation, the
server takes an appropriate action based on the
binlog_error_action
setting
(shut down the server or halt logging), and writes a message to
the error log. When the transaction is rolled back, the server
checks for flush errors and clears the binary log cache if any
occurred.
(Bug #27399620, Bug #89272)
Replication:
When GTIDs are in use for replication, replicated transactions
that are filtered out on the slave are persisted. If binary
logging is enabled on the slave, the filtered-out transaction is
written to the binary log as a Gtid_log_event
followed by an empty transaction containing only
BEGIN
and
COMMIT
statements. If binary
logging is disabled, the GTID of the filtered-out transaction is
written to the mysql.gtid_executed
table.
This process ensures that there are no gaps in the set of
executed GTIDs, and that the filtered-out transactions are not
retrieved again if the slave reconnects to the master.
Previously, this process was not done for
CREATE DATABASE
,
ALTER DATABASE
, and
DROP DATABASE
statements, but it
is now carried out for those statements as well as for others.
(Bug #27308751, Bug #88891)
Replication:
On a multithreaded slave, when a STOP
SLAVE
statement is executed on the slave, followed by
a START SLAVE
statement, the
error log can report a different position in the binary log for
the slave SQL thread when exiting, compared to the position
reported for the slave SQL thread at the subsequent
initialization.
For a multithreaded slave, the position reported for the SQL thread on exit is a low water mark, up to which the replication stream is consistent and has no gaps. Transactions appearing before the position are guaranteed to have committed, but transactions after the position may have committed or not. However, this low water mark was being reported before the process to stop the worker threads was actually carried out, and the low water mark was subsequently updated by a checkpoint routine during that process. The timing of the log message has now been changed so that the final low water mark is reported as the position for the SQL thread on exit. (Bug #27300658)
Replication:
An online upgrade of a replication group that was running a
version of MySQL earlier than 5.7.23 was not possible. When a
member running a version earlier than either MySQL 5.7.22 or
MySQL 8.0.11 tried to join a group with members running MySQL
5.7.21 or earlier, it failed to join the group because MySQL
5.7.21 does not send the value of it
lower_case_table_names
system
variable. This mean that the later version compared the
lower_case_table_names
variable
with an invalid value and exited the group. The work around is
to take the group offline, upgrade to version 5.7.23 or 8.0.12
and later. Subsequent upgrades of the group can then be carried
out without taking the group offline. See
Upgrading Group Replication.
(Bug #90794, Bug #27991334)
Replication:
It was possible to change the value of
gtid_purged
while running the
Group Replication plugin, even though this variable should never
be modified in such cases.
(Bug #90146, Bug #27724561)
Replication:
The PIT_TRANSACTIONS_NEGATIVE_CERTIFIED
, the
PIT_TRANSACTIONS_ROWS_VALIDATING
and the
PIT_TRANSACTIONS_LOCAL_ROLLBACK
member
messages were not being correctly decoded.
(Bug #90077, Bug #27692831)
Replication: In certain situations, such as during distributed recovery procedure, the certification info garbage collection was purging more data than it should, resulting in conflicts not being detected. The garbage collection procedure has been improved to take this case in consideration. (Bug #89938, Bug #27652526)
Replication:
The
ER_GRP_RPL_SQL_SERVICE_FAILED_TO_RUN_SQL_QUERY
error was being logged incorrectly.
(Bug #89788, Bug #27590534)
Replication:
Using
group_replication_force_members
to unblock a group, for example after losing majority, sometimes
failed with error 1231.
(Bug #86957, Bug #26394418)
Group Replication:
When the group_replication_applier
channel's
applier thread encountered an error, the
master_log_name
and
end_log_pos
values shown in the resulting
error message were incorrect, since the events in a transaction
are replicated before they are written to the binary log of the
member where the transaction originated, with the result that
the final values are unknown at the time they are applied on the
replica by the applier thread. To avoid confusion, any such
error messages encountered by a
group_replication_applier
channel no longer
contain the binary log name or position.
(Bug #89146, Bug #27368735)
macOS: On macOS, the server autostarted at system boot time even when set not to in the MySQL preference pane. (Bug #27969174, Bug #90672)
Microsoft Windows:
For debug builds on Windows, CREATE SPATIAL
REFERENCE SYSTEM
with an empty definition string could
raise assertions.
(Bug #27672683)
In the client library, signals were incorrectly unblocked for
ppoll()
. Thanks to Facebook for the patch.
(Bug #28075623, Bug #90999, Bug #28096808, Bug #91067)
Certain ALTER TABLE
statements
could disable table encryption.
(Bug #28045585)
References: This issue is a regression of: Bug #27389878.
Under some conditions, MyISAM
code
compilation failed due to a missing include file.
(Bug #28039150, Bug #90898)
The REGEXP_REPLACE()
function
truncated its result when used in an
UPDATE
statement.
(Bug #28027093, Bug #90870)
REGEXP_REPLACE()
results from one
result set row could carry forward to the next row, resulting in
accumulation of previous results in the current row.
(Bug #27992118, Bug #90803)
A heap overflow vulnerability in the MySQL client library was fixed. (Bug #27980823)
Users who had the SUPER
privilege
were not permitted to modify the
keyring_operations
system
variable.
(Bug #27976270)
Full-text search auxiliary tables created in MySQL 5.7 and MySQL 8.0.11 with timestamps of 0 caused a data dictionary upgrade failure when upgrading from MySQL 8.0.11 to MySQL 8.0.12. (Bug #27960500)
A “source and destination overlap in memcpy” Valgrind error was returned when upgrading from MySQL 5.7. (Bug #27945658, Bug #90691)
Linux binaries were unable to dump core after executing a
setuid()
call.
(Bug #27929894, Bug #90642, Bug #23337428, Bug #21723)
RESET PERSIST
did not flush variable values from memory.
(Bug #27924206)
For debug builds, using CREATE TABLE ...
SELECT
to create a table with a long numeric string
and indexing the column could lead to an assertion being raised.
(Bug #27909771)
For debug builds, RESET PERSIST
for an unknown variable could cause an assertion to be raised.
(Bug #27903874, Bug #90546)
References: This issue is a regression of: Bug #27374791.
Updates to column metadata of a view referencing a partitioned table could cause a server exit. (Bug #27903842)
For debug builds, an assertion could be raised for
UNION
queries when computing the
combined data type of a GEOMETRY
column and
SELECT * FROM (SELECT NULL)
.
(Bug #27903792, Bug #90550)
For debug builds, starting the server with
thread_stack=0
and executing
ALTER TABLE
could raise an
assertion.
(Bug #27899274, Bug #90525)
SHOW TABLE STATUS
could cause a
server exit.
(Bug #27897815)
For generated columns that used the
INTERVAL()
function, incorrect
behavior could occur.
(Bug #27881102)
For Fedora 28, MySQL Community RPM packages would not install if Connector ODBC native packages were installed. (Bug #27850721)
It was possible to drop the Performance Schema. (Bug #27830283)
A runtime error could occur for calls to
mysql_sys_var_longlong()
or
String::copy()
.
(Bug #27822413, Bug #27808412)
An assertion was raised by error logging code that used an inappropriate error number. (Bug #27792903)
References: This issue is a regression of: Bug #27462408.
The CONVERT TO CHARACTER SET
clause for
charset_name
ALTER TABLE
produced a syntax
error if charset_name
was
DEFAULT
.
(Bug #27760787, Bug #90222)
References: This issue is a regression of: Bug #27389878.
An unencrypted connection could result from a client connection attempt specifying that an encrypted connection was required, if the server was not configured to support SSL. (Bug #27759871)
INSERT INTO ... SELECT
did not perform as
many checks as INSERT INTO ... VALUES()
with
respect to requiring valid geometry values for geometry columns.
(Bug #27756083)
REGEXP_INSTR()
did not return an
error message when used with invalid match mode flags.
(Bug #27751277)
Some data dictionary table definitions were modified to align more closely with their initial design. Additionally, the data dictionary version number was incremented, and code that refers to data dictionary table indexes now uses symbolic index names instead of numeric values. (Bug #27745526, Bug #90196)
Executing a prepared statement to insert rows with large number of parameters was very slow. (Bug #27699248)
ibd2sdi could exit due to performing a divide-by-zero operation. (Bug #27692051, Bug #90071)
The mysql-boost-8.0.4.tar.gz
source
distribution omitted NDB
sources.
(Bug #27690232)
SHOW GRANTS
could cause a server
exit if executed for an unprivileged user who inherited
privileges from an anonymous user.
(Bug #27678129)
The parser incorrectly permitted the index name for
CREATE INDEX
to be empty.
(Bug #27676427)
Failures of server restarts initiated by systemd or mysqld_safe were not written to the error log. (Bug #27675050, Bug #90012)
For debug builds, if a transaction was in read-only mode, trying to create or drop a histogram could raise an assertion. (Bug #27672693)
If the server was started with
--skip-grant-tables
,
SET ROLE
DEFAULT
caused a server exit.
(Bug #27672154)
Casting of VARBINARY
values to
TIME
values was not performed
correctly.
(Bug #27665997)
Error checking was not performed after creation of a condition
for a const
reference.
(Bug #27665085)
The dictionary information object managed by the MeCab model was used after the MeCab model was released. (Bug #27660368)
Attempting to abort events of the
MYSQL_AUDIT_AUTHENTICATION_CLASS
class caused
a server exit. These events are now not abortable.
(Bug #27645636)
These resource-group statements are now disallowed in stored
functions because they cause an implicit commit, which is not
permitted in a stored function: CREATE
RESOURCE GROUP
, ALTER RESOURCE
GROUP
, DROP RESOURCE
GROUP
.
(Bug #27638623, Bug #89914)
Audit log filter rules did not permit class names to be specified as an array of strings. That is now possible. Example:
{ "filter": { "class": [ { "name": [ "connection", "general", "table_access" ] } ] } }
(Bug #27628325)
On Windows, if the Visual C++ Redistributable for Visual Studio had been removed, MySQL uninstallation using the MSI installer failed. (Bug #27621546)
mysql_secure_installation now loads the
validate_password
component rather than the
deprecated validate_password
plugin.
(Bug #27619667)
REGEXP_LIKE()
using an expression
containing a question mark (?
) was not
handled correctly when included in a prepared statement.
(Bug #27595368)
REGEXP_SUBSTR()
did not always
handle NULL
patterns correctly.
(Bug #27572258)
Some SHOW CREATE TABLE
statements
could raise an assertion.
(Bug #27569314)
Spurious stages could be seen in the Performance Schema
events_stages_current
table.
(Bug #27566220)
Triggers for a table could execute in an order different from
that specified by their
PRECEDES
/FOLLOWS
clauses.
(Bug #27544152)
Attempts to set some persisted variables at startup (such as
keyring_operations
and
mandatory_roles
) produced a
privilege violation error and the server did not start or did
not set the variable.
(Bug #27523095)
Under some conditions, an unused-variable warning occurred in the MeCab full-text search code. Thanks to Laurynas Biveinis for the patch. (Bug #27519952, Bug #89598)
Within stored procedures, it was not possible to write a
condition handler to catch foreign key failures if the table
involved used the FEDERATED
storage engine.
(Bug #27509959)
It was possible to drop a primary key that served as the parent key in a foreign key relationship. In addition, for table creation, the SQL layer now checks whether there is a parent key for the foreign key and reports an error if it is missing. (Bug #27506922, Bug #89570, Bug #11754696, Bug #46337)
With the
NO_ENGINE_SUBSTITUTION
SQL
mode disabled, an error (rather than substitution) occurred for
CREATE TABLE
and
ALTER TABLE
if the desired engine
was disabled using the
disabled_storage_engines
system
variable.
(Bug #27502530)
Key rotation using the keyring_encrypted_file
keyring plugin could cause a server exit.
(Bug #27497018)
If MySQL Enterprise Firewall was configured with a large number of rules, server shutdown could take a long time. (Bug #27492122)
SET PERSIST_ONLY
persisted the current global value, not the default value.
(Bug #27489026)var_name
= DEFAULT
If MySQL is configured with the
LINK_RANDOMIZE
CMake option enabled, the
--gc-sections
compiler option is now disabled;
the combination causes segmentation faults.
(Bug #27484106)
During server installation, the
mysql.infoschema
,
mysql.session
, and
mysql.sys
reserved accounts were associated
with the mysql_native_password
authentication
plugin even when the default plugin was
caching_sha2_password
.
(Bug #27454299)
Some window functions used the wrong precision for their aggregated data types. (Bug #27452179)
For a hexadecimal value H
,
SELECT
with WHERE (-1) -
raised an assertion.
(Bug #27452082)H
References: See also: Bug #27041382. This issue is a regression of: Bug #21982792.
A memory leak in the pfs-t
unit test was
fixed. Thanks to Yura Sorokin for the patch.
(Bug #27440735, Bug #89384)
Multiple invocations of CHAR()
within a stored program could yield different results once an
invalid code point was passed as the argument.
(Bug #27410088)
With automatic_sp_privileges
enabled, the EXECUTE
and
ALTER ROUTINE
privileges were not
correctly granted to routine creators.
(Bug #27407480)
Some queries that used ordering could access an uninitialized column during optimization and cause a server exit. (Bug #27389294)
For debug builds, an assertion was raised (rather than an error)
for ALTER TABLE
for an
ARCHIVE
table with a GEOMETRY NOT
NULL
column containing empty strings.
(Bug #27330634, Bug #89088)
Accounts that authenticated with the
auth_sock
authentication plugin could not
connect using older clients.
(Bug #27306178)
If system tables could not be read or initialized, the server wrote an incomplete error message. Thanks to Daniël van Eeden for a patch related to the fix. (Bug #27302337, Bug #89001)
RENAME USER
failed when used to
rename a role that was not granted to any account or role.
(Bug #27284699)
The keyring_okv
plugin did not always fail
over to the standby OKV server when the primary server was
unavailable.
(Bug #27244099)
The Performance Schema could attempt to access invalid
SOURCE
column values.
(Bug #27231036)
Mishandling of internal privilege structures could cause a server exit. (Bug #27230925)
For debug builds, use of a too-small type for calculating the determinant in GIS computations could cause an assertion to be raised. (Bug #27135504)
For attempts to increase the length of a
VARCHAR
column of an
InnoDB
table using ALTER
TABLE
with the INPLACE
algorithm,
the attempt failed if the column was indexed.
If an index size exceeded the InnoDB
limit of
767 bytes for COMPACT
or
REDUNDANT
row format,
CREATE TABLE
and
ALTER TABLE
did not report an
error (in strict SQL mode) or a warning (in nonstrict mode).
(Bug #26848813)
In MySQL 5.7.19, the mysql.gtid_executed
table was excluded from dumps. This table is no longer excluded
but its data is not dumped.
(Bug #26643180, Bug #87455)
References: This issue is a regression of: Bug #82848, Bug #24590891.
The
slave_rows_search_algorithms
system variable controls how rows are searched for matches when
preparing batches of rows for row-based logging and replication.
Specifying INDEX_SCAN
as one of the search
algorithms performs an index scan if an index is present. In the
situation where a different primary key is used on the master
and the slave, and a unique key is present on the slave, a bug
in the code meant that the index scan was not being performed as
it should be, and a slower table scan was being performed
instead. The issue has now been corrected so that an index scan
is used.
(Bug #26450129, Bug #23311892, Bug #81500, Bug #81501)
Certain cases of subquery materialization could cause a server exit. These queries now produce an error suggesting that materialization be disabled. (Bug #26402045)
Spatial operations on geographic
GeometryCollection
values could return
ER_GIS_INVALID_DATA
for valid
geometries.
(Bug #26174808)
For MyISAM
tables, particular sequences of
INSERT
and
DELETE
statements could cause
table corruption.
(Bug #25541037)
The SHOW CREATE USER
statement
requires the SELECT
privilege for
the mysql
database, except to see information
for the current user. In addition, for the current user, the
statement requires the SELECT
privilege for the mysql.user
system table for
display of the password hash in the IDENTIFIED
AS
clause; otherwise, the hash displays as
<secret>
.
(Bug #24911117)
CREATE FUNCTION
produced an error
if there was no default database and the function body called
another function.
(Bug #24357244, Bug #82350)
For debug builds, a SELECT
statement executed within a stored program could raise an
assertion if derived table resolution failed.
(Bug #23221336)
If mysqldump or mysqlpump
were used to dump binary data without the
--hex-blob
option, reloading
the dump file could produce spurious warnings (values were
inserted correctly regardless of the warnings). Such values are
now written preceded by the _binary
introducer to silence the warnings.
(Bug #22601255, Bug #80150)
String comparisons involving wildcards could reference uninitialized memory. (Bug #12635103)
REGEXP_REPLACE()
raised a
Valgrind
warning when invoked with an invalid
capture group.
(Bug #87842, Bug #27612255)