MySQL 5.7 Release Notes
During data directory initialization or upgrade, MySQL now
creates a 'mysql.session'@'localhost'
reserved account. This account is used internally by plugins to
access the server. It is locked so that it cannot be used for
client connections.
(Bug #25642343)
Solaris:
On Solaris, MySQL binary distributions are now linked against
libatomic.so
, so they are no longer
dependent on libstatomic.so
.
(Bug #25909965)
InnoDB:
The innodb_undo_logs
configuration option is deprecated and will be removed in a
future MySQL version. The
innodb_rollback_segments
configuration option performs the same function and should be
used instead.
The Innodb_available_undo_logs
status variable is deprecated and will be removed in a future
MySQL version.
The libmysqld
embedded server library is
deprecated and will be removed in MySQL 8.0. These are also
deprecated and will be removed:
The mysql_config
--libmysqld-libs
,
--embedded-libs
,
and
--embedded
options
The CMake
WITH_EMBEDDED_SERVER
,
WITH_EMBEDDED_SHARED_LIBRARY
,
and
INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR
options
The (undocumented) mysql
--server-arg
option
The mysqltest
--embedded-server
,
--server-arg
, and
--server-file
options
The mysqltest_embedded and mysql_client_test_embedded test programs
MySQL Enterprise Edition now includes a
keyring_aws
plugin that communicates with the
Amazon Web Services Key Management Service as a back end for key
generation and uses a local file for key storage. For more
information, see The MySQL Keyring.
mysqladmin was added to Docker/Minimal packages because it is needed by InnoDB Cluster. (Bug #25998285)
For Windows, MSI installer packages now include a check for the required Visual Studio redistributable package, and produce a message asking the user to install it if it is missing. (Bug #25658832)
Debian/Ubuntu packages now support multiple MySQL instances with systemd. See Managing MySQL Server with systemd. (Bug #24559588, Bug #82785)
MySQL Enterprise Edition now supports LDAP pluggable authentication of MySQL users. This enables MySQL Server to use LDAP (Lightweight Directory Access Protocol) to authenticate MySQL users by accessing directory services such as X.500. For more information, see LDAP Pluggable Authentication.
The linked OpenSSL library for the MySQL Commercial Server has been updated to version 1.0.2l. 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 #26160962)
These functions previously accepted either WKB strings or geometry arguments. Use of geometry arguments is now deprecated and generates a warning. Geometry arguments will not be accepted in MySQL 8.0.
For information about migrating queries that refer to those functions away from using geometry arguments to using WKB arguments, see Functions That Create Geometry Values from WKB Values.
mysql-test-run.pl now has a
--test-progress
option to cause display of the
percentage of tests remaining.
(Bug #25601131, Bug #20755059, Bug #76455)
These changes were made to the --xml-report
option for mysql-test-run.pl:
A <failure>
tag identifies any test
failing on a retry attempt.
Separate statistics and fields are included for skipped and disabled tests.
The XML report is created in the build directory if no absolute path is given for out-of-source builds.
For combination runs, a field named
variation
is included in the
<testcase>
tag.
Results for all tests belonging to a suite are aggregated
within a single <testsuite>
tag.
Information regarding failures is reported with a brief
reason in an attribute named message
,
along with other details within the tag.
(Bug #25349924)
mysql-test-run.pl now supports a
--report-unstable-tests
option that has these
effects:
Reports any test that has passed using at least one retry attempt in a separate category called “Unstable tests” in the summary.
If all failures are due to unstable tests, mysql-test-run.pl produces a warning but exits successfully.
Adds a new XML tag to report unstable tests, if the
--xml-report
option is also specified.
(Bug #24473420, Bug #25984429)
mysqltest now supports a
replace_numeric_round
command that takes an
argument value from 0 to 16 indicating the number of decimals to
round numeric values to. This can be used to help prevent result
content mismatch errors for tests in which slightly different
results are obtained across platforms due to precision
differences. Thanks to Daniel Black for the patch.
(Bug #23280117, Bug #81399)
X Plugin now handles expired SSL certificates correctly. (Bug #25835833)
The output of clauses such as GROUP BY
and
HAVING
has been improved by moving the
grouping_criteria
expression to the derived
query.
(Bug #25549637, Bug #24497007)
Linux: The generic Linux build for MySQL
8.0 now supports Non-Uniform Memory Access (NUMA) on its host
system. Systems that use the build need to have
libnuma
installed on them. See
Installing MySQL on Unix/Linux Using Generic Binaries for more details.
(Bug #26005558)
Linux: The generic Linux build for MySQL
8.0 is now built on Oracle Linux 6 using
glibc
2.12. Systems that use the build need
to have glibc
2.12 or later installed on
them.
(Bug #26005558)
Replication:
The
group_replication_transaction_size_limit
variable was added to enable you to protect a group against
large transactions causing a failure.
(Bug #84785, Bug #25510757)
Replication:
Group Replication now supports SAVEPOINT
SQL
transactions.
RPM .spec
files now include support for
running unit tests.
(Bug #25814143, Bug #85743)
The mysql client now supports a
--binary-as-hex
option that causes
display of binary data using hexadecimal notation
(0x
). Thanks
to Daniël van Eeden for the patch.
(Bug #25340722, Bug #84391)value
The audit_log
filter parser now produces
errors for unexpected JSON elements in filter definitions.
(Bug #24360663)
Incompatible Change:
Plugins such as Group Replication and X Plugin now use the
mysql.session
account added in this version.
If you are upgrading from a previous version which did not
include the mysql.session
account you must
run mysql_upgrade to ensure the account is
created. If mysql_upgrade is not run, plugins
fail to start with the error message There was an
error when trying to access the server with user:
mysql.session@localhost. Make sure the user is present in the
server and that mysql_upgrade was run after a server
update. Previously used users, such as
mysqlxsys
, are no longer created.
(Bug #26042764)
References: See also: Bug #24311527, Bug #25642343, Bug #25750822, Bug #25103980, Bug #83841.
InnoDB:
An ALTER TABLE
operation that
rebuilt an encrypted table did not set the encryption attribute
properly.
(Bug #26243264)
InnoDB: The length of a virtual column field in a virtual index record was less than the expected template column length. (Bug #25793677)
InnoDB: The server allocated memory unnecessarily for an operation that rebuilt the table. (Bug #25573565, Bug #85043)
InnoDB:
With foreign_key_checks
disabled, InnoDB
incorrectly printed messages
to the error log when operations were performed on a table that
referenced a nonexistent foreign key.
(Bug #25365223)
InnoDB:
During a TRUNCATE TABLE
operation
on a file-per-table tablespace, a dictionary operation lock was
released before eviction of dirty pages from the buffer pool,
causing a latch order violation.
(Bug #25357789)
InnoDB:
When using an index merge optimizer switch, a SELECT
COUNT(*)
operation sometimes returned 0. Partitioning
code incorrectly performed a memcpy
instead
of a column copy of columns read by the index, causing the wrong
records to be copied.
(Bug #25332330, Bug #81031)
InnoDB:
After a RENAME TABLE
operation
that moved a table to a different schema,
InnoDB
returned an error on restart
indicating that it could not locate the tablespace data file.
InnoDB
failed to update
INNODB_SYS_DATAFILES
data dictionary table
during the RENAME TABLE
operation.
(Bug #25189192, Bug #84038)
InnoDB:
Loading InnoDB
tables required more memory in
MySQL 5.7 due primarily to the addition of in-memory structure
members introduced with temporary table optimizations. The
in-memory structure members, only used for temporary tables, are
now only allocated as needed.
(Bug #25080442)
InnoDB:
During an ALTER TABLE
operation
that rebuilt a table containing a virtual column,
InnoDB
failed to apply a concurrent insert
log record.
(Bug #24961167)
InnoDB:
InnoDB
failed to apply the concurrent delete
log for an in-place ALTER TABLE
operation due to a virtual column validation issue.
(Bug #24960450)
InnoDB:
Changes to the InnoDB
recovery process in
MySQL 5.7 could require up to three scans of the redo log during
recovery. To reduce the number of scans, the first and second
scans were merged. With this change, there is only one scan
unless the redo log record hash table that is populated by the
scan reaches its memory threshold. In this case, a second scan
is initiated that performs a simultaneous scan and apply.
(Bug #22963951, Bug #80788)
Partitioning:
When a query performed a reverse-ordered range scan (to satisfy
ORDER BY ... DESC
) using index condition
pushdown on a partitioned InnoDB
table, it could take an unreasonably long time to finish. This
was due to the fact that the condition pushdown check failed to
get the bounds of the range, so that the scan continued to read
index tuples until it reached the first value in the index.
(Bug #83470, Bug #24929748)
References: See also: Bug #84107.
Replication: In the case of delayed initialization of the Group Replication plugin, deployed in single-primary mode, secondaries were able to get writes through an asynchronous replication channel, which is not allowed in normal initialization of the Group Replication plugin. (Bug #26314756)
Replication:
With GTIDs generated for incident log events, MySQL error code
1590 (ER_SLAVE_INCIDENT) could not be skipped using the
--slave-skip-errors=1590
startup option on a
replication slave.
(Bug #26266758)
Replication:
A USE
statement that followed a
SET GTID_NEXT
statement sometimes had no
effect.
(Bug #26128931)
Replication: Groups can now contain members running different server versions to enable you to do online upgrades of a replication group. The rules for combining members in a group with different versions are:
If you have a group with 8.0 members, you cannot add a 5.7 member
If you have a group with 5.7 members you can add a 8.0 member, but it remains in read-only mode. Writing to this member is dangerous while the group contains multiple server versions and should be avoided.
In a single-primary group, if the current primary leaves the group and a new primary must be elected, the primary is first chosen from the lower version members. If no lower version member is found, the primary is chosen from newer version members. (Bug #25876807)
Replication:
When binlog_checksum=NONE
was
set on a MySQL server after startup, and then Group Replication
was started, if an error occurred, the server remained in
RECOVERING
state and could not be shut down.
(Bug #25793366, Bug #85667)
Replication: In a Group Replication setup where circular asynchronous replication was implemented between members of different replication groups, view change log events were repeatedly replicated between the groups with new generated GTIDs each time. The fix ensures that view change log events are ignored outside the named replication group where they occur, and never generate new GTIDs. (Bug #25674926)
References: See also: Bug #26049695, Bug #25928854, Bug #25721175.
Replication: When first starting the MySQL server following an installation from RPM, passwword validation plugin is activated by default (true only for RPM installations). If binary logging was already enabled at this time, the activation was logged, even though plugin activations should not be recorded in the binary log. (Bug #25672750)
Replication: In a setup where single-primary Group Replication was combined with asynchronous replication, for example with S1 and S2 forming a group and with S2 and S3 functioning as master and slave, secondaries such as S2 were accepting transactions and these could then enter the group. The fix prevents secondaries creating an asynchronous replication channel when belonging to a single-primary group, and Group Replication cannot be started when asynchronous replication is running. (Bug #25574200, Bug #85047)
References: See also: Bug #86325, Bug #26078602.
Replication:
In the event that a member failed to join a group the member was
not stopping and continued to accept transactions. To avoid this
set your members to have super_read_only=1
in
the my.cfg
file. Group Replication now
checks for this setting upon successful start up and sets
super_read_only=0
. This ensures that members
which do not successfully join a group cannot accept
transactions.
(Bug #25474736, Bug #84728)
Replication: If the binary log on a master server was rotated and a full disk condition occurred on the partition where the binary log file was being stored, the server could stop unexpectedly. The fix adds a check for the existence of the binary log when the dump thread switches to next binary log file. If the binary log is disabled, all binary logs up to the current active log are transmitted to slave and an error is returned to the receiver thread. (Bug #25076007)
Replication:
Interleaved transactions could sometimes deadlock the slave
applier when the transaction isolation level was set to
REPEATABLE-READ
.
(Bug #25040331)
Replication:
If a relay log index file named relay log files that did not
exist, RESET SLAVE ALL
sometimes did not
fully clean up properly.
(Bug #24901077)
Replication:
The slave_skip_errors
system
variable did not permit error numbers larger than 3000. Thanks
to Tsubasa Tanaka for the patch.
(Bug #24748639, Bug #83184)
Replication:
mysqlbinlog, if invoked with the
--raw
option, does not flush
the output file until the process terminates. But if also
invoked with the
--stop-never
option, the
process never terminates, thus nothing is ever written to the
output file. Now the output is flushed after each event.
(Bug #24609402)
Replication:
A memory leak in mysqlbinlog was fixed. The
leak happened when processing fake rotate events, or when using
--raw
and the destination log file could not
be created. The leak only occurred when processing events from a
remote server. Thanks to Laurynas Biveinis for his contribution
to fixing this bug.
(Bug #24323288, Bug #82283)
Replication:
A slave server could lose events not yet applied when
MASTER_AUTO_POSITION=0
, both replication
threads were stopped, and the applier delay was changed using
CHANGE MASTER
TO MASTER_DELAY=
.
(Bug #23203678, Bug #81232)N
References: See also: Bug #25340185, Bug #84375.
Replication: Transmission of large GCS messages could take so long the sender appeared to have died. (Bug #22671846)
Replication:
Multithreaded slaves could not be configured with small queue
sizes using
slave_pending_jobs_size_max
if
they ever needed to process transactions larger than that size.
Any packet larger than
slave_pending_jobs_size_max
was
rejected with the error
ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX, even if the packet
was smaller than the limit set by
slave_max_allowed_packet
.
With this fix,
slave_pending_jobs_size_max
becomes a soft limit rather than a hard limit. If the size of a
packet exceeds
slave_pending_jobs_size_max
but
is less than
slave_max_allowed_packet
, the
transaction is held until all the slave workers have empty
queues, and then processed. All subsequent transactions are held
until the large transaction has been completed. The queue size
for slave workers can therefore be limited while still allowing
occasional larger transactions.
(Bug #21280753, Bug #77406)
Replication:
An incident event that broke replication was not written to the
binary log with a GTID, so that it was not possible to skip the
event using SET
gtid_next=
. Instead,
it was necessary to set the relay log file and relay log
positions directly; this meant that, when autopositioning was
enabled, it was necessary first to disable it, then to set the
relay log file and position, and finally to re-enable
autopositioning.
value
Now in such cases MySQL writes the incident event into the
statement cache, so that a GTID is generated and written for it
prior to flushing, and that the slave applier works with the
change. Then users can skip the event using the SQL statement
SET
gtid_next=
, followed
by value
BEGIN
and
COMMIT
.
(Bug #19594845)
Replication:
In certain cases, the master could write to the binary log a
last_committed
value which was smaller than
it should have been. This could cause the slave to execute in
parallel transactions which should not have been, leading to
inconsistencies or other errors.
(Bug #84471, Bug #25379659)
Replication:
When using
group_replication_ip_whitelist=AUTOMATIC
,
IPs in the private network are permitted automatically, but some
class C IP addresses were not being permitted correctly.
(Bug #84329, Bug #25503458)
Replication: When an existing GTID_NEXT transaction was assigned a conflicting GTID by the server, Group Replication generated an assert upon detecting two transactions with same GTID. This was because Group Replication generates the GTID after conflict detection, which is later than with master/slave replication. The fix relaxes some conditions to only be called when commit is done and a message has been added to alert you when a GTID has already been used. (Bug #84153, Bug #25232042)
Replication:
The replication applier thread returns Error 3002
ER_INCONSISTENT_ERROR
when there
is a difference between an expected error number and the actual
error number. It is now possible to ignore this error by using
3002 with slave_skip_errors
.
(Bug #83186, Bug #24753281)
Replication: MySQL lost its GTID position following a restart when a dump from mysqldump had been used to load data.
To keep this problem from occurring, the
mysql.gtid_executed
table is now excluded
automatically from dumps made by mysqldump
.
(Bug #82848, Bug #24590891)
References: See also: Bug #87455, Bug #26643180.
Replication:
Corruption of relay logs for one channel in multi-source
replication caused good channels not to be initalized during a
server restart. In addition, when run with
--skip-slave-start=false
, the
server also failed to start slave threads for those channels
which were in good condition, despite the fact that it should
have started the slave threads for all good channels.
Now, regardless of any errors on other channels, the server
attempts to create and initialize channels that are in good
condition, and starts slave threads for the good channels if
--skip-slave-start
is disabled. As part of this
fix, START SLAVE
and
STOP SLAVE
, which are intended to
operate on all channels, are also modified such that they
continue executing on all good channels even if they find bad
channels among them.
(Bug #82209, Bug #24285104)
Replication: The SQL thread was unable to GTID skip a partial transaction. (Bug #81119, Bug #25800025)
Debian client packages were missing information about conflicts with akonadi-backend-mysql packages. (Bug #26002288)
mysqldump could write database names in
USE
statements incorrectly.
(Bug #25998635)
If the mysql_stmt_close()
C API
function was called, it freed memory that later could be
accessed if mysql_stmt_error()
,
mysql_stmt_errno()
, or
mysql_stmt_sqlstate()
was
called. To obtain error information after a call to
mysql_stmt_close()
, call
mysql_error()
,
mysql_errno()
, or
mysql_sqlstate()
instead.
(Bug #25988681)
Queries could be cached incorrectly, leading to incorrect query
results, under these circumstances: InnoDB
table; rows are being inserted but have not yet been committed;
a query uses the table as a base table in a derived table; the
optimizer chooses to materialize the derived table.
(Bug #25943038, Bug #86047)
Man pages for a few utilities were missing from Debian/Ubuntu packages. (Bug #25811814)
The field-t
unit test failed to run with
AddressSanitizer enabled. Thanks to Laurynas Biveinis for the
patch.
(Bug #25803823, Bug #85678)
Debian client packages were missing information about conflicts with native packages. (Bug #25799475)
The Perl path in #!
lines at the beginning of
Perl scripts has been adjusted to
/usr/local/bin/perl
for FreeBSD 11.
(Bug #25719975)
For debug builds, the assertion added for Bug#59686 was too strict and could be raised when it should not have been. (Bug #25685958)
References: See also: Bug #59686.
A server exit occurred for downgrades to MySQL 5.7 from a MySQL 8.0 installation for which the optimizer cost tables contained generated columns. (Bug #25650399)
The server exited abnormally attempting to access invalid memory. (Bug #25501659)
With mysqld
secured by TCP wrappers and the
hosts.allow
and
hosts.deny
files configured to restrict
access from an IP address, connection attempts from that address
resulted in too many messages to the error log.
(Bug #25476479, Bug #84708)
mysqlpump
no longer includes the
slave_master_info
and
slave_relay_log_info
tables in dumps of the
mysql
system database. Restoring a dump file
containing these tables caused problems by changing the
replication state improperly.
(Bug #25469190)
Changes made by calling
mysql_options()
to set
MYSQL_OPT_SSL_MODE
could be affected by later
mysql_options()
calls. Now
setting MYSQL_OPT_SSL_MODE
is unaffected by
later mysql_options()
calls.
(Bug #25452210)
A race condition could occur for CREATE
TABLE
statements with DATA
DIRECTORY
or INDEX DIRECTORY
clauses.
(Bug #25451091)
MySQL compilation in different directories produced different
builds to leakage of absolute paths into debug information and
__FILE__
.
(Bug #25436469, Bug #84608, Bug #25859274, Bug #85855)
On SELinux in Enforcing mode, the keyring_okv
plugin failed to connect to the Oracle Key Vault server.
(Bug #25420001)
ALTER TABLE ... MODIFY
on a DATETIME
NOT NULL
column using an AFTER
clause resulted in an
ER_INVALID_USE_OF_NULL
error.
(Bug #25385334)
The range optimizer could create an incorrect query tree, resulting in a server exit. (Bug #25369742, Bug #25586531)
mysqld_failed to start the server if the
--datadir
option was specified with a relative
path name.
(Bug #25364806)
XA PREPARE
,
XA ROLLBACK
, and
XA COMMIT
for a
transaction from a disconnected session did not take a global
commit lock and modified the binary log and
InnoDB
redo log even when
FLUSH TABLES WITH READ LOCK
was
in effect. This could lead to inconsistent backups when backup
tools assumed that the server was in a read-only state.
(Bug #25364178, Bug #84442)
GROUP_CONCAT(DISTINCT)
returned
nonunique values if the data size was greater than the value of
the tmp_table_size
system
variable.
(Bug #25331425, Bug #84320)
The fix for Bug #78777 had different effects depending on whether the Performance Schema is enabled. (Bug #25309017, Bug #84305)
References: This issue is a regression of: Bug #78777.
An aggregate function in some nested queries could cause a server exit. (Bug #25303711)
Virtual generated column expressions that used the
CONV()
or
HEX()
functions could cause
problems if the connection character set was changed. In this
context, the table character set is now used for these functions
regardless of connection character set.
(Bug #25287633)
The Rewriter
plugin did not perform locking
properly if the read_only
system variable was enabled.
(Bug #25264253)
With read_only
enabled,
creation of non-TEMPORARY
tables by
non-SUPER
users was permitted
under certain conditions.
(Bug #25250768)
For a table having a TIMESTAMP
or
DATETIME
column having a default
of CURRENT_TIMESTAMP
, the column
could be initialized to 0000-00-00 00:00:00'
if the table had a BEFORE INSERT
trigger.
(Bug #25209512, Bug #84077)
Certain stored functions, if used in a query
WHERE
clause, could be handled using Index
Condition Pushdown (which should not happen), resulting in a
server exit.
(Bug #25196653, Bug #25174454)
Certain queries against InnoDB
tables that
used a primary key and a subquery could return incorrect results
if the
index_merge_intersection
flag
of the optimizer_switch
system
variable was enabled.
(Bug #24829050, Bug #79675)
Initialization of the keyring_okv
plugin
failed if the STANDBY_SERVER
setting was
missing from the okvclient.ora
configuration file, effectively making this a mandatory setting.
STANDBY_SERVER
is now optional.
(Bug #24816271)
On x86 machines, the uint3korr()
macro read 4
bytes of data instead of the intended 3 bytes.
(Bug #24807826, Bug #83264)
An assertion was raised during a fetch operation by the memcached plugin. (Bug #24605783)
Queries that contained UNION
in a subquery
and GROUP BY
could return incorrect results.
(Bug #24595639)
The server could dereference a null pointer when a deterministic
function returning LONGTEXT
was used in a
subquery.
(Bug #24595581)
Incorrect behavior could occur for
INSERT
statements executed in
stored-program or prepared-statement context, if the
VALUES
part of an ON DUPLICATE KEY
UPDATE
clause referred to a
BLOB
value in the
INSERT
column list.
(Bug #24538207, Bug #25361251, Bug #25530880, Bug #25684790)
systemd support scripts in Debian packages contained hardcoded
references to the data directory, making it difficult to change
the data directory using
--datadir
.
(Bug #24398446, Bug #82417)
MySQL failed to compile under macOS 10.10.5 using Clang. (Bug #24352163, Bug #82340)
If a REPLACE
statement tried to
update a row in a table containing a virtual generated column of
type BLOB
, subsequent DML statements could
behave incorrectly.
(Bug #23573575)
Some PROXY
grants were not
replicated to slaves, causing incorrect replication.
(Bug #23289541, Bug #81424, Bug #23623115)
The help output from mysqlxtest has been improved. (Bug #23107137, Bug #81086)
Compiler flags were adjusted to eliminate numerous warnings that
occurred when compiling the keyring_file
plugin using Clang.
(Bug #22834591, Bug #80524)
If enabling the Event Scheduler caused an event defined as
ON COMPLETION NOT PRESERVE
to be dropped
because its execution time had passed, the drop event was not
written to the binary log, causing slaves not to replicate it
and replication failure if an event of the same name was created
later.
(Bug #22150112)
LOAD XML
performance became
noticeably slower when the XML file being read contained a great
many spaces, such as those introduced by indenting or
pretty-printing. Now all leading whitespace is trimmed from each
such value before reading it into memory.
(Bug #16212207)