This release includes a change to the
innodb_index_stats
and
innodb_table_stats
system tables. When
upgrading to this release, be sure to run
mysql_upgrade in order to include these
changes.
-
For new MySQL installations, the
USER
andHOST
columns in theaudit_log_user
table used by MySQL Enterprise Audit now have definitions that better correspond to the definitions of theUser
andHost
columns in themysql.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 ENGINE=InnoDB; ALTER TABLE mysql.audit_log_filter CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; ALTER TABLE mysql.audit_log_user ENGINE=InnoDB; ALTER TABLE mysql.audit_log_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin; 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)
Explicit
ASC
orDESC
qualifiers forGROUP 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 namedID
. (Bug #27164826)
-
The linked OpenSSL library for the MySQL Commercial 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.
This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #28025379)
In MySQL 5.7, the default authentication plugin is
mysql_native_password
. As of MySQL 8.0, the default authentication plugin is changed tocaching_sha2_password
. To enable MySQL 5.7 clients to connect to 8.0 and higher servers using accounts that authenticate withcaching_sha2_password
, the MySQL 5.7 client library and client programs now support thecaching_sha2_password
client-side authentication plugin. This improves MySQL 5.7 client connect-capability compatibility with respect to MySQL 8.0 and higher servers, despite the differences in default authentication plugin. For more information, see Caching SHA-2 Pluggable Authentication. (WL #11645)
Previously, for the
--ssl-mode=VERIFY_IDENTITY
or--ssl-verify-server-cert
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; Partitioning: After creating partitioned
InnoDB
tables with very long names, thetable_name
columns in the corresponding entries in themysql.innodb_index_stats
andmysql.innodb_table_stats
system tables were truncated. To fix this issue, the length of thetable_name
column in each of these tables has been increased from 64 to 199 characters. In both cases, this is now the same as the lengths of these columns in MySQL 8.0.When upgrading to this release, use mysql_upgrade to effect these changes in your MySQL installation. In the event that you fail to do this, MySQL generates the warning Table mysql/innodb_table_stats has length mismatch in the column name table_name. Please run mysql_upgrade in the error log.
NoteSome platforms, such as Microsoft Windows, may restrict path lengths (
MAX_PATH
) to a maximum of 260, which can cause creation of partitioned tables with long names to fail. You can avoid this problem on Windows systems by enabling NTFS long path names; see your system documentation for information on how to do this.(Bug #86926, Bug #26390736)
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: An I/O error returned by an
fsync()
operation is now treated as a hard error. (Bug #27805553, Bug #90296)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 DDL operation on a table with a
FULLTEXT
index during full-text index cache synchronization caused an assertion failure. (Bug #27082268, Bug #27095935)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: 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)
Partitioning: For a partitioned table, partition update time could be incorrect after rebuilding the table or restarting the server. (Bug #27073100)
Partitioning: An extraneous row lock was imposed by an update to a partitioned
InnoDB
table. (Bug #87253, Bug #26553164)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'sgroup_replication_group_name
this is now described in the log message. (Bug #27628695)-
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
andrelay_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, thegtid_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 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 thebinlog_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 onlyBEGIN
andCOMMIT
statements. If binary logging is disabled, the GTID of the filtered-out transaction is written to themysql.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 forCREATE DATABASE
,ALTER DATABASE
, andDROP 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 aSTART 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 thelower_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: 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)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: When the
group_replication_applier
channel's applier thread encountered an error, themaster_log_name
andend_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 agroup_replication_applier
channel no longer contain the binary log name or position. (Bug #89146, Bug #27368735)A heap overflow vulnerability in the MySQL client library was fixed. (Bug #27980823)
For generated columns that used the
INTERVAL()
function, incorrect behavior could occur. (Bug #27881102)The
exec_in_background
command for mysqltest is now available in MySQL 5.7. (Bug #27858055)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)
A
BETWEEN
clause comparing negative values could lead to erroneous results. (Bug #27691347)-
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)
The
audit_log_read()
loadable function could deadlock. In consequence of the fix for this issue,audit_log_read()
no longer uses a shared global buffer. Each call allocates its own buffer, which exists for the duration of the call. To control the buffer size, set theaudit_log_read_buffer_size
system variable. Previously, this variable existed only in global scope with a default of 1MB. Now, the variable also exists in session scope, has a smaller default of 32KB, and can be set at runtime. Each client should set its session value ofaudit_log_read_buffer_size
appropriately for its use ofaudit_log_read()
. (Bug #27545962)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)With the
NO_ENGINE_SUBSTITUTION
SQL mode disabled, an error (rather than substitution) occurred forCREATE TABLE
andALTER TABLE
if the desired engine was disabled using thedisabled_storage_engines
system variable. (Bug #27502530)If MySQL Enterprise Firewall was configured with a large number of rules, server shutdown could take a long time. (Bug #27492122)
A memory leak in the
pfs-t
unit test was fixed. Thanks to Yura Sorokin for the patch. (Bug #27440735, Bug #89384)With
automatic_sp_privileges
enabled, theEXECUTE
andALTER 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 anARCHIVE
table with aGEOMETRY NOT NULL
column containing empty strings. (Bug #27330634, Bug #89088)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)
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)
The
UNION
of a user-defined variable and aDECIMAL
column produced an incorrect result when using a UTF8 character set. (Bug #27197235)Setting
max_execution_time
sometimes had no effect when used with full-text search. (Bug #27155294)-
For attempts to increase the length of a
VARCHAR
column of anInnoDB
table usingALTER TABLE
with theINPLACE
algorithm, the attempt failed if the column was indexed.If an index size exceeded the
InnoDB
limit of 767 bytes forCOMPACT
orREDUNDANT
row format,CREATE TABLE
andALTER 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. SpecifyingINDEX_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)
mysqldump exited abnormally for large
--where
option values. (Bug #26171967, Bug #86496, Bug #27510150)For
MyISAM
tables, particular sequences ofINSERT
andDELETE
statements could cause table corruption. (Bug #25541037)The
SHOW CREATE USER
statement requires theSELECT
privilege for themysql
database, except to see information for the current user. In addition, for the current user, the statement requires theSELECT
privilege for themysql.user
system table for display of the password hash in theIDENTIFIED 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)