Some events cannot be terminated. Previously, if an audit plugin returned nonzero status for a nonterminable event, the server ignored the status and continued processing the event. However, if an audit plugin used the
my_message()
function to terminate a nonterminable event, a server exit occurred. Now the server correctly handles termination of nonterminable events usingmy_message()
. (Bug #21458066)
-
Incompatible Change: The
mysql_options()
C API function has two new options,MYSQL_OPT_MAX_ALLOWED_PACKET
andMYSQL_OPT_NET_BUFFER_LENGTH
, that set the client-side maximum size of the buffer for client/server communication, and the buffer size for TCP/IP and socket communication. (Setting these options is similar to setting themax_allowed_packet
andnet_buffer_length
system variables.) Each option name also now can be passed to themysql_get_option()
C API function to retrieve its value. For more information, see mysql_options(), and mysql_get_option().The (undocumented)
mysql_get_parameters()
function has been removed. Applications that attempt to use it will get link errors and should be modified to usemysql_options()
andmysql_get_option()
instead.One affected application is DBD::mysql, the MySQL driver for the Perl DBI. Upgrade to DBD::mysql 4.033 or higher, which includes a fix for the C API change just described. (Bug #20821550)
References: See also: Bug #20686665.
-
Previously, it was necessary to call
mysql_thread_end()
for eachmysql_thread_init()
call to avoid a memory leak. C API internals have been reimplemented to reduce the amount of information allocated bymysql_thread_init()
that must be freed bymysql_thread_end()
:For release/production builds without debugging support enabled,
mysql_thread_end()
need not be called.For debug builds,
mysql_thread_init()
allocates debugging information for the DBUG package (see The DBUG Package).mysql_thread_end()
must be called for eachmysql_thread_init()
call to avoid a memory leak.
(Bug #11758368, Bug #20621281, Bug #21802367, WL #6817)
Microsoft Windows: Support for building using Microsoft Visual Studio 2015 was added. Changes include using the native (added in VS 2015) timespec library if it exists, renamed lfind/lsearch and timezone/tzname to avoid redefinition problems, set
TMPDIR
to""
by default asP_tmpdir
no longer exists, deprecatedstd::hash_map
in favor ofstd::unordered_map
, and added Wix Toolset 3.10 support. (Bug #21657078)The minimum version of the Boost library for server builds is now 1.59.0. (Bug #77960, Bug #21567456)
-
MySQL distributions now contain a
mysqlclient.pc
file that provides information about MySQL configuration for use by the pkg-config command. This enables pkg-config to be used as an alternative to mysql_config for obtaining information such as compiler flags or link libraries required to compile MySQL applications. For more information, see Building C API Client Programs Using pkg-config.A new
INSTALL_PKGCONFIGDIR
CMake option is available to specify the directory in which to install themysqlclient.pc
file. The default value isINSTALL_LIBDIR/pkgconfig
, unlessINSTALL_LIBDIR
ends with/mysql
, in which case that is removed first. (Bug #76131, Bug #20637746) Work was done to clean up the source code base, including: Removing unneeded CMake checks; removing unused macros from source files; reorganizing header files to reduce the number of dependencies and make them more modular, removing function declarations without definitions, replacing locally written functions with equivalent functions from industry-standard libraries.
Important Change; Replication: In MySQL 5.7, the
binlog_max_flush_queue_time
system variable introduced in MySQL 5.6 no longer has any effect. This variable is now deprecated, and has been marked for eventual removal in a future MySQL version. (Bug #21347087, WL #8756)The shell and Perl versions of mysql_install_db have been removed from MySQL distributions. The executable C++ version of mysql_install_db implemented in MySQL 5.7.5 is still present, but remains deprecated (use mysqld --initialize instead) and will be removed in a future MySQL version. (Bug #21625471)
The deprecated
_r
versions of thelibmysqlclient
libraries are no longer installed. (Bug #21311067)
-
Two changes were made regarding the effect of
show_compatibility_56
:-
Previously, when
show_compatibility_56=OFF
, selecting from the followingINFORMATION_SCHEMA
system and status variable tables returned an empty result and a deprecation warning:INFORMATION_SCHEMA.GLOBAL_VARIABLES INFORMATION_SCHEMA.SESSION_VARIABLES INFORMATION_SCHEMA.GLOBAL_STATUS INFORMATION_SCHEMA.SESSION_STATUS
This caused confusion for applications that were not aware that such selects could be empty: An empty result and a warning was not sufficient notice to signal the need to migrate to the corresponding Performance Schema system and status variable tables.
To address this issue, selecting from the
INFORMATION_SCHEMA
system and status tables now produces an error, to make it more evident that an application is operating under conditions that require modification, as well as where the problem lies. The error code isER_FEATURE_DISABLED_SEE_DOC
. The error message indicates which table is disabled and that theshow_compatibility_56
documentation should be consulted. -
Previously, when
show_compatibility_56=ON
, selecting from the following Performance Schema status variable tables returned an empty result:performance_schema.global_status performance_schema.session_status
This made it more difficult to migrate applications from the
INFORMATION_SCHEMA
status variable tables to the corresponding Performance Schema tables: Successfully selecting from the Performance Schema tables required knowing both that the server is from MySQL 5.7 and thatshow_compatibility_56=OFF
.To address this issue, selecting from the Performance Schema status variable tables now produces the same result regardless of the value of
show_compatibility_56
. Thus, it is necessary to know only that the server is from MySQL 5.7.9 or higher. (If so, select from the Performance Schema tables. Otherwise, select from theINFORMATION_SCHEMA
tables.)
For additional information about the effects of
show_compatibility_56
and migration issues, see Server System Variables, and Migrating to Performance Schema System and Status Variable Tables. (Bug #21606701, WL #8786) -
These Performance Schema tables now are world readable and accessible without the
SELECT
privilege:global_variables
,session_variables
,global_status
, andsession_status
. An implication of this change is thatSHOW VARIABLES
andSHOW STATUS
no longer require privileges on the underlying Performance Schema tables from which their output is produced whenshow_compatibility_56=OFF
. (Bug #21251297)-
With the
show_compatibility_56
system variable enabled, the reported values of theLast_query_cost
andLast_query_partial_plans
status variables were incorrect.With the
show_compatibility_56
system variable disabled, the reported values of theCreated_tmp_tables
,Handler_external_lock
, andTable_open_cache_%
status variables were incorrect. (Bug #20483278, Bug #21788549, Bug #21788887) Previously, the
transaction
instrument in thesetup_instruments
table was disabled by default, and theevents_transactions_current
andevents_transactions_history
consumers in thesetup_consumers
table were enabled by default. This setup is inconsistent, and having the consumers enabled could lead to the impression that transactions were instrumented by default. Now, the consumers are also disabled by default. To monitor transactions, enable the instrument and the applicable consumers. (Bug #78311, Bug #21780891)-
With the
show_compatibility_56
system variable disabled,SHOW VARIABLES
andSHOW STATUS
statements failed if MySQL was compiled without Performance Schema support. Consequently, it is no longer possible to compile without the Performance Schema. If it is desired to compile without particular types of instrumentation, that can be done with the following CMake options:DISABLE_PSI_COND DISABLE_PSI_FILE DISABLE_PSI_IDLE DISABLE_PSI_MEMORY DISABLE_PSI_METADATA DISABLE_PSI_MUTEX DISABLE_PSI_PS DISABLE_PSI_RWLOCK DISABLE_PSI_SOCKET DISABLE_PSI_SP DISABLE_PSI_STAGE DISABLE_PSI_STATEMENT DISABLE_PSI_STATEMENT_DIGEST DISABLE_PSI_TABLE DISABLE_PSI_THREAD DISABLE_PSI_TRANSACTION
For example, to compile without mutex instrumentation, configure MySQL using the
-DDISABLE_PSI_MUTEX=1
option. (Bug #78159, Bug #21669500) -
The
session_account_connect_attrs
Performance Schema table had mistakenly been changed to require theSELECT
privilege. It requires no special privileges again. (Bug #77702, Bug #21436364)References: This issue is a regression of: Bug #14569746.
In the
setup_timers
table, aCYCLE
timer for ARM64 platforms is now available. (Bug #77620, Bug #21374923)-
The Performance Schema now includes these instruments for monitoring I/O on binary log and relay log cache files:
wait/io/file/sql/binlog_cache wait/io/file/sql/binlog_index_cache wait/io/file/sql/relaylog_cache wait/io/file/sql/relaylog_index_cache
In addition, the default value of
performance_schema_max_file_classes
has been increased from 50 to 80. (Bug #76225, Bug #20675180) -
The Performance Schema
threads
table now contains aTHREAD_OS_ID
column that indicates the thread or task identifier as defined by the underlying operating system. For example, the column value corresponds to the Process Explorer thread ID on Windows and thegettid()
value on Linux. For more information, see The threads Table.If you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate this change into the
performance_schema
database. (WL #8853)
-
The audit plugin API has been extensively revised to support a finer breakdown of the general event type (
MYSQL_AUDIT_GENERAL_CLASS
) into more specific events. This enables audit plugins to more precisely indicate the types of events in which they are interested and reduces overhead for plugins that have use for only a few event types. The API also now permits early termination of event execution. For more information, see Writing Audit Plugins. The general event type is still available but is deprecated and will be removed in a future MySQL version.In addition, a
security_context
plugin service is now available. Audit plugins can use this service to examine or modify the security context of threads associated with audited events. See MySQL Plugin Services. (WL #7254)
For RPM-based packages, the permissions used to create the data directory (
/var/lib/mysql
) have been changed from 755 to 751. This tightens the data directory permissions while still permitting world access to themysql.sock
file in that directory. (Bug #21066592)-
yaSSL was upgraded to version 2.3.8.
Upgrading from older versions fixes a connection-failure issue when used with the thread pool plugin. (Bug #20774956, Bug #21888925)
-
A new
SHUTDOWN
SQL statement is available. This provides an SQL-level interface to the same functionality previously available using the mysqladmin shutdown command or themysql_shutdown()
C API function. See SHUTDOWN Statement.The
mysql_shutdown()
function and correspondingCOM_SHUTDOWN
client/server protocol command are deprecated and will be removed in a future MySQL version. Instead, usemysql_query()
to execute aSHUTDOWN
statement. (WL #6784)
-
Spatial functions such as
ST_MPointFromText()
andST_GeomFromText()
that accept WKT-format representations ofMultiPoint
values now permit individual points within values to be surrounded by parentheses. For example, both of the following function calls are valid, whereas previously the second one produced an error:ST_MPointFromText('MULTIPOINT (1 1, 2 2, 3 3)') ST_MPointFromText('MULTIPOINT ((1 1), (2 2), (3 3))')
In addition, functions such as
ST_AsText()
andST_AsWKT()
that produce WKT-format results now displayMultiPoint
values with parentheses surrounding each point. (Bug #54065, Bug #11761559)
-
The
sys
schema included in MySQL distributions was updated to version 1.5.0. This version includes new features:A new
diagnostics()
stored procedure enables DBAs and other support personnel to collect diagnostic information for investigating MySQL instance performance. A newmetrics
view andstatement_performance_analyzer()
stored procedure provide supporting infrastructure for thediagnostics()
procedure.-
The following
sys
schema views now provide progress reporting for long-running transactions:processlist session x$processlist x$session
The
progress
column of these views shows the percentage of work completed for stages that support progress reporting. For more information, see sys Schema Progress Reporting. sys
schema objects now have aDEFINER
of'mysql.sys'@'localhost'
. (Previously, theDEFINER
was'root'@'localhost'
.) Use of the reservedmysql.sys
account avoids problems that occur if a DBA renames or removes theroot
account.
sys
schema 1.5.0 also includes fixes for several issues:The
sys
schemaps_is_instrument_default_enabled()
andps_is_instrument_default_timed()
stored functions returned incorrect results in some cases.The
ENABLED
andHISTORY
columns that were added to thesetup_actors
Performance Schema table in earlier MySQL 5.7 releases caused thesys
schemaps_setup_reset_to_default()
stored procedure not to work.Handing of event-timing information in the
sys
schema was updated to handle changes to Performance Schema event-timing columns in MySQL 5.7.8.mysql_upgrade previously checked for an exact object-count value in the
sys
schema to determine whether an upgrade was needed. If local objects had been added, the resulting reinstallation removed those objects. Now it checks for at least the expected number of objects.
If you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade to incorporate these changes into the
sys
schema.Thanks to Daniël van Eeden, Jesper Wisborg Krogh, Shlomi Noach, and Morgan Tocker for their contributions to this update. (Bug #78115, Bug #21647101, Bug #77927, Bug #21550271, Bug #78720, Bug #21966366, WL #8792)
-
Incompatible Change; InnoDB: To better manage redo log format changes, the redo log header of the first redo log file (
ib_logfile0
) now includes a format version identifier and a text string that identifies the MySQL version that created the redo log files.A new boolean configuration option,
innodb_log_checksums
, replaces theinnodb_log_checksum_algorithm
option.innodb_log_checksums=ON
enables aCRC-32C
checksum, making it the only supported checksum for redo log pages.This patch also removes unused fields from the redo log header and checkpoint pages.
Due to redo log format changes introduced by this patch, upgrading to or downgrading from MySQL 5.7.9 and higher requires a clean shutdown and, in some cases, removal of existing redo log files. For instructions related to this change, see Changes in MySQL 5.7, and Downgrade Notes. (Bug #21759424, Bug #78275, Bug #21752674, WL #8845)
-
Important Change; InnoDB:
DYNAMIC
replacesCOMPACT
as the implicit default row format forInnoDB
tables. A new configuration option,innodb_default_row_format
, specifies the defaultInnoDB
row format. Permitted values includeDYNAMIC
(the default),COMPACT
, andREDUNDANT
.The
COMPACT
row format remained the default row format until this release to ensure compatibility with older versions ofInnoDB
in MySQL 5.1 and earlier. Now that MySQL 5.1 has reached the end of its product lifecycle, the newerDYNAMIC
row format becomes the default. For information about advantages of theDYNAMIC
row format, see DYNAMIC Row Format.Newly created tables use the row format defined by
innodb_default_row_format
when aROW_FORMAT
option is not specified explicitly or whenROW_FORMAT=DEFAULT
is used.Existing tables retain their current row format if a
ROW_FORMAT
option was specified explicitly. If aROW_FORMAT
option was not specified explicitly or ifROW_FORMAT=DEFAULT
was used, any operation that rebuilds a table also silently changes the row format of the table to the format defined byinnodb_default_row_format
. For more information, see Defining the Row Format of a Table. (WL #8307) -
Important Change; JSON: Introduced the
->
JSON column-path operator.
is now supported as a synonym ofcolumn
->path
JSON_EXTRACT(
, wherecolumn
,path
)column
is aJSON
column, andpath
is a valid JSON path.An expression with
->
, like its equivalent that usesJSON_EXTRACT()
instead, can be used in place of a column identifier wherever the latter can occur within a valid SQL statement. For example, the followingCREATE TABLE
andSELECT
statements are valid:CREATE TABLE t1 ( a JSON, b INT, g INT GENERATED ALWAYS AS (a->"$.id"), h INT GENERATED ALWAYS AS (a->"$.storeid"), INDEX i (g), INDEX j (h) ); SELECT CONCAT(a->"$.fname", ' ', a->"$.lname") AS name, a->"$.id" AS id, a->"$.storeid" AS store FROM t1 WHERE g > 500 ORDER BY a->"$.storeid", a->"$.lname";
A column-path expression can be used for any column value that is read in a
SELECT
column list, or in aWHERE
,ORDER BY
, orGROUP BY
clause in any SQL statement; such expressions cannot be used to set values.When an SQL statement contains one or more expressions using
->
notation, each of these is translated into an equivalent expression that employs theJSON_EXTRACT()
function instead. This can be seen in the output fromEXPLAIN
when used on such a statement.Like
JSON_EXTRACT()
, the->
operator returns asNULL
if no matching value for an otherwise valid path is found.For more information about
->
andJSON_EXTRACT()
, see Functions That Search JSON Values. See Searching and Modifying JSON Values, for information about JSON path support. See also Indexing a Generated Column to Provide a JSON Column Index, for additional information and examples. (WL #8607) InnoDB: A new
INNODB_METRICS
server operations counter (innodb_dict_lru_count
) counts the number of tables evicted from the table cache LRU list. Thanks to Daniël van Eeden for the patch. (Bug #21682332, Bug #78190)-
InnoDB: The new
innodb_numa_interleave
read-only configuration option allows you to enable the NUMA interleave memory policy for allocation of theInnoDB
buffer pool. Wheninnodb_numa_interleave
is enabled, the NUMA memory policy is set toMPOL_INTERLEAVE
for the mysqld process. After theInnoDB
buffer pool is allocated, theNUMA
memory policy is set back toMPOL_DEFAULT
. This option is only available on NUMA-enabled Linux systems.Thanks to Stewart Smith for the patch. (Bug #18871046, Bug #72811)
JSON: The JSON value-updating functions
JSON_APPEND()
,JSON_SET()
,JSON_REPLACE()
, andJSON_INSERT()
now treat SQLNULL
values as JSON null literals, which is consistent withJSON_OBJECT()
andJSON_ARRAY()
. (Bug #77733, Bug #21450922)MySQL distributions now include these header files because
my_sys.h
depends on them:my_thread_local.h
,thr_cond.h
,thr_mutex.h
,thr_rwlock.h
. (Bug #21909332)MySQL Server RPM packages now obsolete MySQL Connector C. Installing MySQL Server causes older
libmysqlclient
from any MySQL Connector C packages to be removed and replaces them with the currentlibmysqlclient
. (Bug #21900800)RPM
.spec
files were updated so that MySQL Server builds from source RPM packages will include the proper files to take advantage of operating system NUMA capabilities. This introduces a runtime dependency onlibnuma.so.1
. RPM and yum detect this and refuse to install if that library is not installed. (Bug #21775221)The
JSON_APPEND()
function was renamed toJSON_ARRAY_APPEND()
. (Bug #21560934)The server now generates a warning when the
default_storage_engine
ordefault_tmp_storage_engine
system variable is set to a disabled storage engine named in thedisabled_storage_engines
system variable. (Bug #21405865)Metadata locking for tablespaces has been extended so that, for DDL statements that refer to multiple tablespaces, a metadata lock is acquired on all used tablespaces. (Bug #21376265, WL #7957)
Unit testing now uses Google Mock 1.7 rather than 1.6. (Bug #21215389)
Support for building with Solaris Studio 5.13 was added. (Bug #21185883)
mysql_ssl_rsa_setup now is less noisy by default. Output from
openssl
commands is displayed only if--verbose
is given. (Bug #21024979)Insert overhead for the
MEMORY
storage table was reduced by caching computed hash values. (Bug #78480, Bug #21866029)The initial-password message written by mysqld --initialize to the error log has been reduced from a
[Warning]
to a[Note]
. (Bug #78182, Bug #21680457)mysqlpump now supports a
--version
option. (Bug #77894, Bug #21534277)Unneeded scripts and test files were removed from the
tests
directory and that directory was renamed totestclients
. (Bug #77807, Bug #21490075)Performance Schema digests in
DIGEST_TEXT
columns have...
appended to the end to indicate when statements exceed the maximum statement size and were truncated. This is also now done for statement text values inSQL_TEXT
columns. (Bug #75861, Bug #20519832)Output from mysql_upgrade is now less noisy and more informative. (Bug #59077, Bug #11766046)
-
Important Change; InnoDB; Partitioning: There was no way to upgrade existing partitioned tables to use the native partitioning implemented for
InnoDB
tables in MySQL 5.7.6. This fix adds support to both mysql_upgrade and the mysql client for upgrading partitionedInnoDB
tables created in previous releases, which used theha_partition
handler, to useInnoDB
native partitioning instead.mysql_upgrade now checks for all
InnoDB
tables that were created using the genericha_partition
handler and attempts to upgrade them toInnoDB
native partitioning.In the mysql client, pre-5.7.6 partitioned
InnoDB
tables can be upgraded one by one to native partitioning using theALTER TABLE ... UPGRADE PARTITIONING
statement that is implemented in this release.
(Bug #20727344, Bug #76374)
Important Change; Replication: The
START SLAVE
andSTOP SLAVE
statements can no longer be used for thegroup_replication_recovery
channel. See Replication Channels, for more information. (Bug #21680074)Important Change; Replication: When using a single-threaded slave, the status of the applier thread is now reported as part of the
replication_applier_status_by_worker
table, instead ofreplication_applier_status_by_coordinator
. This means thatreplication_applier_status_by_coordinator
is now empty when using a single-threaded slave; it should be noted that such reporting for multithreaded slaves has not been changed, and continues to be shown in that table. (Bug #74765, Bug #20001173)InnoDB; Microsoft Windows: Attempting to create a general tablespace data file on a Windows root drive caused an error. (Bug #21419888, Bug #77676)
InnoDB; Microsoft Windows: Setting
lower_case_table_names=0
on a case-insensitive file system could result in a hang condition when running anINSERT INTO ... SELECT ... FROM
operation with the wrongtbl_name
tbl_name
lettercase. An error message is now printed and the server exits when attempting to start the server with--lower_case_table_names=0
on a case-insensitive file system. (Bug #20198490, Bug #75185)InnoDB: The undo log contained insufficient information about virtual columns and virtual column indexes, which could cause a server exit when adding or dropping virtual columns. As a result, a slow shutdown (using
innodb_fast_shutdown=0
) is required prior to performing an in-place upgrade or downgrade from MySQL 5.7.8. For more information, refer to Upgrading MySQL. (Bug #21869656, Bug #78489)InnoDB: A table-rebuilding
ALTER TABLE
operation that created an index on a virtual column raised an assertion. (Bug #21847170, Bug #78452)InnoDB: A
SELECT ... FOR UPDATE
operation on a table with virtual generated columns raised an assertion.InnoDB
unnecessarily retrieved a non-indexed virtual column for a covered secondary index scan. (Bug #21827963)-
InnoDB: Creating a table with large rows failed when using a
ROW_FORMAT=DYNAMIC
orROW_FORMAT=COMPRESSED
due to an incorrect undo log record size calculation. The same operation succeeded withROW_FORMAT=COMPACT
orROW_FORMAT=REDUNDANT
.ROW_FORMAT=DYNAMIC
andROW_FORMAT=COMPRESSED
now permit a row length violation at DDL time ifinnodb_strict_mode
is disabled. (Bug #21816041, Bug #78392) InnoDB: Adding an index on a virtual generated column with an index prefix length that exceeded the maximum length caused a server exit. (Bug #21812026)
InnoDB: A memory leak occurred after crash recovery. Memory allocated in
fil_space_read_name_and_filepath()
was not freed. (Bug #21811321)InnoDB: Altering the data type or computation method of a virtual generated column caused an error. (Bug #21810004)
InnoDB: An assertion was raised when creating a spatial index.
InnoDB
failed to count virtual columns that preceded the spatial index column. (Bug #21807340)InnoDB: Tablespace discovery modifications in MySQL 5.7.5 included the removal of code related to
MLOG_FILE_CREATE2
redo log records. As a result, the redo log did not contain sufficient information about file creation. (Bug #21801423, Bug #78363)InnoDB: The redo log provided no indication that redo logging is disabled for index page writes during concurrent DDL operations. As a result, external hot backup tools could produce corrupt backups. (Bug #21796691, Bug #78351)
InnoDB: In debug builds, recovery asserted during a transparent page compression test. A torn page from the doublewrite buffer caused an LSN debug check failure. (Bug #21796092)
InnoDB: Creating a virtual generated column on a partitioned table caused a server exit. (Bug #21790751, Bug #78326)
InnoDB: An old version of
numactl
headers on the build host caused a compilation error when building a MySQL version that includes NUMA memory policy support. (Bug #21785074)InnoDB: A
SELECT .. FOR UPDATE
operation on an indexed virtual generated column raised an assertion. (Bug #21775459)InnoDB: The tablespace identifier (
space_id
) was logged twice for anMLOG_TRUNCATE
redo log record. (Bug #21744589)InnoDB: Crash recovery issued an invalid error message indicating that an
isl
file could not be opened or is not correct. (Bug #21691438)InnoDB: The
InnoDB
Monitor displayed incorrect mutex creation information for a mutex with a long semaphore wait. (Bug #21682997, Bug #78179)InnoDB: Error message formatting was corrected in the
os_file_write_page()
function. (Bug #21681433, Bug #78184)InnoDB: The
i_s_dict_fill_sys_tablespaces()
function could free memory associated with a file name before printing an error message. (Bug #21680518, Bug #78180)InnoDB: In debug builds, scanned and applied redo log records are now printed with a string identifier instead of a numerical identifier when
--debug=d,ib_log
is passed to mysqld. For example,rec MLOG_2BYTES
is now printed instead ofrec 2
. (Bug #21664268, Bug #78148)InnoDB: The number of system calls made by the
InnoDB
page compression feature was reduced. (Bug #21654695)-
InnoDB: The
recv_parse_log_rec
function returned the length of the redo log record instead of 0 when encountering an incompleteMLOG_CHECKPOINT
record. (Bug #21640085, Bug #78058)References: This issue is a regression of: Bug #17798076.
InnoDB: In debug builds, a parenthesis mismatch in a
MATCH() AGAINST()
clause raised a full-text parser assertion. (Bug #21638907)InnoDB: Debug code was added to avoid a doublewrite buffer assertion that was raised during Valgrind testing. (Bug #21631197)
InnoDB: Log messages were improved to help identify out-of-space errors that could occur when adding rollback segments. (Bug #21629618)
InnoDB: In debug builds, enabling the
innodb_log_checkpoint_now
debug option while a table-rebuildingALTER TABLE
operation is running could result in an infinite loop. (Bug #21628087, Bug #78056)InnoDB:
UNIV_INLINE
was not defined for thedict_table_has_indexed_v_cols
function. (Bug #21628058, Bug #78055)InnoDB: Altering a virtual column data type is not supported as an in-place operation. (Bug #21617377)
InnoDB: Sorting was skipped by an
ALTER TABLE
statement that changed the primary key and dropped the last column of the previous primary key. (Bug #21612714, Bug #78020)InnoDB: During recovery, an invalid
isl
file was treated as a missingisl
file, resulting in the tablespace being opened using the file location defined in anMLOG_FILE_*
record in the redo log. Recovery no longer opens the tablespace if theisl
file is invalid. (Bug #21577278, Bug #77986)InnoDB: Code that provided a timeout mechanism intended to reduce adaptive hash index search latch (
btr_search_latch
) contention was removed. The code became obsolete after the introduction of adaptive hash index search system partitioning in MySQL 5.7.8. (Bug #21569876, Bug #77957)InnoDB: The
COMPRESSION
option was displayed incorrectly inSHOW CREATE TABLE
output. (Bug #21557723, Bug #77940)InnoDB: An
innodb_data_file_path
mismatch raised an assertion, as did initializing the database with a data file size that was too small for the specified page size. (Bug #21551464)InnoDB: A check was added to prevent accessing full-text index tables that are in an inconsistent state. (Bug #21529012)
InnoDB: A schema mismatch error occurred when importing a tablespace that was altered by
DROP INDEX
operation on the source server. (Bug #21514135, Bug #77659)InnoDB: Creating an index on a virtual generated column after adding a full-text index on a preceding column raised an assertion. (Bug #21478389)
InnoDB: For tables with a
DYNAMIC
orCOMPRESSED
row format, more data than necessary was undo logged for virtual columns. (Bug #21477535)InnoDB: An
INSERT
operation raised abtr_search_enabled
assertion. Assertion code was too restrictive. (Bug #21457373)InnoDB: Reloading a table that was evicted while empty caused an
AUTO_INCREMENT
value to be reset. (Bug #21454472, Bug #77743)InnoDB: A crash during a
TRUNCATE TABLE
operation caused the server to exit on startup. (Bug #21451922)InnoDB: The
.isl
was not removed when dropping a general tablespace that was created outside of the MySQL data directory. (Bug #21446772, Bug #77724)-
InnoDB: An inconsistent read occurred under the
REPEATABLE READ
transaction isolation level. Transactions that operated on the same row were removed from transaction ID list in the incorrect order. (Bug #21433768, Bug #77699)References: This issue is a regression of: Bug #17320977.
InnoDB: After disabling the adaptive hash index feature, an adaptive hash index latch was unnecessarily obtained and released. (Bug #21407023)
InnoDB: An
ALTER TABLE
operation on a table with an index defined on a virtual column incorrectly modified the data of the virtual column. (Bug #21376546, Bug #77628)InnoDB: A virtual column-related purge operation raised an assertion. (Bug #21374258)
InnoDB: On a partitioned table, creating an index on a generated column raised an assertion. (Bug #21372331)
InnoDB: Resizing the buffer pool online raised an assertion due to a memory full condition. (Bug #21348684, Bug #77564)
InnoDB: An
ALTER TABLE ... IMPORT TABLESPACE
operation withinnodb_page_size=4K
andROW_FORMAT=DYNAMIC
raised an assertion. (Bug #21341030, Bug #77540)InnoDB: For spatial indexes,
InnoDB
unnecessarily stored a 3072-byte prefix in undo log records instead of just the maximum bounding rectangle (MBR). For columns with externally stored data, both the prefix and MBR are logged. (Bug #21340268, Bug #77537)InnoDB: Invalid
init_ftfuncs()
assertion code was removed. (Bug #21300774)InnoDB: Memory allocation sanity checks were added to the memcached code. (Bug #21288106)
InnoDB: An incorrect reference count caused a hang in the
TrxInInnoDB
constructor.innobase_close_connection()
released the transaction object before destroying theTrxInInnoDB
object where the reference count is adjusted. (Bug #21280816)-
InnoDB: A MySQL 5.7.8 patch that reintroduced
SHOW ENGINE INNODB MUTEX
functionality caused a performance regression. (Bug #21266784)References: See also: Bug #77314, Bug #21238953.
InnoDB: A memcached
flush_all
command raised an assertion. A function that starts a transaction was called from within assertion code. (Bug #21239299, Bug #75199)InnoDB: A shutdown hang occurred when a high priority transaction waited for a victim transaction to exit while the victim transaction waited for an asynchronous rollback to complete. (Bug #21143276)
InnoDB: A data corruption occurred on ARM64. GCC builtins did not issue the correct fences when setting or unsetting the lock word. (Bug #21102971, Bug #76135)
InnoDB: Server shutdown was delayed waiting for the purge thread to exit. To avoid this problem, the number of calls to
trx_purge()
was reduced, and thetrx_purge()
batch size was reduced to 20. (Bug #21040050)InnoDB: In
READ COMMITTED
mode, aREPLACE
operation on a unique secondary index resulted in a constraint violation. Thanks to Alexey Kopytov for the patch. (Bug #21025880, Bug #76927)InnoDB: The
IBUF_BITMAP_FREE
bit indicated that there was more free space in the leaf page than was actually available. (Bug #20796566)InnoDB: Moving the data directory before recovering a crashed database caused tablespace discovery to fail for file-per-table tablespaces created outside of the MySQL data directory. (Bug #20698468, Bug #76308)
InnoDB: The
innodb_buf_flush_list_now
debug setting failed to flush all dirty pages to disk. (Bug #20582189)InnoDB: An
ALTER TABLE ... ADD FULLTEXT INDEX
operation raised an assertion. A thread attempted to use a lower priority transaction that was being rolled back before the rollback operation completed. (Bug #20481175)InnoDB: Running an
ALTER TABLE
operation on a referencing table with a cascading foreign key constraint during a concurrent DML operation on the referenced table caused a loss of referential integrity. (Bug #20367116)-
InnoDB: The server failed to start with an
innodb_force_recovery
setting greater than 3.InnoDB
was set to read-only mode before redo logs were applied.DROP TABLE
is now supported with aninnodb_force_recovery
setting greater than 3. (Bug #19779113) InnoDB: The
trx_sys_read_pertable_file_format_id()
function reported the wrong file format. (Bug #19206671)InnoDB: The
mysql_system_tables_fix_for_downgrade.sql
script, provided to facilitate system table alterations when downgrading from MySQL 5.7.6 or higher, was removed from the MySQL installation directory. The script was no longer valid for all downgrade paths. For more information, see Downgrade Notes. (Bug #78259, Bug #21753832)InnoDB: A virtual generated column on a table that uses index condition pushdown (ICP) caused an assertion. (Bug #77842, Bug #21507796, Bug #21478287)
Packaging; OS X: Using
user=mysql
during installation on OS X did not allow themysql
database to be installed. To fix this problem, OS X packages now use the--no-defaults
option when creating this database. This also means that having amy.cnf
file on the system no longer affects the installation. (Bug #21364902)Partitioning: Error handling for failed partitioning-related
ALTER TABLE
operations against non-partitioned tables was not performed correctly (Bug #20284744)Partitioning:
ALTER TABLE
when executed from a stored procedure did not always work correctly with tables partitioned byRANGE
. (Bug #77333, Bug #16613004, Bug #21246891)Replication: As
binlog_error_action=ABORT_SERVER
is the default in MySQL 5.7.7 and later it is being used for more error situations. The behavior has been adjusted to generate a core dump to improve troubleshooting possibilities. (Bug #21486161, Bug #77738)Replication: At runtime, some
Gtid_set
objects could be instrumented with a Performance Schema mutex key equal to 0 (which is invalid), due to its use as the effective default value when the mutex key was not actually supplied. This allowed these objects to be created without a valid key, which led to further issues when using them. (Bug #21485997)Replication: When running the server with
gtid_mode=ON
, aDELETE
from aMEMORY
table following a restart was not written to the binary log correctly. (Bug #21045848)Replication:
ER_CANT_USE_AUTO_POSITION_WITH_GTID_MODE_OFF
errors were not reported using the correct format. (Bug #20545943)-
Replication: When the dump thread was killed while dumping an inactive binary log, some events in this log could be skipped and thus not replicated. (Bug #78337, Bug #21816399)
References: See also: Bug #74607, Bug #19975697.
Replication: XA transactions could cause an assert condition on
XA COMMIT
; this was happening because the internal transaction state was not reset betweenXA PREPARE
andXA COMMIT
orXA ROLLBACK
, due to the fact that these operations constitute separate transactions under XA. In addition,XA ROLLBACK
statements were not handled properly in some cases. (Bug #78264, Bug #21755890)Replication: The MTS submode set for each channel was ignored by the worker threads, which continued to read and use the global flag set for all slave channels. This could lead to errors when the coordinator was of one type and its workers of another. (Bug #77763, Bug #21464737)
Replication: Replication slaves could fail for having insufficient privileges when they had been granted only the
REPLICATION SLAVE
privilege. (Bug #77732, Bug #21455603)-
Replication: The status variable
Slave_open_temp_tables
keeps track of the number of temporary tables that are opened by the replication slave. If multi-source replication is enabled, it is the total number of temporary tables for all channels. This fix addresses the following issues relating to this variable:RESET SLAVE FOR CHANNEL
forced the value ofchannel
Slave_open_temp_tables
to 0; in the event that some other replication channel had open temporary tables which were later dropped, the value wrapped around to a large negative value (1 - 232
). This also caused spurious or missed warnings when issuing aSTOP SLAVE
orCHANGE MASTER TO
statement.-
The internal function that modifies
Slave_open_temp_tables
in such cases relied on two incorrect assumptions:-
That the variable is updated by only one thread when multithreaded slaves are not enabled, which is not true in the case of multi-source replication.
That non-atomic operations are safe with a single writer and multiple readers, which is not necessarily true for some platforms supported by MySQL.
-
(Bug #77585, Bug #21357008)
-
Replication: The warning '@@SESSION.gtid_executed' is deprecated and will be removed in a future release. was printed even when the session variable
gtid_executed
was not included in the result of a query. In addition, the result ofSELECT @@SESSION.gtid_executed
included a duplicate warning. Both issues occurred because the warning was printed whenever the value ofgtid_executed
was accessed by a statement, such access occurring as a matter of course, whether or not a given variable is actually included in the result.To fix this issue, we make handling of
@@SESSION.gtid_executed
consistent with how the also-deprecated variable@@GLOBAL.sql_log_bin
is treated in such cases, by making the following changes:gtid_executed
is no longer included in theperformance_schema.session_variables
table.gtid_executed
is still included in theinformation_schema.session_variables
table, but whenshow_compatibility_56 = ON
, the warning is not issued when querying the session_variables table, or when issuingSHOW VARIABLES
orSHOW SESSION VARIABLES
, even when using a matchingLIKE
clause with either of theSHOW
statements.
The warning is still issued by a statement such as
SELECT @@SESSION.gtid_executed
which accesses the value of the variable directly. (Bug #77574, Bug #21354712)References: See also: Bug #75980, Bug #20575529, Bug #76626, Bug #20854952.
Replication: When a transaction consisting of a single statement with a specified GTID failed in autocommit mode, its GTID was not released when rolling it back when binary logging was disabled. (Bug #77521, Bug #21338147)
-
Replication: The slave group event parser did not properly register an
XA_ROLLBACK
event as a transaction boundary. (Bug #77392, Bug #21273010)References: See also: Bug #20920851.
-
Replication: mysqlbinlog printed a
ROLLBACK
statement at the end of the binary log file, which when played back failed with error 1782 @@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON. This occurred when the binary log file did not include any data related events, or when the relay log file included aFormat_description_log_event
that had been generated on the master at server startup.The fix for this issue causes a relay log's
Format_description_log_event
to do nothing if it is applied by aBINLOG
statement, and stops aROLLBACK
from settinggtid_next
toANONYMOUS
when the state ofgtid_next
has not yet been determined by a subsequent event. (Bug #76887, Bug #20980932) Replication:
SAVEPOINT
andROLLBACK TO SAVEPOINT
within a trigger led to an assertion. (Bug #76727, Bug #20901025)Replication: While a
SHOW BINLOG EVENTS
statement was executing, any parallel transaction was blocked. The fix ensures that theSHOW BINLOG EVENTS
process now only acquires a lock for the duration of calculating the file's end position, therefore parallel transactions are not blocked for long durations. (Bug #76618, Bug #20928790)Replication: If a
CREATE VIEW
statement failed, it was being incorrectly written to the binary log even though it did not result in the creation of a partial view. The fix ensures that such statements are not recorded in the binary log. Additionally it was found that when a statement which had failed on a master was received by a slave with an expected error, if the statement was skipped on the slave, for example due to a replication filter, the expected error was being compared with the actual error that happened on the slave. The fix ensures that if a statement with an expected error is received by a slave, if the statement has not been filtered, only then is it compared with the actual error that happened on the slave. (Bug #76493, Bug #20797764)Replication: The action specified for
binlog_error_action
was not always honored correctly after a hardware failure occurred during log rotation. (Bug #76379, Bug #20805298)Replication: When using MySQL 5.7.6 and later with
binlog_format=row
andgtid_mode=off
, ifCREATE ... SELECT
was killed during execution it could lead to an inconsistent state, breaking replication. The cause was that in MySQL 5.7.6 the wayCREATE ... SELECT
was logged was changed, so that a commit was introduced between theCREATE TABLE
andSELECT
steps. The fix ensures thatCREATE ... SELECT
does not commit in the middle of the transaction whenbinlog_format=row
. (Bug #76320, Bug #77098, Bug #20742519, Bug #21114464)Replication: Modifying the
master_info_repository
orrelay_log_info_repository
inside a transaction and later rolling back that transaction left the repository in an unusable state. We fix this by preventing any modification of these repositories inside a transaction. (Bug #74950, Bug #20074353)Replication: Transactions added to
gtid_executed
usingSET
gtid_purged
were not taken into account byWAIT_FOR_EXECUTED_GTID_SET()
until a subsequent transaction was committed by a client or slave thread. (Bug #73838, Bug #19579811)-
Replication: When using
relay_log_info_repository=TABLE
, themysql.slave_relay_log_info
table is updated when a transaction is committed or when a flush is performed explicitly, such as during relay log rotation. If a transaction that uses any nontransactional tables (for exampleMyISAM
tables) is split across multiple relay logs, it is partially committed on relay log flush. Whengtid_mode=ON
, this caused the same GTID to be used for the remaining portion of the transaction, which raised anER_GTID_NEXT_TYPE_UNDEFINED_GROUP
error.We fix this issue by postponing in such cases the update of the relay log information repository that normally occurs on relay log rotation until the commit for the transaction in question has been executed.
This issue did not affect tables using transactional storage engines such as
InnoDB
. (Bug #68525, Bug #16418100)References: See also: Bug #21630907, Bug #76974.
Group Replication: The group replication applier channel does not support
DATABASE
as theslave_parallel_type
. When group replication is started, this is checked for explicitly, and handled correctly, but it remained possible to change this value indirectly at a later point in time by increasing the value ofslave_parallel_workers
while the slave SQL thread was stopped, which caused the applier to fail with an error. To fix this problem, theslave_parallel_type
for the group replication applier is now checked to make sure that it is set toLOGICAL_CLOCK
whenever the number ofslave_parallel_workers
is greater than 0, and not merely when group replication is first started. (Bug #21798804)Group Replication: The interface between the Group Replication plugin and the Performance Schema engine made use of a type of memory allocation which was passed to the server, and was a potential source of problems when passing information between the plugin and
performance_schema
tables. The implementation for this interface has been reworked so as to avoid performing this type of memory allocation when sharing data. (Bug #78263, Bug #21755699)-
JSON: Although the use of
JSON
values withGREATEST()
orLEAST()
is not currently supported, the server did not handle attempts to do so correctly, leading to an assert (Linux) orexit()
call (Windows) in debug builds. Now when you try to use JSON values with either of these functions, the server emits a suitable warning (ER_NOT_SUPPORTED_YET
). (Bug #21828321)References: See also: Bug #21383497.
-
JSON: A table that included a generated column referencing a
JSON
column in some cases become corrupted, so that a subsequent access of the table using a different connection caused the server to fail. (Bug #21808680)References: See also: Bug #21824519, Bug #78408.
JSON:
JSON_TYPE()
returnedOPAQUE
for some binary values that it should have identified asBLOB
. (Bug #21649073)JSON: JSON functions could return incorrect values if a path argument was passed as a user-defined variable that changed values between result set rows. (Bug #21602361)
JSON: If a multiple-column
UPDATE
statement failed to update aJSON
column that was then referenced in a later update, the server could exit. (Bug #21547877)JSON: For debug builds, incorrect caching of JSON values could cause an assertion to be raised. (Bug #21491442)
JSON: An empty string (which is not a valid JSON value) normally is parsed and returned as a JSON null literal, but in some cases could raise an assertion for debug builds. (Bug #21487833)
JSON: When a view was the inner table of an outer join, a
JSON
column could produce a non-NULL
value whenNULL
was expected. (Bug #21448719)JSON: If
JSON_CONTAINS_PATH()
was called with aone_or_all
argument ofall
and a path argument contained a wildcard, the function found all matches per path, even though in this case one match is sufficient. (Bug #21442775)JSON:
JSON_SET()
andJSON_REPLACE()
sometimes produced an incorrect result if a path expression identified a nonarray value. (Bug #21442624)JSON: Suppression of JSON conversion errors using non-strict SQL mode or
INSERT IGNORE
could then cause an assertion to be raised if an empty value inserted into aJSON NOT NULL
column was copied to anotherJSON
column. (Bug #21437989)JSON: For deeply nested JSON input,
ST_GeomFromGeoJSON()
orJSON_VALID()
could produce stack overflow. (Bug #21389101, Bug #21377136)JSON: Failure to parse a JSON string that contained a floating-point number with a large, negative exponent could cause a server exit. (Bug #21384048)
JSON: For debug builds, invoking
ST_AsGeoJSON()
withinGROUP BY ... WITH ROLLUP
could raise an assertion. (Bug #21383497)JSON:
JSON_SEARCH()
could return incorrect results if an invalid escape expression was specified. (Bug #21383284)JSON: For debug builds, a
NULL
first argument toJSON_SET()
could raise an assertion. (Bug #21381806)JSON: For expressions of the form
(
, where a subquery could return a JSON value, failure to handle a row result could cause a server exit.` (Bug #21376088)subquery
) IN (subquery
)JSON: Failure of
JSON_APPEND()
to handle a legal condition could cause a server exit. (Bug #21373874)JSON: Certain JSON functions could return incorrect results when used in prepared statements which had path expression constants. (Bug #77785, Bug #21472872)
RHEL RPM packages had incorrect dependency information. (Bug #22218841)
For an index-only scan over an indexed generated column, the server could do random calculations; the random results were not exposed to the user, but Valgrind warnings could occur, and the server could exit when calculations involved functions which did not expect such incorrect data. (Bug #21833760)
For tables with
VIRTUAL
generated columns, anINSERT
with an empty values list could cause a server exit. (Bug #21807818)CMake configuration was adjusted to handle new warnings reported by Clang 3.7. (Bug #21803314)
For plugins of type
PROTOCOL_PLUGIN
, execution ofINSTALL PLUGIN
,UNINSTALL PLUGIN
, orSHUTDOWN
could cause a server exit. Such plugins are no longer permitted to execute these statements. (Bug #21797816)Using a materialized view defined over a table containing generated columns could cause a server exit. (Bug #21797776)
For partitioned
InnoDB
tables containing a virtual generated column, reads from the table could return random data for the column. (Bug #21779011)The CMake checks for NUMA availability could cause compilation problems on platforms without NUMA support. (Bug #21774859)
The optimizer did not consider nonfunctional expressions such as
(a AND b) = 1
when looking for indexed generated columns to substitute for the(a AND b)
expression. Now expressions using theAND
andOR
logical operators are considered. (Bug #21770798)For debug builds, when the optimizer tried to clone certain types of keys for a range optimization, an assertion was raised. (Bug #21761867)
For debug builds, the server could exit when the optimizer attempted to estimate the cost for processing unique values when there were no keys. (Bug #21697002)
An
INSERT
into a view with a subquery could fail if executed as a prepared statement. (Bug #21696206)For queries on
InnoDB
tables for which the optimizer usedSPATIAL
indexes for full index scans, the result was empty because such indexes do not support a full scan. The optimizer no longer considersSPATIAL
indexes as candidates for full index scans. (Bug #21663612)For some inputs,
ST_Intersection()
could return an invalid polygon. (Bug #21658453)Spatial functions could simplify geometry values in contexts where the value might be used elsewhere in a query, producing incorrect results. (Bug #21652012)
If
ST_ConvexHull()
orST_SRID()
were used in a view definition, the resulting definition containedST_Convex_Hull()
(misspelled) orSRID()
(deprecated). (Bug #21651588)For debug builds, enabling the
PAD_CHAR_TO_FULL_LENGTH
SQL mode could causeSHOW FUNCTION STATUS
to raise an assertion. (Bug #21632425)mysqlpump did not exit with a message for some combinations of incompatible options. (Bug #21628662)
An assertion could be raised if the optimizer tried to create a temporary table based on a prepared statement parameter. (Bug #21625929)
Executing a prepared statement with multiple nested subqueries could raise an assertion. (Bug #21624851)
For debug builds, failure of subquery optimization could cause an assertion to be raised due to improper error handling. (Bug #21621313)
Some table and index optimizer hints were lost early in statement processing, so query rewrite plugins did not have access to them. This could cause incorrect matching between incoming statements and statement pattern templates. (Bug #21619780)
Queries containing nested subqueries combining grouping and outer references might cause a server exit. (Bug #21619634)
-
Passing
NULL
as the second or third argument toST_AsGeoJSON()
could cause the server to stop responding to the session or (in debug builds) to raise an assertion.Giving input to
HANDLER READ
that could not be converted to the correct type could cause the server to stop responding to the session or (in debug builds) to raise an assertion. (Bug #21616810, Bug #21650603) For debug builds,
ST_IsValid(NULL)
could raise an assertion. (Bug #21616647)For debug builds, an assertion could be raised for negative zero values when converting time values to decimal. (Bug #21616585)
-
ST_AsWKB()
could cause a server exit if given invalid data. (Bug #21614368)References: See also: Bug #22131961.
If an aggregate function was used over a generated column that was itself part of a multiple-column index, the server could exit. (Bug #21613615)
A missing error check during column reference resolution could result in an incorrect error message or (in debug builds) an assertion being raised. (Bug #21613422)
For debug builds, an assertion could be raised in
Filesort::make_sortorder()
for attempts to sortItem_ref
objects. (Bug #21611270)For debug builds, an assertion was raised for some queries that have a semijoin and use the materialization strategy, if a key length or number of key parts was zero. (Bug #21566735)
-
Compilation using gcc 4.9 or 5.1 failed on ARM64 platforms. (Bug #21552524)
References: See also: Bug #21845828.
For debug builds, invalid geometry byte strings could cause spatial functions to raise an assertion rather than return an error to the caller. (Bug #21546656)
For debug builds, a too-strict assertion could be raised by invalid characters for
LOAD DATA
. (Bug #21542698)The server could exit when
InnoDB
tried to update a secondary index on aVIRTUAL
generated column of typeBLOB
. (Bug #21530366)For temporary tables created to handle
UNION
statements that selectedCHAR
orSET
columns, the maximum column width could be too long forInnoDB
to handle. Now such columns are created as variable-length columns. (Bug #21480999)For builds configured with
MAX_INDEXES
greater than 64, certain queries for which the server used temporary tables could cause a server exit. (Bug #21466850)Adding or dropping a
VIRTUAL
generated column could cause a server exit. (Bug #21465626)For plugins that use the audit plugin API,
MYSQL_AUDIT_GLOBAL_VARIABLE_SET
events passed to the notification function did not include the new variable value. (Bug #21457699)Queries on a table containing an indexed generated column could fail if the table name contained special characters. (Bug #21454155)
For debug builds, some spatial functions that accept raw byte data for spatial arguments (for example, specified as hex values) could raise an assertion if such an argument contained extra garbage following valid data. (Bug #21397107)
For debug builds, an incorrect assertion could be raised during subquery execution. (Bug #21383882)
For debug builds, a missing error check in
Item_sum_hybrid::fix_fields()
caused an assertion to be raised. (Bug #21383714)Calls to
ST_Buffer()
could hang or raise an assertion. (Bug #21372946)The server could exit in unclean fashion if configured to listen on a TCP/IP port number already in use by another server instance. (Bug #21368299)
Certain subqueries as arguments to
PROCEDURE ANALYSE()
could cause a server exit. (Bug #21350175)A query with a right outer join inside a derived table might return wrong data. (Bug #21350125)
Starting the server with
--skip-grant-tables
(or with options such as--initialize
for which--skip-grant-tables
is implicit) prevented theINSTALL PLUGIN
andUNINSTALL PLUGIN
statements from working. (Bug #21335821)mysql_ssl_rsa_setup could create an unwanted
.rnd
file in the data directory. (The file is actually created by openssl, which mysql_ssl_ras_setup invokes. mysql_ssl_rsa_setup now cleans up the file.) (Bug #21335818)Some
INFORMATION_SCHEMA
queries consumed excessive memory due to suboptimal query plans and insufficient materialization. (Bug #21299665)With the server configured to send error messages to
syslog
or a log file, messages generated prior to error log setup were sent tostderr
orstdout
. These messages are now buffered until error log setup has completed, then logged to the proper destination. (Bug #21296553)Executing a prepared statement using a derived table and an aggregate function in a subquery in the
SELECT
list could cause a server exit. (Bug #21277074)GRANT
created the account for nonexistent accounts even if theNO_AUTO_CREATE_USER
SQL mode was enabled. (Bug #21271571)A query with a
NOT IN
subquery that hadCOUNT(DISTINCT)
could return incorrect results. (Bug #21243772)When started using a very old data directory (from MySQL 5.0), the server could exit due to failure to properly read the old grant tables. (Bug #21216433)
A mulitple-table update involving generated columns that updated used a temporary table could cause a server exit or raise an assertion. (Bug #21216067)
For queries containing an expression of the form
(
, a combination of semijoin and subquery materialization strategies could cause a server exit. (Bug #21205577)x
IN (subquery
)) IN (subquery2
)If a query contained an outer join such as
LEFT JOIN (t1,t2,...)
and a hint was used to disable join buffering on a right-side table but not on the others, a server exit occurred. (Bug #21205282)For a cursor type of
CURSOR_TYPE_READ_ONLY
, retrieving the result set for the first execution of a preparedCALL
staement could be missing the first result set row if the data was numeric; raise an assertion for debug builds if the data was string; cause loss of the server connection when callingmysql_stmt_fetch()
. (Bug #21199582)Dangling blob pointers could remain when closing an
InnoDB
table, resulting in a subsequent read of invalid memory and a server exit. (Bug #21153489)For some operations where sorting or grouping required a temporary table, the table could have zero columns and raise an assertion. (Bug #21143151)
Queries containing an expression of the form
(
could cause a server exit. (Bug #21139402)x
IS NULL) IN (subquery
)During server SSL file autogeneration,
ca.pem
briefly had insecure file permissions. (Bug #21138119)An assertion could be raised due to incorrect error handling if a
SELECT ... FOR UPDATE
subquery resulted in deadlock and caused a rollback. (Bug #21096444)Selecting the result of an
INSERT()
function call to which input was passed as a hexidecimal string could expose more information than was passed to the function. (Bug #21056907)Subqueries having
COUNT()
withGROUP BY
could yield incorrect results. (Bug #21055139, Bug #78029, Bug #21615020)The updatable property of a view is set during view creation. If the underlying table was dropped and re-created as a nonupdatable one, the updatable property of the original view was not revised accordingly. This could cause a server exit for attempts to insert or replace into the view is made. (This problem was specific to views with multiple tables/views and did not occur with update statements.) (Bug #21039264)
-
The locking functions provided by the
version_tokens
plugin were renamed:vtoken_get_read_locks()
,vtoken_get_write_locks()
, andvtoken_release_locks()
are now namedversion_tokens_lock_shared()
,version_tokens_lock_exclusive()
, andversion_tokens_unlock()
, respectively.These functions also failed to have any effect because they were implicitly unlocked at the end of the statement in which they were set. (Bug #21034322, Bug #21280801)
Servers linked against yaSSL and compiled with GCC 4.8.2 could fail to respond correctly to connection attempts until several seconds after startup. (Bug #21025377)
When upgrading an old data directory (MySQL 5.0 or 5.1), mysql_upgrade could fail to properly read the
mysql.proc
table. (Bug #20968596)For tables with subpartitions, the server could exit due to incorrect error handling during partition pruning if the partition could be identified but not the subpartition. (Bug #20909518)
mysql_upgrade could fail to look for checked tables in the wrong database during the repair phase. (Bug #20868496)
DELETE
could check privileges for the wrong database when table aliases were used. (Bug #20777016)mysqldump used incorrect syntax for generated column definitions. (Bug #20769542)
Within a trigger, use of a cursor that accessed
OLD
orNEW
values from a row could cause a server exit. (Bug #20760261)SHOW CREATE USER
returned unexpected results. (Bug #20625566)Failure during execution of an
XA PREPARE
statement could result in an invalid XA transaction state. Subsequent attempts to start another XA transaction led to anER_XAER_OUTSIDE
error. (Bug #20538956)The audit log plugin could audit accounts named in the
audit_log_exclude_accounts
system variable. (Bug #20408206)If a generated foreign key index was renamed by the same
ALTER TABLE
statement that added a new foreign key with the same name, the server could exit. (Bug #20146455)ALTER TABLE
operations that dropped and added the sameFULLTEXT
index were not performed as in-place (fast) operations that avoid using a temporary copy of the table. (Bug #20106837)When the number of days calculated by
DATE_FORMAT()
function was negative, the server could exit. (Bug #19985318)ALTER TABLE
operations to add or modify columns could create geometry columns containing invalid data due to missing validation. (Bug #19880316)-
If range optimization was attempted on an index with a string column as its first part and values used for comparison were fully truncated, comparisons would be incorrect and produce incorrect results. (Bug #19333852)
References: This issue is a regression of: Bug #16407965.
The server could hang due to incorrect cleanup of aggregate functions used in a query. (Bug #18979515)
The server could exit while checking for appropriate indexes to use for certain queries that used aggregate function in the
WHERE
clause. (Bug #18706592)On Windows, the
validate_password
plugin could cause a server exit during the dictionary check. (Bug #18636874)Invoking a stored program without qualifying it with the database name could lead to stored program compilation errors. (Bug #18599181)
EXPLAIN
of statements containingGROUP_CONCAT()
could cause a server exit. (Bug #17865675)The value of the
FOUND_ROWS()
function that returns the number of rows found in the previous query could change during execution of the next query. Now the value ofFOUND_ROWS()
for the previous query remains constant during execution of the next query. (Bug #17846246)Failure to check for error conditions could cause some updates or deletes to result in a server exit. (Bug #17763238)
On Windows, heap corruption in the audit log plugin caused server startup failure. (Bug #14700102)
If the
UPDATE
part ofINSERT ... ON DUPLICATE KEY UPDATE
swapped two column values, the server could read incorrect data and exit. (Bug #13901905)For debug builds, merging a derived table into an outer query block could raise an assertion. (Bug #79502, Bug #22305361, Bug #21139722)
mysqlpump failed to compile with Clang. (Bug #78637, Bug #21924096)
For debug builds, a
DROP TRIGGER
statement could raise an assertion if the trigger was defined on a table that contained a generated column. (Bug #78408, Bug #21824519)Some stress test files in the
mysql-test/suite/innodb_stress
directory had the executable file mode set although they were not script files. (Bug #78403, Bug #21822413)Subqueries that used a derived table and contained a set function referring to a column from that derived table might be aggregated in the wrong query block. (Bug #78250, Bug #21753180)
For some inputs,
ST_Union()
could return an invalid geometry collection. (Bug #78206, Bug #21689998)On non-Windows systems, setting
range_alloc_block_size
orquery_alloc_block_size
to a value larger than 32 bits at startup could cause a server exit. The maximum value for these system variables (on all platforms) is now limited to 232 − 1, rounded down to the nearest multiple of 1024. (Bug #78188, Bug #21682231)-
mysql-test-run.pl now has an
--valgrind-clients
option that causes all clients started by.test
files to be run with valgrind. This option requires valgrind 3.9 or later.In addition, several client memory leak issues were fixed. (Bug #78165, Bug #21672747)
The mysql client parser incorrectly interpreted optimizer hint comments that contained
;
,"
,'
, or`
characters. (Bug #78114, Bug #21646026)-
These Version Tokens issues were resolved:
version_tokens_delete()
now strips whitespace surrounding token names in its argument, similar toversion_tokens_set()
andversion_tokens_edit()
.Passing
NULL
toversion_tokens_delete()
caused a server exit.Passing an argument with an empty token name to
version_tokens_set()
orversion_tokens_edit()
caused a server exit.Passing
NULL
as the timeout value toversion_tokens_lock_exclusive()
orversion_tokens_lock_shared()
caused a server exit.
(Bug #78111, Bug #21645001, Bug #21646106, Bug #21645944, Bug #21646017)
-
Columns selected from the right-hand table of a left join, which was also a derived table, might produce incorrect
NULL
value information when used in anIN
subquery. (Bug #77980, Bug #21574933)References: This issue is a regression of: Bug #14358878.
-
On Windows, if the MySQL server was started as a service, logging to the error log file was disabled. (Bug #77977, Bug #21574096)
References: This issue is a regression of: Bug #21328041.
In the
setup_instruments
Performance Schema table, it was possible to set memory instrument toTIMED='YES'
, although memory operations are never timed. Now such attempts are ignored. It was possible to set built-in memory instruments (with names of the formmemory/performance_schema/%
) toENABLED='YES'
, although built-in memory instruments cannot be disabled. Now such attempts are ignored. (Bug #77944, Bug #21562212)mysqldump and mysqlpump output included
sys
schema stored programs even when thesys
schema was not dumped. (Bug #77926, Bug #21549860)RPM installation scripts failed if configuration files contained multiple
datadir
lines. Now the lastdatadir
line is used. (Bug #77878, Bug #21527467)An unnecessary
memset()
call invoked during Performance Schema digest operations has been removed, which improves performance by reducing overhead. (Bug #77863, Bug #21528683)A potential race condition for the safe mutex implementation was corrected. This implementation is enabled by default only for debug builds. (Bug #77862, Bug #21522888)
-
Binary logging of
CREATE USER
and statements could log the hash of the password hash (rather than the hash itself) whenlog_backward_compatible_user_definitions
was enabled. Binary logging ofALTER USER
statements could include attributes not present in the original statements.In consequence of the fix for these issues,
log_backward_compatible_user_definitions
has been replaced bylog_builtin_as_identified_by_password
. If this variable is enabled, binary logging forCREATE USER
statements involving built-in authentication plugins rewrites the statements to include anIDENTIFIED BY PASSWORD
clause, andSET PASSWORD
statements are logged asSET PASSWORD
statements, rather than being rewritten toALTER USER
statements. (Bug #77860, Bug #21516392, Bug #20535561) mysqld --initialize produced warnings about missing SSL files, which is unnecessary because initialization does not require SSL. (Bug #77825, Bug #21498544)
Valgrind errors could occur during partition pruning for tables containing generated columns. (Bug #77782, Bug #21469535)
When mysqlpump was invoked with the
--defer-table-indexes
option, it could generate incorrectCREATE TABLE
statements for tables with a foreign key and a primary key but not a secondary index. (Bug #77759, Bug #21462732)-
An attempt to use a previously unused time zone with
CONVERT_TZ()
could produce warnings or errors or (in debug builds) raise an assertion if GTIDs were enabled but the binary log was not enabled.In debug builds, an attempt to use a previously unused time zone with
CONVERT_TZ()
or as the value of thetime_zone
system variable inside a stored program could raise an assertion. (Bug #77753, Bug #21459999, Bug #77748, Bug #21459795) The server initialization script used for the service mysql status command on Linux sometimes incorrectly reported that the server was stopped. (Bug #77696, Bug #21768876)
ALTER TABLE
could raise an assertion for a table with an indexed virtual column having a column position greater than 64. (Bug #77656, Bug #21391781)Evaluation of virtual generated columns could fail to evaluate all base columns and result in invalid memory reads. (Bug #77653, Bug #21390605)
For statements of the form
CREATE TABLE ... SELECT
, where the table was defined to contain aDECIMAL UNSIGNED
, calculation of the row size was incorrect, leading to incorrect values in the table. (Bug #77636, Bug #21383896)A
WHERE
predicate containing bothTRIM(LEADING ..)
andTRIM(TRAILING ...)
could be incorrectly optimized away. (Bug #77631, Bug #21447969)For wait events, the Performance Schema uses the
CYCLE
timer by default, but failed to fall back to a different timer ifCYCLE
was unavailable. (Bug #77577, Bug #21374104)A disk-full condition during execution of a
CREATE TABLESPACE
statement caused a server exit. (Bug #77556, Bug #21347001)A privilege precheck for derived tables could fail and cause a server exit. (Bug #77525, Bug #21338077)
For spatial functions, input polygons were automatically closed if open. However, the Open Geospatial Consortium guidelines require that input polygons already be closed. Unclosed polygons are now rejected as invalid rather than being closed. (Bug #77505, Bug #21327888)
-
When a
VIRTUAL
generated column was added to a table, it was not ensured that data being calculated by the generated column expression would not be out of range for the column. This could lead to inconsistent data being returned and unexpectedly failed statements.ALTER TABLE
now supportsWITHOUT VALIDATION
andWITH VALIDATION
clauses to control whetherALTER TABLE
validates the data for aVIRTUAL
generated column:With
WITHOUT VALIDATION
(the default if neither clause is specified), an in-place operation is performed (if possible), data integrity is not checked, and the statement finishes more quickly. However, later reads from the table might report warnings or errors for the column if values are out of range.With
WITH VALIDATION
,ALTER TABLE
copies the table. If an out-of-range or any other error occurs, the statement fails. Because a table copy is performed, the statement takes longer.
WITHOUT VALIDATION
andWITH VALIDATION
are permitted only withADD COLUMN
,CHANGE COLUMN
, andMODIFY COLUMN
operations. (Bug #77478, Bug #21317507) For some string functions, data was truncated when evaluated in subqueries due to incorrect space calculations when creating temporary tables to hold intermediate results. (Bug #77473, Bug #21317406)
Statement digests did not include information about optimizer hint comments, causing statements with and without hints to be aggregated. (Bug #77414, Bug #21286261)
A predicate of the form
WHERE ROUND(
, whereX
,Y
) > 0X
is a column name andY
is a program local variable, could return false when it should return true. (Bug #77391, Bug #21279005)ST_SymDifference()
with multipolygon arguments could return incorrect results. (Bug #77372, Bug #21263152)Updating
VARCHAR
andTEXT
columns in the sameUPDATE
statement could produce incorrect results. When aVARCHAR
column was assigned to aTEXT
column and theVARCHAR
column was then set to a different value, theTEXT
column's result contained theVARCHAR
column's new value. (Bug #77135, Bug #21143080)-
A subquery in a
HAVING
clause that returned more than 1 row could cause a server exit.Additional to the bug fix,
EXPLAIN
now displaysZero limit
rather thanImpossible WHERE
when optimizing a query withLIMIT 0
. (Bug #76998, Bug #21067109) If an
INFORMATION_SCHEMA
query that performed a table-open operation encountered a corrupt table and attempted to repair it, a deadlock could occur, resulting in an aborted transaction without an appropriate error being reported. Such queries now do not attempt table repair. (Bug #76912, Bug #21021848)mysqladmin -u root -p could exit with a segmentation fault. (Bug #76538, Bug #20802751)
The optimizer sometimes generates an index for a derived table (subquery in the
FROM
clause). If this occurred for a statement executed within a stored program, a memory leak could occur. (Bug #76349, Bug #20728894)Optimizer estimates for filtering conditions could lead to suboptimal execution plans if the expected number of rows selected from a table was between 0 and 1. The estimate is now made to be at least 1. (Bug #76314, Bug #20701585)
If a file was specified using an
init_file
system variable, mysqld --initialize produced errors for statements in the file such asGRANT
that affect user accounts. (Bug #75918, Bug #20546898)The optimizer could incorrectly assume an out-of-memory condition while optimizing a range scan for the
OR
operator, resulting in overestimation of the number of qualifying rows. (Bug #75248, Bug #20229614)The
events_statements_history
Performance Schema table could have anERRORS
column value of 0 when other columns indicated there were errors. (Bug #74614, Bug #19929832)View creation from a
UNION
failed with a duplicate-column error if aSELECT
statement in theUNION
other than the first used the same column name multiple times. (Bug #74539, Bug #19886430)Timestamp values written to the slow query log could be incorrect. (Bug #73974, Bug #19646918)
When the mysql client was used to connect to the server in batch mode using an account with an expired password, the error message was not meaningful. mysql now reports “Please use --connect-expired-password option or invoke mysql in interactive mode” in this case. (Bug #72696, Bug #21464621)
For
UPDATE
statements withORDER BY
, the optimizer could perform an unnecessaryfilesort
on a key that was used for scanning as well as being updated. (Bug #72518, Bug #18698556)-
For a query with many range conditions, the optimizer would estimate that too much memory would be required for a range scan and fall back to a less optimal plan, such as a full table scan.
A new
range_optimizer_max_mem_size
system variable now controls the limit on memory consumption for the range optimizer. A value of 0 means “no limit.” If an execution plan considered by the optimizer uses the range access method but the optimizer estimates that the amount of memory needed for this method would exceed the limit, it abandons the plan and considers other plans. (Bug #70247, Bug #17413040, Bug #17769777) Empty XML elements having the form
<element/>
were not handled correctly by theLOAD XML
statement. (Bug #67542, Bug #16171518)As the number of open
MyISAM
tables increased, lookups to check whether a table was open became expensive, particularly when the table was not open. Lookup performance has been improved, with the overhead reduction especially beneficial for selects on large number of tables with large values oftable_open_cache
andtable_definition_cache
. (Bug #49177, Bug #11757169)