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.)
In Memoriam
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. (WL #4024)
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
NoteThe change described here to make
ERROR_FOR_DIVISION_BY_ZERO
,NO_ZERO_DATE
, andNO_ZERO_IN_DATE
do nothing when named explicitly and include them in strict mode was reverted in MySQL 5.7.8 (see 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
, andNO_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
orSTRICT_TRANS_TABLES
). In other words, strict mode now means the same thing as the previous meaning of strict mode plus theERROR_FOR_DIVISION_BY_ZERO
,NO_ZERO_DATE
, andNO_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
, andNO_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. (WL #7467) InnoDB: The
UNIV_LOG_DEBUG
debug flag, which is no longer fully functional, has been removed. (Bug #18080537)InnoDB: The
innodb_use_sys_malloc
andinnodb_additional_mem_pool_size
system variables, which were deprecated in MySQL 5.6.3, are removed in MySQL 5.7.4. (WL #7628)InnoDB: The
InnoDB
Tablespace Monitor andInnoDB
Table Monitor were removed in MySQL 5.7.4. Table and tablespace metadata can be obtained fromINFORMATION_SCHEMA
tables. (WL #7377)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. (WL #6973)The deprecated
IGNORE
clause forALTER TABLE
has been removed and its use produces an error. (WL #7395)-
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
andmetadata_locks_hash_instances
system variables no longer have any effect, so they are deprecated and will be removed in a future MySQL release. (WL #7305, WL #7306)
-
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. (WL #5768)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 ofN
greater than zero means that passwords have a lifetime ofN
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 ofN
greater than zero means that the password has a lifetime ofN
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 thepassword_last_changed
column and setspassword_lifetime
toNULL
. 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. (WL #7131)
-
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 asroot
using the random password and useSET 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.
Notemysql_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. (WL #6962, WL #6977)
-
Incompatible Change: The
AES_ENCRYPT()
andAES_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 isaes-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()
orAES_DECRYPT()
unsafe for statement-based replication and they cannot be stored in the query cache. Queries that useRANDOM_BYTES()
are unsafe for statement-based replication and cannot be stored in the query cache. (WL #6781) 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 of1
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 theInnoDB
master thread. (WL #6642)InnoDB:
InnoDB
now supports the Transportable Tablespace feature for partitionedInnoDB
tables and individualInnoDB
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, WL #6867, WL #6868)InnoDB: Parameters used to identify an
InnoDB
pages are replaced by two new classes, andfold
value andzip_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 ofO_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 reducesblock->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 anInnoDB
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
andinnodb_status_output_locks
, allow you to dynamically enable and disable the standardInnoDB
Monitor andInnoDB
Lock Monitor for periodic output. Previously, enabling and disabling these monitors for periodic output required creating and dropping specially named tables (innodb_monitor
andinnodb_lock_monitor
). For additional information, see InnoDB Monitors. (WL #7377)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, WL #7299)
-
Replication: It is now possible in many cases to execute
CHANGE MASTER TO
without first issuingSTOP SLAVE
. This capability is added by implementing the following changes in the behavior of theCHANGE 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 theRELAY_LOG_FILE
,RELAY_LOG_POS
, andMASTER_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 exceptRELAY_LOG_FILE
,RELAY_LOG_POS
, orMASTER_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
withMASTER_AUTO_POSITION = 1
.
If you are using statement-based replication and temporary tables, it is possible for a
CHANGE MASTER TO
statement following aSTOP 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 thatSlave_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. (WL #6120)
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. (WL #7205)
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 theADD_DEFINITIONS()
CMake macro rather than inconfig.h.cmake
so that it is set even without includingmy_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, WL #7385)
The
CHECK_FUNCTION_REPLACEMENT()
CMake macro was removed fromWindows.cmake
and replacement functions are set explicitly instead since the result of the check was already hard coded inWindowsCache.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 thanMyISAM
as the default storage engine. All tests in the MySQL test suite were modified to include aforce_default_myisam.inc
file. This had to be done because most legacy test results were recorded with theMyISAM
engine and failed with a result difference if run withInnoDB
. A project is underway to migrate these tests and removeforce_default_myisam.inc
for tests that do not needMyISAM
. In 5.7.4, therpl
andbinlog
suites and parts of the main suite were migrated. (Bug #17902011, WL #7402, WL #7263, WL #7279)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. NowALTER TABLE
upgrades old temporal columns to 5.6 format forADD COLUMN
,CHANGE COLUMN
,MODIFY COLUMN
,ADD INDEX
, andFORCE
operations. This conversion cannot be done using theINPLACE
algorithm because the table must be rebuilt, so specifyingALGORITHM=INPLACE
in these cases results in an error. SpecifyALGORITHM=COPY
if necessary.When
ALTER TABLE
does produce a temporal-format conversion, it generates a message that can be displayed withSHOW 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
andLIBMYSQL_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
andMYSQL_VERSION_ID
. For example, in MySQL 5.7.4,MYSQL_SERVER_VERSION
andLIBMYSQL_VERSION
are"5.7.4-m14"
, andMYSQL_VERSION_ID
andLIBMYSQL_VERSION_ID
are50704
.In the client library included with Connector/C distributions,
MYSQL_SERVER_VERSION
andMYSQL_VERSION_ID
have the values of the MySQL version on which the Connector/C distribution is based, whereasLIBMYSQL_VERSION
andLIBMYSQL_VERSION_ID
indicate the Connector/C version. For example, Connector/C 6.1.3 is based on MySQL 5.7.4, soMYSQL_SERVER_VERSION
andMYSQL_VERSION_ID
have values of"5.7.4-m14"
and50704
, whereasLIBMYSQL_VERSION
andLIBMYSQL_VERSION_ID
have values of"6.1.3"
and60103
.
In addition, the
mysql_get_client_info()
andmysql_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()
returnsMYSQL_SERVER_VERSION
andmysql_get_client_version()
returnsMYSQL_VERSION_ID
. This is the same as before.In Connector/C distributions,
mysql_get_client_info()
returnsLIBMYSQL_VERSION
andmysql_get_client_version()
returnsLIBMYSQL_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 defaultdir_name
tmpdir
value. If unspecified, the value defaults toP_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 aMAX_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 forSELECT
statements executed within the session that include noMAX_STATEMENT_TIME
option. If the value is 0, timeouts are not enabled.The
Max_statement_time_exceeded
,Max_statement_time_set
, andMax_statement_time_set_failed
status variables provide information aboutSELECT
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, WL #6936)
-
Overhead was reduced for metadata lock acquisition for DML statements. (Bug #58627, Bug #11765641, WL #7304)
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 fortime_zone
,autocommit
,character_set_client
,character_set_results
, andcharacter_set_connection
. (The latter three variables are those affected bySET 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 tomysql_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
, orSESSION_TRACK_SYSTEM_VARIABLES
as thetype
argument to themysql_session_track_get_first()
andmysql_session_track_get_next()
functions. For more information, see Server Tracking of Client Session State.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
anddisable_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. (WL #4797, WL #6885)
-
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.NoteAs 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 thesha256_password
plugin.(Bug #17495562)
Important Change; InnoDB; Partitioning: The
FLUSH TABLES
statement'sFOR EXPORT
option is now supported for partitionedInnoDB
tables. (Bug #16943907)InnoDB; Replication: Attempting to reset a replication slave while
innodb_force_recovery
is greater than0
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 asrelay_log_info_repository=TABLE
andmaster_info_repository=TABLE
store information in tables inInnoDB
. Wheninnodb_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) withinnodb_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 thePAUSE
assembler instruction. (Bug #18122171)InnoDB: A
!sync_check_iterate(check)
assertion occurred infts_create_doc_id()
during anINSERT
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
andtruncate_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 thanmax_proximity_item
could result in an assertion. (Bug #18233051)InnoDB: An invalid
memmove
infts_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 beforelog_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 ofulong
. (Bug #18180057, Bug #71554)InnoDB: An
UPDATE
resulted in a memory access error inlock_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 ofinnodb_thread_sleep_delay
is limited by the value set forinnodb_adaptive_max_sleep_delay
(when set to a nonzero value), the maximum value forinnodb_thread_sleep_delay
is now the same as the maximum value forinnodb_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 theINSERT
would succeed. (Bug #18064548)InnoDB: Specifying an alternate directory for
InnoDB
tables usingdatadir
and then moving .ibd files to the default MySQLdata
directory would result in a serious error when attempting aDROP TABLE
operation. (Bug #18063570)InnoDB: Attempting to uninstall the
InnoDB
memcached plugin while theInnoDB
memcached plugin is still initializing would kill theInnoDB
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 thelock_print_info_summary()
function due to a race condition between thesrv_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,
andmessage
)fputs()
withib_logf()
. Also, becauseib_logf()
emits a timestamp with each message, the bug fix removes unnecessary occurrences ofut_print_timestamp()
. (Bug #17935793, Bug #17534737, WL #6755)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 theInnoDB
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 insync_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 therow_log_table_apply_update
function. For normal builds, aDB_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 forAGAINST()
could result in an error when run on anInnoDB
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
orREPLACE
statements encounter aDB_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 callos_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 anALTER 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 theSYS_DATAFILES
table would not be not updated. TheSYS_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 improveCREATE TABLE
performance, there is now a singleCOMMIT
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 fromtrx_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 thatbtr_cur_pessimistic_update()
andbtr_cur_optimistic_update()
would accept a NULL value. (Bug #17231743, Bug #69847)InnoDB:
dict_table_schema_check
would calldtype_sql_name
needlessly. (Bug #17193801, Bug #69802)InnoDB:
fil_check_first_page()
failed to check iffsp_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 inlock0lock.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 onlineALTER 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 theALTER 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. Thesrv_shutdown_state
type name has been changed tosrv_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 wheninnodb_data_file_path
specified the data file size in kilobytes by appendingK
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
(defaultON
), 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 theSHOW 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 callut_2_power_up
for workloads with a high I/O rate. The calculation is now performed once and the result is stored in thebuf_pool_t
structure. (Bug #11762242, Bug #54814)InnoDB:
UNIV_SYNC_DEBUG
, which was disabled inuniv.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 byHASH
. (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 bySTART SLAVE
resulted in a mismatch between the information provided byINFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO
and theSlave_open_temp_tables
status variable: theINNODB_TEMP_TABLE_INFO
table showed that no temporary tables existed, butSlave_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 inCHANGE MASTER TO
, the statement resetSlave_heartbeat_period
to its default value andSlave_received_heartbeats
to 0. Now the heartbeat period is not changed byCHANGE MASTER TO
unless explicitly set usingMASTER_HEARTBEAT_PERIOD
. In addition, the statement no longer resetsSlave_received_heartbeats
. (Bug #18185490)Replication: After setting
MASTER_SSL_CRLPATH
using aCHANGE MASTER TO
statement, the option value was not displayed properly in theSSL_CRL_PATH
column of thereplication_connection_configuration
Performance Schema table. (Bug #18174719)Replication: The
MASTER_SSL_CRL
andMASTER_SSL_CRLPATH
options are not available when using yaSSL; MySQL Replication now sets these toNULL
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 withSTOP SLAVE
andSTART 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 withgtid_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 withgtid_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 reportingMASTER_SSL_CRL
andMASTER_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—inmysqld.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 whensync_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 toOFF
, the master still waited for anACK
from the slave. Whenrpl_semi_sync_master_wait_no_slave
is set toOFF
, 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 ofrpl_semi_sync_master_wait_no_slave
toON
. (Bug #17510411, Bug #70360)-
Replication: A number of possible state messages used as values for the
PROCESSLIST_STATE
column of thethreads
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 ofSHOW 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
, orDELETE
) 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 ofperformance_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 theCFLAGS
orCXXFLAGS
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=
andflags
-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 newWITH_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 theWITHOUT_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 theSUPER
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 thetable_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 theevents_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, thePerformance_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 returnNULL
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 printsFOR {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 fromlibmysql.dll
. (Bug #17733103)In some cases,
UNIX_TIMESTAMP()
could returnNULL
when it should return 0. (Bug #17728371)-
The server could exit when executing an
INSERT ... SELECT
withUNION
,ROLLUP
, andON 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 asNOT NULL
using a subquery that retrieved from aBLOB
column and includedGROUP BY NULL
. (Bug #17458917)-
Within a
CASE
expression, use of a subquery referencing theVALUES()
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/orLIMIT
clauses beforeORDER 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 anORDER BY
clauseA
LIMIT
clause in a parentheses-lessSELECT
statement before aUNION
keywordAn
INTO
clause after aPROCEDURE 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, themax_length
anddecimal
values could be computed incorrectly. The logic forCASE
was corrected to be the same as forCOALESCE()
, which performs a similar operation. (Bug #17388045)A client crash occurred if
mysql_set_server_option()
or several other C API functions were called beforemysql_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 themysql.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 ofvio_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
andutf8mb4
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 aLIBMYSQL_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 returnedNULL
when they should return 0, such asSELECT (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 usesGROUP BY
on a column derived from a subquery in theFROM
clause failed with acolumn 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 namedinit
and was incompatible with thestarting
stage forSHOW PROFILE
. The first stage executed within a statement is now namedstage/sql/starting
. Correspondingly, inSHOW PROCESSLIST
output, some rows that previously showed aState
value ofinit
now showstarting
. (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, theEXAMPLE
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()
andmy_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 withpthread_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 theWHERE
clause combined withOUTER JOIN
in a subquery that is transformed to a semijoin. (A workaround is to disable semijoin usingSET 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 valuemy_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 theSELECT
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 withUPDATE... JOIN
caused a server exit when the local table contained a single row and that row could be joined to a row in theFEDERATED
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 optionCOMPILATION_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 overeq_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)