MySQL 5.7 Release Notes
In MySQL 5.7.8, the maximum length of MySQL user names was increased from 16 to 32 characters, but some applicable contexts for this increase were overlooked. Additional changes in maximum user name length now have been applied:
The size of these mysql
system table
columns is increased:
The definer
column of the
event
and proc
tables
The grantor
column of the
procs_priv
and
tables_priv
tables
In each case, the column previously was defined as
CHAR(77)
, where 77 was chosen to permit a
string containing a user name up to 16 characters, a
user_name
@host_name
@
character, and a host name up to 60
characters. Each column now is defined as
CHAR(93)
, reflecting an increase in
permitted user name length from 16 to 32 characters.
A similar change from CHAR(77)
to
CHAR(93)
applies to the
DEFINER
column of these
INFORMATION_SCHEMA
tables:
EVENTS
,
ROUTINES
,
TRIGGERS
,
VIEWS
. Along with the changes
to INFORMATION_SCHEMA
tables, output from
any corresponding SHOW
statements now
displays DEFINER
values up to 93
characters. Examples of affected statements:
SHOW EVENTS
,
SHOW TRIGGERS
,
SHOW PROCEDURE STATUS
.
If you upgrade to this MySQL release from an earlier version,
you must run mysql_upgrade (and restart the
server) to incorporate the changes to the
mysql
system database. A server from MySQL
5.7.13 or higher for which mysql_upgrade has
not been run continues to permit a maximum of 77 characters in
the system tables mentioned previously, and an
ER_USER_COLUMN_OLD_LENGTH
error
will occur in those system table contexts where a
value from 78 to 93 characters long is given.
user_name
@host_name
The audit_log
plugin that forms the basis for
MySQL Enterprise Audit now supports fine-grained filtering of events. This
enables a reduction in the number of log entries written to the
audit log file, which increases overall performance due to fewer
write operations during log recording. It also simplifies
subsequent audit log processing in terms of readability and
processing time.
Fine-grained audit log filtering is rule based, implemented
using tables that store filter definitions and a set of
user-defined functions (UDFs) that enable filter manipulation.
To simplify installing the tables and UDFs along with the
audit_log
plugin, an installation script is
now provided. For more information, see
Installing or Uninstalling MySQL Enterprise Audit, and
Audit Log Filtering.
By default, audit log filtering now logs no auditable events for any users. This differs from legacy audit log behavior (before MySQL 5.7.13), which logs all auditable events for all users; to produce log-everything behavior, see the installation instructions.
References: See also: Bug #21464781, Bug #71855.
On platforms for which systemd support is installed, systemd has the capability of managing multiple MySQL instances. For details, see Managing MySQL Server with systemd. Consequently, mysqld_multi and mysqld_multi.server are not installed because they are unnecessary. (Bug #81093, Bug #23134620)
MySQL Server now includes an SQL interface for keyring key management, implemented as a set of user-defined functions (UDFs) that access the functions provided by the internal keyring service. For more information, see General-Purpose Keyring Key-Management Functions. For information about the keyring service functions invoked by the UDFs, see The Keyring Service. For general keyring information, see The MySQL Keyring.
support-files/MacOSX/ReadMe.txt
is no
longer included in MySQL distributions.
(Bug #81038, Bug #23088916)
The linked OpenSSL library for the MySQL Commercial Server has been updated to version 1.0.1t. For a description of issues fixed in this version, see http://www.openssl.org/news/vulnerabilities.html.
This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #23229564)
The minimum number of X Plugin worker threads dropped below the
number of threads configured by
mysqlx_min_worker_threads
.
(Bug #23074173)
During installation of X Plugin, the DROP
USER
statement of an internal user was being added to
the binary log, while the matching CREATE
USER
statement was not. This was causing an error in
replication as the internal user did not exist on slaves. The
fix ensures that the DROP USER
statement is not added to the binary log.
(Bug #22989849)
An error occurred when using method chaining to group results,
for example Crud.Find({ name:$.name, count:count(*)
}).GroupBy($.name);
.
(Bug #22950240)
X Plugin threads were registered in the Performance Schema
tables as thread/sql/daemon_plugin
. This has
been changed to thread/mysqlx/worker
.
(Bug #22901644)
When a Mysqlx_idle_worker_thread_timeout
was
configured, once the timeout had completed worker threads
consumed 100% of CPU when they should have been idle.
(Bug #81236, Bug #23204368)
Client disconnections were logged as EOF
. The
log message has been improved to Peer
disconnection
.
(Bug #81199, Bug #23178878)
JSON:
This release adds an unquoting extraction operator
->>
,
sometimes also referred to as an inline path operator, for use
with JSON
documents stored in
MySQL. The new operator is similar to the
->
operator, but performs JSON unquoting of the value as well. For
a JSON column mycol
and JSON path expression
mypath
, the following three expressions are
equivalent:
JSON_UNQUOTE(mycol
->
"$.mypath")
mycol->>"$.mypath"
The ->>
operator can be used in SQL
statements wherever
JSON_UNQUOTE(JSON_EXTRACT())
would be
allowed. This includes (but is not limited to)
SELECT
lists, WHERE
and
HAVING
clauses, and ORDER
BY
and GROUP BY
clauses.
For more information, see Functions That Search JSON Values, and JSON Path Syntax. (Bug #78736, Bug #21980346)
For better separation of output from multiple statements,
mysqltest
now flushes output sent to
stdout
when the output destination is not a
file. Previously, flushing occurred only for file output.
(Bug #21435906)
The version of the tcmalloc
library included
in MySQL distributions was very old. It has been removed and is
no longer included with MySQL.
(Bug #80994, Bug #23068660)
The my_make_scrambled_password()
function in
the C client library was restricted earlier in MySQL 5.7 (not
exported to client programs). The function has once again been
made visible to client programs.
(Bug #80974, Bug #23061746)
It is possible to use ALTER TABLE
to change the default value of a column
col_name
, which may change the value
of a generated column expression that refers to the column using
DEFAULT(
.
For this reason, col_name
)ALTER TABLE
operations that change the definition of a column now cause a
table rebuild if any generated column expression uses
DEFAULT()
.
(Bug #80299, Bug #22680839)
InnoDB: A rollback operation run concurrently with an operation involving a virtual generated column caused a server exit. (Bug #23313102)
References: This issue is a regression of: Bug #21869656.
InnoDB:
Potential buffer overflow issues were corrected for the
InnoDB
memcached plugin.
(Bug #23187607)
InnoDB:
An ALTER TABLE
operation that
added an AUTO_INCREMENT
column on a table
with virtual columns raised an assertion.
(Bug #23052231)
InnoDB: Statements executed in a transaction that was rolled back asynchronously by a higher priority transaction caused a deadlock error and subsequent replication failure. (Bug #23021168, Bug #80898)
InnoDB:
An ALTER TABLE
operation that
attempted to add a virtual generated column and a full-text
index raised an assertion.
(Bug #23014521)
InnoDB: The full-text index cache was freed during a background index cache synchronization. (Bug #22996488)
InnoDB: A full-text index operation raised an assertion. (Bug #22963169)
InnoDB: Memory was allocated to I/O slots unnecessarily, causing an apparent memory leak. (Bug #22956469, Bug #80772)
InnoDB:
An ALTER TABLE
operation raised
an assertion when attempting to create a key containing a
generated column.
(Bug #22951879)
InnoDB:
A startup failure due to an invalid option resulted in a server
exit after a subsequent restart. An error returned by the
innobase_start_or_create_for_mysql
function
was not checked.
(Bug #22939581, Bug #80761)
InnoDB:
An ALTER TABLE ...
IMPORT TABLESPACE
operation on file-per-table
tablespace containing an encrypted table failed when run in a
different session than the preceding
ALTER TABLE ...
DISCARD TABLESPACE
operation.
(Bug #22918999, Bug #80708)
InnoDB:
A FLUSH TABLES
operation on a
table with a discarded tablespace raised an assertion.
(Bug #22899690, Bug #80669)
InnoDB: A DML operation involving a table with a virtual column raised an assertion. (Bug #22899305)
InnoDB:
An invalid read at
innobase_get_computed_value()
raised a
Valgrind error.
(Bug #22898168, Bug #80667)
InnoDB:
Online DDL operations like
ALTER TABLE ... ADD
INDEX
were not permitted for tables created with the
ENCRYPTION
attribute.
(Bug #22897921)
InnoDB:
InnoDB
memcached code
assumed the nonexistence of the htonll()
function on OS X, resulting in a build failure on OS X 10.10 and
later.
(Bug #22865112)
InnoDB:
Starting the server in read-only mode failed when encrypted
tables were present. The call to
fil_encryption_rotate()
was not skipped when
the server was started in read-only mode.
(Bug #22723797)
InnoDB: An R-tree purge operation raised an assertion. (Bug #22698076, Bug #80327)
InnoDB:
An INSERT
operation on a table
with a FULLTEXT
index and
FTS_DOC_ID
column failed because the inserted
FTS_DOC_ID
value exceeded the permitted gap
between consecutive FTS_DOC_ID
values. To
avoid this problem, the permitted gap between the largest used
FTS_DOC_ID
value and new
FTS_DOC_ID
value was raised from 10000 to
65535.
(Bug #22679185)
InnoDB:
Validation code for transparent page compression incorrectly
permitted
innodb_strict_mode=OFF
, which
allowed the COMPRESSION
attribute to be
applied to a general tablespace. Page compression is only
supported with file-per-table tablespaces.
(Bug #22615096, Bug #80182)
InnoDB: An memory order issue related to atomic operations caused assertion failures on ARM64 and POWER platforms. (Bug #22608616)
InnoDB:
DROP TABLESPACE
returned an error
if the remote general tablespace data file was missing.
(Bug #22232892, Bug #79330)
InnoDB:
An ALTER TABLE
operation that
changed table row format from COMPACT
to
COMPRESSED
raised an assertion. A function
involved in the operation passed incorrect page size
information.
(Bug #22046353)
InnoDB:
With
innodb_autoinc_lock_mode=0
,
multiple threads waiting for a table-level lock caused an
unexpected deadlock.
(Bug #21983865, Bug #78761)
InnoDB:
A race condition in trx_kill_blocking()
raised an assertion.
(Bug #21508537)
InnoDB:
An OPTIMIZE TABLE
operation on a
table with a full-text index raised an assertion.
(Bug #21378944)
InnoDB: A buffer pool load operation resulted in a Cannot allocate 0 bytes error. (Bug #21371070)
InnoDB:
A
FLUSH
TABLES ... FOR EXPORT
operation appeared to stall. A
loop in the ibuf_contract_in_background
function failed to exit.
(Bug #21133329, Bug #77011)
InnoDB:
A full-text query raised an assertion. Under certain
circumstances, DDL operations such as
ALTER TABLE ...
RENAME
caused full-text auxiliary tables to be removed
on server restart.
(Bug #13651665)
Replication:
With gtid_mode=ON
, executing an
empty query before setting
gtid_next
made the latter
action fail. It was because only statements that do not change
the data can be executed before one can successfully change
gtid_next
, and an empty query
was not considered one of those “safe” statements.
This fix allows the setting of
gtid_next
after an empty query.
(Bug #22811150)
Replication:
Slaves running MySQL 5.7 could not connect to a MySQL 5.5 master
due to an error retrieving the
server_uuid
, which is not part
of MySQL 5.5. This was caused by changes in the method of
retrieving the server_uuid
.
(Bug #22748612)
References: This issue is a regression of: Bug #21455603.
Replication: Setting certain semisynchronous-replication configurations on the master server when semisynchronous replication was not enabled on it might cause the server to exit. This fix prevents the unexpected exits to occur in the situation. (Bug #22602324)
Replication:
The variable explicit_defaults_ts
was not
initialized during the construction of a
Query_event
object. That caused Valgrind
warnings for dependency on an uninitialized variable. This fix
makes sure the variable is initialized.
(Bug #22110916, Bug #78999)
References: This issue is a regression of: Bug #18885916, Bug #72794.
Replication:
In the next_event()
function, which is called
by a slave's SQL thread to read the next even from the relay
log, the SQL thread did not release the
relaylog.log_lock
it acquired when it ran
into an error (for example, due to a closed relay log), causing
all other threads waiting to acquire a lock on the relay log to
hang. With this fix, the lock is released before the SQL thread
leaves the function under the situation.
(Bug #21697821)
References: See also: Bug #20492319.
Replication:
A partially failed statement was not correctly consuming an
auto-generated or specified GTID when binary logging was
disabled. The fix ensures that a partially failed
DROP TABLE
, a partially failed
DROP USER
or a partially failed
DROP VIEW
consume respectively
the relevant GTID and save it into
@@GLOBAL.GTID_EXECUTED
and
mysql.gtid_executed
table when binary logging
is disabled.
(Bug #21686749)
Replication: When using row-based replication in a cascading or circular replication setup, where a master is replicating to server 1 which is then replicating to server 2, merge tables were not being correctly applied on server 2. This could cause an unexpected halt on server 2 while server 1 was unaffected. (Bug #17018343)
Replication:
An intermittent ASan error was being reported on the
rpl.rpl_checksum_cache
test. The error
reported was related to the binary log sender doing a
heap-use-after-free on a given memory address.
(Bug #78995, Bug #22109863)
Replication:
mysqldump has been updated to make it
compatible with multi-source replication. Now when replication
channels other than the default channel are found,
mysqldump --dump-slave outputs a
CHANGE MASTER TO
statement for
each replication channel.
(Bug #78467, Bug #21855705)
Replication:
If a multithreaded replication slave running with
relay_log_recovery=1
stopped
unexpectedly, during restart the relay log recovery process
could fail. This was due to transaction inconsistencies not
being filled, see
Handling an Unexpected Halt of a Replica.
Prior to this fix, to recover from this situation required
manually setting
relay_log_recovery=0
, starting
the slave with
START SLAVE UNTIL
SQL_AFTER_MTS_GAPS
to fix any transaction
inconsistencies and then restarting the slave with
relay_log_recovery=1
. This
process has now been automated, enabling relay log recovery of a
multithreaded slave upon restart automatically.
(Bug #77496, Bug #21507981)
Fedora builds now are configured using
-DMYSQL_MAINTAINER_MODE=0
to
silence GCC 6 warnings.
(Bug #23274249)
Allocation of a large number (2^20) of Performance Schema index statistic objects could cause a server exit. (Bug #23188107)
If the keyring_okv
plugin configuration
directory was missing, attempts to rotate the
InnoDB
master key could cause a server exit.
(Bug #23149683)
INSERT
with ON DUPLICATE
KEY UPDATE
and REPLACE
on a table with a foreign key constraint defined failed with an
incorrect duplicate entry error rather
than a foreign key constraint violation error.
(Bug #23135731)
References: This issue is a regression of: Bug #78853, Bug #22037930.
Contention in Performance Schema mutex instrumentation creation and destruction has been reduced, such that mutexes for which instruments are frequently created and destroyed are maintained in separate pages from those for which instruments are rarely created and destroyed. (Bug #22965826)
With certain build options, an uninitialized variable in
get_key_scans_params()
could produce a
compilation error.
(Bug #22916059)
Adding new tokens to the parser caused query digest values to change. (Bug #22906606)
For debug builds, CONCAT_WS()
could raise an assertion if there was nothing to append.
(Bug #22888420)
Fixed Valgrind warnings for failed
LEAST()
evaluations.
(Bug #22883278)
INET_NTOA()
could cause a server
exit when producing an error message.
(Bug #22881810)
References: This issue is a regression of: Bug #22042027.
The my_write()
call could cause a server exit
if it attempted to check the current connection and the
connection had been killed.
(Bug #22867809)
References: This issue is a regression of: Bug #21688407.
Invoking Enterprise Encryption functions in multiple threads simultaneously could cause a server exit. (Bug #22839278)
Setting log_syslog_tag
to
NULL
could cause a server exit.
(Bug #22834781)
References: This issue is a regression of: Bug #22180046.
If the expression for an indexed generated column contained an
AND
or
OR
operator, the optimizer could
choose that index too often and create execution plans that
produced incorrect results.
(Bug #22810883)
CREATE TABLE
statements in
mysqlpump output could be missing
KEY
clauses and would not load.
(Bug #22726732)
Attempting to use Enterprise Encryption functions after creating and dropping them could cause a server exit. (Bug #22669012)
Setting sort_buffer_size
to a
very large value could cause some operations to fail and result
in a server exit.
(Bug #22594514)
For an InnoDB
table containing generated
columns, using the table in a join could result in a server exit
due to improper error checking.
(Bug #22561845)
REPLACE
on a table with an
indexed generated column could cause a server exit if the index
prefix length was calculated incorrectly.
(Bug #22445211)
An UPDATE
operation affecting a
virtual generated BLOB
column
could cause a server exit.
(Bug #22444212)
SHOW CREATE TABLE
for a table
containing a generated column could cause a server exit or
produce an Illegal mix of collations
error.
(Bug #22392268)
On a slave server, replication of an
UPDATE
statement that updated an
indexed BLOB
virtual generated
column of an InnoDB
table could cause a
server exit.
(Bug #22241015)
An assertion could be raised when a deadlock occurred due to a
SELECT ... GROUP BY ... FOR UPDATE
query
executed using a Loose Index Scan.
(Bug #22187476)
mysqlpump could exit due to improper handling of error conditions in a dump thread. (Bug #22017120)
Several potential buffer overflow issues were corrected. (Bug #21977380, Bug #23187436, Bug #23202778, Bug #23195370, Bug #23202699)
If the CA certificate as given to the
--ssl-ca
option had an invalid
path, yaSSL returned an error message different from OpenSSL.
Now both return SSL connection error:
SSL_CTX_set_default_verify_paths failed
.
(Bug #21920657)
Installing MySQL from a yum or
zypper
repository resulted in
/var/log/mysqld.log
being created with
incorrect user and group permissions.
(Bug #21879694, Bug #78512)
With show_compatibility_56=OFF
,
SHOW VARIABLES
and
SHOW STATUS
statements having a
WHERE
clause did not work.
(Bug #21783883)
The audit_log
plugin failed to abort the
current operation when told to do so by a plugin handler for a
MYSQL_AUDIT_PARSE_PREPARSE
event.
(Bug #21457956)
Memory leaks reported by Valgrind for mysqlpump were fixed. (Bug #21237667)
Some string functions returned one or a combination of their parameters as their result. If one of the parameters had a non-ASCII character set, the result string had the same character set, resulting in incorrect behavior when an ASCII string was expected. (Bug #18740222)
On Fedora 24, upgrades using a Community MySQL Server RPM failed to replace an installed MariaDB Galera server due to a change in the MariaDB package. (Bug #81390, Bug #23273818)
The mysql_read_defaults_options()
function
was missing a break statement, causing any option value for the
--ssl-cipher
option also to be
applied to the --tls-version
option, with unpredictable results.
(Bug #81139, Bug #23129821)
A DELETE
from joined tables using
a derived table in the WHERE
clause failed if
one of the joined tables was used in the derived table.
(Bug #81014, Bug #23074801)
Compiling of clients that used the MySQL C API could fail if
they used an obsolete path to mysql.h
or
<mysql/mysql.>
and did not set the
include path. This was due to use of #include
<
notation rather
than file_name
>#include
"
in internal MySQL
header files, which have been adjusted.
(Bug #80935, Bug #23047194)file_name
"
MySQL did not compile under Solaris 12 using Sun Studio. To
correct this, instances of __attribute__
were
changed to MY_ATTRIBUTE
.
(Bug #80748, Bug #22932576)
The service_mysql_keyring.h
and
services.h
header files misspelled
mysql_keyring_service_st
as
mysql_keyring_file_service_st
.
(Bug #80688, Bug #22908232)
The fix for Bug #79194 did not cover the
eq_ref
access method, with
the result that left joins could return incorrect results.
This bug fix has a very small negative performance effect such
that it fails to cache an
eq_ref
-accessed row that is
on the inner side of an outer join. Regular inner joins are
not affected.
(Bug #80526, Bug #22833364)
References: This issue is a regression of: Bug #79194, Bug #22176604.
The sanity()
macro in
strings/decimal.c
produced Valgrind
warnings due to reading uninitialized buffer contents.
(Bug #80461, Bug #22782203, Bug #22839915)
Starting the server with
--initialize
failed if the
keyring_file_data
system
variable was also set at startup. To handle this, with
--initialize
the server no longer
skips registration of plugins loaded with the
--early-plugin-load
option.
(Bug #80451, Bug #22777039)
Loading the Rewriter
query rewrite plugin
when there was no query_rewrite
database
resulted in Valgrind warnings.
(Bug #80333, Bug #22710312)
The optimizer transformed EXISTS (SELECT *
...)
constructs to EXISTS (SELECT 1
...)
before all columns in the inner subquery had been
resolved, which could result in rejection of valid queries that
included a HAVING
clause without
GROUP BY
in the subquery.
(Bug #80231, Bug #22655856)
For a server compiled with
-DWITH_PERFSCHEMA_STORAGE_ENGINE=0
,
a memory leak could occur for buffered log messages used during
server startup.
(Bug #80089, Bug #22578574)
A query could return incorrect results under these conditions: A
column with a default value contained NULL
;
SELECT DISTINCT
or a GROUP
BY
clause was used and the column containing the
NULL
value was part of the select list; an
InnoDB
temporary table was used during query
processing.
(Bug #79591, Bug #22343910)
A null pointer dereference of a parser structure could occur during stored procedure name validation. (Bug #79396, Bug #22286421)
Database initialization failed during installation using Ubuntu 15.10 packages. (Bug #79377, Bug #22252900)
mysql_upgrade failed to widen the
User
and Proxied_user
columns in the mysql.proxies_priv
system
table from 16 to 32 characters.
(Bug #78254, Bug #21762656)
Failure of UNINSTALL PLUGIN
could
lead to inaccurate or confusing errors for subsequent
INSTALL PLUGIN
operations.
(Bug #74977, Bug #20085672)
mysqld_multi displayed misleading error messages when it was unable to execute my_print_defaults. (Bug #74636, Bug #19920049)
Previously, upgrading the server using an RPM package (including installation using yum) required upgrading the client package to the same MySQL version, which may be undesirable for some installations. This rule has been relaxed so that upgrading to a General Availability (GA) server version requires only that some GA client version be installed, which is less likely to require a client upgrade. (Bug #72230, Bug #18518216)
mysqldump failed silently with no error
message when it encountered an error while executing
FLUSH LOGS
.
(Bug #71783, Bug #18284273)