MySQL 5.7 Release Notes
This is a milestone release, for use at your own risk. Upgrades between milestone releases (or from a milestone release to a GA release) are not supported. Significant development changes take place in milestone releases and you may encounter compatibility issues, such as data format changes that require attention in addition to the usual procedure of running mysql_upgrade. For example, you may find it necessary to dump your data with mysqldump before the upgrade and reload it afterward. (Making a backup before the upgrade is a prudent precaution in any case.)
This release is dedicated to the memory of two young engineers of the MySQL Engineering family, Astha and Akhila, whom we lost while they were in their early twenties. This is a small remembrance and a way to recognize your contribution to the 5.7 release. You will be missed.
MySQL now includes a gb18030
character set
that supports the China National Standard GB18030 character set.
For more information about MySQL character set support, see
Character Sets, Collations, Unicode.
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.
Incompatible Change
The change described here to make
ERROR_FOR_DIVISION_BY_ZERO
,
NO_ZERO_DATE
, and
NO_ZERO_IN_DATE
do nothing
when named explicitly and include them in strict mode was
reverted in MySQL 5.7.8 (see Section 28, “Changes in MySQL 5.7.8 (2015-08-03, Release Candidate)”).
The intent is still that they be used in conjunction with
strict mode, so a warning occurs as of 5.7.8 if they are
enabled without also enabling strict mode or vice versa.
The
ERROR_FOR_DIVISION_BY_ZERO
,
NO_ZERO_DATE
, and
NO_ZERO_IN_DATE
SQL modes now
are deprecated and do nothing when named explicitly. Instead,
their effects are included in the effects of strict SQL mode
(STRICT_ALL_TABLES
or
STRICT_TRANS_TABLES
). In other
words, strict mode now means the same thing as the previous
meaning of strict mode plus the
ERROR_FOR_DIVISION_BY_ZERO
,
NO_ZERO_DATE
, and
NO_ZERO_IN_DATE
modes. This
change reduces the number of SQL modes with an effect dependent
on strict mode and makes them part of strict mode itself.
To prepare for the SQL mode changes in this version of MySQL, it is advisable before upgrading to read SQL Mode Changes in MySQL 5.7. That discussion provides guidelines to assess whether your applications will be affected by these changes.
The
ERROR_FOR_DIVISION_BY_ZERO
,
NO_ZERO_DATE
, and
NO_ZERO_IN_DATE
SQL mode names
are still recognized (so that statements that refer to them do
not produce an error), but they will be removed in a future
MySQL version. To make advance preparation for versions of MySQL
in which these mode names do not exist, applications should be
modified not to refer to them.
InnoDB:
The UNIV_LOG_DEBUG
debug flag, which is no
longer fully functional, has been removed.
(Bug #18080537)
InnoDB:
The innodb_use_sys_malloc
and
innodb_additional_mem_pool_size
system variables, which were deprecated in MySQL 5.6.3, are
removed in MySQL 5.7.4.
InnoDB:
The InnoDB
Tablespace Monitor and
InnoDB
Table Monitor were removed in MySQL
5.7.4. Table and tablespace metadata can be obtained from
INFORMATION_SCHEMA
tables.
The stage/sql/Waiting to get readlock
Performance Schema instrument is no longer used and has been
removed.
(Bug #71298, Bug #18035404)
The deprecated msql2mysql, mysql_convert_table_format, mysql_find_rows, mysql_fix_extensions, mysql_setpermission, and mysqlaccess utilities were removed. (Bug #27482, Bug #69012, Bug #69014, Bug #69015, Bug #69016, Bug #69017, Bug #11746603, Bug #16699248, Bug #16699279, Bug #16699284, Bug #16699317, Bug #18179576)
mysqlbug, an obsolete script for generating
bug reports, has been removed from the source code. The header
of this script contained information about how MySQL was
configured and compiled, which was useful to include in bug
reports. Similar information can be found in the
docs/INFO_BIN
file of your MySQL
installation.
The deprecated IGNORE
clause for
ALTER TABLE
has been removed and
its use produces an error.
The metadata locking subsystem now uses a lock-free algorithm for acquiring and releasing locks typical for DML statements. This gives better performance/scalability on multi-core machines in workloads involving lots of small read-only transactions.
The metadata locking subsystem also now uses lock-free hashing
rather than a hash protected by a mutex. An implication of this
change is that the
metadata_locks_cache_size
and
metadata_locks_hash_instances
system variables no longer have any effect, so they are
deprecated and will be removed in a future MySQL release.
Performance Schema performance was improved in the following ways:
When a thread connects, reset of all per-thread statistics is now delayed until a statistic is actually collected. This lazy initialization benefits workloads with very short-lived sessions, for which instrumentation is disabled.
When a thread disconnects, the per-thread statistics are aggregated to a parent only for statistics that actually collected data. This optimization benefits workloads with very short-lived sessions, for which instrumentation is disabled.
For statement instrumentation, reset of an individual
EVENT_NAME
statistic is also now delayed
until a statistic is actually collected. This benefits all
workloads that contain only a few types of statements
(SELECT
, INSERT
,
UPDATE
, DELETE
, and so
forth) from the very large set statements supported in
MySQL. Only statements for event names actually executed are
aggregated on disconnect.
The memory footprint of internal memory buffers is reduced, by removing some attributes reserved for future use, that were in fact not used. In particular, statistics for mutexes, rwlocks and conditions now need less memory.
The Performance Schema now instruments prepared statements (for both the binary and text protocols):
Information about prepared statements is available in the
prepared_statements_instances
table. This table enables inspection of prepared statements
used in the server and provides aggregated statistics about
them.
The
performance_schema_max_prepared_statements_instances
system variable controls the size of the table.
The
Performance_schema_prepared_statements_lost
status variable indicates how many prepared statements could
not be instrumented.
For more information, see The prepared_statements_instances Table.
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 #18324285.
Incompatible Change: MySQL now enables database administrators to establish a policy for automatic password expiration: Any user who connects to the server using an account for which the password is past its permitted lifetime must change the password. The implementation has these components:
The
default_password_lifetime
system variable defines global password expiration policy. A
value of N
greater than zero
means that passwords have a lifetime of
N
days. A value of 0 disables
automatic password expiration. The default is 360; passwords
must be changed approximately once per year.
The mysql.user
table has new columns that
store expiration policy information for individual accounts:
password_last_changed
indicates when
the password was last changed. The server uses this
column when clients connect to determine whether the
password is past its lifetime and must be changed per
the expiration policy in effect.
password_lifetime
indicates the
account password lifetime. A value of
N
greater than zero means
that the password has a lifetime of
N
days. 0 disables automatic
password expiration. NULL
(the
default) means that the global expiration policy
applies.
The ALTER USER
statement has
new options to set password expiration policy for individual
accounts.
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.user
table. For each account,
mysql_upgrade uses the time at which it
executes to set the password_last_changed
column and sets password_lifetime
to
NULL
. This causes the default global
expiration policy to go into effect (passwords have a lifetime
of 360 days).
For more information, see Password Management, and ALTER USER Statement.
Incompatible Change: MySQL deployments installed using mysql_install_db now are secure by default. The following changes have been implemented as the default deployment characteristics:
The installation process creates only a single
root
account,
'root'@'localhost'
, automatically
generates a random password for this account, and marks the
password expired. The MySQL administrator must connect as
root
using the random password and use
SET PASSWORD
to select a new
password. (The random password is found in the
.mysql_secret
file in the home
directory of the effective user running the script.)
Installation creates no anonymous-user accounts.
Installation creates no test
database.
Those changes are implemented by modifying the default mode of operation for mysql_install_db, which is invoked automatically during RPM installation operations. Therefore, the changes also affect non-RPM installation methods for which you invoke mysql_install_db manually.
Because mysql_install_db deployment now is
secure by default, the --random-passwords
option is unnecessary and has been removed. It has been replaced
by the --skip-random-passwords
option. You can
use this option to explicitly produce a deployment that is
not secure by default:
No random password is generated for the
'root'@'localhost'
account.
A test
database is created that is
accessible by any user.
mysql_install_db no longer creates
anonymous-user accounts, even with
--skip-random-passwords
.
The mysql_secure_installation program now has
a
--use-default
option, which causes the program to execute noninteractively. It
can be used for unattended install operations.
Incompatible Change:
The AES_ENCRYPT()
and
AES_DECRYPT()
functions now
permit control of the block encryption mode and take an optional
initialization vector argument:
The new
block_encryption_mode
system variable controls the mode for block-based encryption
algorithms. Its default value is
aes-128-ecb
, which signifies encryption
using a key length of 128 bits and ECB mode.
An optional init_vector
argument
provides an initialization vector for encryption modes that
require it:
AES_ENCRYPT(str
,key_str
[,init_vector
]) AES_DECRYPT(crypt_str
,key_str
[,init_vector
])
A random string of bytes to use for the initialization
vector can be produced by calling the new
RANDOM_BYTES()
function.
For more information, see Encryption and Compression Functions.
These changes make statements that use
AES_ENCRYPT()
or
AES_DECRYPT()
unsafe for
statement-based replication and they cannot be stored in the
query cache. Queries that use
RANDOM_BYTES()
are unsafe for
statement-based replication and cannot be stored in the query
cache.
Performance; InnoDB:
InnoDB
now supports multiple page cleaner
threads for flushing dirty pages from buffer pool instances. A
new system variable,
innodb_page_cleaners
, is used
to specify the number of page cleaner threads. The default value
of 1
maintains the pre-MySQL 5.7.4
configuration in which there is only a single page cleaner
thread. This enhancement builds on work completed in MySQL
5.6.2, which introduced a single page cleaner thread to offload
buffer pool flushing work from the InnoDB
master thread.
InnoDB:
InnoDB
now supports the
Transportable
Tablespace feature for partitioned
InnoDB
tables and individual
InnoDB
table partitions. This enhancement
eases backup procedures for partitioned tables and enables
copying of partitioned tables and individual table partitions
between MySQL instances. For additional information, see
Importing InnoDB Tables.
(Bug #18121824, Bug #70196, Bug #18304194, Bug #71784)
InnoDB:
Parameters used to identify an InnoDB
pages
are replaced by two new classes, and fold
value and zip_size
value calculations have
been optimized. These changes simplify code by reducing the
number of page identifier parameters passed to functions.
(Bug #18073495)
InnoDB: If system tablespace files (“ibdata files”) are located on Fusion-io devices that support atomic writes, doublewrite buffering is automatically disabled and Fusion-io atomic writes are used for all data files. Because the doublewrite buffer setting is global, doublewrite buffering is also disabled for data files residing on non-Fusion-io hardware.
This feature is only supported on Fusion-io hardware and is only
enabled for Fusion-io NVMFS on Linux. To take full advantage of
this feature, an
innodb_flush_method
setting of
O_DIRECT
is recommended.
(Bug #18069105)
InnoDB:
Reverse index leaf page scan has been optimized.
btr_pcur_restore_position_func()
can now
perform optimistic restoration for reverse cursors, which
reduces block->mutex
contention on the
root page, especially for concurrent reverse scans.
(Bug #17666170)
InnoDB:
A new system variable,
innodb_log_write_ahead_size
,
allows you to configure the write-ahead block size for redo logs
to a value that matches the operating system or file system
cache block size in order to avoid “read-on-write”
for redo log writes. Read-on-write occurs when redo log blocks
are not entirely cached to the operating system or file system
due to a mismatch between write-ahead block size for redo logs
and operating system or file system cache block size. Avoiding
read-on-write improves throughput stability for redo log writes.
(Bug #17571371)
InnoDB:
Online DDL support is
extended to the following operations for regular and partitioned
InnoDB
tables:
ALTER TABLE ...
ENGINE=INNODB
(when run on an
InnoDB
table)
Online DDL support reduces table rebuild time and permits concurrent DML. See InnoDB and Online DDL.
(Bug #13975225)
InnoDB:
New global configuration parameters,
innodb_status_output
and
innodb_status_output_locks
,
allow you to dynamically enable and disable the standard
InnoDB
Monitor and InnoDB
Lock Monitor for periodic output. Previously, enabling and
disabling these monitors for periodic output required creating
and dropping specially named tables
(innodb_monitor
and
innodb_lock_monitor
). For additional
information, see InnoDB Monitors.
Replication: The binary log dump thread has been optimized by removing unnecessary reallocation of the send buffer. Previously, memory was allocated then freed for every event sent to the slave, even when this was not strictly necessary. Following this optimization, the MySQL Server can make better use of hardware resources by having the dump thread employ adaptative memory allocation, which can also result in less CPU usage. (Bug #11747349, Bug #31932, Bug #11752288, Bug #43426, Bug #13727951)
Replication:
It is now possible in many cases to execute
CHANGE MASTER TO
without first
issuing STOP SLAVE
. This
capability is added by implementing the following changes in the
behavior of the CHANGE MASTER TO
statement,
which now depends only on whether the slave SQL thread or slave
I/O thread is stopped, as described here:
If the SQL thread is stopped, you can execute
CHANGE MASTER TO
using the
RELAY_LOG_FILE
,
RELAY_LOG_POS
, and
MASTER_DELAY
options, even if the slave
I/O thread is running. No other options may be used with
this statement when the I/O thread is running.
If the I/O thread is stopped, you can execute
CHANGE MASTER TO
using any of the options
for this statement except
RELAY_LOG_FILE
,
RELAY_LOG_POS
, or
MASTER_DELAY
, even when the SQL thread is
running. These three options cannot be used when the I/O
thread is running.
Both the SQL thread and the I/O thread must be stopped
before issuing CHANGE MASTER TO
with
MASTER_AUTO_POSITION = 1
.
If you are using statement-based replication and temporary
tables, it is possible for a CHANGE MASTER TO
statement following a STOP SLAVE
statement to
leave behind temporary tables on the slave. As part of this set
of improvements, a warning is now issued whenever this occurs.
You can avoid this in such cases by making sure that
Slave_open_temp_tables
is
equal to 0 prior to executing these statements.
For more information, see CHANGE MASTER TO Statement, and Switching Sources During Failover.
Replication: Implemented separate threads for sending and receiving semisynchronous replication acknowledgement signals, so that event streams and ACK streams can be sent and received simultaneously. This should reduce many common delays and thus improve performance with semisynchronous replication in a number of settings.
Solaris:
On Solaris, mysql_config --libs now includes
-R
so that libraries can be found at runtime.
(Bug #18235669)/path/to/library
On Windows, NOMINMAX
is set using the
ADD_DEFINITIONS()
CMake
macro rather than in config.h.cmake
so that
it is set even without including
my_config.h
.
(Bug #18192896)
CMake support for compiling MySQL with gcc on Solaris was improved. Binary distributions for Solaris now are built using gcc rather than Sun Studio, to enable compilation of code not handled by Sun Studio. The client programs and the client libraries except the embedded library are still built using Sun Studio.
A consequence of this change is that on Solaris, mysql_config no longer provides arguments for linking with the embedded library, since this is now built using gcc instead of Sun Studio. To get linking arguments for the embedded library, use the alternative script mysql_server_config instead. (Bug #18146422, Bug #17826757)
The CHECK_FUNCTION_REPLACEMENT()
CMake macro was removed from
Windows.cmake
and replacement functions are
set explicitly instead since the result of the check was already
hard coded in WindowsCache.cmake
.
(Bug #18116661)
MySQL now compiles using Clang 3.4. (Bug #18047020)
In MySQL 5.7.1, the MySQL test suite
mysql-test-run.sh program was modified to
start the server with InnoDB
rather than
MyISAM
as the default storage engine. All
tests in the MySQL test suite were modified to include a
force_default_myisam.inc
file. This had to
be done because most legacy test results were recorded with the
MyISAM
engine and failed with a result
difference if run with InnoDB
. A project is
underway to migrate these tests and remove
force_default_myisam.inc
for tests that do
not need MyISAM
. In 5.7.4, the
rpl
and binlog
suites and
parts of the main suite were migrated.
(Bug #17902011)
Performance Schema instrumentation was added to capture GTIDs for transaction events. (Bug #17799147)
Performance Schema overhead was reduced for the
pfs_lock
implementation and the uses of
atomic operations in general.
(Bug #17766582)
CMake now aborts the configuration process on Windows if a Visual Studio version earlier than 2010 is used. (Bug #17730320)
A new CMake option,
WITH_MSAN
, permits enabling
MemorySanitizer for compilers that support it.
(Bug #17632319)
Previously, ALTER TABLE
in MySQL
5.6 could alter a table such that the result had temporal
columns in both 5.5 and 5.6 format. Now
ALTER TABLE
upgrades old temporal
columns to 5.6 format for ADD COLUMN
,
CHANGE COLUMN
, MODIFY
COLUMN
, ADD INDEX
, and
FORCE
operations. This conversion cannot be
done using the INPLACE
algorithm because the
table must be rebuilt, so specifying
ALGORITHM=INPLACE
in these cases results in
an error. Specify ALGORITHM=COPY
if
necessary.
When ALTER TABLE
does produce a
temporal-format conversion, it generates a message that can be
displayed with SHOW WARNINGS
:
TIME/TIMESTAMP/DATETIME columns of old format have been
upgraded to the new format
.
(Bug #17246318)
The mysql_version.h
file defines two new
macros, LIBMYSQL_VERSION
and
LIBMYSQL_VERSION_ID
, that indicate the string
and numeric forms of the client library version.
In the client library included with MySQL Server
distributions, these macros have the same values as
MYSQL_SERVER_VERSION
and
MYSQL_VERSION_ID
. For example, in MySQL
5.7.4, MYSQL_SERVER_VERSION
and
LIBMYSQL_VERSION
are
"5.7.4-m14"
, and
MYSQL_VERSION_ID
and
LIBMYSQL_VERSION_ID
are
50704
.
In the client library included with Connector/C
distributions, MYSQL_SERVER_VERSION
and
MYSQL_VERSION_ID
have the values of the
MySQL version on which the Connector/C distribution is
based, whereas LIBMYSQL_VERSION
and
LIBMYSQL_VERSION_ID
indicate the
Connector/C version. For example, Connector/C 6.1.3 is based
on MySQL 5.7.4, so MYSQL_SERVER_VERSION
and MYSQL_VERSION_ID
have values of
"5.7.4-m14"
and 50704
,
whereas LIBMYSQL_VERSION
and
LIBMYSQL_VERSION_ID
have values of
"6.1.3"
and 60103
.
In addition, the
mysql_get_client_info()
and
mysql_get_client_version()
C API
functions in the client library now return values that reflect
the type of distribution that provides the client library:
In MySQL distributions,
mysql_get_client_info()
returns MYSQL_SERVER_VERSION
and
mysql_get_client_version()
returns MYSQL_VERSION_ID
. This is the
same as before.
In Connector/C distributions,
mysql_get_client_info()
returns LIBMYSQL_VERSION
and
mysql_get_client_version()
returns LIBMYSQL_VERSION_ID
. Previously,
these functions returned the MySQL version, the same as in
MySQL distributions.
(Bug #17171724)
Overhead was reduced for filesort
comparison
operations.
(Bug #14635144)
Based on community feedback, the default value of 10 for the
eq_range_index_dive_limit
system variable has proven to be too low. The default has been
raised to 200.
(Bug #70586, Bug #17587952)
mysql_install_db provides a more informative diagnostic message when required Perl modules are missing. (Bug #69844, Bug #18187451)
CMake now supports a
-DTMPDIR=
option to specify the default
dir_name
tmpdir
value. If unspecified,
the value defaults to P_tmpdir
in
<stdio.h>
. Thanks to Honza Horak for
the patch.
(Bug #68338, Bug #16316074)
MySQL now supports server-side timeouts for execution of
SELECT
statements:
SELECT
supports a
MAX_STATEMENT_TIME
option to specify a
timeout for individual queries. For example:
SELECT MAX_STATEMENT_TIME = 5000 id, name FROM my_table WHERE ...
The server terminates the statement if its execution exceeds the timeout value.
The max_statement_time
system variable
specifies the timeout value for
SELECT
statements executed
within the session that include no
MAX_STATEMENT_TIME
option. If the value
is 0, timeouts are not enabled.
The Max_statement_time_exceeded
,
Max_statement_time_set
, and
Max_statement_time_set_failed
status
variables provide information about
SELECT
statements affected by
timeouts.
Timeout values are in milliseconds.
For more information, see SELECT Statement, and Server System Variables.
Thanks to Davi Arnaut for the patch on which this feature is based. (Bug #68252, Bug #16271666)
Overhead was reduced for metadata lock acquisition for DML statements. (Bug #58627, Bug #11765641)
Logarithmic functions return NULL
if the
argument is less than or equal to 0.0E0. They now also report a
warning “Invalid argument for logarithm”.
(Bug #50507, Bug #11758319)
Code instrumented with Valgrind did not preallocate memory in
alloc_root()
, to help find bugs. This
behavior is now also enabled if ASAN (address sanitizer) is
used.
(Bug #44582, Bug #11753184)
The server now can notify clients of changes that occur to the client session state. Changes can be reported for these attributes of client session state:
The default schema (database).
Session-specific values for system variables.
User-defined variables.
Temporary tables.
Prepared statements.
Change notification occurs in the MySQL client/server protocol, which now includes tracker information in OK packets so that session state changes can be detected. One use for the tracker mechanism is to provide a means for MySQL connectors and client applications to determine whether any session context is available to permit session migration from one server to another. (To change sessions in a load-balanced environment, it is necessary to detect whether there is session state to take into consideration when deciding whether a switch can be made.)
The following components comprise the user interface to control the tracker and retrieve state-change information from it, and thus enable implementation of state-change tracking on the client side:
Clients can request notification when there is a change to
any of the trackable session state-related values. To
control notification, enable or disable the
session_track_state_change
system variable. This variable is disabled by default.
Clients can request notification of changed values for certain specific types of session state information:
The default schema name. To control name notification,
enable or disable the
session_track_schema
system variable. This variable is enabled by default.
The session values of system variables. Notification
occurs for the system variables named by the
session_track_system_variables
system variable. Notification consists of the name and
new value of each changed variable. By default,
notification is enabled for
time_zone
,
autocommit
,
character_set_client
,
character_set_results
,
and
character_set_connection
.
(The latter three variables are those affected by
SET NAMES
.)
To enable client applications to extract state-change information from OK packets returned by the server, the MySQL C API provides a pair of functions:
mysql_session_track_get_first()
fetches the first part of the state-change information
received from the server.
mysql_session_track_get_next()
fetches any remaining state-change information received
from the server. Following a successful call to
mysql_session_track_get_first()
,
call this function repeatedly as long as it returns
success.
From the C API, state-change information can be obtained
by passing
SESSION_TRACK_STATE_CHANGE
,
SESSION_TRACK_SCHEMA
, or
SESSION_TRACK_SYSTEM_VARIABLES
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.
Because there are new API functions, the client library ABI version is increased to 18.3. Shared library names now include 18.3 where appropriate.
The mysqltest program has
enable_session_track_info
and
disable_session_track_info
commands to
enable and disable tracking of session state-change
information. See the MySQL Server Doxygen documentation,
available at
https://dev.mysql.com/doc/index-other.html.
For more information, see Server Tracking of Client Session State Changes.
Incompatible Change:
Old clients (older than MySQL 5.5.7) failed to parse
authentication data correctly if the server was started with the
--default-authentication-plugin=sha256_password
option.
As a result of this bug fix, MySQL 5.6.16 clients cannot
connect to a 5.6.17 server using an account that authenticates
with the sha256_password
plugin, nor can
5.6.17 clients connect to a 5.6.16 server. Similarly, MySQL
5.7.3 clients cannot connect to a 5.7.4 server using an
account that authenticates with the
sha256_password
plugin.
(Bug #17495562)
Important Change; InnoDB; Partitioning:
The
FLUSH
TABLES
statement's FOR EXPORT
option is now supported for partitioned
InnoDB
tables.
(Bug #16943907)
InnoDB; Replication:
Attempting to reset a replication slave while
innodb_force_recovery
is
greater than 0
would return a cryptic error
message: ERROR(1030) HY000: Got error -1 from storage
engine. The error message has been changed to:
ERROR HY000: Operation not allowed when
innodb_force_recovery > 0. Replication options
such as
relay_log_info_repository=TABLE
and
master_info_repository=TABLE
store information in tables in InnoDB
. When
innodb_force_recovery
is
greater than 0, replication tables cannot be updated which may
cause replication administration commands to fail.
(Bug #17287443, Bug #69907)
InnoDB; Replication:
An INSERT
...ON DUPLICATE KEY UPDATE
statement run on a table
with multiple unique indexes would sometimes cause events to be
incorrectly written to the binary log.
(Bug #11758237, Bug #50413)
InnoDB; Replication:
Using the InnoDB
memcached
plugin (see
InnoDB memcached Plugin) with
innodb_api_enable_binlog
set to
1 caused the server to leak memory.
(Bug #70757, Bug #17675622)
InnoDB; Microsoft Windows:
TRUNCATE TABLE
on Windows would
report multiple 'chsize' returned OS error
71 errors.
(Bug #18176071, Bug #71173)
InnoDB; Microsoft Windows: On Windows, a regression introduced in 5.7.3 would allow log writes during sync operations, which should not be allowed due to an issue in some Windows environments. (Bug #17824101)
InnoDB; Solaris:
The loader in some Solaris versions would refuse to start a
GCC-compiled binary (such as the mysqld
binary) that uses the PAUSE
assembler
instruction.
(Bug #18122171)
InnoDB:
A !sync_check_iterate(check)
assertion
occurred in fts_create_doc_id()
during an
INSERT
operation.
(Bug #18253210)
InnoDB:
trx_undo_truncate_start
would write to the
redo log for temporary undo log segments, resulting in a purge
thread assertion.
(Bug #18252937)
InnoDB: Unused parameters and variables along with disabled functionality has been removed from redo log code. This patch also includes redo log code improvements including test enablement, addition of Valgrind instrumentation, and minor code refactoring. (Bug #18251675)
InnoDB:
The user defined type, xid_t
, was defined
multiple times.
(Bug #18251254)
InnoDB: Doublewrite buffer error messages referenced page numbers in an inconsistent manner. (Bug #18242594)
InnoDB:
InnoDB
would perform unnecessary redo log
writes and flushing for temporary tablespaces.
(Bug #18236692)
InnoDB:
The truncate_t::drop_indexes
and
truncate_t::create_indexes
methods would
disable redo logging when modifying the system tablespace.
(Bug #18236000)
InnoDB:
For full-text queries, a failure to check that
num_token
is less than
max_proximity_item
could result in an
assertion.
(Bug #18233051)
InnoDB:
An invalid memmove
in
fts_query_fetch_document
would cause a
serious error.
(Bug #18229433)
InnoDB:
InnoDB
would write to the redo log for some
operations on temporary tablespaces.
(Bug #18226934)
InnoDB:
log_mutex_exit
should be called before
log_buffer_extend
when the log buffer mutex
is held.
(Bug #18202904)
InnoDB:
The GCC 4.4 compiler would emit a bogus warnings about
InnoDB
parsing functions, indicating that
output is uninitialized.
(Bug #18192536)
InnoDB:
To simplify code and reduce memory usage,
InnoDB
redo log scan records for file-level
operations, previously stored in a hash table, are now processed
immediately.
(Bug #18180875)
InnoDB:
innodb_ft_result_cache_limit
now has a hardcoded maximum value of 4294967295 bytes or (2**32
-1). The maximum value was previously defined as the maximum
value of ulong
.
(Bug #18180057, Bug #71554)
InnoDB:
An UPDATE
resulted in a memory
access error in
lock_rec_other_trx_holds_expl
. The
transaction list (trx_sys->rw_trx_list
)
was traversed without acquiring the transaction subsystem mutex
(trx_sys->mutex
).
(Bug #18161853)
InnoDB:
InnoDB
failed to restore a corrupt first page
of a system tablespace data file from the doublewrite buffer,
resulting in a startup failure.
(Bug #18144349, Bug #18058884)
InnoDB:
Temporary tablespace file size did not match the file size
specified by
--innodb-temp-data-file-path
due to an error in file size allocation logic.
(Bug #18141070)
InnoDB: A regression introduced by Bug #14329288 would result in a performance degradation when a compressed table does not fit into memory. (Bug #18124788, Bug #71436)
References: This issue is a regression of: Bug #14329288.
InnoDB:
The maximum value for
innodb_thread_sleep_delay
is
now 1000000 microseconds. The previous maximum value (4294967295
microseconds on 32-bit and 18446744073709551615 microseconds on
64-bit) was unnecessarily large. Because the maximum value of
innodb_thread_sleep_delay
is
limited by the value set for
innodb_adaptive_max_sleep_delay
(when set to a nonzero value), the maximum value for
innodb_thread_sleep_delay
is
now the same as the maximum value for
innodb_adaptive_max_sleep_delay
.
(Bug #18117322)
InnoDB:
The fil_node_create
function would perform an
unnecessary hash table lookup.
(Bug #18116588)
InnoDB:
INFORMATION_SCHEMA.INNODB_TRX
contained a bogus transaction ID that did not match transaction
ID values printed elsewhere. The method used to retrieve
transaction IDs was inconsistent.
(Bug #18111007)
InnoDB: When starting the server, unnecessary “checking space” log messages would be printed when processing the doublewrite buffer. (Bug #18101380)
InnoDB:
A compiler error (unable to find string literal
operator) was returned when building in
c++11
mode.
(Bug #18082139)
InnoDB:
In the case of a corrupted clustered index on a temporary table,
the server would crash on an INSERT
instead
of returning an error. In the case of a corrupted clustered
index on a normal table, an error was not returned and the
INSERT
would succeed.
(Bug #18064548)
InnoDB:
Specifying an alternate directory for InnoDB
tables using datadir
and then
moving .ibd files to the
default MySQL data
directory would result in
a serious error when attempting a DROP
TABLE
operation.
(Bug #18063570)
InnoDB:
Attempting to uninstall the InnoDB
memcached plugin while the
InnoDB
memcached plugin is
still initializing would kill the InnoDB
memcached daemon thread. Uninstall should
wait until initialization is complete.
(Bug #18038948)
InnoDB: A full-text tokenizer thread would terminate with an incorrect error message. (Bug #18021306)
InnoDB: In debug builds, creating a unique index on a binary column, with input data containing duplicate keys, would cause an assertion. (Bug #18010711)
InnoDB:
The srv_monitor_thread
would crash in the
lock_print_info_summary()
function due to a
race condition between the srv_monitor_thread
and purge coordinator thread.
(Bug #17980590, Bug #70430)
InnoDB: A boolean mode full-text search query would result in a memory access violation during parsing. (Bug #17978763)
InnoDB:
Logging functions were not used consistently. The bug fix
replaces occurrences of fprintf(stderr,
and
message
)fputs()
with ib_logf()
.
Also, because ib_logf()
emits a timestamp
with each message, the bug fix removes unnecessary occurrences
of ut_print_timestamp()
.
(Bug #17935793, Bug #17534737)
InnoDB: Due to a parser error, full-text search queries that include a sub-expression could return the wrong result. (Bug #17840768)
InnoDB: The innochecksum tool did not use a Windows-specific API to retrieve file size information, which resulted in an incorrect error message (Error: ibdata1 cannot be found) when the MySQL 5.6 innochecksum 2GB file size limit was exceeded. innochecksum now provides support for files larger than 2GB in both MySQL 5.6 and MySQL 5.7. (Bug #17810862, Bug #70936)
InnoDB:
Due to a regression introduced by the fix for Bug#17371537,
memory was not allocated for the default memcached engine when
using the default memcached engine as the backstore for data
instead of InnoDB
.
(Bug #17800829)
InnoDB: A page allocation for an undo log due failed with a “table is full” error message instead of an “undo log is full” error message. (Bug #17779822)
InnoDB:
If a crash occurred while temporary tables are active,
InnoDB
would report an invalid error message
on restart indicating that a temporary table does not exist in
the InnoDB
internal data dictionary.
(Bug #17779729)
InnoDB:
ut_free
could be called more than once in
succession.
(Bug #17763472)
InnoDB: An index tree modification could result in a deadlock. (Bug #17754767)
InnoDB:
A race condition in DebugPolicy::enter()
would cause a segmentation fault in
sync_array_cell_print
.
(Bug #17713784)
InnoDB:
Manipulating a table after discarding its tablespace using
ALTER TABLE ...
DISCARD TABLESPACE
could result in a serious error.
(Bug #17700280)
InnoDB: Persistent optimizer statistics would cause stalls due to latch contention. (Bug #17699331, Bug #70768)
InnoDB:
Attempting to add an invalid foreign key when foreign key
checking is disabled
(foreign_key_checks=0
) would
cause a serious error.
(Bug #17666774)
InnoDB:
For debug builds, the table rebuilding variant of online
ALTER TABLE
, when run on tables
with BLOB columns, would cause an assertion in the
row_log_table_apply_update
function. For
normal builds, a DB_PRODUCTION
error would be
returned.
(Bug #17661919)
InnoDB:
An InnoDB
full-text search failure would
occur due to an “unended” token. The string and
string length should be passed for string comparison.
(Bug #17659310)
InnoDB:
MATCH() ... AGAINST
queries that
use a long string as an argument for
AGAINST()
could result in an error when run
on an InnoDB
table with a full-text search
index.
(Bug #17640261)
InnoDB: Databases names beginning with a digit or special character would cause a full-text search (FTS) parser error. (Bug #17607687)
References: See also: Bug #17607956.
InnoDB:
Under certain conditions, a regression introduced by the fix for
Bug #11758237 would cause an assertion error when
INSERT ...
ON DUPLICATE KEY UPDATE
or
REPLACE
statements encounter a
DB_DUPLICATE_KEY
error.
(Bug #17604730)
References: This issue is a regression of: Bug #11758237.
InnoDB: In debug builds, a merge insert buffer during a page read would cause a memory access violation. (Bug #17561188)
InnoDB:
The patch for Bug #16852278, which simplifies and optimizes
comparison functions in InnoDB
, caused a
query performance regression.
(Bug #17543588)
References: See also: Bug #16852278.
InnoDB:
In sync0rw.ic
,
rw_lock_x_lock_func_nowait
would needlessly
call os_thread_get_curr_id
.
(Bug #17509710, Bug #70417)
InnoDB:
Truncating a memcached
InnoDB
table while
memcached is performing DML operations would
result in a serious error.
(Bug #17468031)
InnoDB:
The server could fail to restart if a crash occurred immediately
following a RENAME TABLE
in an
ALTER TABLE
,
RENAME TABLE
sequence.
(Bug #17463290)
InnoDB:
If a tablespace data file path is updated in a
.isl
file and then a crash recovery is
performed, the updated tablespace data file path is read from
the .isl
file but the
SYS_DATAFILES
table would not be not updated.
The SYS_DATAFILES
table is now updated with
the new data file path after crash recovery.
(Bug #17448389)
InnoDB: Attempting to rename a table to a missing database would result in a serious error. (Bug #17447500)
InnoDB: If the first page (page 0) of file-per-table tablespace data file was corrupt, recovery would be halted even though the doublewrite buffer contained a clean copy of the page. (Bug #17335427, Bug #70087, Bug #17341780)
InnoDB:
The InnoDB
memcached
Readme file (README-innodb_memcached
)
incorrectly stated that libevent 1.6.0 is linked statically into
daemon memcached. The bundled version of
libevent is 1.4.12, not 1.6.0.
(Bug #17324419, Bug #70034)
InnoDB:
When creating a table there are a minimum of three separate
inserts on the mysql.innodb_index_stats
table. To improve CREATE TABLE
performance, there is now a single
COMMIT
operation instead of one
for each insert.
(Bug #17323202, Bug #70063)
InnoDB:
The server would halt with an assertion in
lock_rec_has_to_wait_in_queue(lock)
due to a
locking-related issue and a transaction being prematurely
removed from trx_sys->rw_trx_set
.
(Bug #17320977)
InnoDB:
The ALTER TABLE
INPLACE
algorithm failed to decrease the
auto-increment value.
(Bug #17250787, Bug #69882)
InnoDB:
Comments in btr0cur.cc
incorrectly stated
that btr_cur_pessimistic_update()
and
btr_cur_optimistic_update()
would accept a
NULL value.
(Bug #17231743, Bug #69847)
InnoDB:
dict_table_schema_check
would call
dtype_sql_name
needlessly.
(Bug #17193801, Bug #69802)
InnoDB:
fil_check_first_page()
failed to check if
fsp_flags_get_zip_size()
returned a valid
value, which resulted in a segmentation fault when starting
mysqld.
(Bug #17033182)
InnoDB:
The function os_file_get_status
would not
work with raw devices.
(Bug #17023438, Bug #69424)
InnoDB:
The lock_rec_other_has_expl_req
function in
lock0lock.cc
would perform unnecessary
work.
(Bug #17016214, Bug #69576)
InnoDB: Valgrind would report uninitialized values while running a rollback debug test. The Valgrind warnings should only appear in Valgrind-instrumented builds. (Bug #16969876)
InnoDB: During crash recovery, an incorrect transaction active time would result in rolling back an uncommitted transaction. (Bug #16936961, Bug #69438)
InnoDB:
Heap block debugging information (file_name
,
lineno
), used for logging diagnostics, would
appear in release builds. This information should only appear in
debug builds.
(Bug #16924719, Bug #69422)
InnoDB:
An online ALTER TABLE
operation
would consume more memory than expected. During an online
ALTER TABLE
operation, an online log buffer
containing a head and tail buffer is created for each index that
is created or rebuilt. The tail buffer is the writer context and
is only required for concurrent write operations on an index
while the ALTER TABLE
operation is in
progress. The head buffer is the reader context and is only
required during the log apply phase. To reduce memory
consumption, the tail buffer is now allocated when the first DML
statement is run on the index, and the head buffer is only
allocated in the log apply phase and freed afterwards.
(Bug #16868967, Bug #69325, Bug #17911720)
InnoDB:
Renaming a column while also adding or dropping columns in the
same ALTER TABLE
operation would
cause an error.
(Bug #16864981)
InnoDB:
A type name (srv_shutdown_state
) was the same
as a variable name. The srv_shutdown_state
type name has been changed to srv_shutdown_t
.
(Bug #16735398)
InnoDB:
The buf_buddy_relocate
function would perform
an unnecessary hash lookup.
(Bug #16596057)
InnoDB: On Windows, the full-text search (FTS) object ID was not in the expected hexadecimal format. (Bug #16559254)
References: See also: Bug #16559119.
InnoDB:
Server shutdown would result in a hang with the following
message written to the error log: “[NOTE] InnoDB:
Waiting for purge thread to be suspended
.”
(Bug #16495065)
InnoDB:
InnoDB
failed to start when
innodb_data_file_path
specified
the data file size in kilobytes by appending
K
to the size value.
(Bug #16287752)
InnoDB: Fetching and releasing pages from the buffer pool and tracking the page state are expensive and complex operations. Prior to the bug fix, these operations were performed using a page mutex. Using a page mutex to track several things is expensive and does not scale well. The bug fix separates fetch and release tracking (in-use state) of a page from page I/O state tracking. Fetch and release is now tracked using atomics where available.
For portability, a new CMake build option,
INNODB_PAGE_ATOMIC_REF_COUNT
(default ON
), can be used to disable atomic
page reference counting on platforms where atomics support is
not available. When atomic page reference counting is enabled
(default), “[Note] InnoDB: Using atomics to ref
count buffer pool pages
” is printed to the
error log at server startup. If atomic page reference counting
is disabled, “[Note] InnoDB: Using mutexes to ref
count buffer pool pages
” is printed instead.
(Bug #16249481, Bug #68079)
InnoDB: An insert buffer merge would cause an assertion error due to incorrectly handled ownership information for externally stored BLOBs.
InnoDB: Assertion failure in thread thread_num
in file ibuf0ibuf.cc line 4080
InnoDB: Failing assertion: rec_get_deleted_flag(rec, page_is_comp(page))
(Bug #14668683)
InnoDB:
Decreasing the
auto_increment_increment
value
would have no affect on the next auto-increment value.
(Bug #14049391, Bug #65225)
InnoDB:
Table renaming errors would appear in the LATEST
FOREIGN KEY ERROR
section of the SHOW ENGINE
INNODB STATUS
output.
(Bug #12762390, Bug #61746)
InnoDB: The page latching algorithm for B-trees would lock sibling leaf pages, prolonging dictionary locks. The bug fix implements prefetching of sibling leaf pages to reduce index lock holding time. (Bug #12734249, Bug #61736)
InnoDB:
BUF_READ_AHEAD_AREA
would frequently call
ut_2_power_up
for workloads with a high I/O
rate. The calculation is now performed once and the result is
stored in the buf_pool_t
structure.
(Bug #11762242, Bug #54814)
InnoDB:
UNIV_SYNC_DEBUG
, which was disabled in
univ.i
with the fix for Bug#16720368, is now
enabled.
(Bug #69617, Bug #17033591)
Partitioning:
Queries using the index_merge
optimization (see Index Merge Optimization)
could return invalid results when run against tables that were
partitioned by HASH
.
(Bug #17588348, Bug #70588)
References: See also: Bug #16862316, Bug #17648468, Bug #18167648.
Partitioning: When no partition had returned a row since the last HA_ERR_KEY_NOT_FOUND error, the use of uninitialized memory in the priority queue used for returning rows in sorted order could lead to a crash of the server. (Bug #17401628)
Replication:
When running the server with
--gtid-mode=ON
,
STOP SLAVE
followed by
START SLAVE
resulted in a
mismatch between the information provided by
INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO
and the Slave_open_temp_tables
status variable: the INNODB_TEMP_TABLE_INFO
table showed that no temporary tables existed, but
Slave_open_temp_tables
had a nonzero value.
(Bug #18236612)
Replication: Attempting to use semisynchronous replication concurrently with SSH connections caused the server to fail. (Bug #18219471)
Replication:
When MASTER_HEARTBEAT_PERIOD
was not included
in CHANGE MASTER TO
, the
statement reset
Slave_heartbeat_period
to its
default value and
Slave_received_heartbeats
to
0. Now the heartbeat period is not changed by CHANGE
MASTER TO
unless explicitly set using
MASTER_HEARTBEAT_PERIOD
. In addition, the
statement no longer resets
Slave_received_heartbeats
.
(Bug #18185490)
Replication:
After setting MASTER_SSL_CRLPATH
using a
CHANGE MASTER TO
statement, the
option value was not displayed properly in the
SSL_CRL_PATH
column of the
replication_connection_configuration
Performance Schema table.
(Bug #18174719)
Replication:
The MASTER_SSL_CRL
and
MASTER_SSL_CRLPATH
options are not available
when using yaSSL; MySQL Replication now sets these to
NULL
automatically whenever yaSSL is enabled.
(Bug #18165937)
Replication:
mysqlbinlog did not free up memory used by
its event buffer when using the
--rewrite-db
option.
(Bug #18164998)
Replication:
Setting slave_parallel_workers
to 1 or greater and starting the slave caused the slave SQL
thread to use but not release memory until the slave was
restarted with STOP SLAVE
and
START SLAVE
.
(Bug #18001777, Bug #71197)
Replication:
When a slave was configured with replication filters and
--log-warnings=2
, every statement
which was filtered caused an entry to be written in the error
log. For busy servers which generated many statements to be
filtered, the result was that the error log could quickly grow
to many gigabytes in size. Now a throttle is used for such
errors, so that an error message is printed only once in a given
interval, saying that this particular error occurred a specific
number of times during that interval.
(Bug #17986385)
Replication: When the binary log I/O cache grew to exactly 32768 bytes and the current transaction was preceded by a transaction whose size was greater than 32768 bytes, events could be corrupted when written into the binary log. (Bug #17842137)
Replication:
When the master and the slave both had
gtid_mode=ON
set initially, and
the slave SQL thread was stopped while there remained GTID
transactions in the relay log, if the slave was then restarted
with gtid_mode=OFF
, then the slave SQL thread
executed any anonymous transaction it encountered without
writing its GTID to the binary log, with the result that the
GTID was lost. This could cause problems when the slave was
later promoted to a master, as the transaction would be played
again on the promoted master's slaves, leading quickly to
inconsistencies on those slaves.
(Bug #17827018)
References: See also: Bug #17813449.
Replication:
When the master and the slave both had
gtid_mode=OFF
set initially,
and the slave SQL thread was stopped while there remained
anonymous transactions in the relay log, if the slave was then
restarted with gtid_mode=ON
, then the slave
assigned GTIDs such transactions. This could cause problems when
the slave was later promoted to a master, as the transactions
would be played again on the promoted master's slaves, leading
quickly to inconsistencies on those slaves.
(Bug #17813449)
References: See also: Bug #17827018.
Replication: Creating and dropping large numbers of temporary tables could lead to increased memory consumption. (Bug #17806014)
Replication:
SHOW SLAVE STATUS
used incorrect
values when reporting MASTER_SSL_CRL
and
MASTER_SSL_CRLPATH
.
(Bug #17772911, Bug #70866)
References: This issue is a regression of: Bug #11747191.
Replication:
When log_warnings
is greater
than 1, the master prints binary log dump thread
information—containing the slave server ID, binary log
file name, and binary log position—in
mysqld.1.err
. A slave server ID greater
than 2 billion was printed with a negative value in such cases.
(Bug #17641586, Bug #70685)
Replication:
mysqlbinlog
--verbose
failed when it
encountered a corrupt row event in the binary log. Such a row
event could also cause the slave to fail.
(Bug #17632978)
References: See also: Bug #16960133.
Replication:
Binary log events could be sent to slaves before they were
flushed to disk on the master, even when
sync_binlog
was set to 1. This
could lead to either of those of the following two issues when
the master was restarted following a crash of the operating
system:
Replication cannot continue because one or more slaves are requesting replicate events that do not exist on the master.
Data exists on one or more slaves, but not on the master.
Such problems are expected on less durable settings
(sync_binlog
not equal to 1), but it should
not happen when sync_binlog
is 1. To fix this
issue, a lock (LOCK_log
) is now held during
synchronization, and is released only after the binary events
are actually written to disk.
(Bug #17632285, Bug #70669)
Replication:
When running the slave with
slave_parallel_workers
at 1 or
greater, setting
--slave-skip-errors=all
caused
the error log to be filled with instances of the warning
Slave SQL: Could not execute Query event. Detailed
error: ;, Error_code: 0.
(Bug #17581990, Bug #68429)
References: See also: Bug #17986385.
Replication:
When semi-synchronous replication was configured on an
independent server with no slaves and
rpl_semi_sync_master_wait_no_slave
was set to OFF
, the master still waited for
an ACK
from the slave. When
rpl_semi_sync_master_wait_no_slave
is set to
OFF
, the master should revert to normal
replication when the number of slaves reaches zero during the
specified timeout period. Now in such cases the server checks
whether semi-synchronous replication is switched on, and, if so,
goes on to check whether any slaves are connected. If none are
connected, semi-synchronous replication is disabled until such
time that the user sets the value of
rpl_semi_sync_master_wait_no_slave
to
ON
.
(Bug #17510411, Bug #70360)
Replication:
A number of possible state messages used as values for the
PROCESSLIST_STATE
column of the
threads
Performance Schema table
were longer than the width of the column (64 characters).
The long state messages have now been rewritten, and shortened accordingly. This fix applies in MySQL 5.7 and later. (Bug #17319380)
Replication:
Seconds_Behind_Master
in the output of
SHOW SLAVE STATUS
could under
some conditions be reported as 0 when it should have had a value
greater than zero.
(Bug #17233214)
References: See also: Bug #16579028.
Replication: The server did not handle correctly the insertion of a row larger than 4 GB when using row-based replication. (Bug #17081415)
Replication: When using row-based replication, an additional auto-increment column on the slave version of a table was not updated correctly; a zero was inserted instead. (Bug #17066269, Bug #69680)
Replication:
Statements involving the Performance Schema tables should not be
written to the binary log, because the content of these tables
is applicable only to a given MySQL Server instance, and may
differ greatly between different servers in a replication
topology. The database administrator should be able to configure
(INSERT
,
UPDATE
, or
DELETE
) or flush
(TRUNCATE TABLE
) performance
schema tables on a single server without affecting others.
However, when replicating from a MySQL 5.5 master to a MySQL 5.5
or later slave, warnings about unsafe statements updating
Performance Schema tables were elevated to errors. For MySQL 5.6
and later slaves, this prevented the simultaneous use of
performance_schema
and GTIDs (see
Replication with Global Transaction Identifiers).
This fix causes all updates on tables in the
performance_schema
database to be filtered on
the master and not replicated, regardless of the type of logging
that is in effect. Prior to this fix, statements using were
handled by being marked as unsafe for replication, which caused
warnings during execution; the statements were nonetheless
written to the binary log, regardless of the logging format in
effect.
Existing replication behavior for tables in the
INFORMATION_SCHEMA
database is not changed by
this fix.
For more information, see MySQL Performance Schema. (Bug #16814264)
References: See also: Bug #14741537, Bug #18259193.
Replication: Invalid event offsets in the binary log were not always handled correctly, which could lead to replication failure. (Bug #16736412, Bug #69087)
Replication:
The semisynchronous replication plugin was called twice for a
DDL statement, incrementing
Rpl_semi_sync_master_yes_tx
by
2 instead of 1 each time such a statement was executed.
(Bug #70410, Bug #17509011)
Replication: Semisynchronous replication became very slow if there were many dump threads (such as from mysqlbinlog or slave I/O connections) working at the same time. It was also found that semisynchronous master plugin functions were called even when the dump connections did not support semisynchronous replication, which led to locking of the plugin lock as well as wasting time on necessary code.
After this fix, non-semisynchronous dump threads no longer call semisynchronous master functions to observe binary events. (Bug #70218, Bug #17434690)
Microsoft Windows:
On Microsoft Windows, the rw-lock backup implementation for the
my_atomic_*
functions was always used. Now,
the native Microsoft Windows implementation is used, where
available.
(Bug #18054042)
Microsoft Windows:
On Windows, the --local-service
server option did not work, and was not displayed in the
--help
message.
(Bug #69637, Bug #17049656)
Solaris:
MySQL distributions for Solaris now include a source tarball for
gcc under the share
directory, to comply with GPL conditions resulting from
inclusion of the C++ runtime library.
(Bug #18306484)
During compilation, attempts to create
sql_yacc.h
could be made from multiple
directories simultaneously.
(Bug #18319335)
mysql_secure_installation attempted to free memory incorrectly and exited abnormally after a failed attempt to read an option file. (Bug #18255657)
While printing the server version, the mysql client did not check for buffer overflow in a string variable. (Bug #18186103)
mysql_secure_installation exited if
mysql_install_db had been run with the
--skip-random-passwords
option.
(Bug #18181665)
Compilation failed if MySQL was configured with
CFLAGS
set to include a
-Werror
option with an argument.
(Bug #18173037)
When the optimizer attempted to use MRR or DS-MRR to read an internally created temporary table, the server could exit or raise an assertion. (Bug #18172819)
The default compiler flags are picked up from
cmake/build_configurations/compiler_options.cmake
.
This can be switched off by the CMake
-DWITH_DEFAULT_COMPILER_OPTIONS=0
option. However, it could also be switched off for the C or C++
compilers if the CFLAGS
or
CXXFLAGS
environment variables were set.
Those environment variables now have no such effect. To specify
compiler flags, use
-DWITH_DEFAULT_COMPILER_OPTIONS=0
option, or the
-DCMAKE_C_FLAGS=
and
flags
-DCMAKE_C_FLAGS=
options can be used.
(Bug #18158812)flags
A bug in the range optimizer code that handles index merge could lead to a server exit or missing rows in the result set. (Bug #18136628)
A shared libmysqld
embedded server library
was not built on Linux. A new
WITH_EMBEDDED_SHARED_LIBRARY
CMake option now makes this possible.
(Bug #18123048, Bug #16430656, Bug #68559)
Type casting during LIKE
pattern
match operations could cause a server exit.
(Bug #18114294)
mysql_config improperly produced nonempty
output when invoked with the
--libmysqld-libs
(or a
synonym) if MySQL was configured with the
WITHOUT_SERVER
option.
(Bug #18102839)
Repeated rebuilds in the same source tree resulted in
libmysqld.a
increasing in size each time.
(Bug #18082702)
SHOW GRANTS
could be used to view
the password hash for a proxied user. Password hash display now
requires the SUPER
privilege.
(Bug #18057514)
Building MySQL from source on Windows using Visual Studio 2008 failed with an identifier not found error due to a regression introduced by the patch for Bug#16249481. (Bug #18057449)
References: This issue is a regression of: Bug #16249481.
When tables are reopened from the table cache and the current
thread is not instrumented for the Performance Schema, the
server exited attempting to populate
OWNER_THREAD_ID
in the
table_handles
table.
(Bug #18047865)
Link failures were fixed on Solaris SPARC and Linux 64-bit platforms. (Bug #18004599)
A memory leak occurred within the Performance Schema during server startup. (Bug #18003651)
Building libevent
was incorrectly dependent
on MySQL being configured with the
-DWITH_INNODB_MEMCACHED=1
option.
(Bug #17964544)
During shutdown, a mutex that was still locked could be removed, causing a server exit. (Bug #17959898)
Compilation used different warning flags for Clang and GCC, producing different warning output depending on which compiler you use. Warning output is now consistent for the two compilers. (Bug #17959689)
On Solaris, configuration failed if no
STL_LIBRARY_NAME
was found.
(Bug #17954277)
storage/ndb/CMakeLists.txt
reset the
CMake cache for some compiler flags for which
the result should have been saved.
(Bug #17949504)
The SUM_SORT_MERGE_PASSES
column value in the
events_statements_summary_by_digest
Performance Schema table was calculated incorrectly.
(Bug #17938255)
If the
events_statements_summary_by_digest
Performance Schema table was full when a statement with a new
digest was found, the
Performance_schema_digest_lost
status variable was not incremented.
(Bug #17935314)
The audit log plugin could cause a server exit during log file rotation operations when there were many operations happening for multiple connections. (Bug #17930339)
DECIMAL NOT NULL
items could return
NULL
in subqueries.
(Bug #17921777)
FORCE INDEX [FOR ORDER BY]
(
did not work
for joins.
index_name
)
The fix for this bug also changes the warning created for
EXPLAIN
. Instead of printing only
{IGNORE|USE|FORCE} INDEX
it now also prints
FOR {GROUP BY|ORDER BY|JOIN}
if that was
specified in the query.
(Bug #17889511)
mysql_secure_installation exited if it connected using SSL and the user had an expired password. (Bug #17880395)
Shutdown of open connection threads could fail to occur cleanly during server shutdown. (Bug #17863690)
For debug builds, inserts into a multiple-table view could raise an assertion. (Bug #17834434)
The optimizer could push down a condition when the index did not have the key part present in the condition. (Bug #17814492)
With the compressed client/server protocol enabled, Performance Schema statement instrumentation could raise an assertion. (Bug #17794846)
The resetconnection
command for
mysql did not report proper errors if the
server was down or the user password had expired.
(Bug #17772561)
Contraction information in a collation could be mishandled, resulting in incorrect decisions about whether a character is part of a contraction, and miscalculation of contraction weights. (Bug #17760379)
An assertion could be raised if a filesort
failed to resize its main buffer when record properties changed.
(Bug #17757914)
Valgrind errors were produced during row comparator setup. (Bug #17755540)
The patch for Bug #16041903 introduced an incorrect
DBUG_ASSERT
that in debug builds raised a
spurious assertion.
(Bug #17746721)
References: This issue is a regression of: Bug #16041903.
Build and execution problems were fixed for builds made with gcc 4.8.1 in 32-bit mode on SPARC. (Bug #17740390)
Compilation failed if MySQL was configured using
-DWITH_LIBWRAP=1
.
(Bug #17738805)
For debug builds, the filesort
algorithm
could raise a spurious assertion.
(Bug #17734642)
The mysql_get_option
symbol was missing from
libmysql.dll
.
(Bug #17733103)
In some cases, UNIX_TIMESTAMP()
could return NULL
when it should return 0.
(Bug #17728371)
The server could exit when executing an INSERT ...
SELECT
with UNION
,
ROLLUP
, and ON DUPLICATE KEY
UPDATE
with a subquery.
(Bug #17727506)
References: This issue is a regression of: Bug #16967281.
The cache used for the Index Merge access method was freed only after successful retrieval of all rows. Interruption or failure of the operation led to a file descriptor leak. (Bug #17708621)
The optimizer calculated the cost for joined buffer scans incorrectly, evaluating rows filtered out by attached conditions not once, but once per join buffer. (Bug #17694707)
Using the mysqldump
--set-gtid-purged
option with
no value caused mysqldump to crash.
(Bug #17650245)
If SAFE_MUTEX
was enabled (true only for
debug builds), THR_LOCK_mutex
was used before
being initialized.
(Bug #17641055, Bug #70639)
A race condition between Performance Schema statement event threads led to a server exit. (Bug #17637970)
Incorrect reference counting in the range optimizer module resulted in potential for missing or duplicate rows in the query result set. (Bug #17619119)
For debug builds, an aggregate function in a subquery join condition could raise an assertion. (Bug #17602807)
After the fix for Bug #16409270, it was not possible to
#include <mysql.h>
following
#include <windows.h>
.
(Bug #17514554)
References: See also: Bug #16409270.
An addressing error in accessing the join buffer could produce invalid results or a server exit. (Bug #17513341)
The parser permitted some queries with multiple ORDER
BY
clauses, which then failed during execution and
caused a server exit.
(Bug #17473479)
For debug builds, the server could exit for statements that
inserted into a BLOB
column declared as
NOT NULL
using a subquery that retrieved from
a BLOB
column and included GROUP BY
NULL
.
(Bug #17458917)
Within a CASE
expression, use of a
subquery referencing the VALUES()
function could cause a server exit.
(Bug #17458914)
References: This issue is a regression of: Bug #14789787.
SET PASSWORD
combined with assignment of a
variable from a subquery result could raise an assertion.
(Bug #17458750)
Insufficient cleanup after removal of a
SELECT_LEX
structure caused dereferencing of
a NULL pointer and a server exit.
(Bug #17458169)
The parser silently accepted duplicate ORDER
BY
clauses and/or LIMIT
clauses
before ORDER BY
clauses in subqueries. These
caused failures during query execution. Fixing this problem
results in some changes in parser behavior. The parser no longer
accepts:
A LIMIT
clause before an ORDER
BY
clause
A LIMIT
clause in a parentheses-less
SELECT
statement before a
UNION
keyword
An INTO
clause after a PROCEDURE
ANALYSE()
clause
(Bug #17426017, Bug #17703542, Bug #17727401)
On Windows, mysql_secure_installation exited
if the root
password was expired.
(Bug #17415203)
mysql_config incorrectly included some flags to generate compiler warning output. (Bug #17400967)
With semijoin optimization enabled, queries with nested subqueries could cause a server exit due to incorrect resolution of references to columns in the middle query block. (Bug #17398972)
If accepting a connection attempt failed due to an out-of-memory error, the server could access a stale thread structure for a previously disconnected connection, resulting in Valgrind errors. (Bug #17398792)
The SHA256 password authentication algorithm allocated a buffer one byte too short. (Bug #17397073)
For CASE
expressions involving
floating-point numbers, the max_length
and
decimal
values could be computed incorrectly.
The logic for CASE
was corrected to
be the same as for COALESCE()
,
which performs a similar operation.
(Bug #17388045)
A client crash occurred if
mysql_set_server_option()
or
several other C API functions were called before
mysql_real_connect()
.
(Bug #17338958)
In some cases, the optimizer wrote fixed-length temporary
MyISAM
tables to disk rather than
variable-length temporary tables.
(Bug #17231940)
Enabling the validate_password
plugin could
result in incorrect password hashes being stored in the
mysql.user
table.
(Bug #17065383)
For debug builds, the second execution of a prepared statement processed using a semijoin could cause a server exit. (Bug #16988465)
A spurious assertion was raised for queries processed using a semijoin LooseScan optimization that required rows to be returned in order. (Bug #16977389)
A circular dependency problem involving
sql/sql_builtin.cc
was resolved.
(Bug #16877045)
For accounts authenticated using the
sha256_password
plugin, setting the password
after the password had been expired did not clear the
password-expired flag.
(Bug #16872181)
During server shutdown, file information was freed before
calling query_logger.cleanup()
, leading to a
memory leak.
(Bug #16859266)
For prepared INSERT INTO ... SELECT
statements, nonexistent column names were not reported during
statement preparation, but only later at statement execution.
(Bug #16820562)
Multiple-table updates failed to update under certain conditions. (Bug #16767011)
Crash recovery of temporary tables used uninitialized memory. (Bug #16754540)
On OS X 10.7, a race condition involving
vio_shutdown()
and the select-based
implementation of vio_io_wait()
could cause a
server exit.
(Bug #16354789, Bug #17733393)
Host names in example URLs used within the source code were replaced by names in the example.com domain, the domain intended by IANA for this purpose. (Bug #15890092)
For utf8
and utf8mb4
strings, handler functions unnecessarily called a Unicode
conversion function.
(Bug #14057034)
On OS X, preloading of client plugins specified with the
LIBMYSQL_PLUGINS
environment variable could
fail unless the plugins were located in the hardwired default
plugin directory. The C API now checks during plugin preloading
for a LIBMYSQL_PLUGIN_DIR
environment
variable which can be set to the path name of the directory in
which to look for client plugins.
(Bug #13994567, Bug #18110355)
Certain (... NULL ...) IN (...)
expressions
returned NULL
when they should return 0, such
as SELECT (NULL, 1) IN ((0, 0), (0, 0))
.
(Bug #13944462)
Several -W
warning flags were turned off for
compilation in maintainer mode if MySQL was configured with
-DWITH_INNODB_MEMCACHED=1
.
(Bug #13898319)
The optimizer set up for dynamic range access in some cases where range access cannot be used, resulting in fallback to a table scan. (Bug #13814468)
Executing mysqladmin shutdown for a server running with the thread pool plugin enabled and servicing a large number of concurrent connections caused the server to exit abnormally. (Bug #13788920)
Calling the ExtractValue()
function with an invalid XPath expression could in some cases
lead to a failure of the server.
(Bug #12428404, Bug #61065)
Use of a nonmultibyte algorithm for skipping leading spaces in multibyte strings could cause a server exit. (Bug #12368495, Bug #18315770)
With ONLY_FULL_GROUP_BY
SQL mode enabled, a
query that uses GROUP BY
on a column derived
from a subquery in the FROM
clause failed
with a column isn't in GROUP BY
error, if the
query was in a view.
(Bug #11923239)
mysqlbinlog leaked memory in relation to
--rewrite-db
processing.
(Bug #71283, Bug #18027692)
Previously, for EXPLAIN
output,
the rows-examined estimate for Performance Schema tables always
displayed as 1000. Now a more accurate estimate is displayed
based on sizing parameters used when allocating memory for each
table. This results in no change of behavior because Performance
Schema tables have no indexes.
(Bug #71278, Bug #18024455)
Optimizer trace output from the range optimizer could include raw binary data and generate unprintable characters. Now binary data is printed in hex format. (Bug #71273, Bug #18023222)
During configuration, CMake improperly
checked for the C++ header file cxxabi.h
.
(Bug #71268, Bug #18147458)
Aggregating the results of a subquery in the
FROM
clause could produce incorrect results.
(Bug #71244, Bug #18014565)
Previously, the first stage executed within a statement was
stage/sql/init
. This collided with a
different stage named init
and was
incompatible with the starting
stage for
SHOW PROFILE
. The first stage executed within
a statement is now named stage/sql/starting
.
Correspondingly, in SHOW
PROCESSLIST
output, some rows that previously showed a
State
value of init
now
show starting
.
(Bug #71201, Bug #17993294)
CMake produced a warning in
ssl.cmake
due to malformed syntax.
(Bug #71094, Bug #17905144)
CMake produced not-useful warnings about
INTERFACE_LINK_LIBRARIES
policy.
(Bug #71089, Bug #17905155, Bug #17894997)
mysqldump --single-transaction acquired metadata locks for each dumped table but did not release them until the dump operation finished. Consequently, other DDL operations on a dumped table blocked even after the table itself had been dumped. mysqldump now attempts to release metadata locks earlier. (Bug #71017, Bug #17862905)
sql_resolver.cc
referred to partitioning
code that should have been protected by an
#ifdef
, even when MySQL was configured with
-DWITH_PARTITION_STORAGE_ENGINE=OFF
.
(Bug #71010, Bug #17876794)
The
wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_sync
mutex was not properly instrumented for the Performance Schema.
(Bug #70939, Bug #17813333)
The
-DWITH_EXAMPLE_STORAGE_ENGINE=1
CMake option was ignored but should not have
been. If -DWITH_EXAMPLE_STORAGE_ENGINE=0
is
given, the EXAMPLE
storage engine
is built as a plugin.
(Bug #70859, Bug #17772560, Bug #30133062)
References: See also: Bug #18324650.
FLUSH STATUS
cleared a variable
that could result a subsequent implicit commit of an XA
transaction causing a server exit.
(Bug #70854, Bug #17911445)
Overhead was reduced within critical sections of the
my_fopen()
and
my_register_filename()
mysys
functions. Thanks to Po-Chun Chang for
the patch.
(Bug #70848)
Several issues identified by the Coverity static analysis tool were fixed. Thanks to Honza Horak for the patch. (Bug #70830, Bug #17760511)
A query that creates a temporary table to find distinct values and has a constant value in the projected list could produce incorrect results. (Bug #70657, Bug #17634335)
Configuring with -DWITH_DEBUG=1
did not have the same effect as configuring with
-DCMAKE_BUILD_TYPE=Debug
.
(Bug #70647, Bug #17632854)
The prototype of the Performance Schema instrumentation API
mysql_cond_timedwait()
call was fixed to be
drop-in compatible with
pthread_cond_timedwait()
. This fix affects
only implementors of third-party plugins.
(Bug #70628, Bug #17702677)
Some BETWEEN
expressions on
unsigned values were evaluated using signed arithmetic. Thanks
to Xiaobin Lin for the patch.
(Bug #70622, Bug #17606942)
An incorrect result could be returned for a query with an
IF()
predicate in the
WHERE
clause combined with OUTER
JOIN
in a subquery that is transformed to a semijoin.
(A workaround is to disable semijoin using SET
optimizer_switch='semijoin=off';
)
(Bug #70608, Bug #17600176)
The server wrote an excessive number of “Sort aborted” messages to the error log. (Bug #70173, Bug #17372396)
When run by root
, mysqld --help
--verbose exited with a nonzero error code after
displaying the help message.
(Bug #70058, Bug #17324415)
Complex updates of Performance Schema tables involving joins or subqueries failed to update every row. (Bug #70025, Bug #17309657)
For debug builds, JSON-format EXPLAIN
statements for queries that involve semijoin materialization
could cause a server exit.
(Bug #70014, Bug #17305943)
A deadlock error occurring during subquery execution could cause an assertion to be raised. (Bug #69969, Bug #17307201)
For an existing user, GRANT
with
an empty password (IDENTIFIED BY [PASSWORD]
''
) did not change the password.
(Bug #69899, Bug #17256161)
Downloading of the Google Mock library could fail during configuration. This is fixed by requiring CMake 2.8.2 or higher. (Bug #69854, Bug #17231722)
Some files in the file_instances
Performance Schema table were not being removed because the
file-removal operation was not instrumented.
(Bug #69782, Bug #17209750)
For the path specified with the
--basedir
option,
mysql_plugin attempted to unlink the path
rather than free the memory in which the path was stored.
(Bug #69752, Bug #17168602)
A temporal literal string without delimiters and more than 14
digits was validated as a TIMESTAMP/DATETIME
value with a two-digit precision fractional seconds part. But
fractional seconds should always be separated from other parts
of a time by a decimal point.
(Bug #69714, Bug #17080703)
For system variables that take a string value,
SET
statements permitted an unquoted value,
but values that contained dots were parsed incorrectly and only
part of the value was assigned. For example, SET GLOBAL
slow_query_log_file = my_slow.log
assigned the value
my_slow
. Now such values must be quoted or an
error occurs.
(Bug #69703, Bug #17075846)
It was not possible to query a view with an ORDER
BY
clause that referenced an alias in the
SELECT
clause of the view definition, unless
all columns in the view were named in the select list.
To handle this problem, the server now writes a view differently
into the .frm
file that stores the view
definition. If you experience view-evaluation errors such as
just described, drop and recreate the view so that the
.frm
file contains the updated view
representation.
(Bug #69678, Bug #17077305)
The mysqladmin,
mysqlbinlog, mysqlcheck,
mysqldump, mysqlimport,
mysqlslap, and mysqlshow
programs now support a --secure-auth
option
that prevents sending passwords to the server in old (pre-4.1)
format. This option is enabled by default; use
--skip-secure-auth
to disable it.
(Bug #69051, Bug #16723046)
For the utf8_bin
collation, ORDER BY
LOWER(
could
produce incorrect ordering.
(Bug #69005, Bug #16691598)col_name
)
MySQL client programs from a Community Edition distribution
could not connect using SSL to a MySQL server from an Enterprise
Edition. This was due to a difference in certificate handling by
yaSSL and OpenSSL (used for Community and Enterprise,
respectively). OpenSSL expected a blank certificate to be sent
when not all of the --ssl-ca
,
--ssl-cert
, and --ssl-key
options were specified, and yaSSL did not do so. To resolve
this, yaSSL has been modified to send a blank certificate when
an option is missing.
(Bug #68788, Bug #16715064)
A full-text search combined with derived tables (subqueries in
the FROM
clause) caused a server exit.
Now if a full-text operation depends on a derived table, the server produces an error indicating that a full-text search cannot be done on a materialized table. (Bug #68751, Bug #16539903)
COUNT(DISTINCT) sometimes produced an incorrect result when the
last read row contained a NULL
value.
(Bug #68749, Bug #16539979, Bug #71028, Bug #17867117)
Some scripts displayed out-of-date information regarding where to report bugs. (Bug #68742, Bug #16530527)
Updating a FEDERATED
table with
UPDATE... JOIN
caused a server exit when the
local table contained a single row and that row could be joined
to a row in the FEDERATED
table.
(Bug #68354, Bug #16324629)
Messages written by the server to the error log for LDML collation definition problems were missing the collation name. (Bug #68144, Bug #16204175)
mysqlcheck did not correctly handle table names containing dots. (Bug #68015, Bug #16064833)
Compilation problems were fixed for errors reported by Clang and gcc when compiling in C++11 mode. (Bug #66803, Bug #14631159)
cmake/configure.pl listed instances of
WITH_COMMENT
rather than the correct option
COMPILATION_COMMENT
.
(Bug #65834, Bug #14298560)
The make_atomic_cas_body64
implementation on
IA32 with gcc but without
gcc builtins could be miscompiled due to an
incorrect constraint. The patch also causes MySQL to use builtin
atomics when compiled using Clang.
(Bug #63451, Bug #17242996)
On OS X, the libmysqlclient
dylib file linked
to itself.
(Bug #61699, Bug #13890998, Bug #61243, Bug #12590037)
The optimizer could choose
ref
access over
eq_ref
access when cost of a
nonunique access was evaluated before cost of a unique index.
(Bug #54808, Bug #11762236)
On Windows, mysql_install_db.pl could be run
only from within the bin
directory under
the installation directory.
(Bug #42421, Bug #11751526)
gcov printed warnings without file names. (Bug #33269, Bug #11747622)
mysql_install_db
referred to the obsolete
mysqlbug script for reporting problems. It
now refers to http://bugs.mysql.com/ instead.
(Bug #29716, Bug #11746921)