MySQL 5.7 Release Notes
CMake
support was added for compiling with
Developer Studio 12.5.
(Bug #82249, Bug #24303829, Bug #81274, Bug #23212938)
The bundled Protobuf sources (under the
extra
directory) were upgraded from version
2.6.0 to 2.6.1.
(Bug #81280, Bug #23213376)
The INFORMATION_SCHEMA
INNODB_LOCKS
and
INNODB_LOCK_WAITS
tables are now
deprecated, to be removed in MySQL 8.0, which provides
replacement Performance Schema tables.
The sys
schema now has a
quote_identifier()
function that,
given a string argument, produces a quoted identifier suitable
for inclusion in SQL statements.
(Bug #22011361, Bug #78823)
Output from the sys
schema
diagnostics()
procedure now
includes the Tls_version
column from the
mysql.slave_master_info
system table.
mysql-test-run.pl now has a
--manual-boot-gdb
option that is similar to
--boot-gdb
but attaches the debugger to the
server during the bootstrapping process, permitting the use of a
remote debugger.
(Bug #23090633)
The Protobuf
decoder class limited the number
of nested objects to 50 (the default value).
(Bug #23707238, Bug #82025)
The statement list_objects
incorrectly
reported a table as a collection.
(Bug #23631240)
When using SSL, only TLSv1 connections were being accepted. The fix ensures that all TLS versions supported by the server are accepted. (Bug #23524243)
The create_collection
statement created a
collection table with a unique key index on the
'_id'
column instead of on the primary key.
(Bug #23284569)
Attempting to list objects using the
list_objects
statement without explicitly
setting the database name resulted in the collection being
incorrectly classified as a table.
(Bug #23205895, Bug #81248)
Tests relating to X Plugin have been moved to
rapid/plugin/x/test
.
(Bug #23151414)
Setting protocol related variables such as
net_read_timeout
,
net_write_timeout
, and
net_retry_count
, from a session
using X Protocol returned unexpected results. The fix ensures
that protocol variables are set only from sessions using MySQL
Protocol, and errors are correctly detected for sessions using X
Protocol.
The %global compatver
value for RPM packages
for RHEL/OEL and Fedora releases was updated from 5.6.25 to
5.6.31.
(Bug #23038018)
References: See also: Bug #22980983.
Specifying an empty value for the --port
option
(for example, --port=
,
--port=""
) is now deprecated and results in a
warning. An empty value will be an error in MySQL 8.0.
(Bug #23023457, Bug #80903)
Performance:
A flaw in the allocation of memory for appending string values
caused some operations to be performed slowly, including
creation of tables having generated columns and inserts of large
values into JSON
columns.
(Bug #80556, Bug #22843444)
References: See also: Bug #22157531, Bug #22239803.
InnoDB: Full-text search auxiliary tables could be dropped by one session while being access by another. (Bug #23742339)
InnoDB: Selecting full-text index information schema tables for a deleted table caused a segmentation fault. (Bug #23479595)
InnoDB:
A tablespace operation did not properly update the
SYS_VIRTUAL
system table.
(Bug #23325659)
InnoDB: Rollback of a full-text index synchronization operation raised an assertion. The rollback operation attempted to acquire a mutex still held by the background synchronization thread. (Bug #23320569)
InnoDB: After compressing a table, an incorrect data length was passed to an internal tablespace encryption function, causing an assertion. (Bug #23279788)
References: This issue is a regression of: Bug #22956469.
InnoDB: An R-tree page lock placed during a search operation prevented an undo operation within the same transaction from merging pages. (Bug #23241575)
InnoDB: A bulk load insert of a record with a compressed size greater than half of the compressed page size resulted in infinite B-tree page splitting when compressing the uncompressed page. (Bug #23120933)
InnoDB:
A lock order violation related to InnoDB
full-text search caused errors and raised an assertion.
(Bug #23120005)
References: This issue is a regression of: Bug #22996488.
InnoDB:
In read-only mode, InnoDB
attempted to set a
corrupt bit in the SYS_INDEXES
system table.
In read-only mode, the corruption should only be marked in
memory.
(Bug #23077748)
InnoDB:
InnoDB
attempted to materialize non-key
virtual generated columns that were not required for
partitioning.
(Bug #23037025)
References: This issue is a regression of: Bug #21864838.
InnoDB: An insert operation on a table containing virtual and spatial indexes raised an assertion due to an invalid parent path encountered during page splitting. (Bug #23008863)
InnoDB:
An ALTER TABLE
operation on a
table with an indexed virtual column raised an assertion.
(Bug #22965271)
InnoDB: Adding or dropping a virtual generated column could raise an assertion due to a table handle held by an active memcached connection. (Bug #22922527)
InnoDB: A full-text query that involved a large number of records exceeded the result cache limit and caused a server exit. (Bug #22709692, Bug #80296)
InnoDB:
InnoDB
did not block the creation of a
foreign key constraint with referential actions on the base
column of a stored generated column.
(Bug #22687023, Bug #80304)
InnoDB:
The optimizer failed to mark the columns required for
MATCH
function evaluation when the secondary
index used for the full-text query was not chosen by the
optimizer.
(Bug #22679209, Bug #80298)
InnoDB:
In READ COMMITTED
isolation
level, InnoDB
unnecessarily acquired the
lock_sys
mutex at
COMMIT
for a transaction block
consisting of read-only SELECT
statements. Thanks to Zhai Weixiang for the patch.
(Bug #22617328, Bug #76728)
InnoDB:
Setting innodb_monitor_enable
to all
did not enable all counters.
(Bug #22576241, Bug #80083)
InnoDB:
InnoDB
now permits defining a foreign key
constraint with a cascading referential action on the base
column of an indexed virtual column, and defining cascading
referential actions on non-virtual foreign key columns that are
explicitly included in a virtual index.
(Bug #22469130, Bug #79772)
InnoDB:
An assertion was raised during rollback of an
ALTER TABLE
operation that
dropped and added a secondary index.
(Bug #22005726)
Partitioning: In some cases, an issue with partition pruning being attempted a second time during optimization after all partitions had already been pruned at parsing time led to an assert. (Bug #23194259)
Replication:
A lack of cleanup in binlog.binlog_index
led
to sporadic failures in the
i_binlog.binlog_index_crlf_check
test.
(Bug #23645554)
Replication:
Replication slaves could exit trying to apply an
UPDATE
row event containing
virtual generated columns received from a master that was set to
binlog_row_image=minimal
.
(Bug #23604483)
Replication:
After upgrading from MySQL 5.6, MySQL 5.7 slaves were not
handling replication channels correctly. This was due to the
upgrade procedure inverting the order of two fields of the
mysql.slave_master_info
table
(Channel_Name
and
Tls_version
). The fix avoids this inversion
and adds a check to ensure that the
Channel_name
is correctly used as the primary
key.
(Bug #23180202)
Replication:
The i_rpl.rpl_relay_log_index_inconsistency
test was not preserving the slave server state in certain
situations. The fix changes the test to use start_slave.inc
instead.
(Bug #22850741)
Replication:
When dealing with large GTID sets (bigger than 64 kilobytes when
converted to a string), the
replication_connection_status
field
was truncating the RECEIVED_TRANSACTION_SET
.
The fix updates
replication_connection_status
to
correctly display large GTID sets, and also updates various GTID
set related functions to avoid any future problems with large
GTID sets.
(Bug #22369630)
Replication:
On a GTID-based replication slave running with
--gtid-mode=ON
,
--log-bin=OFF
and using
--slave-skip-errors
, when an
error was encountered that should be ignored
Exec_Master_Log_Pos
was not being correctly
updated, causing Exec_Master_Log_Pos
to loose
synchrony with Read_master_log_pos
. If a
GTID_NEXT
was not specified, the slave would
never update its GTID state when rolling back from a single
statement transaction. The
Exec_Master_Log_Pos
would not be updated
because even though the transaction was finished, its GTID state
would show otherwise. The fix removes the restraint of updating
the GTID state when a transaction is rolled back only if
GTID_NEXT
is specified.
(Bug #22268777)
Replication:
Uncleared information related to user-defined variables could
result in a server exit for
DROP TEMPORARY
TABLE
statements.
(Bug #22157118)
Replication:
A server initialized with
--gtid-mode=ON
and
--enforce-gtid-consistency=ON
created a large and unnecessary GTID set. The fix adjusts the
initialization process to eliminate the creation of these GTID
sets.
(Bug #22102456, Bug #78972)
Replication:
An incorrectly formed
server_uuid
read in from
auto.conf
could cause an unexpected halt.
(Bug #21936933)
Replication:
After issuing a PURGE BINARY LOGS
statement, if the binary log index file was not available, for
example because it had been opened by another application such
as MEB, the server could stop unexpectedly. Although this
situation was rare, the handling has been made more robust to
avoid unexpected halts and more informative errors are provided.
(Bug #20381055)
Replication:
The constructor of Rows_event
has been
improved to not decode the supplied row event one byte at a
time. Thanks to Davi Arnaut for the contribution.
(Bug #82003, Bug #23699294)
Replication:
A new function has been added to the channel service interface
to get a channel's retrieved_gtid_set
.
(Bug #81694, Bug #23519893)
Replication: The initialize process now checks if the binary log is enabled while processing a compiled statement. In such cases it disables binary logging, which avoids filling the binary log unnecessarily (and generating GTIDs) for MySQL initialization statements. (Bug #81628, Bug #23490641)
Replication:
Slaves running MySQL version 5.7.11 and later were always using
SSL/TLS when the server supported it, regardless of the
MASTER_SSL
option. This was due to the
addition of the --ssl-mode
option, which defaults to preferring an SSL connection. The fix
ensures that slaves do not use SSL when
MASTER_SSL=0
.
(Bug #81223, Bug #23197529)
Replication:
The mysql-test-run.pl option
--skip-rpl
now correctly skips all replication
tests. Thanks to Daniel Black for the contribution.
(Bug #80894, Bug #23021140)
Replication:
When --gtid-mode=OFF
, issuing a
PURGE BINARY
LOGS TO
statement
causes the system to read the whole file. Depending on the size
of the file this could cause the server to stall for a few
seconds. This was due to the way binary log files were being
searched for the file
Previous_gtids
value. The
fix adds an optimization to stop the reading of the binary log
file if it is supposed only to read the lost GTIDs and a
Previous_gtids
event is found.
(Bug #80889, Bug #23054591)
Replication:
When using row-based replication and InnoDB
,
replication slaves reverted to using an older locking scheme
when a transaction had already acquired an
AUTOINC
lock related to a LOAD
FILE
or INSERT ... SELECT
type of
statement, reducing replication slave performance. The fix
ensures that sql_command
is set correctly for
any of the DML events such as
WRITE_ROWS_EVENT
,
UPDATE_EVENT
, and
DELETE_EVENT
.
(Bug #79324, Bug #22247668)
Replication:
A MySQL version 5.5 slave does not have a
server_uuid
and replication
identified servers by their
server_id
. Starting from MySQL
version 5.6, replication masters detected a zombie dump thread
based only on a slave's
server_uuid
value, under the
assumption that each slave has a unique UUID. Connecting a MySQL
5.5 slave to a MySQL 5.6 and later master meant that the master
was unable to detect zombie dump threads that were created to
serve slaves running versions older than MySQL 5.6. The fix
ensures that a master now first checks if a slave has a
server_uuid
set. If it is set,
zombie dump thread detection happens based on the slave's UUID.
If a slave's server_uuid
is not
set, zombie dump thread detection happens based on
server_id
.
(Bug #77195, Bug #21179199)
Replication:
With slave_skip_errors
enabled
there were still special cases when slave errors were not being
correctly ignored. For example:
When opening and locking a table failed.
When field conversions failed on a server running row-based replication.
In these cases the error was considered critical and it was not
respecting the state of
slave_skip_errors
. The fix
ensures that with
slave_skip_errors
enabled, all
errors reported during applying a transaction are correctly
handled. This means that in such a set up, upon receiving an
error with the log_warnings
option set to greater than 1, if the error can be ignored then
the warning is printed into the error log and the server
continues as it does in the case of other ignored errors.
(Bug #70640, Bug #17653275)
Replication:
When using statement-based or mixed binary logging format with
--read-only=ON
, it was not
possible to modify temporary tables.
(Bug #62008, Bug #12818255)
References: See also: Bug #14294223, Bug #16561483.
Solaris: The CMake configuration was too aggressive in making symbols invisible, resulting in link problems with GCC 5.3 on Solaris. (Bug #23344916, Bug #81593)
Solaris:
On Solaris, a misaligned memory buffer could cause a server exit
when selecting from the
global_status
Performance Schema
table.
(Bug #81065, Bug #23097305)
MySQL Server upgrades performed using RPM packages failed when upgrading from MySQL 5.6 Community to MySQL 5.7 Community or MySQL 5.6 Commercial to MySQL 5.7 Commercial. (Bug #23736787)
On CentOS, mysqld installed from a MySQL
Community distribution failed to start if a
my.cnf
file with no
datadir
value specified was used.
(Bug #23721277, Bug #82049)
The -DWITH_EDITLINE=system
CMake option failed with recent versions of
the editline
library.
(Bug #23708332, Bug #25391997, Bug #84501)
Executing prepared statements with the
audit_log
plugin installed could cause a
server exit.
(Bug #23699991)
The sys
schema
ps_trace_statement_digest()
procedure failed for statements not supported by
EXPLAIN
, for statements for which
EXPLAIN
could not find tables, and for
statements with no digest found during the monitored period.
(Bug #23621189)
On RPM-based systems, it is now easier to install multiple
client library versions, such as for the case that you want to
maintain compatibility with older applications linked against
previous libraries. To install an older client library, use the
--oldpackage
option with
rpm. For example, to install
mysql-community-libs-5.5
on an EL6 system
that has libmysqlclient.20
from MySQL 5.7,
use a command like this:
rpm --oldpackage -ivh mysql-community-libs-5.5.50-2.el6.x86_64.rpm
(Bug #23605713, Bug #81384)
A SELECT
Performance Schema
tables when an internal buffer was full could cause a server
exit.
(Bug #23550835, Bug #23298025, Bug #81464)
The code for reading character set information from Performance
Schema statement events tables (for example,
events_statements_current
) did not
prevent simultaneous writing to that information. As a result,
the SQL query text character set could be invalid, which could
result in a server exit. Now an invalid character set causes
SQL_TEXT
column truncation.
(Bug #23540008)
An error message spelling error was corrected. Thanks to Derek Jones for the patch. (Bug #23525874, Bug #81713)
In the Performance Schema, allocating a record when a buffer was full could lead to a server exit. (Bug #23515302)
Several issues for Debian/Ubuntu packages were fixed:
The mysql-systemd-start script in the
mysql-community-server
package depended
on mysqladmin for the
ping
command. Packages including this
script now are made dependent on the
mysql-community-client
package.
The systemd service still used mysqld_safe. It now uses mysqld --daemonize.
Entering a blank root
password during the
installation process caused installation to hang.
MySQL upgrades failed to create a missing data directory.
In addition, CMake-generated packaging for Debian/Ubuntu packages was refactored for improved maintainability.
(Bug #23501369, Bug #81647, Bug #22972977, Bug #21236550, Bug #21228746, Bug #22833016, Bug #23582336)
A buffer overflow in the regex
library was
fixed.
(Bug #23498283)
Upgrading from native MySQL 5.6 Debian/Ubuntu packages to Oracle-supplied MySQL 5.7 packages caused server restart failures. (Bug #23498230)
Audit log filtering against the user was performing comparisons
against USER()
, not
CURRENT_USER()
.
(Bug #23344762, Bug #81591)
After upgrading only the server using RPM packages, the server
could fail to start, complaining about a bad
errmsg.sys
file.
(Bug #23338603)
References: This issue is a regression of: Bug #18518216.
Several issues were addressed in the sys
schema stored procedures that show enabled or disabled
Performance Schema setup:
Enabled and disabled accounts were shown as
host@user
, not
user@host
.
Disabled users in
ps_setup_show_disabled
were
called enabled_users
.
ps_setup_show_enabled()
showed
disabled objects.
setup_actors
content was not
filtered (all rows were returned whether the actor was
enabled or disabled).
Output order is more deterministic.
(Bug #23335880, Bug #81564, Bug #22066096, Bug #78874)
Upgrading from native Ubuntu 5.7.12 packages to MySQL 5.7.13 packages failed with conflict messages. (Bug #23327563)
For debug builds, the server exited abnormally if a shutdown
command was issued while the audit_log
plugin
was loaded and an active connection existed.
(Bug #23310864)
The server could fail to interpret expired passwords as expired. (Bug #23291841)
Certain arguments to NAME_CONST()
could cause a server exit.
(Bug #23279858)
For unit-testing with the MySQL test suite, the make unit-test command is no longer available. The ctest program should be used instead. See the MySQL Server Doxygen documentation, available at https://dev.mysql.com/doc/index-other.html. (Bug #23273434, Bug #81389)
Audit log plugins (including query rewrite plugins, which use the audit API) were being acquired and released per statement, negatively affecting scalability. To improve performance, these plugins now are acquired once and released only when the connection ends. (Bug #23236404, Bug #81298)
The -fexpensive-optimizations
option to GCC
caused ARM64 and PowerPC builds to compute floating-point
operations slightly differently from other platforms.
CMake now checks for this problem and
disables the option as necessary.
(Bug #23046775)
The
test_service_sql_api.test_session_general_log
test case now cleans up the general_log
table
by truncating it at the end of the test. Thanks to Daniel Black
for the patch.
(Bug #23021111, Bug #80895)
Lines written to the error log had no space separating the timestamp and thread ID columns if the thread ID took five or more characters. (Bug #23005009, Bug #80854)
For the
innodb_buffer_stats_by_schema
and
innodb_buffer_stats_by_table
sys
schema views, the
pages_hashed
and pages_old
columns were incorrect. Thanks to Tsubasa Tanaka for the patch.
(Bug #22988461, Bug #80833)
An incorrect result could be returned for a query using a merged
derived table or a view when compared to a similar query using a
base table directly, if the query included a
WHERE
condition in a scalar subquery inside a
HAVING
condition of the main query block.
(Bug #22967439)
ST_GeomFromGeoJSON()
treated
JSON
NULL
as
invalid input. Now it treats JSON
NULL
as SQL NULL
and thus
returns SQL NULL
for
JSON
NULL
input.
(Bug #22930020, Bug #80712)
For the
host_summary_by_statement_latency
and
x$host_summary_by_statement_latency
sys
schema views, the
max_latency
column was incorrect.
(Bug #22848110, Bug #80569)
ST_Distance()
could raise an
assertion for NULL
return values.
(Bug #22760390)
In the absence of SQL_CALC_FOUND_ROWS,
FOUND_ROWS()
for a
UNION
statement always returned
the actual number of rows found even when
LIMIT
was present.
(Bug #22602381, Bug #80148)
A statement containing a format specifier resulted in a server exit when the query rewrite plugin tried to log the statement. (Bug #22601485)
With the query cache enabled, executing a prepared statement
with CURSOR_TYPE_READ_ONLY
and then again
with CURSOR_TYPE_NO_CURSOR
caused the server
to return an error.
(Bug #22559575, Bug #80026)
mysql_real_connect()
was not
thread-safe when invoked with the
MYSQL_READ_DEFAULT_FILE
or
MYSQL_READ_DEFAULT_GROUP
option enabled.
(Bug #22322504, Bug #79510)
With GTIDs enabled, XA
COMMIT
on a disconnected XA transaction within a
multiple-statement transaction raised an assertion.
(Bug #22173903)
The sys
schema
create_synonym_db()
function failed if the
synonym name was a reserved word or contained backtick
(`
) characters.
(Bug #22011361, Bug #78823)
The sys
schema
host_summary
view could fail with
a division-by-zero error.
(Bug #21970078)
The GCC workaround for compiling on ARM64 added by Bug #21552524 is needed only for GCC before 5.2.1. (Bug #21845828)
References: See also: Bug #21552524.
The sys
schema
format_path()
function replaced
substrings of the path name argument without verifying that the
substrings were delimited by path name separators. Replacement
now works correctly, including on Windows. A consequence is that
backslashes in Windows path names are no longer converted to
forward slashes in the result.
(Bug #21512106)
MySQL now supports compiling using the GCC
__atomic
builtins introduced in GCC 4.7 that
permit a more efficient implementation of the MySQL atomics API.
These __atomic
builtins are only used for
platforms where the old GCC __sync
builtins
are not available, such as PowerPC where the server otherwise
would not build.
(Bug #21221500)
If a stored function updated a view for which the view table had a trigger defined that updated another table, it could fail and report an error that an existing table did not exist. (Bug #21142859, Bug #76808)
mysql_upgrade failed to upgrade the
sys
schema if a sys
database directory existed but was empty.
(Bug #81352, Bug #23249846, Bug #22875519)
Protobuf is currently used only by the X Plugin, but MySQL
builds built the protobuf
libraries and
executables even if X Plugin building was disabled with
-DWITH_RAPID=0
.
(Bug #81066, Bug #23097750)
A compilation error was corrected for a
make_link()
call when compiling in C++11
mode. Thanks to Daniel Black for the contribution.
(Bug #80996, Bug #23080289)
Two mysql-test-run.pl tests
(ctype_gb18030_binlog
and
ctype_ldml
) failed to produce repeatable
output due to improper cleanup. Thanks to Daniel Black for the
patch.
(Bug #80896, Bug #23021095)
MySQL failed to build with GCC 6 using the default mode for C++
of -std=gnu++14
. The CMake
configuration has been adjusted to explicitly set the mode to
-std=gnu++03
for GCC 6.
(Bug #80371, Bug #22732697)
Ubuntu packages create the root
user account
using the auth_socket
authentication plugin
to achieve secure-by-default installation if installation was
done with a blank root
password. However,
auth_socket
was being used even if the
password was not blank.
(Bug #80137, Bug #22594846, Bug #23321113, Bug #81518)
Compiling the InnoDB
memcached plugin did not work on some
platforms where MySQL was configured using
-DWITH_LIBEVENT=system
, for
libevent
version 2.0 or higher.
(Bug #80073, Bug #22573379, Bug #23567441)
The client-side plugin deinitialization function signature was
changed from int (*deinit)()
to int
(*deinit)(void)
to avoid warnings when compiling with
-Wstrict-prototypes
.
(Bug #78177, Bug #21680094, Bug #81419, Bug #23282498)