MySQL 5.7 Release Notes
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 using my_message()
.
(Bug #21458066)
Incompatible Change:
The mysql_options()
C API
function has two new options,
MYSQL_OPT_MAX_ALLOWED_PACKET
and
MYSQL_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 the
max_allowed_packet
and
net_buffer_length
system
variables.) Each option name also now can be passed to the
mysql_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 use
mysql_options()
and
mysql_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 each
mysql_thread_init()
call to
avoid a memory leak. C API internals have been reimplemented to
reduce the amount of information allocated by
mysql_thread_init()
that must be
freed by mysql_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 each
mysql_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 as
P_tmpdir
no longer exists, deprecated
std::hash_map
in favor of
std::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 the
mysqlclient.pc
file. The default value is
INSTALL_LIBDIR/pkgconfig
, unless
INSTALL_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 the
libmysqlclient
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 following
INFORMATION_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 is
ER_FEATURE_DISABLED_SEE_DOC
.
The error message indicates which table is disabled and that
the show_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 that
show_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 the
INFORMATION_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
, and
session_status
. An implication of
this change is that SHOW
VARIABLES
and SHOW
STATUS
no longer require privileges on the underlying
Performance Schema tables from which their output is produced
when show_compatibility_56=OFF
.
(Bug #21251297)
With the show_compatibility_56
system variable enabled, the reported values of the
Last_query_cost
and
Last_query_partial_plans
status variables were incorrect.
With the show_compatibility_56
system variable disabled, the reported values of the
Created_tmp_tables
,
Handler_external_lock
, and
Table_open_cache_%
status variables were
incorrect.
(Bug #20483278, Bug #21788549, Bug #21788887)
Previously, the transaction
instrument in the
setup_instruments
table was
disabled by default, and the
events_transactions_current
and
events_transactions_history
consumers in the
setup_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
and SHOW
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
the SELECT
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, a
CYCLE
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 a THREAD_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 the
gettid()
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 the
mysql.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 the
mysql_shutdown()
C API function.
See SHUTDOWN Statement.
The mysql_shutdown()
function
and corresponding COM_SHUTDOWN
client/server
protocol command are deprecated and will be removed in a future
MySQL version. Instead, use
mysql_query()
to execute a
SHUTDOWN
statement.
(WL #6784)
Spatial functions such as
ST_MPointFromText()
and
ST_GeomFromText()
that accept
WKT-format representations of MultiPoint
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()
and
ST_AsWKT()
that produce WKT-format results now display
MultiPoint
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 new
metrics
view and
statement_performance_analyzer()
stored procedure provide supporting infrastructure for the
diagnostics()
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 a
DEFINER
of
'mysql.sys'@'localhost'
. (Previously, the
DEFINER
was
'root'@'localhost'
.) Use of the reserved
mysql.sys
account avoids problems that
occur if a DBA renames or removes the
root
account.
sys
schema 1.5.0 also includes fixes for
several issues:
The sys
schema
ps_is_instrument_default_enabled()
and
ps_is_instrument_default_timed()
stored functions returned incorrect results in some cases.
The ENABLED
and
HISTORY
columns that were added to the
setup_actors
Performance Schema
table in earlier MySQL 5.7 releases caused the
sys
schema
ps_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
the innodb_log_checksum_algorithm
option.
innodb_log_checksums=ON
enables
a CRC-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
replaces COMPACT
as the implicit default row format for InnoDB
tables. A new configuration option,
innodb_default_row_format
,
specifies the default InnoDB
row format.
Permitted values include DYNAMIC
(the
default), COMPACT
, and
REDUNDANT
.
The COMPACT
row format remained the default
row format until this release to ensure compatibility with older
versions of InnoDB
in MySQL 5.1 and earlier.
Now that MySQL 5.1 has reached the end of its product lifecycle,
the newer DYNAMIC
row format becomes the
default. For information about advantages of the
DYNAMIC
row format, see
DYNAMIC Row Format.
Newly created tables use the row format defined by
innodb_default_row_format
when
a ROW_FORMAT
option is not specified
explicitly or when ROW_FORMAT=DEFAULT
is
used.
Existing tables retain their current row format if a
ROW_FORMAT
option was specified explicitly.
If a ROW_FORMAT
option was not specified
explicitly or if ROW_FORMAT=DEFAULT
was used,
any operation that rebuilds a table also silently changes the
row format of the table to the format defined by
innodb_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 of
column
->path
JSON_EXTRACT(
, where
column
,
path
)column
is a
JSON
column, and
path
is a valid JSON path.
An expression with ->
, like its equivalent
that uses JSON_EXTRACT()
instead, can be used
in place of a column identifier wherever the latter can occur
within a valid SQL statement. For example, the following
CREATE TABLE
and
SELECT
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 a
WHERE
, ORDER BY
, or
GROUP 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 the
JSON_EXTRACT()
function instead. This can be
seen in the output from EXPLAIN
when used on such a statement.
Like JSON_EXTRACT()
, the
->
operator returns as
NULL
if no matching value for an otherwise
valid path is found.
For more information about ->
and
JSON_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 the
InnoDB
buffer pool. When
innodb_numa_interleave
is
enabled, the NUMA memory policy is set to
MPOL_INTERLEAVE
for the
mysqld process. After the
InnoDB
buffer pool is allocated, the
NUMA
memory policy is set back to
MPOL_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()
, and
JSON_INSERT()
now treat SQL
NULL
values as JSON null literals, which is
consistent with JSON_OBJECT()
and
JSON_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 current
libmysqlclient
.
(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 on
libnuma.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 to JSON_ARRAY_APPEND()
.
(Bug #21560934)
The server now generates a warning when the
default_storage_engine
or
default_tmp_storage_engine
system variable is set to a disabled storage engine named in the
disabled_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 to testclients
.
(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
in SQL_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 partitioned
InnoDB
tables created in previous releases,
which used the ha_partition
handler, to use
InnoDB
native partitioning instead.
mysql_upgrade now checks for all
InnoDB
tables that were created using the
generic ha_partition
handler and attempts
to upgrade them to InnoDB
native
partitioning.
In the mysql client, pre-5.7.6
partitioned InnoDB
tables can be upgraded
one by one to native partitioning using the
ALTER
TABLE ... UPGRADE PARTITIONING
statement that is
implemented in this release.
(Bug #20727344, Bug #76374)
Important Change; Replication:
The START SLAVE
and
STOP SLAVE
statements can no
longer be used for the
group_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 of
replication_applier_status_by_coordinator
.
This means that
replication_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 an INSERT INTO ... SELECT ... FROM
operation with the
wrong tbl_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
or
ROW_FORMAT=COMPRESSED
due to an incorrect
undo log record size calculation. The same operation succeeded
with ROW_FORMAT=COMPACT
or
ROW_FORMAT=REDUNDANT
.
ROW_FORMAT=DYNAMIC
and
ROW_FORMAT=COMPRESSED
now permit a row length
violation at DDL time if
innodb_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 an MLOG_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 of rec
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
incomplete MLOG_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-rebuilding ALTER TABLE
operation is running could result in an infinite loop.
(Bug #21628087, Bug #78056)
InnoDB:
UNIV_INLINE
was not defined for the
dict_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 missing isl
file, resulting in
the tablespace being opened using the file location defined in
an MLOG_FILE_*
record in the redo log.
Recovery no longer opens the tablespace if the
isl
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 in SHOW 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
or
COMPRESSED
row format, more data than
necessary was undo logged for virtual columns.
(Bug #21477535)
InnoDB:
An INSERT
operation raised a
btr_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 with
innodb_page_size=4K
and
ROW_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 the
TrxInInnoDB
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 the
trx_purge()
batch size was reduced to 20.
(Bug #21040050)
InnoDB:
In READ COMMITTED
mode, a
REPLACE
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
an innodb_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 the mysql
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
a my.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 by RANGE
.
(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
, a
DELETE
from a
MEMORY
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 between XA
PREPARE
and
XA
COMMIT
or
XA
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 of channel
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 a
STOP SLAVE
or
CHANGE 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 of
SELECT
@@SESSION.gtid_executed
included a duplicate warning.
Both issues occurred because the warning was printed whenever
the value of gtid_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
the
performance_schema.session_variables
table.
gtid_executed
is still included in the
information_schema.session_variables
table, but when show_compatibility_56
= ON
, the warning is not issued when querying the
session_variables table, or when issuing
SHOW VARIABLES
or
SHOW SESSION VARIABLES
, even when using a
matching LIKE
clause with either of the
SHOW
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 a Format_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 a BINLOG
statement, and stops a ROLLBACK
from setting
gtid_next
to
ANONYMOUS
when the state of
gtid_next
has not yet been determined by a
subsequent event.
(Bug #76887, Bug #20980932)
Replication:
SAVEPOINT
and ROLLBACK
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 the SHOW 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
and
gtid_mode=off
, if
CREATE ...
SELECT
was killed during execution it could lead to an
inconsistent state, breaking replication. The cause was that in
MySQL 5.7.6 the way
CREATE ...
SELECT
was logged was changed, so that a commit was
introduced between the
CREATE
TABLE
and SELECT
steps.
The fix ensures that
CREATE ...
SELECT
does not commit in the middle of the
transaction when
binlog_format=row
.
(Bug #76320, Bug #77098, Bug #20742519, Bug #21114464)
Replication:
Modifying the
master_info_repository
or
relay_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
using
SET
gtid_purged
were not taken into
account by
WAIT_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
,
the mysql.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 example
MyISAM
tables) is split across
multiple relay logs, it is partially committed on relay log
flush. When gtid_mode=ON
, this
caused the same GTID to be used for the remaining portion of the
transaction, which raised an
ER_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 the
slave_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 of
slave_parallel_workers
while
the slave SQL thread was stopped, which caused the applier to
fail with an error. To fix this problem, the
slave_parallel_type
for the group replication
applier is now checked to make sure that it is set to
LOGICAL_CLOCK
whenever the number of
slave_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
with GREATEST()
or
LEAST()
is not currently
supported, the server did not handle attempts to do so
correctly, leading to an assert (Linux) or
exit()
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()
returned
OPAQUE
for some binary values that it should
have identified as BLOB
.
(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 a JSON
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 when NULL
was expected.
(Bug #21448719)
JSON:
If JSON_CONTAINS_PATH()
was
called with a one_or_all
argument of
all
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()
and
JSON_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 a
JSON NOT NULL
column was copied to another
JSON
column.
(Bug #21437989)
JSON:
For deeply nested JSON input,
ST_GeomFromGeoJSON()
or
JSON_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()
within
GROUP 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 to
JSON_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, an
INSERT
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 of INSTALL PLUGIN
,
UNINSTALL PLUGIN
, or
SHUTDOWN
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 the
AND
and OR
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 used SPATIAL
indexes for full index
scans, the result was empty because such indexes do not support
a full scan. The optimizer no longer considers
SPATIAL
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()
or
ST_SRID()
were used in a view definition, the
resulting definition contained
ST_Convex_Hull()
(misspelled) or
SRID()
(deprecated).
(Bug #21651588)
For debug builds, enabling the
PAD_CHAR_TO_FULL_LENGTH
SQL
mode could cause SHOW 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
to ST_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
sort Item_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 a VIRTUAL
generated column of type BLOB
.
(Bug #21530366)
For temporary tables created to handle
UNION
statements that selected
CHAR
or
SET
columns, the maximum column
width could be too long for InnoDB
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 the INSTALL
PLUGIN
and UNINSTALL
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 to stderr
or stdout
. 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 the
NO_AUTO_CREATE_USER
SQL mode
was enabled.
(Bug #21271571)
A query with a NOT IN
subquery that had
COUNT(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 prepared
CALL
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 calling
mysql_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()
with GROUP
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()
, and
vtoken_release_locks()
are now named
version_tokens_lock_shared()
,
version_tokens_lock_exclusive()
, and
version_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
or NEW
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 an
ER_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 same FULLTEXT
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 containing
GROUP_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 of FOUND_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 of INSERT ... 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
or
query_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
to version_tokens_set()
and
version_tokens_edit()
.
Passing NULL
to
version_tokens_delete()
caused a server
exit.
Passing an argument with an empty token name to
version_tokens_set()
or
version_tokens_edit()
caused a server
exit.
Passing NULL
as the timeout value to
version_tokens_lock_exclusive()
or
version_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
an IN
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 to TIMED='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 form memory/performance_schema/%
) to
ENABLED='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 the sys
schema was not dumped.
(Bug #77926, Bug #21549860)
RPM installation scripts failed if configuration files contained
multiple datadir
lines. Now the last
datadir
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) when
log_backward_compatible_user_definitions
was
enabled. Binary logging of ALTER
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 by
log_builtin_as_identified_by_password
.
If this variable is enabled, binary logging for
CREATE USER
statements involving
built-in authentication plugins rewrites the statements to
include an IDENTIFIED BY PASSWORD
clause, and
SET PASSWORD
statements are
logged as SET PASSWORD
statements, rather than being rewritten to
ALTER 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 incorrect CREATE
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 the time_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 a
DECIMAL UNSIGNED
, calculation of the row size
was incorrect, leading to incorrect values in the table.
(Bug #77636, Bug #21383896)
A WHERE
predicate containing both
TRIM(LEADING ..)
and
TRIM(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 if CYCLE
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 supports WITHOUT
VALIDATION
and WITH VALIDATION
clauses to control whether ALTER TABLE
validates the data for a VIRTUAL
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
and WITH
VALIDATION
are permitted only with ADD
COLUMN
, CHANGE COLUMN
, and
MODIFY 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(
, where X
,Y
)
> 0X
is a column
name and Y
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
and
TEXT
columns in the same
UPDATE
statement could produce
incorrect results. When a VARCHAR
column was assigned to a TEXT
column and the VARCHAR
column was
then set to a different value, the
TEXT
column's result contained
the VARCHAR
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 displays
Zero limit
rather than Impossible
WHERE
when optimizing a query with LIMIT
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 as
GRANT
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 an ERRORS
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 a
SELECT
statement in the
UNION
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 with
ORDER BY
, the optimizer could perform an
unnecessary filesort
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 the LOAD 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 of
table_open_cache
and
table_definition_cache
.
(Bug #49177, Bug #11757169)