MySQL 5.7 Release Notes

42 Changes in MySQL 5.7.4 (2014-03-31, Milestone 14)

Note

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.

Character Set Support

  • 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)

Compilation Notes

  • 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.

Deprecation and Removal Notes

  • Incompatible Change

    Note

    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 38, “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. (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 and innodb_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 and InnoDB Table Monitor were removed in MySQL 5.7.4. Table and tablespace metadata can be obtained from INFORMATION_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 for ALTER 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 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. (WL #7305, WL #7306)

Performance Schema Notes

  • 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):

    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.

Security Notes

  • 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. (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 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.

    Note

    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. (WL #6962, WL #6977)

Functionality Added or Changed

  • 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. (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 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. (WL #6642)

  • 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, WL #6867, WL #6868)

  • 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:

    (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. (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 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. (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/path/to/library so that libraries can be found at runtime. (Bug #18235669)

  • 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, WL #7385)

  • 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, 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. 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:

    (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=dir_name option to specify the default 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, 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:

    • 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:

    • 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. (WL #4797, WL #6885)

Bugs Fixed

  • 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.

    Note

    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, message) and 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, 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 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=flags and -DCMAKE_C_FLAGS=flags options can be used. (Bug #18158812)

  • 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] (index_name) did not work for joins.

    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(col_name) could produce incorrect ordering. (Bug #69005, Bug #16691598)

  • 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)