MySQL 5.7 Release Notes
This release adds support for Debian 8 and Ubuntu 15.04.
The CREATE USER
statement now
supports an IF NOT EXISTS
clause that causes
the statement to produce a warning for each named account that
already exists, rather than an error. The
ALTER USER
and
DROP USER
statements now support
an IF EXISTS
clause that cause the statements
to produce a warning for each named account that does not exist,
rather than an error. For details, see
CREATE USER Statement, ALTER USER Statement, and
DROP USER Statement.
These statement variants can be useful in replication scenarios when the set of accounts differs between master and slave. They also permit scripting account-management operations that otherwise would terminate for statement errors.
The maximum length of MySQL user names has been increased from 16 to 32 characters, which provides greater flexibility in choosing the user name part of MySQL account names. The change affects permitted user names in these contexts:
Account-management statements, such as
CREATE USER
,
GRANT
,
REVOKE
, and
SHOW GRANTS
.
Statements that support a DEFINER
clause,
such as CREATE PROCEDURE
and
CREATE VIEW
.
Other statements with clauses that contain user names, such
as CHANGE MASTER TO
and
CREATE SERVER
.
Columns that store user names in mysql
system database, INFORMATION_SCHEMA
, and
Performance Schema tables have been widened to accommodate
32 characters.
There are no changes in the client/server protocol, which exchanges user names as null-terminated strings. However, third-party programs that use this protocol to communicate may need to be modified if they use or store user names based on the assumption of 16 characters maximum.
The increase in maximum user name length has implications for MySQL administration:
Replication implication: Replication of user names longer than 16 characters to a slave that supports only shorter user names will fail. However, this should occur only when replicating from a newer master to an older slave, which is not a recommended configuration.
Downgrade implication: If a newer server supports any accounts with a user name longer than 16 characters, downgrades to an older version of MySQL that supports only shorter names is not possible.
If you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate this change in user name length.
A new client program, mysqlpump, provides an alternative to mysqldump. Its features include:
Parallel processing of databases, and of objects within databases, to speed up the dump process
Better control over which databases and database objects (tables, stored programs, user accounts) to dump
Dumping of user accounts as account-management statements
(CREATE USER
,
GRANT
) rather than as inserts
into the mysql
system database
Capability of creating compressed output
Progress indicator (the values are estimates)
For dump file reloading, faster secondary index creation for
InnoDB
tables by adding indexes after
rows are inserted
For more information, see mysqlpump — A Database Backup Program.
There are some notable differences between mysqlpump and mysqldump:
With no options, mysqlpump dumps everything, whereas mysqldump dumps nothing.
For mysqlpump, the
--routines
and
--events
are enabled by
default, whereas for mysqldump, they are
disabled by default.
The minimum version of the Boost library for server builds is now 1.58.0. (Bug #76354, Bug #20721087)
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.
The default configuration for systemd now sets
LimitNOFILE
to 5000 to increase the number of
file descriptors available to the MySQL server. This change
applies to Linux systems on which MySQL installation is
performed using RPM packages. On such systems, the number of
descriptors available is often set by the operating system to
1024. The change causes the number of descriptors to match the
open_files_limit
system
variable default value of 5000. To configure a different number
of descriptors, set LimitNOFILE
as described
at Managing MySQL Server with systemd.
(Bug #21073014)
The libmysqld
embedded server took its
default secure_file_priv
value from the
INSTALL_SECURE_FILE_PRIVDIR
CMake option, but cannot share the same
directory with a non-embedded server. The new
INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR
option enables a separate directory to be specified for
libmysqld
. The default value is
NULL
.
(Bug #20770671)
JSON:
MySQL now supports a native JSON
data type that enables efficient access to data in JSON
(JavaScript Object Notation) documents. The
JSON
data type provides these
advantages over storing JSON-format strings in a string column:
Along with the JSON
data type, a
set of SQL functions is available to enable operations on JSON
values, such as creation, manipulation, and searching. In
addition, the CONVERT()
and
CAST()
functions can convert
values between JSON
and other
types.
For more information, see The JSON Data Type, and JSON Functions.
The optimizer now is able to use indexes on generated columns, even when queries do not refer to such columns directly by name. The optimizer recognizes query expressions that match definitions of generated columns and uses indexes from those columns as appropriate during query execution. For details, see Optimizer Use of Generated Column Indexes.
The optimizer cost model has a new
memory_block_read_cost
parameter in the
mysql.engine_cost
table representing the cost
of reading an index or data block from an in-memory database
buffer.
Together with the existing io_block_read_cost
parameter representing the cost of reading a block from disk,
this change enables cost models for data access methods to take
into account the costs of reading information from different
sources; that is, the cost of reading information from disk
versus reading information already in a memory buffer. For the
initial implementation, the default value of
memory_block_read_cost
is the same as
io_block_read_cost
. Tuning the values remains
as future work, although you can change the values to see how
that affects query performance. For more information, see
The Optimizer Cost Model.
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
mysql
system database.
The optimizer hint capability introduced in MySQL 5.7.7 has been
expanded to subquery execution strategies. Subquery hints affect
whether to use semijoin transformations and which semijoin
strategies to permit, and, when semijoins are not used, whether
to use subquery materialization or
IN
-to-EXISTS
transformations. Examples:
SELECT /*+ SEMIJOIN(FIRSTMATCH, LOOSESCAN) */ * FROM t1 ...; SELECT id, a IN (SELECT /*+ SUBQUERY(MATERIALIZATION) */ a FROM t1) FROM t2; SELECT * FROM t2 WHERE t2.a IN (SELECT /*+ SUBQUERY(INTOEXISTS) */ a FROM t1);
For more information, see Subquery Optimizer Hints.
There is also a new
duplicateweedout
flag for the
optimizer_switch
system
variable. This flag enables use of
optimizer_switch
to specify
whether to use the Duplicate Weedout semijoin strategy, which
was not previously possible.
Microsoft Windows:
For Windows, the MSI installer package no longer includes
debugging binaries/information components (including PDB files).
These are available in a separate Zip archive named
mysql-
for 64-bit and
VERSION
-winx64-debug-test.zipmysql-
for 32-bit.
(Bug #18296012)VERSION
-win32-debug-test.zip
Current-event timing now provides more information. Previously,
while a wait, stage, statement, or transaction event was
executing, the respective tables displayed the event with
TIMER_START
populated, but with
TIMER_END
and TIMER_WAIT
as NULL
:
events_waits_current events_stages_current events_statements_current events_transactions_current
To make it possible to determine how long a not-yet-completed event has been running, the timer columns now are set as follows:
TIMER_START
is populated (unchanged from
previous behavior)
TIMER_END
is populated with the current
timer value
TIMER_WAIT
is populated with the time
elapsed so far (TIMER_END
−
TIMER_START
)
To find events that have not yet completed (that is, have no
END_EVENT_ID
) and have taken longer than
N
picoseconds thus far, monitoring
applications can use this expression in queries:
WHERE END_EVENT_ID IS NULL AND TIMER_WAIT > N
(Bug #75156, Bug #20889406)
The Performance Schema incorporates these changes:
The show_compatibility_56
system variable default value, previously
ON
, has been changed to
OFF
. Applications that require 5.6
behavior should set this variable to ON
until such time as they have been migrated to the new
behavior for system variables and status variables. See
Migrating to Performance Schema System and Status Variable Tables
When the Performance Schema session variable tables produced
output, they included no rows for global-only variables and
thus did not fully reflect all variable values in effect for
the current session. This has been corrected so that each
table has a row for each session variable, and a row for
each global variable that has no session counterpart. This
change applies to the
session_variables
and
session_status
tables.
It is no longer required that the
show_compatibility_56
system variable be OFF
for the
Performance Schema system variable tables to produce output.
The tables now produce output regardless of the variable
value. This change applies to the
global_variables
,
session_variables
, and
variables_by_thread
tables.
WHERE
clauses for
SHOW VARIABLES
and
SHOW STATUS
were deprecated
in MySQL 5.7.6. This restriction has been lifted so that
WHERE
is supported as before 5.7.6.
The metadata_locks
table now
displays tablespace locks. Rows for these locks have an
OBJECT_TYPE
value of
TABLESPACE
.
The Performance Schema logs wait, stage, statement, and transaction events in these history tables:
events_waits_history events_waits_history_long events_stages_history events_stages_history_long events_statements_history events_statements_history_long events_transactions_history events_transactions_history_long
Previously, historical event logging was controlled entirely
by enabling or disabling history-related consumers in the
setup_consumers
table. These
flags are global to the server, with the result that
historical data was collected either for all threads or no
threads.
The Performance Schema now uses history consumers in
conjunction with the
setup_actors
table to make it
possible to control collection of historical events per
host, user, or account (combination of host and user). This
table has a new HISTORY
column that
indicates whether to collect historical events (subject also
to which history consumers are enabled), and each new
foreground thread is matched against rows in the table. If a
matching row is found, its HISTORY
value
is recorded in the row for the thread in the
threads
table, which also now
has a HISTORY
column.
Enabling historical event logging for a given session can be done independent of enabling instrumentation for it. Consequently, you can control more precisely what events are logged in history tables, with these advantages:
A decrease in runtime overhead when historical data is needed only for a subset of the instrumented sessions.
A reduction of noise in the history tables, facilitating troubleshooting on busy servers that generate a large number of events.
For more information, see Pre-Filtering by Thread, The setup_actors Table, and The threads Table.
The threads
table now contains a
CONNECTION_TYPE
column that indicates the
transport protocol. It can be used to determine how the
connection was made. Permitted values are
TCP/IP
(TCP/IP connection established
without SSL), SSL/TLS
(TCP/IP connection
established with SSL), Socket
(Unix
socket file connection), Named Pipe
(Windows named pipe connection), and Shared
Memory
(Windows shared memory connection).
Connection-type information is also written to the general query log for new connections, and the audit log interface was revised to incorporate the connection type.
For more information, see The threads Table, The General Query Log, and Writing Audit Plugins.
If you upgrade to this MySQL release from an earlier version,
you must run mysql_upgrade (and restart the
server) to incorporate these changes into the
performance_schema
database.
References: See also: Bug #76167, Bug #20652173, Bug #20684424, Bug #20811494.
The initial implementation for query rewrite plugins used its own API. This API has been reimplemented to use the audit plugin API. For more information, see Writing Audit Plugins. One effect of the query rewrite plugin reimplementation is reduced overhead.
MySQL server plugins have access to server
“services,” as described in
MySQL Plugin Services. MySQL distributions now
include plugins that demonstrate how to test plugin service
APIs. The test_framework
plugin is a bare
bones plugin that shows the minimum required framework for
service testing. The test_services
and
test_services_threaded
plugins demonstrate
how to test the my_snprintf
and
my_plugin_log_service
services in unthreaded
and threaded contexts. For more information, see the MySQL
Server Doxygen documentation, available at
https://dev.mysql.com/doc/index-other.html.
MySQL distributions now include Version Tokens, a feature that
enables creation of and synchronization around server tokens
that applications can use to prevent accessing incorrect or
out-of-date data. Version Tokens is based on a plugin library
that implements a version_tokens
plugin and a
set of user-defined functions. For more information, see
Version Tokens.
MySQL distributions now provide a locking interface that implements locks with three attributes: Lock namespace, lock name, and lock mode. The namespace enables different applications to use the same lock names without colliding by creating locks in separate namespaces. Locks can be created with a mode of either read (shared) or write (exclusive).
This locking interface is available at two levels: 1) As a C language interface, callable as a plugin service from server plugins or user-defined functions; 2) At the SQL level, as a set of user-defined functions that map onto calls to the service routines. For more information, see The Locking Service.
The interface provided by the locking service is distinct from
that provided by GET_LOCK()
and
related SQL functions (see Locking Functions).
For example, GET_LOCK()
does not
implement namespaces and provides only exclusive locks, not
distinct read and write locks.
These changes were made for the Rewriter
query rewrite plugin (see
The Rewriter Query Rewrite Plugin):
There is now a single installation script,
install_rewriter.sql
. Previously, there
were two installation scripts,
install_rewriter.sql
and
install_rewriter_with_optional_columns.sql
,
which differed in whether they created the
pattern_digest
and
normalized_columns
columns of the
rewrite_rules
table.
install_rewriter.sql
now always creates
those columns, so there is no need for
install_rewriter_with_optional_columns.sql
.
The enabled
column of the
rewrite_rules
table is now defined as
ENUM('YES,'NO')
rather than as
CHAR(1)
. Correspondingly, to enable a
rule, set this column to YES
rather than
Y
.
To upgrade if you have previously installed the
Rewriter
plugin, uninstall it by running the
uninstallation script first, then run the installation script.
After reinstalling, load your rewrite rules again (this is
necessary because uninstalling drops the rules table). For
instructions, see
Installing or Uninstalling the Rewriter Query Rewrite Plugin.
MySQL Community Edition RPM packages now invoke mysql_ssl_rsa_setup during installation to create default SSL and RSA key and certificate files. (Bug #20855737)
my_print_defaults now masks passwords. To
display passwords in cleartext, use the new
--show
option. In
addition, The output for client programs invoked with the
--print-defaults
option now
masks passwords.
(Bug #19953365, Bug #20903330)
A new system variable,
require_secure_transport
,
enables administrators to require all client connections to the
server to be made using some form of secure transport.
Qualifying connections are TCP/IP connections that use SSL, or
connections that use a socket file (on Unix) or shared memory
(on Windows). When this variable is enabled, the server rejects
nonsecure connection attempts, which fail with an
ER_SECURE_TRANSPORT_REQUIRED
error.
This capability supplements per-account SSL requirements, which
take precedence. For example, if an account is defined with
REQUIRE SSL
, enabling
require_secure_transport
does
not make it possible to use the account to connect using a Unix
socket file.
ST_NumInteriorRing()
was added as more a standard-compliant alias of
ST_NumInteriorRings()
.
(Bug #77598, Bug #21362781)
All spatial computations now are done using Boost.Geometry functions. All older non-Boost-based algorithms have been removed. (Bug #77444, Bug #21300713)
Geometry constructor functions that take WKT or WKB values (such
as ST_GeomFromText()
and
ST_GeomFromWKB()
) did not check
for trailing garbage bytes. They now reject trailing
nonwhitespace characters and produce an error.
(Bug #77244, Bug #21198064)
Geometry object constructor functions such as
Point()
and
MultiPolygon()
now are stricter
about rejecting invalid arguments.
(Bug #76337, Bug #20712775)
In MySQL 5.7.4, the
ERROR_FOR_DIVISION_BY_ZERO
,
NO_ZERO_DATE
, and
NO_ZERO_IN_DATE
SQL modes were
changed so that they did nothing when named explicitly. Instead,
their effects were included in the effects of strict SQL mode
(STRICT_ALL_TABLES
or
STRICT_TRANS_TABLES
). The
intent was to reduce the number of SQL modes with an effect
dependent on strict mode and make them part of strict mode
itself.
However, the change to make strict mode more strict by including
ERROR_FOR_DIVISION_BY_ZERO
,
NO_ZERO_DATE
, and
NO_ZERO_IN_DATE
caused some
problems. For example, in MySQL 5.6 with strict mode but not
NO_ZERO_DATE
enabled,
TIMESTAMP
columns can be defined
with DEFAULT '0000-00-00 00:00:00'
. In MySQL
5.7.4 with the same mode settings, strict mode includes the
effect of NO_ZERO_DATE
and
TIMESTAMP
columns cannot be
defined with DEFAULT '0000-00-00 00:00:00'
.
This causes replication of CREATE
TABLE
statements from 5.6 to 5.7.4 to fail if they
contain such TIMESTAMP
columns.
The long term plan is still to have the three affected modes be included in strict SQL mode and to remove them as explicit modes in a future MySQL version. But to restore compatibility in MySQL 5.7 with MySQL 5.6 strict mode and to provide additional time for affected applications to be modified, the following changes have been made:
ERROR_FOR_DIVISION_BY_ZERO
,
NO_ZERO_DATE
, and
NO_ZERO_IN_DATE
again have
an effect when named explicitly. This reverts a change made
in MySQL 5.7.4.
ERROR_FOR_DIVISION_BY_ZERO
,
NO_ZERO_DATE
, and
NO_ZERO_IN_DATE
are no
longer part of strict SQL mode. This reverts a change made
in MySQL 5.7.4.
ERROR_FOR_DIVISION_BY_ZERO
,
NO_ZERO_DATE
, and
NO_ZERO_IN_DATE
are now
included in the default
sql_mode
value, which as a
result includes these modes:
ONLY_FULL_GROUP_BY
,
STRICT_TRANS_TABLES
,
NO_ZERO_IN_DATE
,
NO_ZERO_DATE
,
ERROR_FOR_DIVISION_BY_ZERO
,
NO_AUTO_CREATE_USER
, and
NO_ENGINE_SUBSTITUTION
.
With the preceding changes, stricter data checking is still enabled by default, but the individual modes can be disabled in environments where it is currently desirable or necessary to do so.
Although
ERROR_FOR_DIVISION_BY_ZERO
,
NO_ZERO_DATE
, and
NO_ZERO_IN_DATE
again can be
used separately from strict mode, it is intended that they be
used together. As a reminder, a warning now occurs if they are
enabled without also enabling strict mode or vice versa.
References: See also: Bug #75439, Bug #20367829.
InnoDB:
The adaptive hash index search system is now partitioned, with
each index bound to a specific partition, and each partition
protected by a separate latch. Partitioning is controlled by the
innodb_adaptive_hash_index_parts
configuration option.
Prior to MySQL 5.7.8, the adaptive hash index search system was
protected by a single latch
(btr_search_latch
) which could become a point
of contention. To reduce contention,
innodb_adaptive_hash_index_parts
is set to 8 by default. The maximum setting is 512.
(Bug #20985298)
InnoDB:
The new innodb_log_checksum_algorithm
option
specifies how to generate and verify the checksum stored in redo
log disk blocks.
innodb_log_checksum_algorithm
supports the
same algorithms as
innodb_checksum_algorithm
,
which include innodb
,
crc32
, none
, and their
associated strict forms. Previously, only the
innodb
algorithm was supported for redo log
disk blocks.
innodb_log_checksum_algorithm=innodb
is the
default setting. Thanks to Alexey Kopytov for the patch.
(Bug #20531208, Bug #75595)
InnoDB:
InnoDB
now supports secondary indexes on
virtual generated columns. For more information, see
Secondary Indexes and Generated Columns.
InnoDB:
Internal server-layer functions were added to allow
InnoDB
purge threads to construct and destroy
thread handle objects, and to compute virtual generated column
index values when a table object is not present. This
enhancement was required to support secondary indexes on virtual
generated columns.
InnoDB: Virtual generated column values no longer occupy space in database rows. With this change, a table rebuild is no longer required when adding or dropping virtual generated columns. Only a system table update is necessary, to register the new metadata.
Virtual generated columns are still represented in
InnoDB
metadata. The
N_COLS
field of
INNODB_SYS_TABLES
still counts
virtual generated columns, and
INNODB_SYS_COLUMNS
still includes
virtual generated column metadata.
A new INFORMATION_SCHEMA
table,
INNODB_SYS_VIRTUAL
, provides
metadata about columns upon which virtual generated columns are
based.
InnoDB:
InnoDB
now supports page-level compression
for file-per-table tablespaces. Page compression is enabled by
specifying the COMPRESSION
attribute when
creating or altering a table. Supported compression algorithms
include Zlib
and LZ4
. This
feature, which is referred to as transparent page compression,
relies on sparse file and hole punching support. It is supported
on Windows with NTFS, and a subset of MySQL-supported Linux
platforms where the kernel level provides hole punching support.
For more information about this feature, see InnoDB Page Compression.
InnoDB:
The new innodb_flush_sync
configuration option, which is enabled by default, causes the
innodb_io_capacity
setting to
be ignored for bursts of I/O activity that occur at checkpoints.
To adhere to the limit on InnoDB
background
I/O activity defined by the
innodb_io_capacity
setting,
disable innodb_flush_sync
.
InnoDB:
The default value for
innodb_purge_threads
and
innodb_page_cleaners
was
changed from 1 to 4. If the number of page cleaner threads
exceeds the number of buffer pool instances,
innodb_page_cleaners
is
automatically set to the same value as
innodb_buffer_pool_instances
.
Replication:
The behavior of SET GTID_PURGED
has been
changed so that it does not add any GTIDs to
Previous_gtids_log_event
and does not rotate
the binary log. Instead the GTIDs are added to the
mysql.gtid_executed
table. This fix ensures
that it is safe in all cases to use
binlog_gtid_simple_recovery=1
for a server using MySQL 5.7.8 or later, where all binary logs
were generated by servers using MySQL 5.7.8 or later.
(Bug #75767, Bug #20470724)
Replication:
When using a multithreaded slave, each worker thread has its own
queue of transactions to process. In previous MySQL versions,
STOP SLAVE
waited for all workers
to process their entire queue. This logic has been changed so
that STOP SLAVE
first finds the
newest transaction that was committed by any worker thread.
Then, it waits for all workers to complete transactions older
than that. Newer transactions are not processed. The new logic
allows STOP SLAVE
to complete
faster in case some worker queues contain multiple transactions.
(Bug #75525, Bug #20369401)
Solaris:
Solaris tarball and PKG distributions no longer have
-gcc
in the distribution file names.
(Bug #21047137)
Previously, the
max_digest_length
system
variable controlled the maximum digest length for all server
functions that computed statement digests. However, whereas the
Performance Schema may need to maintain many digest values,
other server functions such as query rewrite plugins need only
one digest per session. Increasing the
max_digest_length
value has
little impact on total memory requirements for those functions,
but can increase Performance Schema memory requirements
significantly. To enable configuring digest length separately
for the Performance Schema, its digest length is now controlled
by the new
performance_schema_max_digest_length
system variable.
(Bug #20963147)
The server now prints more descriptive diagnostic messages for
bad values of secure_file_priv
.
(Bug #20771331)
For attempts to create a multiple-column
SPATIAL
index, the server previously returned
an “Incorrect arguments to SPATIAL INDEX” error.
Now it returns
ER_TOO_MANY_KEY_PARTS
(“Too many key parts specified; max 1 parts
allowed”).
(Bug #18320371)
For tables that contain object information, the Performance Schema now uses lowercase stored program names. (Bug #17818062)
To make the effect of password-change operations more clear, mysql_secure_installation now displays the user whose password is being changed. (Bug #17343687)
The patch number of the C client library is now increased for
each patch version of the server. This number has the format
major.minor.patch
.
(Bug #77544, Bug #21341481)
The max_statement_time
system variable was
renamed to max_execution_time
.
The Max_statement_time_exceeded
,
Max_statement_time_set
, and
Max_statement_time_set_failed
status
variables were renamed to
Max_execution_time_exceeded
,
Max_execution_time_set
, and
Max_execution_time_set_failed
.
The MAX_STATEMENT_TIME
option for
SELECT
statements was removed
because its functionality is now available using the more
general optimizer hint syntax (see
Optimizer Hints). Statements that begin like
this:
SELECT MAX_STATEMENT_TIME = N
...
Should be rewritten to begin like this:
SELECT /*+ MAX_EXECUTION_TIME(N
) */ ...
There are some minor implementation differences between the two.
MAX_STATEMENT_TIME
was not permitted in
non-top-level SELECT
statements
such as subqueries, or in stored programs, and produced an
error. MAX_EXECUTION_TIME
is
permitted in those contexts, but is ignored.
(Bug #77461, Bug #21306646, Bug #77460, Bug #21306392, Bug #77459, Bug #21306319)
GeometryCollection()
with no
arguments is now permitted as a way to create an empty geometry.
(Bug #77114, Bug #21127270)
The shutdown timeout value in /etc/init.d/mysqld was too short for some environments. The value has been increased from 60 seconds to 600 seconds. (Bug #76900, Bug #20987568)
Use of the optimizer cost model was extended to estimating index
scan costs within test_if_cheaper_ordering()
for the I/O cost of accessing table blocks.
(Bug #76804, Bug #20947871)
For MySQL install operations on OS X from DMG packages, if a
random root
account password is generated, it
now is displayed in a dialog box.
(Bug #76792, Bug #20930305)
mysqldump no longer dumps the
sys
schema by default. It is still possible
to dump it by naming it explicitly on the command line (for
example, mysqldump --databases sys).
(Bug #76735, Bug #20902791)
For non-TCP/IP connections, these changes were made when
--ssl
was specified to force SSL
to be used:
For named pipe and shared memory connections, attempts to use SSL now produce an error because these connections use non-network protocols.
For Unix socket file connections, SSL does not add any
security. The connection is permitted, but the
mysql
client now produces a warning that
SSL does not add anything for this transport protocol.
(Bug #76508, Bug #20785409, Bug #21025587)
mysql_ssl_rsa_setup now has a
--uid=name
option
that specifies the owner for any files created by the program
(if the program is executed as root
).
(Bug #76369, Bug #20726413)
MySQL distributions now include an
innodb_stress
suite of test cases. Thanks to
Mark Callaghan for the contribution.
(Bug #76347, Bug #20717127)
The data type for generated columns now permits the
COLLATE
attribute.
(Bug #76329, Bug #20709487)
Connections for the FEDERATED
storage engine now set the program_name
session connection attribute to federated
to
permit identification of the connection source.
(Bug #68781, Bug #16555730)
Previously, changes to the validate_password
plugin dictionary file (named by the
validate_password_dictionary_file
system variable) while the server was running required a restart
for the server to recognize the changes. Now
validate_password_dictionary_file
can be set at runtime and assigning a value causes the named
file to be read without a restart.
In addition, two new status variables are available.
validate_password_dictionary_file_last_parsed
indicates when the dictionary file was last read, and
validate_password_dictionary_file_words_count
indicates how many words it contains.
(Bug #66697, Bug #14588145)
The error produced for a COM_FIELD_LIST
command with too much data was changed from
ER_UNKNOWN_COM_ERROR
to the more
informative ER_MALFORMED_PACKET
.
(Bug #53699, Bug #11761229)
A new system variable,
disabled_storage_engines
,
enables administrators to designate storage engines that cannot
be used to create new tables or tablespaces. By default, this
variable is empty (no engines disabled), but it can be set to a
comma-separated list of one or more engines. Any engine named in
the value cannot be used to create tables or tablespaces with
CREATE TABLE
or
CREATE TABLESPACE
, and cannot be
used with ALTER
TABLE ... ENGINE
or
ALTER
TABLESPACE ... ENGINE
to change the storage engine of
existing tables or tablespaces. Attempts to do so result in an
ER_DISABLED_STORAGE_ENGINE
error.
disabled_storage_engines
does
not restrict other DDL statements for existing tables, such as
CREATE INDEX
,
TRUNCATE TABLE
,
ANALYZE TABLE
,
DROP TABLE
, or
DROP TABLESPACE
. This permits a
smooth transition so that existing tables or tablespaces that
use a disabled engine can be migrated to a permitted engine by
means such as ALTER
TABLE ... ENGINE
.
permitted_engine
MySQL distributions no longer include the
sql-bench
directory. The
INSTALL_SQLBENCHDIR
CMake option has also been removed.
References: See also: Bug #21303289.
The default value of the
table_open_cache_instances
system variable has been increased from 1 to 16.
The read_only
system variable
enables the server to be put into read-only mode, in which the
server permits client updates only from users who have the
SUPER
privilege. A new
super_read_only
system
variable, if enabled, prohibits client updates even from users
who have SUPER
.
“Super” read-only mode can be useful for operations
such as preparing a server for a move or upgrade because it
prevents all client users from modifying data, even
administrators.
The so-called “fast mutex” code has been removed
from the server sources. It provides no measurable benefit,
complicates the code, and is problematic for certain
architectures such as POWER8. The (undocumented)
WITH_FAST_MUTEXES
CMake
option has also been removed.
References: See also: Bug #37703, Bug #11748914, Bug #72806, Bug #18871517, Bug #72807, Bug #18871138, Bug #72805, Bug #18870931.
mysqld_safe no longer uses the data directory
as a possible location for setting
MYSQL_HOME
. (This has been deprecated since
MySQL 5.0.)
The new
session_track_transaction_info
system variable configures a session tracker that provides
information about transaction state and characteristics. This
information is intended to enable applications (for example,
those that perform load balancing) to know when transactions can
be moved from one session to another. From the C API,
transaction state information can be obtained by passing
SESSION_TRACK_TRANSACTION_CHARACTERISTICS
or
SESSION_TRACK_TRANSACTION_STATE
as the
type
argument to the
mysql_session_track_get_first()
and
mysql_session_track_get_next()
functions. For more information, see
Server Tracking of Client Session State Changes.
Incompatible Change:
The mysql_parser
plugin service interface
defined in the service_parser.h
header file
was incorrect for the case that the
MYSQL_DYNAMIC_PLUGIN
macro was defined. The
test for this symbol used the wrong name, so the interface did
not enable the proper code. The test has been corrected, and
some adjustments made to the API for function pointer members
within the mysql_parser_service_st
structure:
Some function pointer names began with
mysql_parser_
, others with
mysql_
. For consistency, function pointer
member names that began with
mysql_parser_
were changed to begin with
mysql_
.
The missing mysql_get_statement_digest
function pointer member was added.
These modifications change the service API. Any plugin to be used with this version of MySQL that relies on the service must be recompiled. (Bug #20856729)
Incompatible Change:
Internal storage format for VIRTUAL
generated
columns was modified. For MyISAM
tables with such columns, this is an incompatible change; for
upgrades, use ALTER TABLE
to drop
the columns before the upgrade and add them again after the
upgrade.
(Bug #77312, Bug #21237637)
Incompatible Change:
For multibyte character sets, LOAD
DATA
could fail to allocate space correctly and ignore
input rows as a result.
A consequence of this change is that previously accepted invalid
character data is now rejected, which can cause issues if you
replicate from an older server without this bug fix to a newer
server with this bug fix. For example, if an older server that
accepts invalid utf8
character set data
replicates to a newer server with this bug fix, the newer server
will not accept the data and replication will fail with an
“Invalid utf8 character string” error. Solutions
for this issue include:
Correct the invalid data so that it is correct for the character set
Use a different character set for which the data is not invalid
Upgrade the master to a version that has the bug fix so that master and slave interpret the data the same way
(Bug #76237, Bug #20683959, Bug #23080148)
References: This issue is a regression of: Bug #14653594.
InnoDB; Partitioning:
In certain rare cases the optimizer pruned all partitions for an
InnoDB
table but failed to remove
the table from consideration as a source for obtaining matches,
instead calling for the table to be initialized and prepared for
fetching records. This occurred when the active index was not
set during initialization. To fix this problem, we now set the
active index ID during initialization even if there are no
partitions to select from. This behavior also matches the way
the same case is already handled in MySQL 5.6.
(Bug #21211524)
InnoDB; Partitioning:
Sorted index reads on partitioned
InnoDB
tables added rows to the
prefetch cache, which could cause rows from the wrong partition
since the prefetch cache does not support partitioned tables.
Now the prefetch cache is disabled in such cases.
(Bug #20584754)
InnoDB; Partitioning:
ALTER TABLE ADD
UNIQUE INDEX
failed when run concurrently with an
INSERT
on the same partitioned
InnoDB
table.
(Bug #20510811, Bug #75834)
InnoDB; Partitioning:
The CREATE_TIME
column of the
INFORMATION_SCHEMA.TABLES
table now
shows the correct table creation time for partitioned
InnoDB
tables. The
CREATE_TIME
column of the
INFORMATION_SCHEMA.PARTITIONS
table
now shows the correct partition creation time for a partition of
partitioned InnoDB
tables.
The UPDATE_TIME
column of the
INFORMATION_SCHEMA.TABLES
table now shows
when a partitioned InnoDB
table was last
updated by an INSERT
,
DELETE
, or
UPDATE
. The
UPDATE_TIME
column of the
INFORMATION_SCHEMA.PARTITIONS
table
now shows when a partition of a partitioned
InnoDB
table was last updated.
(Bug #69990, Bug #17299181)
InnoDB; Microsoft Windows:
General tablespaces created on Windows using a relative data
file path could not be opened on Unix-like systems.
InnoDB
failed to convert the backslash
(“\”) directory separator that is used in the
Windows version of the relative data file path.
(Bug #20555168)
InnoDB; Microsoft Windows:
During shutdown on Windows, the listener object in
handle_shutdown()
was freed while the
listener was running, resulting in an exception in
buf_pool_from_bpage()
.
(Bug #20421223)
InnoDB; Microsoft Windows:
On Windows, asynchronous I/O requests remained waiting after
InnoDB
initialization was aborted.
(Bug #19363615)
InnoDB:
With innodb_strict_mode=OFF
, a
CREATE TEMPORARY TABLE ... ROW_FORMAT=Compressed
TABLESPACE=innodb_file_per_table DATA DIRECTORY ...
statement raised an assertion. The DATA
DIRECTORY
clause is not supported with temporary
tables and should be ignored.
(Bug #21324507, Bug #77495)
InnoDB:
The btr_search_drop_page_hash_index
function
dereferenced the adaptive hash index block before acquiring a
latch, which could result in a race condition.
(Bug #21310520)
InnoDB: A regression introduced in MySQL 5.7.2 caused an innochecksum-related memory leak. (Bug #21255718)
InnoDB:
The records_in_range
function returned a
constant value for spatial indexes.
(Bug #21245805, Bug #77332)
InnoDB:
In some cases, memory was not properly allocated for
rw_lock_t
instances.
(Bug #21242541)
InnoDB:
SHOW ENGINE INNODB
STATUS
no longer reports mutex metrics. Mutex metrics
are now reported by
SHOW ENGINE INNODB
MUTEX
.
(Bug #21238953, Bug #77314)
References: See also: Bug #21052754, Bug #21266784.
InnoDB: Functionality required to build adaptive hash indexes on field prefixes was reintroduced to improve sequential insert performance. The functionality was removed in MySQL 5.7.2 by the fix for Bug #21198396. (Bug #21198396, Bug #77246)
InnoDB:
When defining buf_block_t
, a lock and a mutex
were often accessed in the same vicinity, which could cause
unintended cache line sharing.
(Bug #21153684)
InnoDB:
The ib_cursor_moveto
function did not accept
a search tuple with fewer fields than are defined for the index.
(Bug #21121197, Bug #77083)
InnoDB:
The ib_table_truncate
function failed to
release a transaction, resulting in a hang on server shutdown.
(Bug #21121164, Bug #77084)
InnoDB:
The ib_open_table_by_id
function passed an
incorrect argument to dict_table_open_on_id
.
(Bug #21121084, Bug #77100)
InnoDB:
On Unix-like platforms,
os_file_create_simple_no_error_handling_func
and os_file_create_func
opened files in
different modes when
innodb_flush_method
was set to
O_DIRECT
.
(Bug #21113036, Bug #76627)
InnoDB:
A cascade operation resulted in a duplicate entry error in
FTS_DOC_ID_INDEX
. The same document ID was
used by two cascade operations.
(Bug #21111301, Bug #77087)
InnoDB:
Starting the server with an invalid
innodb_data_file_path
setting
did not produce a sufficiently informative error message.
(Bug #21103446, Bug #77056)
InnoDB: A regression introduced in MySQL 5.7.5 caused sorting to be skipped when rebuilding a table after dropping a single-column primary key. (Bug #21103101)
InnoDB:
Opening a foreign key-referenced table with
foreign_key_checks
enabled
resulted in an error when the table or database name contained
special characters.
(Bug #21094069, Bug #77043)
InnoDB:
The page_zip_verify_checksum
function
returned false for a valid compressed page.
(Bug #21086723)
InnoDB: DDL operations for tablespaces could fail to implicitly commit the current transaction. (Bug #21081898)
InnoDB:
The rollback of a partially completed transaction containing
more than one update to a spatial index raised an assertion in
row_ins_sec_index_entry_by_modify()
.
(Bug #21076238)
InnoDB: In the case of a lock conflict, shutdown could hang waiting for asynchronous rollback to finish. (Bug #21075892)
InnoDB:
To avoid conflicts with implicitly created file-per-table
tablespaces, CREATE TABLESPACE ... ADD
DATAFILE
no longer supports creation of tablespace
data files in subdirectories under the MySQL data directory
(datadir
). Additionally, the
data file path specified in a
CREATE
TABLESPACE ... ADD DATAFILE
statement must be an
existing directory. InnoDB
no longer creates
missing directories for
CREATE
TABLESPACE ... ADD DATAFILE
statements.
(Bug #21068487, Bug #77002)
InnoDB:
SHOW ENGINE INNODB
MUTEX
functionality, which was removed in MySQL 5.7.2,
was revised and added back. Mutex statistics collection can now
be configured dynamically using the following options:
To enable the collection of mutex statistics, run:
SET GLOBAL innodb_monitor_enable='latch';
To reset mutex statistics, run:
SET GLOBAL innodb_monitor_reset='latch';
To disable the collection of mutex statistics, run:
SET GLOBAL innodb_monitor_disable='latch';
For more information, see SHOW ENGINE Statement.
Sync debug checking for the InnoDB
storage
engine, previously defined under
UNIV_SYNC_DEBUG
, is now defined under
UNIV_DEBUG
and is available when debugging
support is compiled in using the
WITH_DEBUG
CMake option. When debugging support is
compiled in, InnoDB
sync debug checking is
controlled by the
innodb_sync_debug
configuration
option.
(Bug #21052754)
InnoDB: A tablespace opened locally by a truncate routine was not closed in protected mode. (Bug #21046968)
InnoDB: An assertion was raised when truncation logic identified inactive undo tablespaces as candidates for undo log truncation. Some undo tablespaces were left inactive when the number of available undo tablespaces exceeded the number of undo logs. (Bug #21046781)
InnoDB:
At startup, InnoDB
updated the
SYS_DATAFILES
internal system table with the
space_id
and path of each system tablespace
file even though a record was already present and
SYS_DATAFILES.PATH
matched the current value.
(Bug #21044191)
InnoDB:
In Windows debug builds, an
innodb_flush_method
setting of
normal
or unbuffered
raised an assertion.
(Bug #20981684)
InnoDB:
Transactions could be subjected to rollback while performing DDL
operations. The transactions were not marked as DDL
transactions, and TRX_FORCE_ROLLBACK_DISABLE
was not set.
(Bug #20979020)
InnoDB:
An ALTER TABLE ...
IMPORT TABLESPACE
operation on a table with prefix
index failed with a schema mismatch error.
(Bug #20977779, Bug #76877)
InnoDB:
Initializing the database with an
innodb_page_size
setting of
64KB and a system tablespace data file size less than 12MB
raised an assertion. With an InnoDB
page size
of 64KB, the first system tablespace data file
(ibdata1
) was not large enough to contain
the doublewrite buffer blocks (block1 and block2). To ensure
that the doublewrite buffer blocks fit within the first system
tablespace data file, a minimum data file size is enforced. If
innodb_page_size
is less than
or equal to 16KB, the minimum data file size for the first
system tablespace data file (ibdata1
) is
3MB. The minimum data file size is 6MB for a 32KB page size, and
12MB for a 64KB page size.
(Bug #20972309)
InnoDB: Full-text search operations between tables related by a foreign key constraint were not properly cascaded during iterative DML cascading operations. (Bug #20953265, Bug #76817)
InnoDB:
In MySQL 5.7.2, 32 of 128 undo logs (rollback segments) were
reserved as non-redo undo logs for temporary table transactions.
With one of the remaining undo logs always allocated to the
system tablespace, 95 undo logs remained available for
allocation to the system tablespace or separate undo
tablespaces. This change effectively reduced the
innodb_undo_tablespaces
maximum
limit to 95. In other words, a limit of 95 available undo logs
also limited the maximum number of undo tablespaces to 95. In
MySQL 5.7.8, the
innodb_undo_tablespaces
maximum
value is officially reduced to 95.
(Bug #20938115)
InnoDB: A memory leak occurred when a foreign key constraint object was loaded with the parent table while the child table failed to load. The foreign key constraint object should only be loaded with the child table. (Bug #20926253, Bug #21041449)
InnoDB:
Debug only code set m_prebuilt
, which may
affect in-place ALTER TABLE
behaviour. m_prebuilt
to should not be used
to store an intermediate value in debug-only code.
(Bug #20921940, Bug #76774)
InnoDB:
The definition of the fil_node_t
data
structure was moved from fil0fil.cc
to
fil0fil.h
so that diagnostic code outside
that module can access information about files that belong to a
tablespace.
(Bug #20886222, Bug #76694)
InnoDB: Assertion code was revised to avoid compiler warnings that occurred when compiling MySQL on OS X 10.10.2. (Bug #20883256, Bug #76690)
InnoDB:
After upgrading to MySQL 5.7.6 or later, restarting the server
after truncating a table that was originally created in MySQL
5.7.5 or earlier raised an “incorrect MERGE_THRESHOLD
length in SYS_INDEXES” error. A
MERGE_THRESHOLD
column was added to the
internal SYS_INDEXES
table in MySQL 5.7.6.
SYS_INDEXES
records for tables that were not
rebuilt or imported after upgrading did not include the new
column. The TRUNCATE TABLE
operation updated the table's SYS_INDEXES
records to include the new column but set the
MERGE_THRESHOLD
value to NULL.
(Bug #20882432)
InnoDB: A failure to load a change buffer bitmap page during a concurrent delete tablespace operation caused a server exit. (Bug #20878735)
InnoDB:
A shutdown hang occurred when an
innodb_force_recovery
setting
of 3 or higher prevented the rollback of transactions that were
in an ACTIVE
state. ACTIVE
transactions are now placed in XA PREPARE
state in the main-memory data structure to allow shutdown to
proceed normally. The transactions are recovered as
ACTIVE
on the next restart and are rolled
back unless
innodb_force_recovery
is again
set to 3 or higher.
(Bug #20874411)
InnoDB:
If a server exit occurred during an XA
ROLLBACK
, the transaction was incorrectly recovered in
XA PREPARE
state. As a result, subsequent
XA COMMIT
transactions were possible, which
would break ACID compliance and potentially cause corruption
between indexes of a table.
(Bug #20872655, Bug #76672)
InnoDB:
A CREATE TABLESPACE
operation
raised a Valgrind error due to a memory leak in the
os_create_subdirs_if_needed
function.
(Bug #20865674)
InnoDB:
Calls to buf_page_print()
were removed to
avoid filling mysql-test-run
logs with
InnoDB
page dumps. Page dumps related to file
I/O are still printed.
(Bug #20863042)
InnoDB:
CREATE TABLESPACE
failed to move
internal tablespace files to a reserved name space that starts
with an innodb_
prefix, permitting internal
tablespace files to be dropped.
(Bug #20840368, Bug #76603)
InnoDB:
A TRUNCATE TABLE
operation on a
general tablespace table with a full-text search index raised an
assertion.
(Bug #20834483)
InnoDB: An assertion was raised on shutdown due to XA PREPARE transactions holding explicit locks. (Bug #20816223, Bug #76567)
InnoDB:
The fts_print_doc_id
function printed too
much debug information in debug builds.
fts_enable_diag_print
is now used instead.
(Bug #20811125)
InnoDB:
After a failed DROP TABLE
operation, the purge background thread asserted while attempting
to access an index page of the table. Purge should not attempt
to clean a table that is marked as corrupt. Purge now checks for
a corrupt primary index.
(Bug #20789078, Bug #75913)
InnoDB:
A checksum mismatch error on a crc32
checksum
was encountered when restarting the server on a data file copied
from a machine with a different endianness. The
crc32
checksum should be recognized
regardless of the native byte order of the system where the
checksum was generated.
(Bug #20783098, Bug #76375)
InnoDB:
An ALTER TABLE ...
DROP INDEX
operation on a table with foreign key
dependencies raised an assertion.
(Bug #20768847)
InnoDB:
An assertion was raised when InnoDB
attempted
to dereference a NULL foreign key object.
(Bug #20762798)
InnoDB:
An ALTER TABLE
operation raised
an assertion due a regression introduced in MySQL 5.7.6 with the
introduction of native partitioning support for general
tablespaces.
(Bug #20759613)
InnoDB:
In some instances, functions that call
DBUG_ENTER
did not call
DBUG_RETURN
.
(Bug #20753620, Bug #76447)
InnoDB:
A regression of the trx_is_started
function
in MySQL 5.7.6 caused a shutdown hang.
(Bug #20744155)
InnoDB: The MeCab full-text plugin parser failed to handle an out-of-memory exception. (Bug #20742590)
InnoDB: An assertion was raised during a rollback operation due to a record the was incorrectly undelete-marked. (Bug #20734998)
InnoDB:
An assertion was raised in a debug build when an
ALTER TABLE
operation invoked
obsolete foreign key code while attempting to create an
optimized temporary table as part of an optimizer plan.
Temporary tables do not support foreign keys. Invocation of
foreign key code is now blocked for optimized temporary tables.
(Bug #20730289)
InnoDB:
An INSERT
operation raised an
assertion. The calculation that determines the number of extents
to reserve when storing a BLOB
did account for compressed pages.
(Bug #20713559)
InnoDB:
Missing brackets in the fsp_flags_is_valid
function could result in a failure to recognize a corrupted data
file.
(Bug #20671465)
InnoDB: A query that used a percentage character '%' as the last character in a query token raised a full-text parser plugin assertion. Full-text parser plugins created using the full-text parser plugin framework now ignore the '%' character if specified as the first or last character in a query token. Using the '%' character as the first character in a query token is not permitted by the internal SQL parser. Using the '%' character as last character in a query token is reserved for prefix matching. (Bug #20668156)
InnoDB:
The INFORMATION_SCHEMA.FILES
table
now reports metadata for all InnoDB
tablespace types including file-per-table tablespaces, general
tablespaces, the system tablespace, the temporary tablespace,
and undo tablespaces, if present. System tablespace and
temporary tablespace metadata is no longer reported by the
INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES
and
INFORMATION_SCHEMA.INNODB_SYS_DATAFILES
tables. However, these tables continue to provide metadata for
file-per-table and general tablespaces.
(Bug #20660744, Bug #21086257, Bug #77032, Bug #76182)
InnoDB:
The InnoDB
full-text search feature with the
MeCab parser plugin would print an empty error message.
(Bug #20651493, Bug #76164)
InnoDB: Importing a tablespace with a full-text index resulted in an assertion when attempting to rebuild the index. (Bug #20637494)
InnoDB:
A DML operation raised an assertion in
btr_estimate_n_rows_in_range()
. The assertion
code was too strict.
(Bug #20618309)
InnoDB:
Defining a user-created FTS_DOC_ID
column as
a primary key produced incorrect full-text search relevancy
rankings.
(Bug #20597981)
InnoDB:
During a table import operation, an INSERT
failed with a duplicate key error on an
AUTO_INCREMENT
column due to an incorrectly
initialized AUTO_INCREMENT
value.
(Bug #20597821, Bug #76037)
InnoDB:
After dropping a full-text search index, the hidden
FTS_DOC_ID
and
FTS_DOC_ID_INDEX
columns prevented online DDL
operations.
(Bug #20590013, Bug #76012)
InnoDB:
An assertion was raised on server startup when
InnoDB
tried to create a temporary file in a
nonexistent temporary directory
(tmpdir
) while in read-only
mode.
(Bug #20578834)
InnoDB:
The innodb_checksum_algorithm
strict_*
settings
(strict_none
,
strict_innodb
, and
strict_crc32
) caused the server to halt when
InnoDB
encountered a valid but non-matching
checksum. For example, with
innodb_checksum_algorithm=strict_crc32
, a
valid innodb
checksum would cause the server
to halt. Now, instead of halting the server,
InnoDB
only prints an error message.
(Bug #20568464)
InnoDB:
After moving the MySQL data directory and modifying the
datadir
configuration parameter
to point to the new location, tables stored in general
tablespaces failed to open because the tablespace data file
could not be found. To address this problem,
CREATE
TABLESPACE ... ADD DATAFILE
now creates an
isl
file in the MySQL data directory when a
general tablespace data file is created outside of the MySQL
data directory. Also, the fil_ibd_open
function now searches for general tablespaces in the same way
that it searches for file-per-table tablespaces.
(Bug #20563954)
InnoDB:
General tablespaces now support partitioned
InnoDB
tables, and individual partitions and
subpartitions can now be assigned to a general tablespace.
SHOW CREATE TABLE
output was revised to
include quotes around the tablespace identifier.
(Bug #20554858, Bug #20588947)
InnoDB:
An ALTER TABLE
operation that
added a spatial index caused the server to exit.
(Bug #20547644)
InnoDB: Assertion code which checks for the lowest possible page number for a tablespace did not account for general tablespaces. (Bug #20544581, Bug #20810627)
InnoDB:
The InnoDB
memcached
plugin handled unsigned NOT NULL integer columns incorrectly.
Thanks to Piotr Jurkiewicz for the patch.
(Bug #20535517, Bug #75864)
InnoDB: The following changes were implemented for full-text index auxiliary tables:
If the primary table is assigned to a general tablespace, full-text auxiliary tables are created in the same general tablespace.
Full-text auxiliary tables are created with the same row format as the primary table.
If the primary table was created in a location outside of
the data directory using the DATA
DIRECTORY
clause, full-text auxiliary tables are
created in the same location as the primary table.
(Bug #20527217, Bug #75869)
InnoDB:
The memcached
set
command
permitted a negative expire time value. Expire time is stored
internally as an unsigned integer. A negative value would be
converted to a large number and accepted. The maximum expire
time value is now restricted to INT_MAX32
to
prevent negative expire time values.
(Bug #20478242, Bug #75790)
InnoDB:
An interrupted ALTER TABLE
operation that rendered a child table unavailable caused an
error and debug assertion after crash recovery, when the
ALTER TABLE
operation on the
parent table detected that the foreign keys of the parent table
could not be loaded. The debug assertion was removed and the
error was replaced by a warning.
(Bug #20476395)
References: This issue is a regression of: Bug #19267051.
InnoDB:
In debug builds, enabling the
btr_cur_limit_optimistic_insert_debug
flag
raised a deadlock exception in the change buffer clustered
index.
(Bug #20459905, Bug #75736)
InnoDB:
A warning message is now printed if DB_TRX_ID
stored in a record is found to be greater than
max_trx_id
. In debug builds, an assertion is
raised.
(Bug #20445525)
InnoDB: Estimates for the number of records in a range for a given dataset could differ depending on the page size. (Bug #20427694)
InnoDB:
SHOW ENGINE INNODB STATUS
output showed
negative reservation and signal count values due to a counter
overflow error.
(Bug #20417397)
InnoDB: Failure to check the status of a cursor transaction read-only option before reusing the cursor transaction for a write operation resulted in a server exit during a memcached workload. (Bug #20391552)
InnoDB:
An assertion was raised in a debug build when populating a
spatial index during an ALTER TABLE
operation. The size of data tuples for compressed rows is
calculated in the
rec_get_converted_size_comp_prefix_low
function. Debug code within the function did not account for the
spatial index or the DATA_SYS_CHILD
data type
in the node pointers.
(Bug #20372749)
InnoDB:
CHECK TABLE
returned a
“wrong count” error for tables with spatial
indexes.
(Bug #20313067)
InnoDB:
MDL locks taken by memcached clients caused a
MySQL Enterprise Backup FLUSH TABLES WITH READ
LOCK
operation to hang.
(Bug #20275612)
InnoDB:
An embedded MySQL server failed to start with
innodb_undo_tablespaces=2
. The
server was unable to locate undo tablespaces that were created
when the MySQL instance was initialized. For embedded MySQL
installations, the
innodb_undo_directory
default
value of “.
” may not be the
same directory as the MySQL data directory. To address this
problem, innodb_undo_directory
is now NULL by default, requiring that a path be specified. If a
path is not specified, undo tablespaces are created in the MySQL
data directory, as defined by datadir
. A
workaround for pre-MySQL 5.7.8 embedded installations is to
define an absolute path for
innodb_undo_directory
.
(Bug #20023425)
InnoDB:
A DML operation raised an assertion in file
lock0lock.cc
. A session holding an
exclusive row lock on a clustered index page initiated a page
reorganization while another session waited for a lock on the
same row. The page reorganization changed the lock order,
causing an assertion in
lock_rec_add_to_queue()
.
(Bug #20005279)
InnoDB:
A DROP DATABASE
operation raised
an assertion.
(Bug #19929435)
InnoDB:
InnoDB
failed to open a tablespace after the
data directory location of the tablespace was changed from a
relative path to a full path. InnoDB
failed
to recognize that the relative path, which remained embedded in
the data dictionary, pointed to the same data file as the full
path.
(Bug #19896685)
InnoDB:
A TRUNCATE TABLE
operation
appeared to hang when run in parallel with a read-write
workload.
(Bug #19873470, Bug #74312)
InnoDB: The sorted index build feature introduced in MySQL 5.7.5 caused a performance regression when adding an index to a small table. The regression was due to excessive flushing triggered by a forced checkpoint that occurs after the sorted index build. (Bug #19865673, Bug #74472)
InnoDB:
Updates to indexed columns could be slower in MySQL 5.7.5 and
higher. In pre-MySQL 5.7.5 releases, InnoDB
reserves 1/16 of the space in clustered index pages for future
inserts and updates. This behaviour changed in MySQL 5.7.5 with
the introduction of the
innodb_fill_factor
option. With
innodb_fill_factor=100
, B-tree
index pages were completely filled during sorted index builds,
and subsequent updates to index pages resulted in page
splitting. To restore pre-MySQL 5.7.5 behavior, the default
setting of
innodb_fill_factor=100
now
leaves 1/16 of the space in clustered index pages free for
future index growth.
(Bug #19821087, Bug #74325)
InnoDB:
The ha_innobase::index_flags
function
returned invalid flags for spatial indexes.
(Bug #19473391)
InnoDB:
An index record was not found on rollback due to inconsistencies
in the purge_node_t
structure. The
inconsistency resulted in warnings and error messages such as
“error in sec index entry update”, “unable to
purge a record”, and “tried to purge sec index
entry not marked for deletion”.
(Bug #19138298, Bug #70214, Bug #21126772, Bug #21065746)
InnoDB:
The ut_when_dtor
struct, added in MySQL 5.7
to address a Valgrind issue, was removed to reduce code
complexity.
(Bug #18309926)
InnoDB:
An INSERT
operation raised an
assertion when the transaction mode was modified after the
transaction started.
(Bug #15866285)
InnoDB:
Queries that use both UNION
and
UNION ALL
and disable the index would cause
an assertion due to duplicate B-tree values.
(Bug #76439, Bug #20752543)
InnoDB:
In debug builds, attempting to create a spatial index after
dropping the mysql.innodb_table_stats
table
raised an assertion in the
btr_cur_open_at_rnd_pos_func
function.
(Bug #76437, Bug #20753642)
InnoDB: Transaction objects were passed to optimized temporary table APIs, causing an assertion. Optimized temporary tables, which do not support rollback and are not shared across connections, should ignore the transaction objects. (Bug #76415, Bug #20748479)
InnoDB:
When
innodb_thread_concurrency=1
,
queries on optimized temporary tables caused other sessions to
hang. Queries on optimized temporary tables should not increment
the number of active threads.
(Bug #76346, Bug #20762059)
Partitioning: During execution of correlated subqueries, the server reinitialized a scan executed on the same table without ending the previous scan. (Bug #20949314, Bug #76810)
Partitioning:
CREATE TABLE
statements that used
an invalid function in a subpartitioning expression did not
always fail gracefully as expected.
(Bug #20310212)
Partitioning:
For an ordered index scan over multiple partitions, MySQL
performs a merge sort across them using a priority queue whose
entries hold pointers to buffers containing fetched rows. When
all rows from all partitions are fetched, this queue is now
empty. When this occurred, subsequent attempts to fetch rows
were done by passing a null buffer pointer, which caused the
server to fail. This could manifest itself when executing
HANDLER ... READ ...
PREV
against a partitioned table. Now in such cases
this pointer holds NO_CURRENT_PART_ID
so that
the partitioning handler is aware that the queue is empty.
(Bug #20270687)
Partitioning:
REPAIR TABLE ...
QUICK
could fail when used with multiple partitioned
tables.
(Bug #76154, Bug #20647894)
Partitioning:
In certain cases,
ALTER
TABLE ... REBUILD PARTITION
was not handled correctly
when executed on a locked table.
(Bug #75677, Bug #20437706)
Replication:
When using multiple replication channels, issuing
RESET SLAVE
on a non-default
replication channel removes the channel, whereas issuing
RESET SLAVE
on the default
replication channel does not remove the channel, as it always
exists. In previous versions, this meant that the default
replication channel did not correctly reset some configuration
and status parameters. The fix ensures that issuing
RESET SLAVE
on the default
replication channel resets all parameters.
(Bug #21107331, Bug #21111229, Bug #77086)
Replication:
Repeatedly checking for
ERR_LOCK_WAIT_TIMEOUT (as done, for
example by repeatedly executing SHOW SLAVE
STATUS
) during a prolonged write lock on a table led
to an assert.
(Bug #21095969)
Replication:
SHOW BINLOG EVENTS
was not
showing the correct statement for XA COMMIT ... ONE
PHASE
. Although the event was logged and replicated
correctly, SHOW BINLOG EVENTS
was
showing an incorrect statement when handling the event. The fix
ensures that the statement is correctly displayed.
(Bug #21053526)
Replication:
When changing gtid_mode
online,
if autocommit
was set to 0 and
a set gtid_next=UUID:NUMBER
statement had
been issued, then changing
gtid_mode
was not being
blocked. The fix ensures that variables which can only be set
outside transaction context can now only be set if the thread
does not own a GTID and does not hold anonymous ownership. This
changes the behavior of these variables:
(Bug #20865683)
Replication:
mysqlbinlog would apply any rewrite rules
before applying the database filter. This meant that in cases
when statement-based replication transactions were mixed with
row-based replication transactions only one or the other type of
transaction would be output. The fix changes the behavior so
that the rewrite rules also apply to the
USE
db_name
clause, rewriting the
database specified by db_name
according to the setting of the
--rewrite-db
parameter. This
makes it possible to use the
--database
option on the
query and row events. In addition, it removes the suppression of
the USE
db_name
statement and ensures that
the rewrite is done before the database filter.
(Bug #20810442)
Replication:
Row unpacking did not function correctly in some cases when
running the server with
binlog_row_image
set to
minimal
.
(Bug #20468712)
Replication:
When slaves, and especially semisynchronous replication slaves,
connected to a master there was a chance they could encounter a
SLAVE HAS MORE GTIDS THAN THE MASTER HAS
error. During connection the slave sends all replicated GTIDs to
the master, and the master checks if all the GTIDs matching its
server_uuid
are included in its
gtid_executed
GTID set. There
was a chance that a GTID was already in the slave's
gtid_executed
GTID set, but not
in the master's gtid_executed
GTID set. This was due to the GTID being added into
gtid_executed
after it was
added to the binary log, meaning it was possible that a
transaction had been replicated and applied on the slave, but
not committed on the master yet. The fix ensures that the master
checks if all GTIDs are in the union of
gtid_executed
and
gtid_owned
.
(Bug #20464737)
Replication:
A replication slave running with a
gtid_mode
other than
OFF
,
log_bin=OFF
and
relay_log_info_repository=TABLE
was consuming the GTID of a transaction prematurely when
applying a transaction that spanned across distinct relay log
files. This was caused when the slave SQL thread was flushing
the relay log information to the
mysql.slave_relay_log_info
table while in the
middle of a transaction, or immediately after the GTID of a
transaction, because of the rotation of the relay log. The fix
skips saving the gtid_state
for operations
that save the relay log information to the
mysql.slave_relay_log_info
table.
(Bug #20451386)
Replication:
When gtid_mode=ON
, issuing a
SET gtid_next='UUID:NUMBER'
statement and
then issuing a statement that caused an error, such as
CREATE..SELECT
, led to an assertion failure
on COMMIT
. This was due to
gtid_next
being incorrectly set
to undefined for implicitly committing statements, even if the
statement failed with an error before the implicit commit
happened.
(Bug #20343644, Bug #20444828)
Replication:
If a slave was restarted with
--relay-log-recovery
enabled and
the initialization of the default replication channel had
failed, a slave could refuse to start or cause an assert in
debug mode.
(Bug #20191813, Bug #20236305)
Replication:
When using RESET MASTER
, the GTID
state (gtid_executed
and
gtid_purged
) is reset. On a
server with log_bin=OFF
, using
RESET MASTER
fails because the
binary log is not enabled. However, since MySQL 5.7.5, GTIDs can
be enabled even when the binary log is disabled. So in this case
there was no way to reset the GTID state. The fix ensures that
RESET MASTER
can be executed on a
server with GTIDs enabled and
log_bin=OFF
, enabling you to
reset the GTID state.
(Bug #19706455)
Replication: If statement based logging was in use, when updating multiple tables in a single statement, a single transaction could be logged as two different transactions. This was due to the binary logging process not properly identifying statements which were operating over transactional tables. The fix ensures that they are correctly identified, even if such statements do not change the contents of the tables. (Bug #16621582, Bug #21349028)
Replication:
When starting more than one instance of
mysqld on the same host at the same time, the
instances could get the same
server_uuid
. The fix uses
settings unique to each started mysqld
instance to ensure that each gets a unique UUID.
(Bug #16459136)
Replication:
Some replication thread statuses were not being shown in the
PROCESSLIST_INFO
column of the
threads
table.
(Bug #77115, Bug #21127308)
Replication:
In MySQL 5.7.7 and earlier, GTIDs were automatically disabled
whenever --initialize
or
--bootstrap
were enabled. In
MySQL 5.7.8 and later GTIDs are not disabled when
--initialize
or
--bootstrap
are enabled.
(Bug #76884, Bug #20980271)
Replication:
When using mysql-test-run.pl with the
--ps-protocol
option to run a test against a
server with log_bin=OFF
,
setting gtid_next
and then
executing a DDL statement caused an error. This was due to the
DDL statement not being correctly logged to consume the GTID
specified when setting
gtid_next
.
(Bug #76820, Bug #20954452)
Replication:
When log_bin=ON
, if a read-only
XA transaction was prepared but had an empty body, a subsequent
XA ROLLBACK
caused an assertion.
(Bug #76734, Bug #20902763)
Replication:
explicit_defaults_for_timestamp
has been changed from a global variable to a global and session
variable, and the session variable is now replicated. This means
that you can change the variable and still be guaranteed that
every statement uses the same value for the variable on master
and slave, even if the variable is not changed synchronously on
master and slave.
(Bug #76657, Bug #20866059)
Replication:
When a slave was stopped,
replication_applier_status_by_worker
showed worker_id
as 1 and did not show the
correct number.
(Bug #76637, Bug #20857660)
Replication:
Setting SESSION.GTID_NEXT=default
immediately
after setting SESSION.GTID_NEXT='ANONYMOUS'
causes an
ER_CANT_SET_GTID_NEXT_WHEN_OWNING_GTID
error, but this also changes the
gtid_next
type from
ANONYMOUS
to AUTOMATIC
,
meaning that the next transaction could potentially cause an
GTID_NEXT->TYPE != AUTOMATIC_GROUP ||
THD->OWNED_GTID.IS_EMPTY() assertion. To avoid
this possibility, the fix ensures that setting
SESSION.GTID_NEXT=default
does not change the
gtid_next
type if it could
cause an error.
(Bug #76434, Bug #20753378)
Replication:
Additional replication channels could not be added if the server
had been started with
server_id=0
, the default. The
fix ensures that a replication slave checks the
server_id
is greater than 0
when CHANGE MASTER TO
has been
issued before continuing with the initialization of a channel.
(Bug #76432, Bug #20753463, Bug #20712720)
Replication:
When a server was configured with
gtid_mode=ON
,
log-bin=OFF
, and with
autocommit
enabled, during
commit it was possible to encounter an ASSERTION
`IS_STARTED()' FAILED error. This was possible when
an applier thread committed a transaction's GTID into the
gtid_executed
table before
transaction prepare when binary logging was disabled, or binary
logging was enabled and
log_slave_updates
was disabled.
The cause was that when the server was saving a transaction's
GTID into the gtid_executed
table, the calculated transaction context could be committed
during the save phase when
autocommit
was enabled. The fix
ensures that the transaction context is calculated after saving
the GTID's state, and then commit is executed on any remaining
transactions.
(Bug #76425, Bug #20748570)
Replication:
When using row-based logging with
autocommit
disabled and
GTID_MODE=OFF_PERMISSIVE
, if a
transaction started with a CREATE TEMPORARY
TABLE
statement, then regardless of whether the table
was transactional or non-transactional, the transaction began an
automatic GTID violating transaction. However, if
GTID_NEXT='UUID:NUMBER'
was issued
immediately after executing the CREATE
TEMPORARY TABLE
statement, which sets
gtid_next
type to
GTID_GROUP
, upon committing the transaction,
a check for possible violation of GTID consistency was causing
an assertion failure because the gtid_next type had been changed
from AUTOMATIC_GROUP
to
GTID_GROUP
.
The fix ensures that transactions with an empty owned GTID
correctly check if they break GTID consistency. As part of this
fix, it was found that when
autocommit
was disabled, the
statement CREATE TEMPORARY TABLE
did not start a transaction, so immediately setting
GTID_NEXT='UUID:NUMBER'
could not cause an
error. The fix ensures that when
autocommit
is disabled,
executing CREATE TEMPORARY TABLE
or DROP TEMPORARY TABLE
starts a transaction,
regardless of the state of
log_bin
,
binlog_format
and whether a
transactional or non-transactional storage engine is in use.
This makes the behavior consistent, but is a change in logging
when log-bin=OFF
.
(Bug #76416, Bug #20748502)
Replication:
When using GTIDs with
log-bin=OFF
, a combination of
statements which included a BINLOG
statement
executing a Format_description_log_event
would cause an assertion. The reason was that the server would
run the routine to handle the end of a GTID violating
transaction, which was incorrect because when
--log-bin=OFF
the transaction
should not have been handled as an offending transaction. The
fix ensures that before the compatibility testing, the state of
log_bin
is checked. If
log_bin=OFF
, then the compatibility checks
are skipped. This makes the server not activate flags that would
then trigger the incorrect run of the routine to handle GTID
violating transactions that ultimately resulted in an assertion.
(Bug #76406, Bug #20743468)
Replication: When binary logging was enabled, using stored functions and triggers resulting in a long running procedure that inserted many records caused the memory use to increase rapidly. This was due to memory being allocated per variable. The fix ensures that in such a situation, memory is allocated once and the same memory is reused. (Bug #75879, Bug #20531812)
Replication:
If an error occurred when using a multithreaded slave, issuing a
CHANGE MASTER TO
statement which
resulted in an
ER_MTS_CHANGE_MASTER_CANT_RUN_WITH_GAPS
error, and then issuing RESET
SLAVE
, made it impossible to change master due to
repeated
ER_MTS_CHANGE_MASTER_CANT_RUN_WITH_GAPS
errors. Running the debug version of mysqld
caused an unexpected exit in this case. The fix ensures that the
recovery process for multithreaded slaves avoids this.
(Bug #75574, Bug #20411374)
Replication: When using semisynchronous replication performance was degrading when the number of threads increased beyond a certain threshold. To improve performance, now only the thread which is committing is responsible for deleting the active transaction node. All other operations do not touch this active transaction list. (Bug #75570, Bug #20574628)
Replication:
When
gtid_executed_compression_period
is set to a number greater than 0, there is a thread that wakes
up after every number of transactions specified by
gtid_executed_compression_period
to perform range compression on the
mysql.gtid_executed
table. There was a small
chance that the thread would miss a signal and not wake up, so
that one pass of the compression algorithm would be missed and
the table left uncompressed. The fix ensures that the thread
wakes up consistently.
(Bug #75014, Bug #20104307)
Replication: Using mysqlbinlog to process log events greater than 1.6GB failed with an out of memory error. This was caused by an internal error converting the length variable. The fix upgrades the length variable to avoid overflow in both encoding and decoding functions. (Bug #74734, Bug #20350989)
Replication:
Setting gtid_next
inside a
stored procedure and committing an empty transaction caused an
error. This was due to the empty transaction not being correctly
logged to consume the GTID specified by setting
gtid_next
.
(Bug #74253, Bug #19774317)
Replication:
Some messages that were meant to be printed when
log_warnings
was greater than 1
started appearing in the error log. The information regarding
the multithreaded applier in particular was too verbose and much
of this information was very technical and development oriented.
The fix ensures that these messages are not logged.
(Bug #74203, Bug #19729278)
Replication:
When using a multithreaded slave with
slave_preserve_commit_order=1
,
certain combinations of transactions being applied in parallel
could cause a deadlock and stop the slave responding. The fix
introduces a check for such deadlocks, so that when a
transaction needs to wait for another transaction to release a
row lock, InnoDB
checks if there is
a deadlock caused by the commit order. If it finds a deadlock
caused by the commit order, it sets a deadlock flag for the
slave worker which is holding the row lock. Then the worker
rolls back its transaction and tries again.
(Bug #74177, Bug #20136704)
Replication:
When relay_log_recovery
is set,
the error log entry that reports the new recovery positions has
been extended to also report the old relay log positions.
(Bug #74089, Bug #21305976)
Replication:
When a master with
--binlog_checksum=none
and
--gtid-mode=ON
was replicating
to a slave with
--binlog_checksum=crc32
,
restarting the slave's SQL thread caused an Event crc
check error. This was due to the
Format_description_log_event
from the master
not being correctly found in existing relay logs after
restarting the slave's SQL thread. The fix ensures that the
Previous_gtids_log_event
is correctly skipped
and that the correct
Format_description_log_event
is found in
existing relay logs after restarting the slave's SQL thread.
(Bug #73806, Bug #20644100, Bug #76746, Bug #20909880)
Replication:
When gtid_mode=on
, GTIDs are
automatically added to the
mysql.gtid_executed
table. If a GTID was
manually inserted into the
mysql.gtid_executed
table and then automatic
update inserted the same GTID, the server crashed. Manually
inserting GTIDs into mysql.gtid_executed
is
an unsupported operation, but this fix ensures that the server
does not crash in such a situation.
(Bug #73601, Bug #19451053)
Replication:
When using GTIDs, a multithreaded slave which had
relay_log_recovery=1
and that
stopped unexpectedly could encounter a
relay-log-recovery cannot be executed when the slave
was stopped with an error or killed in MTS mode
error upon restart. The fix ensures that the relay log recovery
process checks if GTIDs are in use or not. If GTIDs are in use,
the multithreaded slave recovery process uses the GTID protocol
to fill any unprocessed transactions.
(Bug #73397, Bug #19316063)
Replication:
When
master_info_repository=TABLE
the receiver thread stores received event information in a
table. The memory used in the process of updating the table was
not being freed correctly and this could lead to an out of
memory error. The fix ensures that after an event is flushed to
the relay log file by a receiver thread, the memory used is
freed.
(Bug #72885, Bug #19390463, Bug #69848, Bug #20124342)
Replication:
The status variables
Rpl_semi_sync_master_net_wait_time
and
Rpl_semi_sync_master_net_avg_wait_time
were always 0
in MySQL 5.7.4 and later. These
variables are now deprecated and will be removed in a future
MySQL version.
(Bug #72627, Bug #18750614)
Replication:
When two slaves with the same
server_uuid
were configured to
replicate from a single master, the I/O thread of the slaves
kept reconnecting and generating new relay log files without new
content. In such a situation, the master now generates an error
which is sent to the slave. By receiving this error from the
master, the slave I/O thread does not try to reconnect, avoiding
this problem.
(Bug #72581, Bug #18731252)
Replication:
If a slave encountered a
ER_NET_READ_INTERRUPTED or
ER_NET_WRITE_INTERRUPTED error while
getting a timestamp or server ID from the master, setting
MASTER_HEARTBEAT_PERIOD
and so on, the
slave's receiver thread stopped. The fix ensures that these
errors are treated as transient network errors, and the slave
receiver thread attempts to automatically reconnect to the
master in such a situation.
(Bug #71374, Bug #18091217)
Replication:
Using mysqlbinlog to replay a relay log which
ended with GTID_LOG_EVENT
could cause the
following error:
ERROR 1790 (HY000) @@SESSION.GTID_NEXT cannot be
changed by a client that owns a GTID. The client owns
UUID:GTID
. Ownership is released on
COMMIT or ROLLBACK.
If a relay log rotate happens (either through a receiver thread
restart or after issuing the ROTATE
command)
exactly after writing a GTID_LOG_EVENT
, when
replaying such a relay log's end
ROTATE_EVENT
, it was mistakenly identified as
being inside a transaction, whereas the transaction was actually
started after GTID_LOG_EVENT
. This caused
mysqlbinlog to append SET
@@SESSION.GTID_NEXT='AUTOMATIC'
, resulting in two
GTID_NEXT
statements one after
the other. The fix ensures that mysqlbinlog
generates SET @@SESSION.GTID_NEXT='AUTOMATIC'
only outside of a transaction and when there has not been a
previous GTID_LOG_EVENT
.
Similarly, using mysqlbinlog to concatenate
and replay a relay log which contained a partial GTID
transaction caused the above error. A relay log can contain a
partial GTID transaction when AUTO_POSITION
is enabled if a receiver thread is restarted when it is in the
middle of transferring a transaction from a master. On restart
the slave retrieves the full transaction again. In this case,
the first relay log contains a partial GTID transaction and the
second relay log contains the full GTID transaction again. When
using mysqlbinlog to concatenate such a relay
log, the partial transaction was not being correctly detected
and therefore a ROLLBACK
was not being
correctly generated. The fix identifies partial GTID
transactions using the format description event of the second
relay log, ensuring that a ROLLBACK
is
correctly added.
(Bug #70711, Bug #17650326)
Replication:
The replication connection now sends the
program_name
attribute,
“mysqld”, in line with the behavior of other client
connections. In addition, a _client_role
attribute has been added and is set to
“binary_log_listener”, to clarify the replication
connection's role, as well as the
_client_replication_channel_name
attribute,
which is set to the replication channel's name. Similarly,
mysqlbinlog now sets
_client_role
to
“binary_log_listener”. These changes are exposed
through the session_connect_attrs
Performance Schema table.
(Bug #68782, Bug #16555723)
On platforms where char
is unsigned,
mysql_config_editor could fail to detect
failed operations. Affected platforms include ARM and PowerPC.
(Bug #21355630)
The Rewriter
plugin linked against the
mysys
library, which is already linked into
the server and thus available at load time when the plugin is
installed.
(Bug #21255496)
Memory leaks found by enabling AddressSanitizer were corrected
in mysql, mysqlcheck,
mysqldump, mysqlshow,
mysqlslap, mysqltest,
mysql_client_test,
mysql_upgrade, and
mysql_install_db
.
(Bug #21246627, Bug #21246842, Bug #21246964, Bug #21247377, Bug #21250562, Bug #21250584, Bug #21250644, Bug #21250876, Bug #21250947, Bug #21253535, Bug #21253653, Bug #21254060, Bug #21255860)
Multiple definitions of key_memory_KEY_CACHE
caused compilation failure when ASAN was enabled.
(Bug #21245718)
For debug builds, failure of the range optimizer to properly propagate errors occurring during partition pruning could raise an assertion. (Bug #21211492)
A SET PASSWORD
statement that
failed with
ER_MUST_CHANGE_PASSWORD
could
still change the password_last_changed
column
for a row in the mysql.user
table.
(Bug #21192879)
An optimizer hint assertion could be raised when a table was
used in both parts of an INSERT INTO ...
SELECT
statement.
(Bug #21192857)
The create_tmp_table()
return value was not
checked, which could lead to a server exit.
(Bug #21190532)
Incorrect cost calculation for the semijoin Duplicate Weedout strategy could result in a server exit. (Bug #21184091)
Some Valgrind warnings in
Item_type_holder::join_types()
were spurious
and have been silenced.
(Bug #21156155)
References: This issue is a regression of: Bug #19471564.
The optimizer hint parser could read freed memory. (Bug #21148405)
For debug builds, VIRTUAL
generated columns
could be marked writable during read operations and cause an
assertion to be raised for partitioned tables.
(Bug #21142905)
For debug builds, a missing error test for full-text searches could cause an assertion to be raised. (Bug #21140111)
Outer references do not work as arguments to
MATCH()
, but the server did not properly
detect them. Now it does and raises an error.
(Bug #21140088)
References: See also: Bug #20007383.
EXPLAIN
could raise an assertion
trying to display very large full-text search rank values.
(Bug #21140067)
For debug builds, full-text searches could raise an assertion if the optimizer tried to use a covering index when that was not appropriate. (Bug #21140039)
SHOW STATUS
and
SHOW VARIABLES
failed to produce
output if the server was started with the Performance Schema
disabled.
(Bug #21139458)
ST_Intersection()
could produce
areal and point intersection results, but was not able to
produce linear intersection results.
(Bug #21109896)
ALTER TABLE
statements that
defined a generated column using MATCH ...
AGAINST
in its expression could raise an assertion.
(Bug #21098119)
The server could raise an assertion or produce an incorrect error message for inserts into a view if a single table for insertion could not be identified. (Bug #21097485)
open_files_limit
could be set
higher than permitted by the operating system.
(Bug #21074643)
systemd timeout logic could be triggered if
InnoDB
log rebuilding or recovery took too
long. Because the time this may take is unknown,
systemd timeout during service start or stop
is now disabled.
(Bug #21071740)
Comparisons of table names in optimizer hints did not respect
the value of the
lower_case_table_names
system
variable.
(Bug #21056644)
CMake configuration was adjusted to disable
unnecessary warnings reported by Clang and display them only if
-DMYSQL_MAINTAINER_MODE=1
is used.
(Bug #21041451)
Multiple executions of a prepared
SET
statement that used a subquery could result in a server exit.
(Bug #20982756)
With auto_generate_certs
enabled, the server
automatically created SSL files if any of
ca.pem
,
server-cert.pem
, and
server-key.pem
were missing from the data
directory. Now it creates the files only if all of them are
missing (the same test used by
mysql_ssl_rsa_setup).
(Bug #20963082)
The server compiled with Performance Schema support could not be
started with
performance_schema=OFF
due to a
dependency on it for the sys
schema, which
expected to find Performance Schema tables. The Performance
Schema now creates its tables during startup even if disabled.
(Bug #20956599)
For CREATE
TABLE ... SELECT
, it was possible to assign values to
generated columns in the destination table.
(Bug #20949226)
The server could exit when the Performance Schema read thread status variables under load. (Bug #20927157, Bug #20922218, Bug #21103103)
CMake support was adjusted for the change of
the -Wno-unused-local-typedefs
option to
-Wno-unused-local-typedef
in Clang 3.6.
(Bug #20921370)
For debug builds, XA PREPARE
raised an
assertion if a transaction contained at least one update and
none were InnoDB
updates.
(Bug #20920851)
Using ST_Centroid()
with a
geometry collection containing an invalid polygon could cause a
server exit.
(Bug #20918881)
For small values of the
read_rnd_buffer_size
system
variable, internal caching of temporary results could fail and
cause query execution failure.
(Bug #20895852)
Invalid memory pointer access could occur during access to the
events_statements_history
Performance Schema table, resulting in a server exit.
(Bug #20878306)
For debug builds, passing
EXPORT_SET()
to
VALIDATE_PASSWORD_STRENGTH()
could raise an assertion.
(Bug #20863229)
A failed FLUSH PRIVILEGES
statement followed by statements to create or drop accounts
could cause a server exit.
(Bug #20857652)
Large values of the points_per_circle
argument to the
ST_Buffer_Strategy()
function
could cause large amounts of memory to be used. To avoid
inadvertent excessive memory use, the maximum value of this
argument is now constrained to be the value of the new
max_points_in_geometry
system
variable. This variable has default, minimum, and maximum values
of 65,536, 3, and 1,048,576, respectively.
(Bug #20842030, Bug #21212788)
For certain inputs, ST_Buffer()
could raise an assertion.
(Bug #20841874)
An assertion could be raised if the server used a string column as the key of a temporary table. (Bug #20835095)
References: This issue is a regression of: Bug #19695490.
SHOW VARIABLES
mutexes were being
locked twice, resulting in a server exit.
(Bug #20788853)
ull2dec()
was modified to avoid a problem
with GCC 5 in optimized mode.
(Bug #20768820)
Using GCC 5, debug builds failed due to compiler warnings. (Bug #20768717)
DDL operations on a server configured with
InnoDB
as read only caused a server exit due
to invalid memory access during error reporting.
(Bug #20763179)
ALTER TABLE
could fail to prevent subqueries
in the definition of generated columns, resulting in a server
exit.
(Bug #20757211)
Invalid use of the THD
structure with
generated columns could cause an assertion to be raised.
(Bug #20746926)
Parser state was initialized incorrectly for parsing generated column expressions. (Bug #20745142)
For large values of
max_digest_length
, the
Performance Schema could encounter an overflow error when
computing memory requirements, resulting in a server exit.
(Bug #20738072)
Columns specified through JOIN ... USING
or
NATURAL JOIN
that were resolved from a
derived table could raise an assertion.
(Bug #20733540)
MySQL 5.7.6 restricted the list of symbols exported by the C
client library. One of these was
mysql_get_parameters
, but that is used by the
DBD::mysql Perl module. mysql_get_parameters
is now exported.
(Bug #20686665)
References: See also: Bug #18427840, Bug #20476596, Bug #20821550.
Cleanup after a MATCH()
operation could write
to freed memory.
(Bug #20685427)
NDB
could raise an assertion for failure to
get the tablespace name when attempting to acquire a metadata
lock.
(Bug #20676000)
mysqlslap and
mysql_client_test
failed to use an SSL
connection by default.
(Bug #20654023)
The Spencer regex
library used for the
REGEXP
operator could be subject to
heap overflow in some circumstances.
(Bug #20642505)
A missing error check after a call to
find_field_in_tables()
within the optimizer
could cause an assertion to be raised.
(Bug #20615597)
Optimization of x IN (SELECT y FROM DUAL WHERE
...)
was treated the same as x IN (SELECT y
FROM DUAL)
, losing the WHERE
clause
and resulting in a server exit.
(Bug #20615023)
A buffer-overflow error could occur for mysqlslap during option parsing. (Bug #20605441)
For debug builds, DROP DATABASE
raised an assertion if there were non-database files in the
database directory.
(Bug #20573701)
For CREATE
TABLE ... SELECT
, an error occurred if a selected
column was a generated column that depended on a nonselected
column. To handle this, the destination table does not preserve
information about whether selected columns are generated
columns.
(Bug #20566243)
A user with an expired password could execute
ALTER USER
statements other than
to assign a new password.
(Bug #20553132)
An OpenSSL error queue associated with each thread was not freed on thread release, resulting in a Valgrind error. (Bug #20551271)
The property of whether a view is updatable was calculated when it was created. If the view referred to another view that was dropped and recreated and the new definition of the referenced view had different updatability than the original definition, that could affect the updatability of the referring view. Not taking into account this change in updatability could cause an assertion to be raised. To avoid this problem, the server now assesses updatability when reading a view definition rather than at view creation time. (Bug #20515155)
Built-in SQL functions could raise an assertion or cause a server exit if the wrong thread pointer was used to produce an error or warning message. (Bug #20454979)
Incorrect calculation of the length of strings written to the binary log could raise an assertion or cause a server exit. (Bug #20444737)
References: This issue is a regression of: Bug #16066637.
The range optimizer interpreted a hidden key part
(InnoDB
primary key) as a minimum bounding
rectangle (MBR) index. Such primary keys cannot be used as MBRs,
and a server exit resulted..
(Bug #20430526)
The WITH CHECK OPTION
of a view was sometimes
ignored if the view was included in another view. For discussion
of the implications of this fix, see
The View WITH CHECK OPTION Clause.
(Bug #20407961)
Calculation of “within” or “contains” relationships failed for some types of geometry collections. (Bug #20379981)
Long path name values for some options could lead to stack overflow. (Bug #20376760)
Setting the password for an account not using a built-in authentication plugin could cause the account to become unusable.
The fix for this problem involves a change to the authentication plugin API to add a new authentication_flags member to the server-side plugin descriptor. See Writing the Server-Side Authentication Plugin (Bug #20364862)
Spatial WKT export functions produced too-long string representations of coordinate values instead of switching to exponential notation. (Bug #20363531)
An off-by-one error in string-copying code could result in a buffer overflow. (Bug #20359808)
The
events_waits_summary_by_instance
Performance Schema table could fail to return rows for socket
instruments.
(Bug #20348824)
Under certain conditions, the libedit
command-line library could write outside an array boundary and
cause a client program crash.
(Bug #20318154)
Invalid linestring values with a single point and unclosed polygons with fewer than four points could cause a server exit. Such invalid values now are rejected. (Bug #20316779)
mysql_config_editor could exit abnormally while encrypting passwords. (Bug #20294225)
A corrupt mylogin.cnf
file could cause
client programs to exit abnormally.
(Bug #20294148)
A deadlock error reported by InnoDB could cause rollback inside InnoDB while the transaction continued at the SQL layer. (Bug #20262654)
MySQL sometimes produced no warning when it was unable to interpret a character in a given character set. (Bug #20238729)
Host value matching for the grant tables could fail to use the most specific of values that contained wildcard characters. (Bug #20181776)
For MySQL distributions linked against yaSSL, a corrupt client key file could cause clients to exit. (Bug #20168526)
Use of SELECT COUNT(DISTINCT)
in a subquery
in the FROM
clause could produce incorrect
results.
(Bug #20145024)
References: This issue is a regression of: Bug #18766378.
For join queries with a large number of tables, the server could exit converting the join to a semijoin. (Bug #20109861)
ALTER TABLE
operations that
changed only an index comment were not being treated as a
fast/in-place alteration.
(Bug #20106553)
Following execution of a
GRANT ... WITH GRANT
OPTION
statement, execution of a prepared statement
with a view could cause a server exit.
(Bug #20030284)
ADDTIME()
could produce an
out-of-range result with a year >= 10,000.
(Bug #19900900)
Within a stored procedure, access to view columns after DDL or
FLUSH TABLES
statements in the
procedure could cause a server exit.
(Bug #19897405)
References to select list columns of the outer query from the
HAVING
clause of a correlated subquery in the
inner query should, but did not, return an error, resulting in a
server exit.
(Bug #19823076)
Several ST_Envelope()
problems
were corrected:
If the mimimum bounding rectangle (MBR) of a geometry
degrades to a Point
or horizontal or
vertical LineString
,
ST_Envelope()
returns that value rather
than an invalid polygon.
The return value for an empty geometry collection now is an
empty geometry rather than NULL
.
If a geometry is geometrically invalid but has a valid WKB
string, return a valid MBR rather than
NULL
.
(Bug #19811953, Bug #20196720)
For debug builds, an assertion could be raised when a top-level
query had a HAVING
clause that contained a
subquery referencing a column from the top-level query.
(Bug #19811896)
GROUP BY
or ORDER BY
on a
CHAR(0) NOT NULL
column could lead to a
server exit.
(Bug #19660891)
The server could exit if a grouped query had a nongrouped subquery that contained a reference to an aggregate function. (Bug #19585938)
Loading corrupt spatial data into a MyISAM
table could cause the server to exit during index building.
(Bug #19573096)
Some spatial functions converted -0 to 0. This no longer occurs. (Bug #19504183)
For debug builds, certain UPDATE
statements could raise an assertion.
(Bug #19055268)
The LooseScan execution strategy for semijoins failed to
evaluate the WHERE
condition on rows coming
from the first inner table of an outer join.
(Bug #18892055)
An internal procedure that creates temporary tables and expected a flat list of expressions to map onto table columns sometimes received a list that was not flat, causing an assertion to be raised. (Bug #18745214)
For MyISAM
or MEMORY
tables, a nested join with a subquery could product a result set
with missing rows when the
optimizer_switch
condition_fanout_filter
flag
was enabled.
(Bug #18717059)
For some status variables that should monotonically increase,
SHOW GLOBAL
STATUS
in one session could show them as decreasing
when other concurrent sessions changed user or disconnected.
(Bug #18591145)
On Windows, setting
query_cache_min_res_unit
to too
large a value could result in a value of 0 and a subsequent
server exit.
(Bug #18487951)
For debug builds,
SET
statements that assigned a subquery value to a variable could
raise an assertion due to improper cleanup related to
GROUP BY
or ORDER BY
clauses.
(Bug #18486509)
The validate_password
plugin was not
installed by RPM packages for platforms using systemd or
SysV-style initialization scripts.
(Bug #18438833)
Some queries involving spatial relation checks would produce
correct results for MyISAM
tables but not
InnoDB
tables.
(Bug #18422162)
Deleting rows from an empty MyISAM
table with
a spatial index resulted in a spurious error message about a
corrupt index.
(Bug #18412756)
Boolean full-text searches for MyISAM
tables
could fail.
(Bug #18279587)
A client that attempted to establish SSL connections from a large number of threads simultaneously could exit with a segmentation fault. (Bug #18052165)
Deletes from CSV
tables could cause a server
exit.
(Bug #17902624)
For HANDLER
read statements that
scanned a spatial index, type conversion errors of values read
from the index could cause a server exit.
(Bug #17846865)
A query with an IN
subquery where the
left-hand side was a scalar subquery might cause a server exit.
(Bug #17832047)
The server could exit under conditions when a query contained the following construct but produced an empty result:
literal-valued row constructor <=> (subquery containing UNION)
(Bug #17668844)
If ownership of memory allocation was transferred between threads, Performance Schema memory instrumentation could report memory use of the threads incorrectly. (Bug #17473077)
For debug builds, statements including table-less subqueries could raise an assertion when executed within scheduled events. (Bug #17435114)
The --help
message displayed by
mysql_secure_installation did not show
options related to option-file processing, such as
--defaults-file
.
(Bug #17339009)
Memory usage values in the
memory_summary_global_by_event_name
Performance Schema table could be negative.
(Bug #17243619)
For debug builds, an assertion could be raised in character-set conversion code due to an overly strict condition. (Bug #13740934)
An event scheduler thread could be freed improperly, potentially leading to a server exit. (Bug #77593, Bug #21145277, Bug #21053167)
mysql-systemd-start failed if
datadir
was set in
/etc/my.cnf
.
(Bug #77357, Bug #21262883)
The unused and unmaintained
BUILD/build_mccge.sh
script has been
removed from the source tree.
(Bug #77336, Bug #21246941)
ST_IsValid()
could return false
for some valid MultiPolygon
arguments.
(Bug #77317, Bug #21238969)
ST_Buffer()
with a
LineString
argument could produce a
Polygon
that self-intersected.
(Bug #77316, Bug #21238614)
Compilation failed when building MySQL without the Performance Schema. (Bug #77292, Bug #21229433)
Updating the setup_consumers
table
to set history or long-history consumers had no affect on
historical event logging for existing threads.
(Bug #77278, Bug #21223458)
SHOW GLOBAL
STATUS
Com_
counters
did not reflect xxx
SELECT
statements.
(Bug #77231, Bug #21186946)
The outdated and not-maintained
plugin/daemon_example/ChangeLog
file was
removed.
(Bug #77188, Bug #21168681)
ST_ConvexHull()
could return
incorrect results for MultiLineString
arguments.
(Bug #77167, Bug #21153716)
Executing a prepared EXPLAIN
statement could cause the server to hang.
(Bug #77144, Bug #21139522)
If the server was started with the
ssl_cipher
system variable set,
autogeneration and autodetection of SSL certificates did not
work.
(Bug #77078, Bug #21108296)
Optimizer hint query block names are identifiers, but the parser
did not recognize valid identifer names such as
123a
when used in
@
syntax.
(Bug #77047, Bug #21095608)query_block_name
For mysqldump, the -T
option
is supposed to be the short form of the
--tab
option, but was
mistakenly associated with
--debug-info
instead.
(Bug #77037, Bug #21088793)
References: This issue is a regression of: Bug #66854.
SSL certificates autogenerated by the server could have CN
values that exceeded 64 characters. In that case, the server now
omits the
_
part of the CN values so the length falls within 64 characters.
(Bug #77036, Bug #21087159)server_version
The Common Name value written by
mysql_ssl_rsa_setup
to the
client-cert.pem
client certificate file was
MySQL_Server_
rather than
suffix
_Auto_Generated_Server_CertificateMySQL_Server_
.
(Bug #77035, Bug #21087116)suffix
_Auto_Generated_Client_Certificate
Deallocation of Debug Sync structures within the
InnoDB
handlerton close connection method
could raise an assertion.
(Bug #77005, Bug #21069721)
Queries on a geometry column returned an error instead of a
result if there existed a UNIQUE
index on the
column.
(Bug #77000, Bug #21067378)
An assertion could be raised if a multiple-table
UPDATE
of a view, where the same
column was used in the SET
and
JOIN
clauses, was used as a prepared
statement.
(Bug #76962, Bug #21045724)
With row-based binary logging, automatic dropping of a scheduled event that had reached the end of its lifetime could raise an assertion. (Bug #76958, Bug #21041908)
If a single-table subquery had identical GROUP
BY
and ORDER BY
clauses on a
UNIQUE NOT NULL
column, the results could be
incorrectly ordered.
(Bug #76947, Bug #21038929)
The PARSE_GCOL_EXPR
keyword used internally
by the parser was treated as a reserved word and thus could not
be used as an identifier without quoting it.
(Bug #76943, Bug #21035515)
When the directory specified for the
secure_file_priv
system
variable did not exist, the server produced a Failed
to normalize the argument error message. It now
produces a message indicating that the directory did not exist.
The same problem occurred for the
--datadir
option to
mysql_ssl_rsa_setup and was fixed the same
way.
(Bug #76918, Bug #21021894)
For logging to the binary log, the server could rewrite
CREATE USER
and
ALTER USER
statements, adding an
ACCOUNT UNLOCK
clause not present in the
original statement. This could unlock locked accounts and cause
differences between master and slave servers. The clause is no
longer written unless present in the original statement.
(Bug #76911, Bug #20996273)
The INDEX_NAME
column of the Performance
Schema
table_io_waits_summary_by_index_usage
table could sometimes show incorrect index names for tables
until they had been in use for some time.
(Bug #76882, Bug #20980217)
Compilation could fail in the query rewrite plugin code for some CMake options. (Bug #76800, Bug #20937654)
DO
statements containing multiple
expressions could result in a memory leak.
A consequence of the bug fix is that
DO
statement errors previously
converted to warnings now are returned as errors.
(Bug #76779, Bug #20924241, Bug #17479887)
Previously, SSL files created automatically by the server were valid for one year. The validity period has been extended to ten years (the same as SSL files created by mysql_ssl_rsa_setup). (Bug #76778, Bug #20923066)
mysql_upgrade failed if the
show_compatibility_56
system
variable was enabled.
(Bug #76757, Bug #20914786)
Unaligned memory access could cause spatial operations to fail. (Bug #76748, Bug #20911624)
Identifiers in normalized statements were sometimes quoted and sometimes not, an inconsistency that caused matching failure for statement digests and digest texts. This caused problems for Performance Schema aggregation by digest. Identifiers now are quoted consistently. (Bug #76723, Bug #20896539)
Ubuntu packages were missing dependencies for killall and psmisc. (Bug #76716, Bug #20893836)
SHOW GLOBAL
VARIABLES
and selecting from the
INFORMATION_SCHEMA
GLOBAL_VARIABLES
table resulted in
a spurious warning about the
sql_log_bin
system variable.
(Bug #76626, Bug #20854952)
mysqld --help --verbose was slow if the
InnoDB
buffer pool was configured to a large
size. Now with those options, buffer pool allocation is not
performed.
(Bug #76625, Bug #20856397)
An assertion could be raised for queries with a GROUP
BY
clause and a table for which the optimizer
identified multiple candidate indexes.
(Bug #76576, Bug #20819199)
CREATE USER
events written to the
binary log included the new ACCOUNT
syntax
even with
log_backward_compatible_user_definitions
enabled.
(Bug #76560, Bug #20814051)
The server rejected empty COM_SHUTDOWN
packets.
(Bug #76552, Bug #20810928)
References: This issue is a regression of: Bug #14525642.
For some startup errors, the server could call
exit()
before shutting down plugins and thus
failed to invoke their atexit()
handlers.
(Bug #76532, Bug #20798617)
In sql/handler.h
,
HA_ATTACHABLE_TRX_COMPATIABLE
and
HA_GENERATED_COLUMNS
were defined with the
same value.
(Bug #76503, Bug #20783191)
mysqlimport --use-threads did not actually use multiple threads. (Bug #76480, Bug #20772273)
The mutex used for the optimizer cost model cost-constant cache
was not instrumented by the Performance Schema. This instrument
is now available as
wait/synch/mutex/sql/Cost_constant_cache::LOCK_cost_const
.
(Bug #76460, Bug #20755430)
These statement-timeout problems were corrected:
An assertion could be raised with
max_statement_time
set greater than zero
and multiple concurrent sessions executing certain
EXPLAIN
statements.
The error message indicating that statement execution was
interrupted referred to the
max_statement_time
system variable, even
if the relevant timeout was a per-statement value. The error
message is now more generic.
It was not possible to set the
max_statement_time
system variable at
server startup.
Setting max_statement_time
to set a
statement timeout could cause memory leaks or assertion
failures on Windows.
Attempting to kill statements that use attachable
transactions caused subsequent statements to function
improperly, resulting in assertion failures. A
max_statement_time
timeout on such
statements could produce a similar outcome.
Subsequent to these changes, the
max_statement_time
system variable was
renamed to
max_execution_time
.
(Bug #76446, Bug #20788811, Bug #76915, Bug #21021670, Bug #76916, Bug #21021754, Bug #20705648, Bug #20705642, Bug #75782, Bug #20507804)
References: See also: Bug #77461, Bug #21306646.
Attempts to create a foreign key matching a
FULLTEXT
index failed. For debug builds,
attempts to create a foreign key matching a
SPATIAL
index raised an assertion.
(Bug #76445, Bug #20752436)
The ORDER BY
clause of a derived table was
appended to an INSERT
statement,
but ordering for a table being inserted into is irrelevant and
caused a server exit.
(Bug #76436, Bug #20753569)
A failing ALTER TABLE
tablespace
operation (DISCARD TABLESPACE
or
IMPORT TABLESPACE
could produce an incorrect
internal tablespace state, causing a succeeding statement to
fail.
(Bug #76424, Bug #20748660)
Enabling the sql_buffer_result
system variable could cause a server exit for multiple-table
UPDATE
statements.
(Bug #76419, Bug #20748537)
The value of secure_file_priv
displayed as NULL
for both
--secure_file_priv=NULL
(correct) and
--secure_file_priv=""
(incorrect).
(Bug #76401, Bug #20741572)
A Provides
rule in RPM
.spec
files misspelled
“mysql-embedded” as “mysql-emdedded”.
(Bug #76385, Bug #20734434)
Compiling using Clang 3.5 or higher with AddressSanitizer (ASAN)
enabled caused the gen_lex_hash
utility to
abort on Clang LeakSanitizer memory leak check failures.
(Bug #76351, Bug #20720615, Bug #22558597, Bug #80014)
SHOW CREATE TABLE
did not
correctly display generated columns that had a character set
defined.
(Bug #76328, Bug #20709462)
The Com_stmt_reprepare
status variable was
missing from the global_status
and
session_status
Performance Schema
tables.
(Bug #76305, Bug #20697446)
Attempts to establish SSL connections to a Community Edition server failed if the client had a password and the server did not have the general query log enabled. (Bug #76286, Bug #20693153)
Prepared statement execution statistics were not correctly
tracked in the
prepared_statements_instances
Performance Schema table.
(Bug #76284, Bug #20692556)
Some server warnings referred to the now-deprecated mysql_install_db command. (Bug #76251, Bug #20681412)
Compilation could fail due to a missing dependency on
lex_token.h
for
sql_yacc.cc.o
.
(Bug #76235, Bug #20678411, Bug #27470071, Bug #89482)
EXPLAIN
for a query containing an
uncorrelated subquery could attempt to materialize the subquery
twice, raising an assertion.
(Bug #76205, Bug #20665051)
Debian and Ubuntu package installers neglected to run mysql_ssl_rsa_setup during installation. (Bug #76163, Bug #20650118)
Global status variables related to SSL certificate metadata were available only within sessions established using SSL. (Bug #76157, Bug #20648276)
The
mysql_real_escape_string_quote()
C API function failed to escape backtick (`
)
characters when the
NO_BACKSLASH_ESCAPES
SQL mode
was disabled.
(Bug #76146, Bug #20645725)
The message displayed to indicate that a password was expired
and must be reset referred to the deprecated
SET PASSWORD
statement. It now
refers to ALTER USER
.
(Bug #76053, Bug #20602572)
ALTER USER
statements that named
an authentication plugin did not check whether the plugin is
valid.
(Bug #76052, Bug #20602525)
If a proxy user expired the password of the proxied user, the current proxy user session was affected (the server considered its password expired). To execute SQL statements again, it was necessary for the proxy user to disconnect and reconnect again. (Bug #76043, Bug #20599280)
mysqld --help --verbose tried to perform
actions that have nothing to do with displaying a help message:
Locking files, initializing system files, and checking for a
plugin
table.
(Bug #75995, Bug #20581228)
For a SET =
(
statement within
a stored procedure, the server could exit if a subquery
transformation was performed.
(Bug #75994, Bug #20583321)subquery
)
Code for reading and writing the grant tables assumed that these
were MyISAM
tables and did not handle errors
that can be thrown if the tables are handled by a different
storage engine.
(Bug #75955, Bug #20561087)
Several spatial function issues were resolved by use of Boost.Geometry for GIS algorithms:
ST_Centroid()
with a
MultiPolygon
argument could produce
incorrect results.
Multiple calls to
ST_Intersection()
could
return inconsistent results for some arguments.
ST_Within()
and
ST_Touches()
could return
incorrect results for some arguments.
(Bug #75829, Bug #20508769, Bug #69425, Bug #19270344, Bug #69538, Bug #19270334)
Nonoptimal cost estimates for key lookups could cause some queries to be executed with a table scan rather than key lookups. (Bug #75695, Bug #20443863)
Operations on a string exceeding
max_allowed_packet
bytes could
return NULL
and incorrectly replace an
existing value in UPDATE
statements with NULL
rather than failing.
(Bug #75539, Bug #20376498)
The MeCab full-text parser plugin was omitted from RPM and Debian packages. (Bug #75429, Bug #20315007)
EXPLAIN
for
INSERT ...
SELECT
statements into a multiple-table view always
displayed the first table of the view as the table being
inserted into, even if it was not.
(Bug #75424, Bug #20310257)
The parser could dereference a null pointer after an out-of-memory error. (Bug #75372, Bug #20294206)
Some queries could return different results depending on whether
the semijoin
flag of the
optimizer_switch
system
variable was enabled or disabled.
(Bug #75270, Bug #20239912)
With a small thread stack, queries with many expressions could produce a thread stack overrun error. (Bug #74985, Bug #20087571)
On platforms where the char
is unsigned, the
server was unable to parse collation definitions that included
non-7-bit ASCII characters. Affected platforms include ARM and
PowerPC. Thanks to Alexey Kopytov for the patch.
(Bug #74891, Bug #20928289, Bug #21682439)
If the server was started with the
explicit_defaults_for_timestamp
system variable enabled, CREATE
TABLE
statements that defined a column as
TIMESTAMP NOT NULL
failed.
(Bug #74529, Bug #19881933)
In the threads
Performance Schema
table, the PROCESSLIST_STATE
and
PROCESSLIST_INFO
values did not change for
the thread/sql/main
main thread instrument as
the thread state changed.
(Bug #74517, Bug #19887143)
On OS X 10.10 (Yosemite), mysqld failed to start automatically. The startup item has been replaced with a launchd job, which enables the preference pane check box for automatic startup to work again. (Bug #74434, Bug #19858350)
Specifying a bad init_file
system variable value could cause the server to hang at startup.
(Bug #74402, Bug #19822257)
mysql_install_db did not write a date to the
.mysql_secret
file.
(Bug #74006, Bug #19659004)
Incorrect results could be produced tor views and derived tables on the inner side of an outer join and from which non-nullable expressions such as literals were selected. (Bug #73953, Bug #20841369, Bug #67014, Bug #15967464, Bug #65936, Bug #14358878, Bug #67300, Bug #15936817, Bug #76327, Bug #20708288)
If a spatial column contained invalid spatial data, creating a
SPATIAL
index on the column failed to produce
an error.
(Bug #73871, Bug #19593342)
Certain queries for the INFORMATION_SCHEMA
TABLES
and
COLUMNS
tables could lead to
excessive memory use when there were large numbers of empty
InnoDB
tables.
(Bug #72322, Bug #18592390)
Large integer literals converted to floats for comparison with decimal data could lose precision and produce incorrect results. (Bug #72056, Bug #18411494, Bug #21139707)
When choosing join order, the optimizer could incorrectly
calculate the cost of a table scan and choose a table scan over
a more efficient eq_ref
join.
(Bug #71584, Bug #18194196)
The server interpreted
--tc-heuristic-recover
option
values incorrectly due to an off-by-one error. Thanks to
Laurynas Biveinis for the patch.
(Bug #70860, Bug #19771769)
On OS X, the vio_io_wait()
call could cause
stack corruption for a large number of file descriptors (more
than FD_SETSIZE
).
(Bug #69903, Bug #17259750)
Queries that included a HAVING
clause based
on nondeterministic functions could produce incorrect results.
(Bug #69638, Bug #17055185)
MySQL failed to compile using OpenSSL 0.9.8e. (Bug #68999, Bug #16861371)
For mysqlslap, the combination of
--auto-generate-sql-secondary-indexes
and --auto-generate-sql
failed
because it tried to insert 36-digit UUID values into a
VARCHAR(32)
column. Thanks to Tsubasa Tanaka
for the patch.
(Bug #55265, Bug #11762644)