MySQL 5.7 Release Notes
The resolveip and resolve_stack_dump utilities are now deprecated and will be removed in MySQL 8.0. nslookup, host, or dig can be used instead of resolveip. Stack traces from official MySQL builds are always symbolized, so there is no need to use resolve_stack_dump. (WL #12619, WL #12620)
If the LDAP port number is configured as 636 or 3269, the plugin
now uses LDAPS (LDAP over SSL) instead of LDAP. The port number
is settable using the
authentication_ldap_sasl_server_port
or
authentication_ldap_simple_server_port
system variable. (LDAPS differs from
startTLS
.)
(Bug #28743563)
Previously, for LDAP authentication with proxying, LDAP authentication plugins used the first group name returned by the LDAP server as the MySQL proxied user account name. The authentication string for a MySQL account now can specify a list of groups to match, in preference order, and can optionally map the matching group name to a specified MySQL proxied user name. See LDAP Pluggable Authentication. (WL #12005)
The linked OpenSSL library for the MySQL Commercial Server has been updated to version 1.0.2q. Issues fixed in the new OpenSSL version are described at http://www.openssl.org/news/vulnerabilities.html.
This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #28988091)
Microsoft Windows:
The access control granted to clients on the named pipe created
by the MySQL server now is set to the minimum necessary for
successful communication on Windows. Newer MySQL client software
can open named pipe connections without any additional
configuration. If older client software cannot be upgraded
immediately, the new
named_pipe_full_access_group
server system variable can be used to give a Windows group the
necessary permissions to open a named pipe connection.
Membership in the full-access group should be restricted and
temporary.
(WL #12445)
InnoDB: A dangling pointer caused a memory leak. (Bug #28693568)
InnoDB:
An ON DELETE CASCADE
operation on table with
a foreign key constraint and an indexed virtual column caused
the server to exit.
(Bug #28470805)
InnoDB: An incorrectly written DML log involving a virtual column value raised an assertion. (Bug #28448853)
InnoDB:
Using the O_DIRECT_NO_FSYNC
innodb_flush_method
setting
could cause the system to hang due to file system metadata
becoming unsynchronized. To prevent this issue from occurring in
O_DIRECT_NO_FSYNC
mode,
InnoDB
now calls fsync()
after creating a new file, after increasing file size, and after
closing a file. The fsync()
system call is
still skipped after each write operation.
(Bug #27309336)
InnoDB: An assertion was raised when attempting to write to a tablespace file greater than 4GB in size on a 64-bit Windows system. The failure was due to a narrowing cast. (Bug #26636815, Bug #87423)
Partitioning:
Repeated ALTER TABLE
statements
on partitioned tables containing
BLOB
or
TEXT
columns were not always
handled correctly.
(Bug #28491099)
Partitioning:
ALTER
TABLE ... EXCHANGE PARTITION
did not work when the
partitioned table had one or more partition definitions using
the DATA DIRECTORY
option. This fix supports
partitioned tables using the InnoDB
storage engine only.
(Bug #19730200)
Replication:
A patch to correct the handling of quotes for identifiers in
ROLLBACK TO SAVEPOINT
statements in the
binary log was not correctly applied to subsequent MySQL
versions.
(Bug #28569645)
Replication:
Following a patch in MySQL 5.7.23, LOAD
DATA
statements stopped statement-based replication
from a MySQL 5.7.22 master to a replication slave at a later
release. The problem has now been fixed.
(Bug #28541204, Bug #92132)
Replication:
In some circumstances, the CHANGE MASTER
TO
statement could not be used on a replication slave
if the master info log had been changed from a table
(master_info_repository=TABLE
)
into a file
(master_info_repository=FILE
).
(Bug #28529558)
Replication:
When the system variables
binlog_transaction_dependency_tracking
and
binlog_transaction_dependency_history_size
were set or read, the types of lock that were required could
result in a deadlock scenario, because the same locks were also
required for working with the active binary logs. A new lock
type is now used instead for access to the transaction
dependency tracking system variables, so that this deadlock
cannot occur.
(Bug #28511326, Bug #91941, Bug #28537209, Bug #92108)
Replication:
The PURGE BINARY LOGS TO
statement failed
for binary log files that had been moved to another location
using mysqlbinlogmove. Such files are still
listed in the binary log index file, but they are listed using
an absolute path, rather than a path relative to the directory
where the binary log files are normally stored. MySQL Server can
now locate and purge moved binary log files successfully.
(Bug #28284624)'log_name'
Replication:
If autocommit
was set to 0 for
a replication slave or Group Replication group member where
GTIDs were in use and
super_read_only=ON
was set,
server shutdown was prevented by a transaction that did not
complete. The transaction was attempting to save GTIDs to the
mysql.gtid_executed
table, but the update
failed because
super_read_only=ON
was set.
(With autocommit
set to 1, the
transaction would complete in this situation, and the
mysql.gtid_executed
table would instead be
updated at server startup.) Now, the check for the
super_read_only
setting is
skipped for this task, so the transaction is able to save the
GTIDs to the mysql.gtid_executed
table and
complete regardless of the combination of
super_read_only
and
autocommit
settings.
(Bug #28183718)
Replication:
An assertion was raised in debug builds if an
XA ROLLBACK
statement was issued for an unknown transaction identifier when
the gtid_next
value had been
set manually. The server now does not attempt to update the GTID
state if an XA
ROLLBACK
statement fails with an error.
(Bug #27928837, Bug #90640)
Replication:
The value returned by a SHOW SLAVE
STATUS
statement for the total combined size of all
existing relay log files (Relay_Log_Space
)
could become much larger than the actual disk space used by the
relay log files. The I/O thread did not lock the variable while
it updated the value, so the SQL thread could automatically
delete a relay log file and write a reduced value before the I/O
thread finished updating the value. The I/O thread then wrote
its original size calculation, ignoring the SQL thread's update
and so adding back the space for the deleted file. The
Relay_Log_Space
value is now locked during
updates to prevent concurrent updates and ensure an accurate
calculation.
(Bug #26997096, Bug #87832)
Replication: If the relay log index file was temporarily locked for viewing by a backup process for a replication slave, and MySQL Server also attempted to access the file at that time for rename or delete operations, the backup completed with warnings, but MySQL Server experienced an unexpected halt. MySQL Server now retries the file access operation a number of times in case this or a similar scenario is the explanation and the file becomes available again before long. (Bug #25839610)
Replication:
With sync_binlog=1
set, if the
binary log was rotated during a commit before the binary log end
position was updated, replication stopped on the slave because
the server attempted to use the old binary log end position with
the new binary log file. The server now compares the binary log
file name with the active binary log file when updating the
binary log end position, so that the issue does not occur.
(Bug #22252394, Bug #25524203, Bug #84752)
Replication: When adding a new member to a group, if the certification information was too big to transmit, an event was generated that caused failures in all group members. To avoid this situation, now if the certification information is too large an error is generated which makes the joining member leave the group. (Bug #93130, Bug #91870, Bug #28900691, Bug #28443958)
Group Replication: When stopping group replication, any channels with pending transactions could cause a deadlock. (Bug #92376, Bug #28636768, Bug #28365855)
The keyring_aws
plugin was missing from
Commercial packages for macOS.
The supported macOS versions for this plugin now are macOS 10.13 and 10.14. (Bug #29051838)
MySQL Enterprise Firewall did not work well if the audit_log
plugin was installed.
(Bug #28930885, Bug #93184)
The server permitted creation of databases with the same name as redo log files, which could result in unexpected server behavior. Such names are no longer permitted as database names. (Bug #28867993)
Removal of Sun RPC and XDR from glibc
into a
separate libtirpc
library caused problems
with libasan
on some platforms.
(Bug #28785835, Bug #92762, Bug #28897799, Bug #93116)
In LDAP group search filter values, special characters were not escaped. Special characters in the user DN now are escaped with their hexadecimal equivalant as follows:
* => \2a ( => \28 ) => \29 \ => \5c \0 => \00
(Bug #28743525)
A memory leak was caused by
GET_LOCK()
calls with a zero
timeout that failed due to concurrent connections holding the
same user-level lock.
(Bug #28714367)
mysqlpump did not free all allocated resources when it encountered an error, resulting in memory leaks. (Bug #28538971, Bug #92131)
For debug builds, the server could exit when attempting to roll
back CREATE USER
statements.
(Bug #28536312)
Mishandling of deprecated system variables could cause output
from queries on the Performance Schema
variables_by_thread
table to be
incorrect.
(Bug #28515475, Bug #92049)
When a subquery contained a UNION
, the count
of the number of subquery columns was calculated incorrectly.
(Bug #28499924)
On a GTID-enabled server, concurrent statements on the
INFORMATION_SCHEMA.COLUMNS
table
could deadlock.
(Bug #28293047, Bug #91548)
Comparing log file names as strings using the
memcmp()
function resulted in uninitialized
memory read errors. The comparison now uses the
strncmp()
function. Thanks to Zsolt Parragi
and Laurynas Biveinis for their contributions.
(Bug #28178776, Bug #90238)
The optimizer skipped the second column in a composite index
when executing an inner join with a LIKE
clause against the second column.
(Bug #28086754)
CREATE TABLE ... SELECT
could create date
columns with “zero” date default values when it
should have created them without a default value.
(Bug #28022129)
The transformation of IN
subquery predicates
into semijoins was not handled correctly for a very large number
of tables.
(Bug #28004674)
Server mishandling of SIGHUP
signals could
result in a server exit.
(Bug #27966483, Bug #90742)
When the character set of one string comparison operand was a
superset of the character set of the other operand, some
comparisons were disallowed that should be permitted by
converting the operand with the “smaller” character
set to the “larger” character set.
utf8mb4
and utf32
are
considered to be a superset of any other encoding.
(Bug #27897053, Bug #25642319, Bug #85224)
Improper memory handling by account management statements could result in server misbehavior. (Bug #27820277)
Executing a prepared statement to do a multiple-row insert with large number of placeholders consumed excessive memory and could execute slowly. (Bug #27703912)
The parser accepted invalid
SET
statement syntax in trigger definitions that could result in a
server exit.
(Bug #27595603)
The server failed to start if the
keyring_encrypted_file
plugin keyring file
was invalid.
(Bug #27588064)
Keyring migration failed with source and destination keyring
plugins of keyring_okv
and
keyring_encrypted_file
, respectively.
(Bug #27493970)
When executing a prepared statement with a procedure call with
the CURSOR_TYPE_READ_ONLY
flag set, the
client library hung if the procedure performed a
SELECT
that returned an empty
result set.
(Bug #27443252, Bug #89214)
The parser performed some out-of-memory checks incorrectly. (Bug #25633994)
When binlog_format
is
ROW
or MIXED
, operations
on temporary tables are not logged. Previously, the exception to
this rule was that when the connection was terminated at the end
of the session, the statement DROP TEMPORARY TABLE IF
EXISTS
was logged for any temporary tables that had
been opened in the session. For row-based replication, this
behavior caused an unnecessary write to the binary log, and
added a transaction sequence number for the GTID where these
were enabled.
Now, when a temporary table is created in a session, the binary
logging format is tracked. The DROP TEMPORARY TABLE IF
EXISTS
statement is only logged at the end of the
session if statement-based format was in effect when the
temporary table was created, so the CREATE TEMPORARY
TABLE
statement was logged. If row-based or
mixed-format binary logging was in use when the table was
created, the DROP TEMPORARY TABLE IF EXISTS
statement is not logged.
Thanks to Laurynas Biveinis for the patch. (Bug #24670909, Bug #83003, Bug #28606948)
DML statements using IGNORE
were not always
handled correctly on tables having generated columns.
(Bug #22990029)
A query employing a dynamic range and an index merge could use more memory than expected. (Bug #89953, Bug #27659490)