MySQL Changelog

What's new in MySQL 8.0.12

Jul 28, 2018
  • Bugs Fixed:
  • Important Change; JSON: The JSON_TABLE() function now automatically decodes base-64 values and prints them using the character set given by the column specification. (Bug #90157, Bug #27729112)
  • References: See also: Bug #89847, Bug #27613276.
  • InnoDB: New columns added to INFORMATION_SCHEMA.INNODB_TABLES and INFORMATION_SCHEMA.INNODB_COLUMNS tables in 8.0.12 did not appear after upgrading to 8.0.12. (Bug #28065244)
  • InnoDB: Large object (LOB) version numbers stored in LOB index entries were left uninitialized at 0 instead of initialized at 1. (Bug #28046298)
  • InnoDB: Adding a column to a table with a generated column raised an invalid assertion. (Bug #28040201)
  • InnoDB: An attempt to access freed memory during a checkpoint operation caused the server to exit. (Bug #28039477)
  • InnoDB: An assertion failure occurred when starting the server with experimental system variables that were unintentionally exposed in normal MySQL builds. (Bug #27899424, Bug #90526, Bug #27898396, Bug #90523, Bug #27898344, Bug #90522)
  • InnoDB: An invalid system variable setting raised an assertion. (Bug #27898284)
  • InnoDB: Attempting to move a table from a discarded file-per-table tablespace to a shared tablespace raised an assertion. The operation now produces an error instead. (Bug #27861972)
  • InnoDB: Potential failures related to page allocation for large objects (LOBs) were not sufficiently handled. (Bug #27852003)
  • InnoDB: The ngram full-text search parser permitted comma and period characters to be tokenized as words, which caused an inconsistency between boolean and natural language mode search results. Comma and period characters are no longer tokenized. (Bug #27847697)
  • InnoDB: Checksum mismatches and other issues were caused by concurrent modification of a tablespace header page, and attempting to place a lock on a partially initialized page. (Bug #27823064)
  • InnoDB: An I/O error returned by an fsync() operation is now treated as a hard error. (Bug #27805553, Bug #90296)
  • InnoDB: In a single thread, two minitransactions latched the first page of a large object value (LOB) while another thread attempted to allocate the page, causing a deadlock. (Bug #27777959)
  • InnoDB: After upgrading to MySQL 8.0.12, table columns including the FTS_DOC_ID column were missing from the INFORMATION_SCHEMA.INNODB_COLUMNS table. (Bug #27774145)
  • InnoDB: An invalid assertion was raised when the optimizer chose a prefix index defined on a virtual column. (Bug #27755892)
  • References: This issue is a regression of: Bug #19806106.
  • InnoDB: An in-memory table object for a table being truncated could be opened under improper metadata locking protection.
  • A new method of preserving the AUTOINC counter value during a TRUNCATE PARTITION operation was implemented. (Bug #27754995)
  • InnoDB: The Variance-Aware Transaction Scheduling algorithm (VATS) tracks the number of transactions waiting for another transaction. In the case of a deadlock, the method by which the number of waiting transactions is approximated produced inflated values. (Bug #27646322)
  • InnoDB: Attempting to acquire an InnoDB ticket while holding a victim transaction lock caused a lock order violation. (Bug #27626681)
  • References: This issue is a regression of: Bug #23476050.
  • InnoDB: An attempt to read a zero-length BLOB value raised an assertion failure during recovery. The BLOB value was not yet completely inserted. (Bug #27617389)
  • InnoDB: A race condition occurred when acquiring a table lock for a table that was already in memory. (Bug #27586419, Bug #27577704)
  • References: This issue is a regression of: Bug #26848711.
  • InnoDB: After restarting the server, attempting to create an encrypted table returned a generic error from the storage engine. (Bug #27577339)
  • InnoDB: The use of Variance-Aware Transaction Scheduling (VATS) with a spatial index caused a transaction to wait indefinitely. (Bug #27572937)
  • InnoDB: Incorrect parsing of a tablespace name that included multibyte characters caused a DROP DATABASE operation to fail. (Bug #27566937)
  • InnoDB: A check performed to identify temporary tables caused an error when the data dictionary attempted to open a partitioned table. (Bug #27565997)
  • InnoDB: A schema mismatch error reported during an import tablespace operation failed to print mismatched table flags in a readable format. (Bug #27542720)
  • InnoDB: A DDL operation failed to wait for a FULLTEXT index optimization operation to finish. (Bug #27326796)
  • References: This issue is a regression of: Bug #24938374.
  • InnoDB: An unnecessary check for read-only transactions was removed from the trx_set_rw_mode() function. Thanks to Sandeep Sethia for the patch. (Bug #27211287, Bug #88739)
  • InnoDB: A DDL operation that added a foreign key constraint raised an assertion when it accessed a stale memory object that belonged to the parent table. (Bug #27208858)
  • InnoDB: A failing assertion occurred after initiating a memcached get operation. (Bug #26876594)
  • InnoDB: A corrupt index ID encountered during a foreign key check raised an assertion. (Bug #26654685)
  • InnoDB: A DROP TABLE operation on a table residing in a general tablespace raised an assertion when checking index status in the post-DDL phase of the operation. (Bug #26523254)
  • InnoDB: An internal deadlock during a DDL operation resulted in a long semaphore wait followed by a server exit. (Bug #26225783)
  • InnoDB: A DDL operation encountered a serious error due to an invalid lock upgrade. (Bug #26225783)
  • InnoDB: On a Windows 64-bit system, invalid buffer pool configuration values caused the server to exit on startup. (Bug #26100239, Bug #86370)
  • InnoDB: A debug code block related to mutex type definitions was removed. It no longer differed from the non-debug version of the code block. (Bug #24952279, Bug #83529)
  • InnoDB: A server failure during recovery occurred due to a log parsing buffer overflow. Space is now allocated to the log parsing buffer dynamically and incremented as necessary until it reaches the size specified by innodb_log_buffer_size. (Bug #24734190)
  • Packaging: On Windows, the mysqld.exe --help command displayed unnecessary and unexpected details in the system output, which this fix eliminates. (Bug #27894020)
  • Partitioning: Rollback of ALTER TABLE ... TRUNCATE PARTITION statements was not handled correctly. (Bug #27603025)
  • References: See also: Bug #87562, Bug #26710839.
  • Partitioning: For a partitioned table, partition update time could be incorrect after rebuilding the table or restarting the server. (Bug #27073100)
  • Replication: The gtid_purged variable contains the binary log events that have been purged from the log by the server. When running the Group Replication plugin this variable should never be modified, but it was possible. Now the variable cannot be modified when Group Replication is running. (Bug #27724561)
  • Replication: If the option --skip-log-bin was specified at server startup to disable binary logging, no warning message was issued if both expire_logs_days and binlog_expire_logs_seconds were set to a nonzero value. The --skip-log-bin option meant there were no binary log files to expire, so the outcome of these binary log expiration period settings (which is that the expire_logs_days value is ignored) had no practical effect. However, the warning message is now issued, so that the situation can be corrected before binary logging is enabled for the server. (Bug #27699608)
  • Replication: The PIT_TRANSACTIONS_NEGATIVE_CERTIFIED, the PIT_TRANSACTIONS_ROWS_VALIDATING and the PIT_TRANSACTIONS_LOCAL_ROLLBACK member messages were not being correctly decoded. (Bug #27692831)
  • Replication: The log messages generated when a member fails to join the group have been improved, for example when group_replication_group_name on the member joining the group does not match the seed's group_replication_group_name this is now described in the log message. (Bug #27628695)
  • Replication: The SYSTEM_VARIABLES_ADMIN and PERSIST_RO_VARIABLES_ADMIN privileges have been added to the mysql.session_user. (Bug #27621869)
  • Replication: The ER_GRP_RPL_SQL_SERVICE_FAILED_TO_RUN_SQL_QUERY error was being logged incorrectly. (Bug #27590534)
  • Replication: If a MySQL server is started in crash recovery mode with an innodb_force_recovery setting of 4 or greater, which places InnoDB into read-only mode, the semisynchronous replication master plugin should not be initialized. Due to a change in plugin initialization order in MySQL 8.0, the server assumed that if the plugin was registered, it had also been initialized, and incorrectly attempted to deinitialize it. The handling of this plugin in crash recovery mode has now been corrected so that the deinitialization function is not executed when the plugin has not been initialized. (Bug #27481872)
  • Replication: The use of replication filters or binary log filters can cause issues when they are applied to tables that are updated with XA transactions. Filtering of tables could cause an XA transaction to be empty on a replication slave, and empty XA transactions are not supported. Also, with the settings master_info_repository=TABLE and relay_log_info_repository=TABLE on a replication slave, which became the defaults in MySQL 8.0, the internal state of the data engine transaction is changed following a filtered XA transaction, and can become inconsistent with the replication transaction context state.
  • Due to these issues, the use of replication filters or binary log filters in combination with XA transactions is not supported. This fix adds the new error ER_XA_REPLICATION_FILTERS, which is logged whenever an XA transaction is impacted by a replication filter, whether or not the transaction was empty as a result. If the transaction is not empty, the replication slave is able to continue running, but you should take steps to discontinue the use of replication filters with XA transactions in order to avoid potential issues. If the transaction is empty, the replication slave stops. In that event, the replication slave might be in an undetermined state in which the consistency of the replication process might be compromised. In particular, the gtid_executed set on a slave of the slave might be inconsistent with that on the master. To resolve this situation, isolate the master and stop all replication, then check GTID consistency across the replication topology. Undo the XA transaction that generated the error message, then restart replication. (Bug #27442477)
  • Replication: When mysqlbinlog was used to read a binary log event larger than 128KB, the read failed because 128KB was returned as the size, instead of the actual size. The issue has now been fixed. Thanks to the Facebook team for the patch. (Bug #27417084, Bug #89326)
  • Replication: When a transaction larger than the binary log transaction cache size (binlog_cache_size) was flushed to a temporary file during processing, and the flush failed due to a lack of space in the temporary directory, the flush error was not handled correctly. No message was written to the error log, and the binary log cache was not cleared after the transaction was rolled back. Now, in this situation, the server takes an appropriate action based on the binlog_error_action setting (shut down the server or halt logging), and writes a message to the error log. When the transaction is rolled back, the server checks for flush errors and clears the binary log cache if any occurred. (Bug #27399620, Bug #89272)
  • Replication: When GTIDs are in use for replication, replicated transactions that are filtered out on the slave are persisted. If binary logging is enabled on the slave, the filtered-out transaction is written to the binary log as a Gtid_log_event followed by an empty transaction containing only BEGIN and COMMIT statements. If binary logging is disabled, the GTID of the filtered-out transaction is written to the mysql.gtid_executed table. This process ensures that there are no gaps in the set of executed GTIDs, and that the filtered-out transactions are not retrieved again if the slave reconnects to the master. Previously, this process was not done for CREATE DATABASE, ALTER DATABASE, and DROP DATABASE statements, but it is now carried out for those statements as well as for others. (Bug #27308751, Bug #88891)
  • Replication: On a multithreaded slave, when a STOP SLAVE statement is executed on the slave, followed by a START SLAVE statement, the error log can report a different position in the binary log for the slave SQL thread when exiting, compared to the position reported for the slave SQL thread at the subsequent initialization.
  • For a multithreaded slave, the position reported for the SQL thread on exit is a low water mark, up to which the replication stream is consistent and has no gaps. Transactions appearing before the position are guaranteed to have committed, but transactions after the position may have committed or not. However, this low water mark was being reported before the process to stop the worker threads was actually carried out, and the low water mark was subsequently updated by a checkpoint routine during that process. The timing of the log message has now been changed so that the final low water mark is reported as the position for the SQL thread on exit. (Bug #27300658)
  • Replication: Using group_replication_force_members to unblock a group, for example after losing majority, sometimes failed with error 1231. (Bug #26394418)
  • Replication: In certain situations, such as during distributed recovery procedure, the certification info garbage collection was purging more data than it should, resulting in conflicts not being detected. The garbage collection procedure has been improved to take this case in consideration. (Bug #89938, Bug #27652526)
  • Replication: When the group_replication_applier channel's applier thread encountered an error, the master_log_name and end_log_pos in the error message were incorrect. In Group Replication, the events of a transaction are replicated before they are written to the binary log of the member where the transaction originated. The result is that the final master_log_name and the end_log_pos of those events are unknown at the time they are applied on the replica by group_replication_applier channel's applier thread. To avoid confusion, now any such error messages encountered by a group_replication_applier channel do not contain the binary log name and the binary log position. (Bug #89146, Bug #27368735)
  • Microsoft Windows: For debug builds on Windows, CREATE SPATIAL REFERENCE SYSTEM with an empty definition string could raise assertions. (Bug #27672683)
  • In the client library, signals were incorrectly unblocked for ppoll(). Thanks to Facebook for the patch. (Bug #28075623, Bug #90999, Bug #28096808, Bug #91067)
  • Certain ALTER TABLE statements could disable table encryption. (Bug #28045585)
  • References: This issue is a regression of: Bug #27389878.
  • Under some conditions, MyISAM code compilation failed due to a missing include file. (Bug #28039150, Bug #90898)
  • The REGEXP_REPLACE() function truncated its result when used in an UPDATE statement. (Bug #28027093, Bug #90870)
  • REGEXP_REPLACE() results from one result set row could carry forward to the next row, resulting in accumulation of previous results in the current row. (Bug #27992118, Bug #90803)
  • A heap overflow vulnerability in the MySQL client library was fixed. (Bug #27980823)
  • Users who had the SUPER privilege were not permitted to modify the keyring_operations system variable. (Bug #27976270)
  • Full-text search auxiliary tables created in MySQL 5.7 and MySQL 8.0.11 with timestamps of 0 caused a data dictionary upgrade failure when upgrading from MySQL 8.0.11 to MySQL 8.0.12. (Bug #27960500)
  • A “source and destination overlap in memcpy” Valgrind error was returned when upgrading from MySQL 5.7. (Bug #27945658, Bug #90691)
  • Linux binaries were unable to dump core after executing a setuid() call. (Bug #27929894, Bug #90642, Bug #23337428, Bug #21723)
  • RESET PERSIST did not flush variable values from memory. (Bug #27924206)
  • For debug builds, using CREATE TABLE ... SELECT to create a table with a long numeric string and indexing the column could lead to an assertion being raised. (Bug #27909771)
  • For debug builds, RESET PERSIST for an unknown variable could cause an assertion to be raised. (Bug #27903874, Bug #90546)
  • References: This issue is a regression of: Bug #27374791.
  • Updates to column metadata of a view referencing a partitioned table could cause a server exit. (Bug #27903842)
  • For debug builds, an assertion could be raised for UNION queries when computing the combined data type of a GEOMETRY column and SELECT * FROM (SELECT NULL). (Bug #27903792, Bug #90550)
  • For debug builds, starting the server with thread_stack=0 and executing ALTER TABLE could raise an assertion. (Bug #27899274, Bug #90525)
  • SHOW TABLE STATUS could cause a server exit. (Bug #27897815)
  • For generated columns that used the INTERVAL() function, incorrect behavior could occur. (Bug #27881102)
  • For Fedora 28, MySQL Community RPM packages would not install if Connector ODBC native packages were installed. (Bug #27850721)
  • It was possible to drop the Performance Schema. (Bug #27830283)
  • A runtime error could occur for calls to mysql_sys_var_longlong() or String::copy(). (Bug #27822413, Bug #27808412)
  • An assertion was raised by error logging code that used an inappropriate error number. (Bug #27792903)
  • References: This issue is a regression of: Bug #27462408.
  • The CONVERT TO CHARACTER SET charset_name clause for ALTER TABLE produced a syntax error if charset_name was DEFAULT. (Bug #27760787, Bug #90222)
  • References: This issue is a regression of: Bug #27389878.
  • An unencrypted connection could result from a client connection attempt specifying that an encrypted connection was required, if the server was not configured to support SSL. (Bug #27759871)
  • INSERT INTO ... SELECT did not perform as many checks as INSERT INTO ... VALUES() with respect to requiring valid geometry values for geometry columns. (Bug #27756083)
  • REGEXP_INSTR() did not return an error message when used with invalid match mode flags. (Bug #27751277)
  • Some data dictionary table definitions were modified to align more closely with their initial design. Additionally, the data dictionary version number was incremented, and code that refers to data dictionary table indexes now uses symbolic index names instead of numeric values. (Bug #27745526, Bug #90196)
  • Executing a prepared statement to insert rows with large number of parameters was very slow. (Bug #27699248)
  • ibd2sdi could exit due to performing a divide-by-zero operation. (Bug #27692051, Bug #90071)
  • The mysql-boost-8.0.4.tar.gz source distribution omitted NDB sources. (Bug #27690232)
  • SHOW GRANTS could cause a server exit if executed for an unprivileged user who inherited privileges from an anonymous user. (Bug #27678129)
  • The parser incorrectly permitted the index name for CREATE INDEX to be empty. (Bug #27676427)
  • Failures of server restarts initiated by systemd or mysqld_safe were not written to the error log. (Bug #27675050, Bug #90012)
  • For debug builds, if a transaction was in read-only mode, trying to create or drop a histogram could raise an assertion. (Bug #27672693)
  • If the server was started with --skip-grant-tables, SET ROLE DEFAULT caused a server exit. (Bug #27672154)
  • Casting of VARBINARY values to TIME values was not performed correctly. (Bug #27665997)
  • Error checking was not performed after creation of a condition for a const reference. (Bug #27665085)
  • The dictionary information object managed by the MeCab model was used after the MeCab model was released. (Bug #27660368)
  • Attempting to abort events of the MYSQL_AUDIT_AUTHENTICATION_CLASS class caused a server exit. These events are now not abortable. (Bug #27645636)
  • These resource-group statements are now disallowed in stored functions because they cause an implicit commit, which is not permitted in a stored function: CREATE RESOURCE GROUP, ALTER RESOURCE GROUP, DROP RESOURCE GROUP. (Bug #27638623, Bug #89914)
  • Audit log filter rules did not permit class names to be specified as an array of strings. That is now possible.
  • On Windows, if the Visual C++ Redistributable for Visual Studio had been removed, MySQL uninstallation using the MSI installer failed. (Bug #27621546)
  • mysql_secure_installation now loads the validate_password component rather than the deprecated validate_password plugin. (Bug #27619667)
  • REGEXP_LIKE() using an expression containing a question mark (?) was not handled correctly when included in a prepared statement. (Bug #27595368)
  • REGEXP_SUBSTR() did not always handle NULL patterns correctly. (Bug #27572258)
  • Some SHOW CREATE TABLE statements could raise an assertion. (Bug #27569314)
  • Spurious stages could be seen in the Performance Schema events_stages_current table. (Bug #27566220)
  • Triggers for a table could execute in an order different from that specified by their PRECEDES/FOLLOWS clauses. (Bug #27544152)
  • Attempts to set some persisted variables at startup (such as keyring_operations and mandatory_roles) produced a privilege violation error and the server did not start or did not set the variable. (Bug #27523095)
  • Under some conditions, an unused-variable warning occurred in the MeCab full-text search code. Thanks to Laurynas Biveinis for the patch. (Bug #27519952, Bug #89598)
  • Within stored procedures, it was not possible to write a condition handler to catch foreign key failures if the table involved used the FEDERATED storage engine. (Bug #27509959)
  • It was possible to drop a primary key that served as the parent key in a foreign key relationship. (Bug #27506922, Bug #89570)
  • With the NO_ENGINE_SUBSTITUTION SQL mode disabled, an error (rather than substitution) occurred for CREATE TABLE and ALTER TABLE if the desired engine was disabled using the disabled_storage_engines system variable. (Bug #27502530)
  • Key rotation using the keyring_encrypted_File keyring plugin could cause a server exit. (Bug #27497018)
  • If MySQL Enterprise Firewall was configured with a large number of rules, server shutdown could take a long time. (Bug #27492122)
  • SET PERSIST_ONLY var_name = DEFAULT persisted the current global value, not the default value. (Bug #27489026)
  • If MySQL is configured with the LINK_RANDOMIZE CMake option enabled, the --gc-sections compiler option is now disabled; the combination causes segmentation faults. (Bug #27484106)
  • During server installation, the mysql.infoschema, mysql.session, and mysql.sys reserved users were associated with the mysql_native_password authentication plugin even when the default plugin was caching_sha2_password. (Bug #27454299)
  • Some window functions used the wrong precision for their aggregated data types. (Bug #27452179)
  • For a hexadecimal value H, SELECT with WHERE (-1) - H raised an assertion. (Bug #27452082)
  • References: See also: Bug #27041382. This issue is a regression of: Bug #21982792.
  • A memory leak in the pfs-t unit test was fixed. Thanks to Yura Sorokin for the patch. (Bug #27440735, Bug #89384)
  • Multiple invocations of CHAR() within a stored program could yield different results once an invalid code point was passed as the argument. (Bug #27410088)
  • With automatic_sp_privileges enabled, the EXECUTE and ALTER ROUTINE privileges were not correctly granted to routine creators. (Bug #27407480)
  • Some queries that used ordering could access an uninitialized column during optimization and cause a server exit. (Bug #27389294)
  • For debug builds, an assertion was raised (rather than an error) for ALTER TABLE for an ARCHIVE table with a GEOMETRY NOT NULL column containing empty strings. (Bug #27330634, Bug #89088)
  • Accounts that authenticated with the auth_sock authentication plugin could not connect using older clients. (Bug #27306178)
  • If system tables could not be read or initialized, the server wrote an incomplete error message. Thanks to Daniël van Eeden for a patch related to the fix. (Bug #27302337, Bug #89001)
  • RENAME USER failed when used to rename a role that was not granted to any account or role. (Bug #27284699)
  • The keyring_okv plugin did not always fail over to the standby OKV server when the primary server was unavailable. (Bug #27244099)
  • The Performance Schema could attempt to access invalid SOURCE column values. (Bug #27231036)
  • Mishandling of internal privilege structures could cause a server exit. (Bug #27230925)
  • For debug builds, use of a too-small type for calculating the determinant in GIS computations could cause an assertion to be raised. (Bug #27135504)
  • For attempts to increase the length of a VARCHAR column of an InnoDB table using ALTER TABLE with the INPLACE algorithm, the attempt failed if the column was indexed.
  • If an index size exceeded the InnoDB limit of 767 bytes for COMPACT or REDUNDANT row format, CREATE TABLE and ALTER TABLE did not report an error (in strict SQL mode) or a warning (in nonstrict mode). (Bug #26848813)
  • In MySQL 5.7.19, the mysql.gtid_executed table was excluded from dumps. This table is no longer excluded but its data is not dumped. (Bug #26643180, Bug #87455)
  • The slave_rows_search_algorithms system variable controls how rows are searched for matches when preparing batches of rows for row-based logging and replication. Specifying INDEX_SCAN as one of the search algorithms performs an index scan if an index is present. In the situation where a different primary key is used on the master and the slave, and a unique key is present on the slave, a bug in the code meant that the index scan was not being performed as it should be, and a slower table scan was being performed instead. The issue has now been corrected so that an index scan is used. (Bug #26450129, Bug #81500)
  • Certain cases of subquery materialization could cause a server exit. These queries now produce an error suggesting that materialization be disabled. (Bug #26402045)
  • Spatial operations on geographic GeometryCollection values could return ER_GIS_INVALID_DATA for valid geometries. (Bug #26174808)
  • For MyISAM tables, particular sequences of INSERT and DELETE statements could cause table corruption. (Bug #25541037)
  • The SHOW CREATE USER statement requires the SELECT privilege for the mysql database, except to see information for the current user. In addition, for the current user, the statement requires the SELECT privilege for the mysql.user system table for display of the password hash in the IDENTIFIED AS clause; otherwise, the hash displays as . (Bug #24911117)
  • CREATE FUNCTION produced an error if there was no default database and the function body called another function. (Bug #24357244, Bug #82350)
  • For debug builds, a SELECT statement executed within a stored program could raise an assertion if derived table resolution failed. (Bug #23221336)
  • If mysqldump or mysqlpump were used to dump binary data without the --hex-blob option, reloading the dump file could produce spurious warnings (values were inserted correctly regardless of the warnings). Such values are now written preceded by the _binary introducer to silence the warnings. (Bug #22601255, Bug #80150)
  • String comparisons involving wildcards could reference uninitialized memory. (Bug #12635103)
  • REGEXP_REPLACE() raised a valgrind warning when invoked with an invalid capture group. (Bug #87842, Bug #27612255)
  • More details on this release's changes at:
  • https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-12.html

New in MySQL 8.0.11 (Apr 19, 2018)

  • Bugs Fixed
  • Important Change: When NO_ZERO_DATE SQL mode is enabled, ALTER TABLE rejects attempts to add DATE or DATETIME columns that are declared NOT NULL to a nonempty table if no DEFAULT is specified for that column. Since a generated column has no default value, this restriction also prevented addition of a generated DATE NOT NULL or DATETIME NOT NULL column to a nonempty table. Since the expression used to generate the column can be used in place of the missing default for determining the column value, this restriction is now lifted for generated columns. (Bug #27252354)
  • Important Change: For ANALYZE TABLE ... UPDATE HISTOGRAM statements, the WITH N BUCKETS clause is now optional. If not specified, the default value for BUCKETS is 100. (Bug #89909, Bug #27637968)
  • InnoDB: The server was stopped before a fatal error message was written to the error log. (Bug #27626478)
  • InnoDB: When determining if a wait lock could be granted, locks held by victim transactions that were being rolled back were ignored. (Bug #27607235)
  • InnoDB: An error occurred in Sdi_Decompressor::decompress() when compiling a debug build using GCC 7.2.0. (Bug #27565889)
  • InnoDB: An assertion was raised when registering buffer pool chunks during parallel creation of multiple buffer pools. A mutex is now used to protect registration of buffer pool chunks in the buffer pool chunk map. (Bug #27565865)
  • InnoDB: Enabling the standard monitor caused an error. (Bug #27534041)
  • InnoDB: An internal field used to mark a column as hidden was changed from a boolean field to an enum field to support additional levels of column visibility. (Bug #27499518, Bug #89553)
  • InnoDB: An invalid zlib-related Valgrind failure reported that a conditional jump or move depends on uninitialized value. (Bug #27482740, Bug #89509)
  • InnoDB: An incorrect GROUP BY result was returned when using the TempTable storage engine and a NO PAD collation. (Bug #27454796)
  • InnoDB: An incorrect compression length value in a page compression function caused hole punching to be skipped the first time pages are compressed. (Bug #27399897)
  • InnoDB: Starting the server with an incorrect --log-bin option value raised an assertion, and subsequent attempts to start the server with a correct --log-bin value or without the --log-bin option continued to produce assertion failures. (Bug #27393317)
  • InnoDB: A large object (LOB) reference was not updated when a LOB was inserted during an UPDATE operation. (Bug #27368662)
  • InnoDB: After restarting the server, a TRUNCATE TABLE operation raised an assertion due to table flags that were inconsistent with remote data directory information stored in memory. (Bug #27367639)
  • InnoDB: Attempting to create a temporary table in a file-per-table tablespace using CREATE TEMPORARY TABLE ... TABLESPACE syntax failed to report an error. Temporary tablespaces are only permitted in the temporary tablespace. (Bug #27361662)
  • InnoDB: A latch taken on the first page of a large object (LOB) was not released before another thread attempted to allocate the page, causing a deadlock. (Bug #27360492)
  • InnoDB: Converting an implicit lock to an explicit lock was optimized by the introduction of a member variable that tracks the smallest active transaction ID.
  • Thanks to Zhai Weixiang for the patch. (Bug #27353468, Bug #89127)
  • InnoDB: The mysql.innodb_ddl_log and mysql.innodb_dynamic_metadata tables, which are used internally by the InnoDB storage engine, are now protected. DDL and DML operations on these tables are no longer permitted, and the tables no longer appear in INFORMATION_SCHEMA query results. (Bug #27353455, Bug #89129)
  • InnoDB: Upgrading a MySQL 5.7 instance with an innodb_page_size setting of 4K caused mysql_upgrade to fail with a “Specified key was too long; max key length is 768 bytes” error when creating or modifying system tables. The error was suppressed to permit the mysql_upgrade client to run on an instance with an innodb_page_size setting of 4K. (Bug #27338431)
  • InnoDB: The recovery process could not properly determine space_id values, causing the server to exit. (Bug #27331936)
  • InnoDB: An ALTER TABLE operation that modified the nullability of an indexed column raised an assertion. InnoDB incorrectly assumed that a new primary key must be added instead of created from an existing unique key. (Bug #27330454, Bug #89087)
  • References: This issue is a regression of: Bug #24397406.
  • InnoDB: After an ALTER TABLE ... IMPORT TABLESPACE operation, metadata could not be retrieved correctly from the INFORMATION_SCHEMA.INNODB_COLUMNS table. (Bug #27322099)
  • InnoDB: An INSERT operation involving a large object (LOB) value raised an assertion. After splitting a LOB fragment, there was insufficient space for a directory entry. (Bug #27320977)
  • InnoDB: On a server using the utf8mb4 character set, an INSERT or UPDATE during an ALTER TABLE operation that changed the row format of a table that included a virtual column caused an index corruption. (Bug #27319084)
  • InnoDB: The data retrieved from INFORMATION_SCHEMA.INNODB_COLUMNS was incorrect for tables containing a virtual column. (Bug #27316037)
  • InnoDB: The server failed to start after recovery due to an invalid keyring file. The keyring file created from backup was empty. (Bug #27307740)
  • InnoDB: A deadlock between background threads, one attempting to evict a full-text search table from the cache, and the other attempting to synchronize a table, caused InnoDB Cluster nodes to fail. (Bug #27304661)
  • InnoDB: A typo was corrected in an InnoDB recovery message. Thanks to Daniël van Eeden for the patch. (Bug #27287979, Bug #27010613, Bug #88185)
  • InnoDB: A message stating that encryption algorithm support is missing was reported during InnoDB recovery. (Bug #27286020)
  • InnoDB: A missing or mismatched keyring file caused an assertion failure at startup. (Bug #27278324)
  • InnoDB: An error was returned indicating that encryption support was missing when checking the space ID of an encrypted tablespace file. (Bug #27278100)
  • InnoDB: A debug message that prints a “too many open files” warning is now only printed if the number of open files reaches a limit of 300. (Bug #27277844)
  • InnoDB: Failure to skip predicate locks when releasing gaps locks raised debug assertions, as did failure to remove the supremum record bit prior releasing gaps locks on the supremum. (Bug #27272806, Bug #27294066)
  • InnoDB: A tablespace ID discovery failure occurred when starting the server on a cloned data directory. (Bug #27265874)
  • InnoDB: An unprotected global variable (fil_n_file_opened) caused an assertion when shutting down the server. (Bug #27265473)
  • InnoDB: An assertion that is no longer valid was raised when checking for pending I/O on the file in use. (Bug #27263206)
  • InnoDB: An empty general tablespace caused a failure when upgrading to MySQL 8.0. The empty data file was expected to have a specific number of pages. (Bug #27261822)
  • InnoDB: A startup failure occurred because a directory specified by the --innodb-directories option contained a keyring data file. The --innodb-directories option should only recognize InnoDB tablespace files. (Bug #27253116)
  • InnoDB: A function that calculates the increase in minimum bounding rectangle (MBR) size incorrectly returned 0, resulting in R-tree corruption. (Bug #27237472)
  • InnoDB: A REPLACE operation on a temporary table raised an assertion. (Bug #27225649)
  • InnoDB: An online ALTER TABLE operation on a table accompanied by concurrent DML on the same table raised an assertion. An end-of-log check was not performed prior to accessing the DML log to determine the length of a virtual column. (Bug #27158030)
  • InnoDB: When the addition of a virtual index failed, the virtual index that was freed was not removed from the lists of virtual column indexes. (Bug #27141613)
  • InnoDB: Adding a virtual column and index in the same statement caused an error. (Bug #27122803)
  • InnoDB: An undo tablespace truncate operation raised an assertion. The check that determines if undo tablespace segments are inactive was invalid. (Bug #27114068)
  • InnoDB: When the TempTable storage engine was unable to allocate memory using temporary files and mmap, an invalid error was reported indicating that the defined on-disk storage engine would be used instead. (Bug #26990375)
  • InnoDB: A tablespace import operation on a server with a default row format of REDUNDANT raised an assertion failure. (Bug #26960215)
  • InnoDB: A stored field based on a generated column permitted the base column to have a NULL value. (Bug #26958695)
  • InnoDB: Evaluation of a subquery in a resolving function raised an assertion. (Bug #26909960)
  • InnoDB: Locks related to data dictionary operations caused degradation in CREATE TABLE performance. (Bug #26848711, Bug #87827)
  • InnoDB: A LOCK INSTANCE FOR BACKUP operation was able to acquire a backup lock without waiting for a concurrent DDL operation to finish. (Bug #26831155, Bug #87812)
  • InnoDB: An incorrectly specified innodb_data_file_path or innodb_temp_data_file_path value returned a syntax error that did not specify the name of the system variable that caused the initialization failure. (Bug #26805833)
  • InnoDB: An handler that was opened for a TRUNCATE TABLE operation caused the operation to assert. The server now closes open handlers before dropping the table.
  • The patch for this bug also improves TRUNCATE TABLE error messages related to foreign key constraints, and makes it possible to truncate a corrupted table. (Bug #26710839)
  • InnoDB: An online DDL operation that rebuilds the table raised an assertion when the last insert log record to be applied was split across two pages. (Bug #26696448, Bug #87532)
  • InnoDB: An assertion was raised when attempting to generate a virtual column value dependent on an off-page large object value that was not yet stored. (Bug #26625652)
  • InnoDB: An R-tree search counted delete-marked records, causing it to find more records than present in the clustered index. As result, the valid R-tree index was marked as corrupted. (Bug #26381207)
  • InnoDB: A RENAME TABLE operation that renamed the schema failed to rename full-text search common auxiliary tables that were left behind when the full-text search index was removed previously, resulting in a assertion failure when attempting to drop the old schema. (Bug #26334149)
  • InnoDB: An assertion was raised when a thread attempted to read a record containing BLOB data while another thread was writing the same data to external pages. (Bug #26300119)
  • References: This issue is a regression of: Bug #23481444.
  • InnoDB: Column prefixes for externally stored columns exceeded the amount of available memory in the online log. (Bug #25928471)
  • InnoDB: A problematic lock that was introduced to protect writing of dynamic metadata changes to the redo log during a checkpoint was removed. A mutex is now used instead. The checkpoint LSN was also adjusted to protect dynamic metadata changes. (Bug #25834374)
  • InnoDB: InnoDB failed to account for a virtual column when using the column offset to search an index for an auto-increment column. (Bug #25076416)
  • InnoDB: An invalid debug condition caused a buffer pool chunk allocation failure, which resulted in an assertion failure when a purge thread attempted to access an unallocated chunk. (Bug #23593654)
  • References: This issue is a regression of: Bug #21348684.
  • InnoDB: Threads were prevented from entering the InnoDB storage engine due to ticket acquisition deadlocks. (Bug #23476050)
  • Partitioning: An error returned by the storage engine while executing ALTER TABLE EXCHANGE PARTITION was not handled correctly by the server. (Bug #27320682)
  • Replication: When MySQL was started with --plugin-load='group_replication.so' but Group Replication was not started, starting an asynchronous slave channel resulted in an unresponsive server. (Bug #27584141)
  • Replication: Empty XA transactions that have been rolled back should not be recorded in the binary log or added to the set of transactions in the gtid_executed system variable. However, if rolled-back empty XA transactions were executed after an empty XA transaction ending with an XA COMMIT ... ONE PHASE statement, they were being incorrectly added to the binary log as an XA ROLLBACK statement, and also to the gtid_executed system variable. The issue is now fixed. (Bug #27435974)
  • Replication: The Group Replication files have been moved from the rapid directory to the plugin directory. (Bug #27413789)
  • Replication: When the system variable gtid_next was set to AUTOMATIC, empty XA transactions that were rolled back and not recorded in the binary log, were being incorrectly added to the set of transactions in the gtid_executed system variable, causing an inconsistency. The rolled-back empty XA transactions are no longer recorded in gtid_executed. (Bug #27407670)
  • Replication: Group Replication conflict detection uses schema and table names as part of the Primary Key Equivalent (PKE) in order to detect and disallow conflicting transactions. The value of the lower_case_table_names system variable changes how schema and table names are stored and externalized, which depending on the configured value could persist a table named T1 as t1. Such a difference in a group could cause inconsistencies. Now, members must all have the same value for lower_case_table_names. (Bug #27401817)
  • Replication: Using an IP address or hostname in any Group Replication related configuration on macOS was failing. (Bug #27376511)
  • Replication: Changing the Group Replication required settings incorrectly on online secondary members could result in an unexpected halt. (Bug #27317478, Bug #27157202)
  • Replication: The value of LAST_CONFLICT_FREE_TRANSACTION in the replication_group_member_stats Performance Schema table was not correctly synchronized across group members. (Bug #27317431)
  • Replication: After issuing START GROUP_REPLICATION the gtid_mode system variable is locked to prevent any modification to its value until the group is online. Any attempt to modify gtid_mode during this time is blocked. As part of the process of starting Group Replication the server needs to set super_read_only=off, which has dependencies on locks acquired by SET GTID_MODE. This could result in Group Replication hanging and there was no possibility to connect to the server to resolve the situation. To prevent this situation, when it is not possible to acquire the locks needed by SET GTID_MODE the operation aborts. (Bug #27312241)
  • Replication: When a member is joining a group there is a chance of the request to join being rejected. If the rejection resulted in a retry, for example because the seed member being contacted was not in the group, then there was a possibility of the retry cycle continuing infinitely. (Bug #27294009)
  • Replication: In the unlikely event of the group failing to start, for example because no seed member could be contacted, there is a one minute period where the group retries the start process. Attempting to modify a Group Replication plugin option during this period could result in an unexpected halt. Now, attempting to modify a Group Replication plugin option during plugin start or stop results in error. (Bug #27275312)
  • Replication: The default binary log expiration period of 30 days is now set as the default for the binlog_expire_logs_seconds system variable, instead of the deprecated expire_logs_days system variable. binlog_expire_logs_seconds now defaults to a value of 2592000 (30*24*60*60 seconds), and expire_logs_days now defaults to zero.
  • In MySQL 8.0.3 and 8.0.4, the effects of binlog_expire_logs_seconds and expire_logs_days were cumulative. From MySQL 8.0.11, this is no longer the case, and the new behavior is as follows:
  • If you specify a non-zero value for both variables, only the value of binlog_expire_logs_seconds is used to determine the binary log expiration period, and the value of expire_logs_days is ignored.
  • If you specify a non-zero value for only one variable, that value is used to determine the binary log expiration period, and the default for the other is not applied.
  • If you specify a value for neither of the variables, the default of 30 days from binlog_expire_logs_seconds is used as the binary log expiration period.
  • An error message is issued if you attempt to set one of the variables dynamically when the other is already set, and a warning message is issued if you specify a non-zero value for both variables at startup. A deprecation warning is also issued if you set a value for expire_logs_days.
  • To disable automatic purging of the binary log, specify a value of 0 explicitly for binlog_expire_logs_seconds, and do not specify a value for expire_logs_days. For compatibility with earlier releases, automatic purging is also disabled if you specify a value of 0 explicitly for expire_logs_days and do not specify a value for binlog_expire_logs_seconds. In that case, the default for binlog_expire_logs_seconds is not applied. You no longer need to set both variables to zero to disable automatic purging. (Bug #27252658)
  • Replication: Attempting to uninstall the Group Replication plugin on a server configured to start the plugin automatically at boot could result in a deadlock. Now, the uninstall process checks to ensure that the plugin is not in the process of starting and fails gracefully if it is. (Bug #27179336)
  • Replication: The DDL statements CREATE DATABASE, ALTER DATABASE, and DROP DATABASE are no longer allowed to execute in parallel with other statements on a multi-threaded slave. These statements require an exclusive metadata lock on the schema, causing a theoretical possibility of a deadlock when slave_preserve_commit_order=1 is set on the replication slave. (Bug #27165446)
  • Replication: On a replication slave with binary logging disabled, an empty DDL statement (for example, due to a replication filter) raised an assertion. With binary logging enabled, BEGIN and COMMIT statements would be written to the binary log to produce a transaction, but these statements were not available with binary logging disabled, causing the assertion. MySQL Server now checks for the situation where the DDL transaction is empty and is not marked as started, and handles it without raising the assertion. (Bug #27164661)
  • Replication: A new system variable rpl_read_size is available to set the minimum amount of data in bytes that is read from the binary log files and relay log files. The default read size is 8KB. If heavy disk I/O activity for these files is impeding performance for the database, increasing the read size might reduce file reads and I/O stalls if the files are not being cached by the operating system.
  • Note that a buffer the size of this value is allocated for each thread that reads from the binary log and relay log files, including dump threads on masters and coordinator threads on slaves. Setting a large value might therefore have an impact on memory consumption for servers.
  • Thanks to the Facebook team for the patch. (Bug #27147095)
  • Replication: On a server with GTIDs enabled, if RESET MASTER was used when a transaction had been flushed but not yet committed, the server GTIDs were left in an incorrect state. At this point, the GTID for the transaction had been added to the set of owned GTIDs, but not yet to the set of executed GTIDs. The GTID was removed from the binary log when the content of the uncommitted transaction was cleared by the RESET MASTER statement, but the GTID could not be reused because it was already owned, so the sequence of GTIDs had a gap.
  • With this fix, RESET MASTER acquires a global read lock to ensure that no transactions are in commit stage during its operation, and no new transactions enter into commit stage during its operation. If there are any ongoing commits, RESET MASTER waits until they are complete. The global read lock is released when the reset is finished, and then storage engines are notified of the successful reset. If FLUSH TABLES WITH READ LOCK has already been executed for the thread, RESET MASTER does not retry the lock. (Bug #27041759)
  • Replication: Attempts to set a GTID for an unsafe or empty XA transaction using a SET @@SESSION.GTID_NEXT statement were not being handled correctly. On a server with gtid_mode set to OFF or OFF_PERMISSIVE, and enforce_gtid_consistency set to OFF, setting a GTID for an unsafe XA transaction (creating or dropping a temporary table) caused an inconsistency in the server's GTID violation counter and raised an assertion. Testing also showed that setting a GTID for an empty XA transaction caused an incorrect sequence of events to be written to the binary log. Both these situations are now handled correctly. (Bug #27041402, Bug #88272)
  • Replication: The error message issued for a server stop while rotating the binary log did not state the correct cause for the issue. The error message has been enhanced to include the actual error causing the server stop as part of the message. A new error ER_OOM_SAVE_GTIDS has also been added for the situation where an out-of-memory error occurred while saving the set of GTIDs from the last binary log into the mysql.gtid_executed table. (Bug #27040070, Bug #88262)
  • Replication: Group Replication uses transaction write set extraction for conflict detection on group members. A performance regression was found in this process during detailed performance analysis, which is handled by this bug fix. Memory allocation has been optimized for write set extraction and memory copy operations have been reduced. Also, foreign key write sets are now only collected when the current table has foreign keys. (Bug #27016053)
  • Replication: When using group_replication_ip_whitelist, it was possible to configure a group so that it functioned even though all members could not establish the internal group communication connection to each other, resulting in inconsistent behavior. Now, incoming connections are accepted if the IP is in the white list or if the IP belongs to a current member of the XCom configuration. This ensures members are always able to create the internal network required for group communication. (Bug #26846549, Bug #27406775)
  • Replication: The statements CREATE USER IF EXISTS (or IF NOT EXISTS) and ALTER USER IF EXISTS (or IF NOT EXISTS) were written to the binary log even when the query resulted in an error. MySQL Server now checks for errors that cause these queries to fail (for example, an invalid plugin was specified), and does not log the statement in that situation. Note that if these statements succeed but have no effect on the master because the condition is not met, the statements are written to the binary log, as the condition might be met on a replication slave (see Bug #25813089, Bug #85733). (Bug #26680035)
  • References: See also: Bug #25813089, Bug #85733.
  • Replication: In a multi-primary group, when a member was also configured with a asynchronous replication channel, there was a possibility that the asynchronous channel could start before Group Replication started. This could result in the asynchronous channel processing transactions before the member became an online member of the group, causing issues when members tried to join the group. The fix ensures that asynchronous channels on group members do not start until the member has become online. (Bug #26648393)
  • Replication: Following the introduction of support for atomic DDL in MySQL 8.0, a replication slave that supports atomic DDL can diverge from a replication master at an earlier MySQL version that does not support atomic DDL. If the DDL statement can only be partly applied, the slave using MySQL 8.0 rolls back the whole DDL statement, but the master using an earlier version might commit the valid parts of the DDL statement. An error message is now logged in the event of an unsuccessful commit for an atomic DDL statement on the master and the slave, and you should check that the states of the master and the slave have not diverged before proceeding. (Bug #26133488)
  • Replication: When GTIDs are enabled on a replication master and slave, and the slave connects to the master with the MASTER_AUTO_POSITION=1 option set, the master must send the slave all the transactions that the slave has not already received, committed, or both. If any of the transactions that should be sent by the master have been already purged from the master's binary log, the master sends the error ER_MASTER_HAS_PURGED_REQUIRED_GTIDS (1789) to the slave, and replication does not start.
  • The message provided for the error ER_MASTER_HAS_PURGED_REQUIRED_GTIDS has been changed to provide advice on the correct action in this situation, which is for the slave to replicate the missing transactions from another source, or for the slave to be replaced by a new slave created from a more recent backup. The message advises that the master's binary log expiration period can be revised to avoid the situation in future. In addition, the master now identifies the GTIDs of the purged transactions and supplies them in its error log in the warning message ER_FOUND_MISSING_GTIDS (11809), so that you do not need to calculate the missing GTIDs manually. (Bug #26004541)
  • Replication: For updates to virtual generated columns containing the BLOB data type, both the old and the new BLOB values are required by some storage engines for replication. This fix extends the same behavior to JSON and GEOMETRY data types, which are based on the BLOB data type and so produce the same issue when the old value is not stored. (Bug #25873029)
  • Replication: A behavior change in MySQL 8.0.0 moved the identification of generated columns from before to after the calculation of the write set for binary logging. This caused an issue with NDB cluster replication, because that storage engine omits the generated columns from the log event if they are unnecessary, leading to NULL values being set for them by the applier thread on the replication slave. The identification of generated columns has now been moved back to before the write set calculation, so that the issue does not occur. (Bug #25827408)
  • Replication: On a multi-threaded replication slave (with slave_parallel_workers greater than 0), the slave's lag behind the master was not being reported by the Seconds_Behind_Master field for SHOW SLAVE STATUS. The value is now reported correctly. Thanks to Robert Golebiowski for the patch. (Bug #25407335, Bug #84415)
  • Replication: A plus sign (+) can be used with a GTID set in the statement SET @@GLOBAL.GTID_PURGED to indicate that the specified GTID set does not intersect with gtid_executed. The plus sign was also being permitted for GTID sets specified for the functions GTID_SUBSET() and GTID_SUBTRACT(), where it was not meaningful. The plus sign can no longer be specified with these functions. Also, error messages relating to the SET @@GLOBAL.GTID_PURGED operation have been improved. (Bug #24675979)
  • Replication: When invoked with the options --read-from-remote-server and --hexdump, mysqlbinlog was not able to produce a hex dump of the binary log contents following an SQL statement that generated an autoincrement value, referenced a user-defined variable, or invoked RAND(). The event types for these events are followed by an informational row query log event, and mysqlbinlog caches the original event for printing when the subsequent row query log event is received. The pointer to the memory containing the original event was invalidated when the subsequent event was received, so the original data could not be accessed to produce the hex dump. The issue has now been fixed. (Bug #24674276)
  • Replication: A number of changes were made to the binary log decoding procedure to improve handling of invalid or corrupted binary log entries. (Bug #24365972)
  • Replication: Following the introduction of binary logging for XA transactions WL#6860, an assertion could be raised in debug builds during replication from a master with the feature to a slave without the feature, if MASTER_AUTO_POSITION=1 was set on the slave. The assertion has been removed, so that debug builds now have the same behavior as non-debug builds, and can attempt replication of unsupported event types whether or not MASTER_AUTO_POSITION=1 is set. (Bug #20677683)
  • Linux: Builds on Alpine Linux now take advantage of AIO support. (Bug #27327874)
  • macOS: On macOS, mysql_config --libs did not list any SSL libraries. (Bug #27232576)
  • Microsoft Windows: On Windows, the RESTART statement is implemented by having mysqld fork, with one process acting as a monitor to the other, which acts as the server. This makes determining the server process to attach to for debugging more difficult. To alleviate this, starting the server with --gdb now suppresses forking. A side effect is that for a server started with this option, RESTART simply exits and does not restart. (Bug #27273229)
  • JSON: The JSON_QUOTE() function could in some situations write the quoted string to the same buffer that holds the input string, which could lead to wrong results. Now a check is made to be sure that it does not attempt write into the same buffer that it is reading from. (Bug #27312444)
  • JSON: JSON_SEARCH() no longer performs any modification of cached Json_path objects, now making any needed updates to a String object that represents the path instead. This saves on the number of round trips required between the path's Json_path and String representations, which speeds up execution. In addition, the one_or_all and escape_char arguments to JSON_SEARCH() were unnecessarily cached; these arguments are no longer cached, which should also improve this function's execution time. (Bug #87383, Bug #26614455)
  • References: See also: Bug #21450084, Bug #77785, Bug #21472872.
  • A check was implemented based on data dictionary version information to prevent starting the MySQL 8.0 server with a data directory created by a later MySQL release. The check was necessary to prevent an in-place downgrade, which is currently not supported. (Bug #27708249)
  • Protected data dictionary tables are no longer accessible by statements placed in a server initialization file. (Bug #27674311, Bug #90010)
  • Data dictionary and INFORMATION_SCHEMA version numbers were synchronized with the new MySQL server version number. (Bug #27674285)
  • The server did not handle correctly certain LIKE queries using a BLOB column with a prefix index. (Bug #27660560)
  • For builds configured using -DWITH_PROTOBUF=SYSTEM, building failed on systems with ProtoBuf 3.5 installed. (Bug #27638713, Bug #89915)
  • The microseconds part of timestamps stored with persisted variables in mysqld-auto.cnf was always 000000. (Bug #27629719)
  • Debian packages now handle dependencies for MeCab plugin dictionary files. Fedora packages now handle dependencies for both MeCab packages, not just the utf-8 package. (Bug #27612730, Bug #27613539)
  • The change in MySQL 8.0.11 for platforms that use systemd to run mysqld as a normal process (Type=notify) and communicate using a socket file did not work on SLES before SLES 12.2. (Bug #27604999)
  • The NON_UNIQUE column in the INFORMATION_SCHEMA.STATISTICS table had type BIGINT prior to MySQL 8.0, but became VARCHAR in MySQL 8.0 with the introduction of the data dictionary. The NON_UNIQUE column now has an integer type again (INT because the column need not be as large as BIGINT). (Bug #27593348, Bug #89793)
  • With some inputs, ST_Crosses() could cause a server exit. (Bug #27576700)
  • Some error messages were being written to the error log with an error ID of 0 rather than a legitimate error ID. (Bug #27575608)
  • mysql_upgrade did not set MYSQL_SERVER_PUBLIC_KEY correctly, leading to failure to read the key file. (Bug #27568278)
  • If autocommit was disabled, mysql_upgrade produced an error when upgrading from MySQL 5.7 to 8.0. (Bug #27549249)
  • For debug builds, displaying very long stage names from the PROCESSLIST_STATE column of the Performance Schema threads table could raise an assertion. (Bug #27545688)
  • Group Replication failed to start if certain required variables had been set as persisted variables, or if persisted variables were not set in proper timestamp order. (Bug #27545544, Bug #27522405)
  • gtid_purged handling had a memory leak. (Bug #27537968, Bug #89645)
  • Using SET PERSIST to persist optimizer_trace_offset resulted in an incorrect variable value after server restart. (Bug #27536421)
  • The validate_password component could leak memory. (Bug #27521770, Bug #89597)
  • A typo in sql/handler.h was corrected. Thanks to Su Tristan for the patch. (Bug #27516280, Bug #89594)
  • The Performance Schema variables_info table displayed incorrect VARIABLE_SOURCE and VARIABLE_PATH values for variables set within option files specified by !include or !includedir directives. (Bug #27514223)
  • References: This issue is a regression of: Bug #25563891.
  • After upgrading from MySQL 5.7 to MySQL 8.0, the first attempt to start the server on a MySQL 5.7 data directory with --default-time-zone set to a specific time value such as "+00:00" caused the server to exit. (Bug #27512609, Bug #89584)
  • Lookups of character set internal numbers was not thread safe and could cause memory leaks. (Bug #27507950)
  • Using the -DWITH_LIBEVENT=system and -DWITH_ICU=system CMake options together caused configuration to fail. (Bug #27505535, Bug #89398)
  • Some messages were being written to the server error log using client error IDs. (Bug #27503787, Bug #89562)
  • When run in key migration mode, the server could report an error for successful operations. (Bug #27493997)
  • Upgrades from MariaDB to MySQL Community Edition failed on Fedora 27. (Bug #27484835)
  • ALTER TABLE could hang in a Waiting for tablespace metadata lock state. (Bug #27472087, Bug #89487)
  • Selecting from the Performance Schema status_by_thread or variables_by_thread table was not thread safe and could yield incorrect results. (Bug #27471510)
  • INSERT ... ON DUPLICATE KEY UPDATE could be handled improperly if a source table produced no rows. (Bug #27460607)
  • SET PERSIST_ONLY ignored --skip-grant-tables and continued to perform checking against the dynamic privileges needed to set system variables. (Bug #27455943)
  • For RPM packages and Docker RPM packages, the included my.cnf file now includes information indicating how to revert to the previous default authentication plugin (changing caching_sha2_password to mysql_native_plugin), for compatibility with older clients. (Bug #27454015, Bug #27675380)
  • In string comparisons using >, only one operand was handled as utf32. (Bug #27452148)
  • A server exit during InnoDB initialization caused AddressSanitizer (ASan) to report a memory leak. The patch also implements proper handling of the data dictionary properties table in cases where the table contains data that cannot be parsed. (Bug #27447981, Bug #89433)
  • With -DWITH_SSL=system, if CMake could not find the system OpenSSL libraries and header files, it produced confusing messages. Now it exits immediately with an error. (Bug #27447874)
  • Configuring with -DWITH_INNODB_EXTRA_DEBUG=ON resulted in a linker error. (Bug #27444255, Bug #89412)
  • Configuring with -DWITH_ZLIB=system resulted in a linker error. (Bug #27435371, Bug #89373)
  • Metadata from result sets for UNION ALL queries could say NEWDATE rather than DATE. (Bug #27422376)
  • In builds with Undefined Behavior Sanitizer enabled, negation of -922337203685477580 could cause a server exit. (Bug #27419181)
  • With protocol compression enabled, a spurious assertion could be raised. (Bug #27418207, Bug #89324)
  • References: This issue is a regression of: Bug #17922198.
  • Performance related to fetching tablespace objects from the data dictionary to populate the data dictionary cache was improved. (Bug #27402243)
  • If the server was started with --skip-grant-tables, clients that authenticate using the caching_sha2_password plugin were unable to connect. (Bug #27400095, Bug #89267)
  • Linux RPM and Debian packages now include dependency information for the Perl JSON module required to run the MySQL test suite. Linux RPM packages now include dependency information for the Perl Digest module required to run the MySQL test suite. (Bug #27392800, Bug #89250, Bug #27392808, Bug #89244)
  • A new system variable, default_collation_for_utf8mb4, enables setting the default collation for the utf8mb4 character set. This variable is primarily intended to support replication from a MySQL 5.7 or older master server to a MySQL 8.0 slave server, or group replication with a MySQL 5.7 primary node and one or more MySQL 8.0 secondaries. The value of the variable is replicated to the slave so that the slave can correctly process data originating from a master with a different default collation for utf8mb4. It may be helpful because the default collation for utf8mb4 in MySQL 5.7 is utf8mb4_general_ci but utf8mb4_0900_ai_ci in MySQL 8.0.
  • The variable value determines the default utf8mb4 collation for the following statements:
  • SHOW COLLATION and SHOW CHARACTER SET.
  • CREATE TABLE and ALTER TABLE having a CHARACTER SET utf8mb4 clause without a COLLATION clause, either for the table character set or for a column character set.
  • CREATE DATABASE and ALTER DATABASE having a CHARACTER SET utf8mb4 clause without a COLLATION clause.
  • Any statement containing a string literal of the form _utf8mb4'some text' without a COLLATE clause.
  • (Bug #27389878, Bug #27081073)
  • DESCRIBE with a column name option ignored the column name. (Bug #27387773, Bug #89224)
  • When run in key migration mode, the server ignored invalid options. (Bug #27387331)
  • Path name normalization could fail for very long path names. (Bug #27368298)
  • During configuration, CMake assumed that rpcgen was available rather than checking for it. (Bug #27368078)
  • The client authentication process could use memory after it had been freed. (Bug #27366143)
  • -DWITH_ZLIB=system could cause other CMake feature tests to fail. (Bug #27356658, Bug #89135)
  • On some systems, using mysqld --initialize to initialize the data directory was very slow. (Bug #27349579, Bug #89122)
  • Builds using RPM source packages now use a secure connection if Boost must be downloaded. (Bug #27343289, Bug #89104)
  • An internal check_datetime_range function that converted an ULONGLONG time value raised an assertion on Windows. (Bug #27340709)
  • Too much locking was being done for the caching_sha2_password authentication plugin (one lock/unlock per connection). This is now improved to one lock/unlock per plugin install/uninstall. (Bug #27335346)
  • A CREATE TABLE ... LIKE operation that implicitly assigned 'innodb_system' as the tablespace name for table partitions raised an assertion. (Bug #27331588)
  • SET PERSIST_ONLY could store large-valued variables incorrectly. (Bug #27322254)
  • The audit_log plugin could write statements to the binary log even with binary logging disabled. (Bug #27315321)
  • Certain queries using GREATEST() or LEAST() produced heap-use-after-free errors. (Bug #27312703)
  • An external_language column was added to the mysql.routines data dictionary table to support stored routines in different languages. The data stored in this column can be accessed through the EXTERNAL_LANGUAGES column of the INFORMATION_SCHEMA.ROUTINES table. (Bug #27309116, Bug #89038)
  • It is now prohibited to start the server with a lower_case_table_names setting that is different from the setting used when the server was initialized. The restriction is necessary because collations used by data dictionary table fields are based on the setting defined when the server is initialized, and restarting the server with a different setting would introduce inconsistencies with respect to how identifiers are ordered and compared. (Bug #27309094, Bug #89035)
  • For accounts that authenticated using the auth_sock authentication plugin, the server was unable to accept connections from clients from older MySQL versions. (Bug #27306178)
  • An audit_log plugin memory leak was corrected. (Bug #27302151)
  • The INFORMATION_SCHEMA.FILES table now obtains from storage engines the information needed for the following columns: LOGFILE_GROUP_NAME, LOGFILE_GROUP_NUMBER, ROW_FORMAT, VERSION. (Bug #27292586)
  • Dropping a user-defined function did not always remove its entry from the Performance Schema user_defined_functions table. (Bug #27270498)
  • To reduce its size and storage footprint, Serialized Dictionary Information (SDI) is now generated in a compact JSON format. (Bug #27265584)
  • Concurrent execution of RESET PERSIST and SET PERSIST from multiple sessions could cause a server exit. (Bug #27264789)
  • Tablespace statistics could be cached even if the statistics-collection process encountered an error. (Bug #27259963)
  • SET PERSIST could fail to find the proper directory into which to write the mysqld-auto.cnf file. (Bug #27253828)
  • ALTER TABLE could not create generated NOT NULL geometry columns if the table contained data. (Bug #27252609)
  • The Performance Schema variables_info table displayed incorrect VARIABLE_SOURCE values for variables that were set in my.cnf and also persisted to mysqld-auto.cnf. (Bug #27252077)
  • Improper handling of plugin loading and unloading could cause a server exit. (Bug #27247280, Bug #27297704)
  • The RESTART statement did not work for Ubuntu packages. (Bug #27245918)
  • LDAP authentication plugins were not built on FreeBSD. (Bug #27238252)
  • The server did not handle queries correctly when a cached value was evaluated as NULL by a windowing function, or when its argument was part of a GROUP BY with a ROLLUP operation which could be evaluated as NULL. (Bug #27233287)
  • Windowing functions such as LAST_VALUE() did not work correctly with tables containing NOT NULL columns in all cases. (Bug #27230463)
  • Role cache invalidation could be performed incorrectly. (Bug #27225806)
  • Incorrect handling of persisted variables at server startup could result in a server exit. (Bug #27224682)
  • For upgrades from MySQL 5.7 to 8.0, the sql_mode value for object definitions could contain NOT_USED. (Bug #27219709)
  • JSON_TABLE() failed if no default database was selected. (Bug #27217897)
  • Adding a unique index to an InnoDB table on which multiple locks were held could raise an assertion. (Bug #27216817)
  • CREATE VIEW statements that used JSON_TABLE() in the view definition failed if no database was selected. (Bug #27189940)
  • Queries on Performance Schema replication tables could return incorrect results, particularly when the execution plan used an index. (Bug #27184567)
  • For some statements, the FILE privilege was not properly checked. (Bug #27160888)
  • To better enable setting persisted variables at startup in the same order they were persisted with SET PERSIST, settings in mysqld-auto.cnf are first sorted based on timestamp (which is now stored in the file). (Bug #27157520)
  • Setting the dragnet.log_error_filter_rules system variable to a very long value could cause a server exit. (Bug #27120953)
  • For platforms that use systemd (see Managing MySQL Server with systemd), systemd was not always able to infer the state of a double-forked mysqld process. Consequently, systemd would attempt to restart mysqld even when that process terminated with status 1. systemd is now configured to run mysqld as a normal process (Type=notify rather than Type=forking). If the name of a socket file is specified in the environment variable NOTIFY_SOCKET, mysqld attempts to open a connection for communicating with systemd and writes its state changes there. (Bug #27109556, Bug #88463, Bug #26538598, Bug #87210)
  • ST_IsValid() returned incorrect results for some geographic polygons on non-WGS 84 ellipsoids. (Bug #27074700)
  • A multiple-insert statement on a table containing a FULLTEXT key and a FTS_DOC_ID column caused a server error. (Bug #27041445, Bug #88267)
  • References: This issue is a regression of: Bug #22679185.
  • In strict SQL mode, assignment of invalid values to AUTO_INCREMENT columns could be handled incorrectly, resulting in an assertion being raised. (Bug #27041393, Bug #88273)
  • Thread stack exhaustion could raise an assertion rather than returning an error. (Bug #27041350, Bug #88277)
  • SET PERSIST_ONLY did not properly consider whether the runtime validation function for persisted variables should be invoked. (Bug #27016247)
  • The audit_log plugin could mishandle aborts of event executions, causing a server exit. (Bug #27008133)
  • Some boundary cases for negation of large signed integers were corrected. (Bug #27004880, Bug #27008075)
  • An ALTER TABLE operation attempted to set the AUTO_INCREMENT value for table in a discarded tablespace. (Bug #26935001)
  • MyISAM index corruption could occur for bulk-insert and table-repair operations that involve the repair-by-sorting algorithm and many (more than 450 million) rows. (Bug #26929724)
  • The Performance Schema could produce DIGEST_TEXT values with a trailing space. This no longer occurs. (Bug #26908015)
  • Dropping an index from a system table could cause a server exit. (Bug #26881798)
  • A prepared statement using CREATE TABLE ... SELECT led to unexpected behavior when it referred in a GROUP BY to a view having the same name. (Bug #26881703)
  • With auto-commit disabled and an XA transaction in PREPARED state, attempts to execute XA COMMIT or XA ROLLBACK failed. (Bug #26848877, Bug #87836)
  • Some diagnostic messages produced by LDAP authentication plugins misleadingly suggested an error when no error had occurred. (Bug #26844713)
  • Initialization code for mysql_upgrade and mysqlpump was reorganized to avoid assertion failures. (Bug #26802211)
  • Full-text searches could raise an assertion due to improper handling of errors that occurred while attempting to acquire metadata locks. (Bug #26799898)
  • A keyring file created by the keyring_file plugin on a 32-bit server was inaccessible by the keyring_file on a 64-bit server, and vice versa. (Bug #26793060)
  • Metadata locks for column statistics were not displayed properly in the Performance Schema metadata_locks and events_waits_xxx tables. (Bug #26772858, Bug #87708)
  • The my_snprintf plugin service was removed and reimplemented using C++11 snprintf. (Bug #26696147, Bug #87547)
  • After an in-place upgrade from MySQL 5.7 to MySQL 8.0 on a server with a large number of tables, server startup failed to complete due to excessive memory consumption during data dictionary creation. (Bug #26486160)
  • An error occurring in a statement that modifies user privileges could result in deadlock for other transactions attempting to access the user privilege cache. (Bug #26475282)
  • The thread pool plugin logged too much information for failed connections. (Bug #26368725, Bug #86863)
  • Enabling multiple components concurrently could result in a server exit. (Bug #26171471, Bug #86514)
  • A malformed mysqld-auto.cnf file could cause a server exit. (Bug #26085774)
  • Creating a table in a reserved tablespace did not return an error. (Bug #26073851, Bug #86309)
  • For debug builds, using KILL to terminate a stored routine could raise an assertion. Thanks to Laurynas Biveinis for the patch. (Bug #26040870, Bug #86260)
  • If the init_connect system variable was set, its contents could not be executed by clients with expired passwords, who therefore were prevented from connecting. Now, if a client has an expired password, init_connect execution is skipped, which enables the client to connect and change password. (Bug #25968185)
  • Dates using the YYYYMMDD format were not recognized correctly in a query meeting all three of the following conditions:
  • The query performed a left join.
  • A DATE column in the inner table of the join was part of a multi-column primary key.
  • Every column in the inner table's primary key was compared with another value; this could be either a literal or a column value. (Bug #25949639)
  • An in-place ALTER TABLE operation on a table with foreign keys resulted in a table definition mismatch. The new table definition passed to storage engine methods during the ALTER TABLE execution contained invalid foreign key names. (Bug #25915132, Bug #85997)
  • It was possible to assign nonexistent roles to an account as its default roles. (Bug #25755666, Bug #85561)
  • Using the C API, when trying to execute an INSERT prepared statement with CURSOR_TYPE_READ_ONLY set, the client hung. (Bug #25701141, Bug #85105)
  • RENAME USER failed even though the user or role to be renamed was not present in any role graph. (Bug #25658586)
  • MySQL client programs could exit unexpectedly if malformed client/server protocol packets were received. (Bug #25471090)
  • Memory statistics collected by the Performance Schema could be incorrect due to race conditions. (Bug #25212799)
  • Incorrect handling by the CONNECTION_CONTROL plugin of an internal hash led to spurious messages in the error log and eventual server exit. (Bug #25052009)
  • CURRENT_ROLE() and ROLES_GRAPHML() now return a string with the utf8 character set. Previously, they incorrectly returned a binary string. (Bug #24843257)
  • Killing INSTALL COMPONENT or UNINSTALL COMPONENT could result in multiple rows for a single component in the mysql.component system table. (Bug #24660436)
  • Performing SHOW PROCESSLIST while running a high load concurrently using the X Plugin could lead to an unplanned server exit. (Bug #24621170)
  • References: See also: Bug #23057045.
  • The regular expression implementation in MySQL uses a String object—intended to be initialized as empty—to hold the current subject, and used the literal "" for this value. This could interfere with other functions that do likewise. This is fixed by constructing the String with a nullptr instead. (Bug #23276471)
  • mysqlpump could leak memory or exit when errors occurred. (Bug #23102944)
  • LDML 2.8 collation definitions could cause unexpected server behavior. (Bug #22819030)
  • Log-opening operations accessed log-name system variables without holding a lock on them. Multiple threads accessing such a variable could lead to a race condition and unexpected server behavior. (Bug #22591899)
  • When the range optimizer computed the prefix for a string of sufficient length, it was possible for it to truncate the string in the middle of a character, which could lead to assertion and other failures in debug builds. Now steps are taken in such cases to make sure that the string is truncated at a character boundary. (Bug #22475473, Bug #13712655)
  • Queries having subqueries or expressions in the GROUP BY clause could in some situations return random results, due to reading of uninitialized data. (Bug #20035304)
  • References: See also: Bug #21922202.
  • The audit_log plugin did not log placeholder values for prepared statements. (Bug #16617026)
  • Integer columns in UNION statements could be cast to BIGINT even if a smaller integer type was more appropriate. (Bug #11747567, Bug #33004)
  • Added ER_REGEXP_INVALID_CAPTURE_GROUP_NAME (Error 13110). (Bug #89796, Bug #27597980)
  • Window function row-buffer handling has been refactored to reduce the number of handler reads by 25%. (Bug #89512, Bug #27484133)
  • For some frames, the functions VARIANCE(), VAR_POP(), and VAR_SAMP() produced wrong results when evaluated with the windowing_use_high_precision system variable set to false. (Bug #89390, Bug #27438725)
  • Generated columns with a prefix index were not considered when the optimizer attempted to substitute an expression with an equivalent generated column. This prevented use of prefix indexes to speed up queries with predicates employing a generated column expression. (Bug #89291, Bug #27403367)
  • FIRST_VALUE() did not always return NULL for an empty frame. (Bug #89116, Bug #27348276)
  • Regular expression functions accepting optional arguments did not return NULL as expected when one or more of these arguments was passed as an explicit NULL. (Bug #88872, Bug #27252630)
  • Row-based replication used the wrong set of indexes on the slave. (Bug #88847, Bug #27244826)
  • When executed with no default database having been chosen, EXPLAIN EXTENDED raised Error 1046 No database selected instead of the SQL syntax error expected due to the fact that the EXTENDED keyword has been removed. (Bug #88591, Bug #27153116)
  • The CMake option OPTIMIZER_TRACE=0 had no effect on builds and so is no longer used. (Bug #88520, Bug #27130109)
  • A SELECT statement using GROUP BY with no constant or aggregate column failed a check for functional dependencies, correctly, on the first attempt but succeeded, wrongly, on the next. (Bug #88474, Bug #27427677)
  • References: See also: Bug #21807579.
  • A CREATE TABLE ... SELECT statement with a UNION in the SELECT failed in strict mode for a DATE column declared as NOT NULL. (Bug #87711, Bug #27068222)
  • Prepared statements using nested sub-selects were not always handled correctly. (Bug #87484, Bug #26657904)
  • The cost estimates for a query containing window functions did not take into account the cost of PARTITION BY or ORDER BY, nor did they include the cost of using the frame buffer. (Bug #87373, Bug #26612356)
  • References: See also: Bug #26502118.
  • When processing a query with a subquery, the subquery is no longer optimized if outer query is known to produce an empty result; in such cases, EXPLAIN now shows Not optimized, outer query is empty.
  • This change is made because, when the table used by the outer query is found empty at optimization, this sets the join column to NULL even when defined as not nullable, which leads to a conflict when optimizing the subquery.
  • An exception is made if the outer query has aggregates without any GROUP BY; this means that it has a non-empty result, and that any subquery in the SELECT list must be evaluated and optimized, which reopens the nullability issue, which is now handled correctly for such cases. (Bug #83115, Bug #24713879)
  • References: See also: Bug #83216, Bug #24760317.
  • When selecting from all columns making up a unique key containing nullable columns, with all columns in the WHERE condition set to non-null values, MySQL did not take into account their uniqueness, with the result that only_full_group_by missed detecting a functionally dependent column. (Bug #79291, Bug #22279903)
  • When using a partial index, the optimizer performed a more expensive table lookup instead of using the index, even when the partial index covered the entire set of data needed. (Bug #74359, Bug #19806106)
  • More details on this release at:
  • https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html

New in MySQL 8.0.4 RC (Jan 24, 2018)

  • BUGS FIXED:
  • Important Change: The following changes are made to the PERIOD_ADD() and PERIOD_DIFF() functions:
  • A period value used with one of these functions may not be negative.
  • The month part of a period value may not be equal to 0.
  • A period value used with one of these functions for which at least one of these conditions is true now causes the function to fail with an error. (Bug #27004699, Bug #27004729)
  • Important Change: The LEAST() and GREATEST() functions no longer attempt to infer a context for their arguments from expressions in which they are used. For example, LEAST('11', '45', '2') returns '11', but LEAST('11', '45', '2') + 0 treated the function arguments as integers rather than as strings, and returned 2. Now these functions always evaluate their arguments strictly according to type, and any data type coercion due to their inclusion in an expression is performed only on the result returned by the function. This means that the expression LEAST('11', '45', '2') + 0 now evaluates to '11' + 0, and thus to the integer value 11.
  • This change has been made due to the following considerations:
  • Rules for deriving the context were not always clear or consistent.
  • The results of these functions when used in expressions were not consistent with the results of COALESCE(), or of a UNION query.
  • Applications that use these functions within expressions should be checked to make sure that they do not depend on the previous behavior, and updated if they do so. (Bug #83895, Bug #25123839)
  • InnoDB: An ALTER TABLE operation that added a foreign key constraint referencing a table with generated virtual columns raised an assertion. (Bug #27189701)
  • InnoDB: Concurrent XA transactions that ran successfully to the XA prepare stage on the master conflicted when replayed on the slave, resulting in a lock wait timeout in the applier thread. The conflict was due to the GAP lock range which differed when the transactions were replayed serially on the slave. To prevent this type of conflict, GAP locks taken by XA transactions in READ COMMITTED isolation level are now released (and no longer inherited) when XA transactions reach the prepare stage. (Bug #27189701, Bug #25866046)
  • InnoDB: A DROP DATABASE operation raised an assertion due to a missing general tablespace data file. (Bug #27151163)
  • InnoDB: On Windows, an operation that altered a table partition raised an assertion. The table name was not parsed correctly. (Bug #27075816)
  • InnoDB: A TRUNCATE TABLE operation on a temporary table raised an assertion. (Bug #27073280)
  • InnoDB: A call to a recovery-related function during the post-DDL phase of a DDL operation raised an assertion. (Bug #27041487, Bug #88263)
  • InnoDB: Adding a spatial index that referenced a column with an SRID attribute returned an error. (Bug #27021029)
  • InnoDB: A table with a 64-character foreign key name caused an upgrade failure. Foreign key names up to 64 characters in length should be permitted. (Bug #27014308, Bug #88196)
  • InnoDB: The InnoDB recovery process failed with a tablespace size error for a compressed table that was upgraded from MySQL 5.7 to MySQL 8.0.
  • The tablespace file for a compressed table is now created using the physical page size instead of the InnoDB page size, which makes the initial size of a tablespace file for an empty compressed table smaller than in previous MySQL releases. (Bug #27014083, Bug #88195)
  • InnoDB: A typo was corrected in an InnoDB recovery message. Thanks to Daniël van Eeden for the patch. (Bug #27010613, Bug #88185)
  • InnoDB: An orphan .frm file caused an upgrade failure, and subsequent upgrade attempts were unsuccessful due to a full-text search auxiliary table that was renamed during the first upgrade attempt. (Bug #26995951)
  • InnoDB: Unnecessary tablespace fetch and cache update operations caused a server startup delay. (Bug #26995951)
  • References: This issue is a regression of: Bug #26832347.
  • InnoDB: Workarounds introduced to address conflicting serialized dictionary information (SDI) inserts during concurrent CREATE TABLE operations were removed. (Bug #26995534)
  • InnoDB: A “no space left on device” error reported an invalid error message. (Bug #26960345)
  • InnoDB: During a fast shutdown, InnoDB attempted to write dynamic metadata to the data dictionary after files were closed, resulting in an initialization failure due pending I/O on the data dictionary tablespace. (Bug #26950659)
  • InnoDB: A stack overflow error was encountered on startup after upgrading to MySQL 8.0.4 due to repeated attempts to load an evicted InnoDB system table. (Bug #26945437, Bug #88042)
  • InnoDB: Importing a compressed table raised an assertion. The operation used the clustered index of the table instead of the serialized dictionary information (SDI) index to transform SDI pages. (Bug #26938297)
  • InnoDB: In debug builds, failed temporary table creation during a REPLACE operation raised an invalid assertion. (Bug #26919378, Bug #26958868)
  • InnoDB: DROP DATABASE failed if database tables were created in a general tablespace. General tablespace flags were registered incorrectly causing the serialized dictionary information (SDI) operation to fail. (Bug #26834496)
  • InnoDB: With binary logging enabled, an ALTER TABLESPACE ... RENAME operation failed with a “cannot find space” error. (Bug #26832347)
  • InnoDB: An operation that failed to add an index raised an invalid adaptive hash index assertion. (Bug #26788968)
  • InnoDB: A valid table row type value read from the data dictionary raised an invalid assertion. (Bug #26773152)
  • InnoDB: Starting an upgrade with innodb_force_recovery=5 initialized InnoDB background threads but did not exit the threads gracefully when an error was encountered. Upgrading with a nonzero innodb_force_recovery setting is no longer permitted. (Bug #26766632)
  • InnoDB: A failed CREATE TEMPORARY TABLE statement left an entry in INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO. The in-memory table object was not freed. (Bug #26765438)
  • InnoDB: InnoDB looked up the name of a virtual column in the wrong dict_table_t array when attempting to locate a qualifying index for a foreign key. (Bug #26764604)
  • InnoDB: Attachable read-write transactions that update the table_stats and index_stats data dictionary tables attempted to update the same row, causing a deadlock. (Bug #26762517)
  • InnoDB: During recovery, the tablespace name in an in-memory tablepace object was defined using the file name character set instead of table name character set, resulting in a “missing tablespace” error. (Bug #26761960)
  • InnoDB: Bootstrap code did not reserve the first 1024 table IDs for data dictionary tables. (Bug #26757227)
  • InnoDB: Multiple updates from different clients on a partitioned table caused an unexpected lock wait timeout due to an incorrectly set lock type. (Bug #26731025, Bug #87619)
  • InnoDB: An asynchronous rollback thread that attempted to acquire a metadata lock was interrupted, but the resulting error was not returned to the server. This issue was addressed by removing the metadata lock acquisition, which was not necessary for asynchronous rollback.
  • Only in-memory tables were checked when opening tables for undo processing. The data dictionary is now checked as well, in case tables are not present in memory. (Bug #26678883)
  • InnoDB: An assertion was raised when attempting to open a full-text auxiliary table with a name that was longer than expected. (Bug #26649020)
  • InnoDB: Data dictionary table open functions did not properly handle table and schema name character set conversion, resulting in an error during recovery. (Bug #26640776)
  • InnoDB: A transaction end_stmt() function was not called in some ALTER TABLE ... PARTITION scenarios, resulting in a timeout. (Bug #26629790, Bug #25886814)
  • InnoDB: Acquiring a metadata lock on the serialized diction information (SDI) table during the commit phase of a DDL operation would fail due to a lock wait timeout or halting of the query. (Bug #26628126)
  • InnoDB: Redo logs for dynamic metadata updates were not considered when checking redo log margin. Also, in read-only mode, the innodb_dynamic_metadata data dictionary table was opened unnecessarily for writing of metadata from the redo log. (Bug #26589535)
  • InnoDB: An unexpected error occurred after a failed attempt to install the memcached plugin. (Bug #26588738)
  • InnoDB: The state of a buffer pool page was altered by another thread while a buffer pool resize operation was in progress. (Bug #26588537)
  • InnoDB: Debug functions that assert for conflicting locks did not account for transaction locks that are to be committed or rolled back. (Bug #26562371)
  • InnoDB: Variance-Aware Transaction Scheduling (VATS) functionality that updates the age of waiting record locks failed to ignore table locks, causing an assertion failure. (Bug #26538702)
  • InnoDB: A DDL operation that created or modified a table partition unintentionally altered the row format of other partitions, resulting in a row format mismatch. (Bug #26535746)
  • InnoDB: An ALTER TABLE operation caused the server to halt. (Bug #26492721)
  • InnoDB: The innodb_table_stats data dictionary table was not updated with new partition names when renaming a partitioned table. (Bug #26390658, Bug #86927)
  • InnoDB: Due to a regression introduced in MySQL 8.0.0, the innodb_change_buffering configuration option could not be set dynamically. (Bug #26389442)
  • InnoDB: The online log for a freed index was accessed while rolling back a concurrent UPDATE statement during an online DDL operation. (Bug #26334475)
  • InnoDB: A REPLACE operation on a table with a secondary index on the prefix of a virtual column raised an assertion. (Bug #26330279)
  • InnoDB: Setting tmpdir to the root of a drive caused “Invalid (old?) table or database name” error messages to be printed to the error log. (Bug #26299984, Bug #86737)
  • InnoDB: A race condition occurred during an INFORMATION_SCHEMA query when attempting to check the transaction state without acquiring a transaction mutex. (Bug #26299705)
  • InnoDB: A FLUSH TABLES operation failed to drop an aborted index. While removing the table from the cache, the clustered index was dropped prior to checking for the aborted index. (Bug #26256456, Bug #86607)
  • InnoDB: For InnoDB tables, CREATE TABLE ... LIKE did not respect the innodb_file_per_table system variable setting, and SHOW CREATE TABLE displayed a TABLESPACE clause even though the user specified no explicit tablespace during table creation. (Bug #26199233, Bug #86589)
  • InnoDB: An iterative approach to processing foreign cascade operations resulted in excessive memory use. (Bug #26191879, Bug #86573)
  • References: This issue is a regression of: Bug #16244691.
  • InnoDB: The lock acquisition sequence for a buffer pool eviction operation that evicts compressed pages was incorrect. (Bug #25972975)
  • InnoDB: Metadata locks were released while data dictionary objects were still in use. (Bug #25928984)
  • InnoDB: innochecksum returned a Valgrind error when run on InnoDB files with a 1K compressed page size. (Bug #25922124, Bug #85993)
  • InnoDB: A kill thread failed to close the socket of another thread that was executing a TRUNCATE TABLE operation, causing an assertion. (Bug #25887335, Bug #85925)
  • InnoDB: An INSERT operation on a table with a spatial index raised an assertion due to a failure that occurred during a lock conflict check. (Bug #25729649)
  • InnoDB: A debug sync point intended for user tables was activated for data dictionary tables. (Bug #25508568)
  • InnoDB: A server-side check was added to prevent a foreign key constraint from being placed on the base column of a generated stored column. (Bug #25339192)
  • InnoDB: Warnings that should only appear in debug builds of MySQL were printed to the error log when the length of the history list exceeded 2000000. (Bug #24296076, Bug #82213)
  • InnoDB: Attempting to reduce the buffer pool size to less than the buffer pool chunk size did not report a warning. (Bug #23590280)
  • InnoDB: A “wrong key column” error was added to address an unsupported index creation scenario. (Bug #22486025)
  • InnoDB: Full-text search on indexed columns that use a binary collation did not return case-sensitive matches. (Bug #21625016, Bug #78048)
  • Packaging: When trying to install MySQL Server on Fedora 27 using the MySQL Yum repository, installation failed due to a conflict with the native mariadb-connector-c-devel package. With this fix, the appropriate “obsoletes” have been added for that and other native packages. (Bug #26963839)
  • Partitioning: When creating a partitioned table using an implicit tablespace, the effect is to place each partition in its own tablespace, with no designated tablespace for the table as a whole. Since serialized dictionary information (SDI) was stored in all tablespaces used by a given table, the cost of storing it in a table with many tablespaces became prohibitive. This problem is solved by including only the tablespace for the first partition in the set of tablespaces used to store the SDI. (Bug #26762973)
  • Partitioning: An assertion could be raised on CREATE VIEW on partitioned tables when the server tried to prune partitions of the underlying tables. (Bug #26659699)
  • Partitioning: When renaming a partitioned table, the table statistics were not updated with the new partition names. (Bug #86074, Bug #25953183)
  • Replication; JSON: For row-based replication, partial updates to JSON documents were not applied if the server variable binlog_row_value_options=PARTIAL_JSON (introduced in MySQL 8.0.3) was not specified on the replication slave, as well as on the master. Now, a replication slave applies partial updates to JSON documents whenever these are received from the master, whether or not the slave has binlog_row_value_options=PARTIAL_JSON in its own settings. (Bug #26762675)
  • Replication: The function set_unknow_error() in the Binlog_sender class has been renamed to set_unknown_error(). Thanks to Simon Mudd for the fix (and also for the typo fix in Bug 88149). (Bug #27149075, Bug #88559)
  • Replication: When you invoke mysqld with the --initialize or --initialize-insecure option to initialize the data directory, a warning message is no longer issued regarding the availability of the mysql.gtid_executed table, which should not be available at that stage. Also, the message formerly issued as a warning regarding the generation of a new UUID is now issued as a note, because the generation of a new UUID is normal in that situation. (Bug #27115183)
  • Replication: All servers that belong to a group must have unique UUIDs set by server_uuid, but this was not being enforced by Group Replication and it was possible to add members with duplicated UUIDs. (Bug #27105803)
  • Replication: In MySQL 8.0.3, the default base name for the binary log files and index file was host_name-bin, using the name of the host machine. This default name was used if the --log-bin option was not supplied, and also if the --log-bin option was supplied with no string or with an empty string. From MySQL 8.0.4, if you do not supply the --log-bin option, MySQL now uses binlog as the default base name for the binary log files and index file. In releases before MySQL 8.0.3, there was no binary log with that configuration, so there is no incompatibility with existing binary logs at upgrade. However, for compatibility with existing binary logs from releases before MySQL 8.0.3, if you supply the --log-bin option with no string or with an empty string, the base name defaults to host_name-bin, using the name of the host machine.
  • The warning messages that were previously issued at startup if you did not specify a binary log file name using the --log-bin option (ER_LOG_BIN_BETTER_WITH_NAME) and if you did not specify a server ID using the --server-id option (ER_WARN_NO_SERVERID_SPECIFIED) are now issued as informational messages. A warning message is still issued if replication is attempted with a nonunique server ID. (Bug #27082922)
  • Replication: During distributed recovery as part of joining the group, when the applier was signaling that it had applied all transactions, it was also blindly searching for partial transactions. This was to avoid future applier errors, which would happen if the applier stopped at this point. However, this search and remove only made sense for applier stop cases. Upon execution completeness it should not be done, otherwise it can corrupt or purge the applier relay log, which can led to data loss. To solve this issue, when the applier is waiting for execution completeness, it no longer searches for and removes partial transactions. (Bug #27049034)
  • Replication: Group Replication executes internal operations on the server during start and stop of the plugin, such as enabling or disabling read only mode, using an internal session. When this internal session was opened, if the total number of sessions exceeded the number of permitted open sessions set by max_connections, the operation was failing as expected but a thread was left behind, which later would cause issues. (Bug #27008102, Bug #27016552)
  • Replication: In the Gtid_log_event that precedes every GTID transaction in the binary log file, the transaction_length field used 8 bytes for transactions with 16777216 bytes or more, when it should have used the maximum permitted 9 bytes. (Bug #26993433)
  • Replication: The fix for Bug #22671846 was missing from MySQL version 8.0.3. (Bug #26985976)
  • Replication: The fix for Bug #26117735 (MySQL Bug #86288) could cause a debug assertion when running mysqlbinlog with the --read-from-remote-server option and the --rewrite-db option, depending on the database names specified in the rewrite rule. The issue has now been corrected. (Bug #26878022)
  • Replication: With MySQL compiled using yaSSL, and semisynchronous replication in use, a deadlock could be caused by incorrect handling of acknowledgement packets. Multiple acknowledgement packets can be read together by yaSSL, but the receiver thread for semisynchronous replication only handled the first acknowledgement packet seen after polling. Now, the receiver thread handles all acknowledgement packets that are present in the buffer. (Bug #26865538)
  • Replication: If Group Replication was configured to start on server boot when the server was being initialized using --initialize or --initialize-insecure, because the replication applier infrastructure was not initialized this resulted in an assertion. Now, Group Replication is not started when the server is being initialized. (Bug #26802395)
  • Replication: In a group with heavy load, joining members could need to retrieve a large amount of data to gain synchrony with the group. If the amount of data retrieved exceeded the View_change packet size of 4Mb the members would fail to join the group and enter Error state. Now, the packet size is taken from slave_max_allowed_packet, which defaults to 1GB. Depending on the load your group processes, you might want to increase the packet size further by configuring slave_max_allowed_packet. (Bug #26770576)
  • Replication: With semisynchronous replication in use, if RESET MASTER was issued while an active transaction was waiting for an acknowledgement from the slave, the count of waiting sessions in the Rpl_semi_sync_master_wait_sessions server status variable was incorrect after the wait was completed. (Bug #26748533)
  • Replication: In a group where a joining member consistently received transactions, the joining member could sometimes not enter the online state. This was due to the way the incoming queue of messages was tested. (Bug #26731317)
  • Replication: The --log-slave-updates and --slave-preserve-commit-order options require binary logging. If you specify these options and also disable binary logging using the --skip-log-bin or --disable-log-bin option, a warning or error message is issued. The --skip-log-bin and --disable-log-bin options now disable the --log-slave-updates and --slave-preserve-commit-order options by default, so when those options are not specified, the warning or error message is not issued. (Bug #26666259)
  • Replication: XA ROLLBACK statements that failed because an incorrect transaction ID was given, could be recorded in the binary log with the correct transaction ID, and could therefore be actioned by replication slaves. A check is now made for the error situation before binary logging takes place, and failed XA ROLLBACK statements are not logged. (Bug #26618925, Bug #87393)
  • Replication: The thread where the Group Replication plugin was started was not being correctly killed. This made it impossible to stop or start the plugin after killing the thread where Group Replication was started. (Bug #26435775)
  • Replication: For the NDB storage engine, when the slave used hashing for searches of rows (which is included by default in the setting for the slave_rows_search_algorithms system variable from MySQL 8.0.2), the table used to store the row hashes was not cleaned up correctly after records were removed on the slave. The issue was caused by a variant error value returned by the NDB storage engine, which has now been corrected to the expected value. (Bug #26434966)
  • Replication: MySQL internal administration commands that update replication-specific repository tables, for example during a replication synchronization check using the mysqlrplsync utility, can now bypass read locks. This enables such commands to execute regardless of the settings for the read_only and super_read_only system variables and the autocommit mode. (Bug #26414532, Bug #86224)
  • Replication: Changes to Group Replication variables while starting or stopping the plugin were not being correctly validated. Now, the variables can only be changed if the plugin is not changing state. (Bug #26372117)
  • Replication: The binary log function MYSQL_BIN_LOG::new_file_impl returned the error “Can't open file” (ER_CANT_OPEN_FILE) when it should have returned “Error writing file” (ER_ERROR_ON_WRITE). (Bug #26370868, Bug #86870)
  • Replication: When write sets are used for parallelization by a replication slave (as specified by the binlog_transaction_dependency_tracking system variable), the case and accent sensitivity of the database are now taken into account when generating the write set information. Previously, duplicate keys could be incorrectly identified as different, causing transactions to have incorrect dependencies and so potentially be executed in the wrong order. (Bug #26277771, Bug #86078)
  • Replication: When the transaction_write_set_extraction option was enabled, there was a risk of unnecessary serialization while foreign keys were gathered if concurrent DDL took place. Group Replication now takes advantage of the new Data Dictionary to interact with table definitions and foreign keys, which has solved this potential serialization. (Bug #26187850)
  • Replication: The receiver thread for semisynchronous replication was not able to receive acknowledgements from slaves that used compression of the master/slave protocol (slave_compressed_protocol=ON). The receiver thread now handles compressed acknowledgements correctly. (Bug #26027024, Bug #86230)
  • Replication: The mysql_reset_connection() function now clears the write set session history. (Bug #25950554, Bug #86063)
  • Replication: On replication slaves, in the XA_STATE field in the Performance Schema table events_transactions_current, the state of XA transactions was incorrectly reported as COMMITTED instead of PREPARED after the XA PREPARE statement was applied on the slave. (Bug #25940184)
  • Replication: In a multi-source replication topology, a memory leak could occur on the slave when binlog_rows_query_log_events was enabled on the master, and a statement already applied from another channel was skipped on the slave. In this situation, the instance of the Rows_query log event stored on the slave was not being deleted. The log event instance is now cleaned up and the memory is freed. Thanks to Vlad Lesin for his contribution to the patch. (Bug #25695434, Bug #85371, Bug #85034)
  • Replication: Queries to the Performance Schema replication_applier_global_filters and replication_applier_filters tables, which show the global and channel-specific replication filters configured on a replication slave, have been optimized so that a view is generated only when the filters are changed. Previously, a view was generated for every row that was created. (Bug #25694140)
  • Replication: A memory leak was fixed in GTID-based replication. Memory was not being freed after the repository tables were updated for skipped or ignored events. (Bug #25656123, Bug #85251)
  • Replication: When a worker thread on a multi-threaded slave failed to apply a transaction on which a later transaction depended, the coordinator thread could begin scheduling the dependent transaction before being notified of the issue. If a STOP SLAVE request was made during this situation, it caused an assertion to be raised in debug builds. (Bug #25585436)
  • Replication: When group_replication_enforce_update_everywhere_checks=ON the Group Replication plugin checks if there are foreign key cascades and disallows updates to such tables. However SET NULL operations were not being checked, which could cause data inconsistency. Now, when group_replication_enforce_update_everywhere_checks=ON, operations on child tables are blocked if the table has a SET NULL option configured. (Bug #25404162)
  • Replication: On Windows, errors generated by Group Replication now contain the detailed error message rather than just the error number. (Bug #24918678)
  • Replication: With statement-based replication in use, if an UPDATE or DELETE statement was used inside an XA transaction ending with XA COMMIT ONE PHASE, and the statement did not affect any rows, a replication error occurred. An XA END statement was not written to the binary log, so slave servers identified the XA transaction as still being active at the time of the commit request. The required XA END statement is now written even if the transaction affected no rows. (Bug #24812958, Bug #83295)
  • Replication: Replication clients no longer enable LOCAL capability for LOAD DATA statements, because they do not use LOAD DATA LOCAL statements. (Bug #24763131)
  • Replication: The behavior of mixed-format replication (binlog_format=MIXED) has changed with regards to temporary tables. Previously, when mixed-format binary logging was in use, if a statement was logged by row and the session that executed the statement had any temporary tables, all subsequent statements were treated as unsafe and logged in row-based format until all temporary tables in use by that session were dropped. Also, on a replication slave with log_slave_updates enabled, row-based logging was incorrectly continued across all subsequent sessions for the duration of the connection, as reported in the bug.
  • Now, when mixed binary logging format is in use, statements that exclusively use temporary tables are not logged. Statements that involve a mix of temporary and nontemporary tables are logged on the master only for the operations on nontemporary tables, and the operations on temporary tables are not logged. The exception is if the creation of a temporary table was recorded in the binary log using statement-based format. In this case, a DROP TEMPORARY TABLE IF EXISTS statement is logged on the master when the temporary table is dropped.
  • With this change in behavior, the remaining statements in the session that do not involve temporary tables no longer need to be treated as unsafe. The safe statements are now logged in statement-based format, and the unsafe statements are logged in row-based format, according to the normal behavior for mixed format replication, regardless of the presence of temporary tables in the session. Also, the issue reported in the bug has been fixed so that subsequent sessions using the connection now use the appropriate logging format for the session, regardless of the format used by earlier sessions.
  • When binlog_format is ROW or STATEMENT, the behavior remains as before. For row-based binary logging format, operations on temporary tables are not logged, with the exception of the DROP TEMPORARY TABLE IF EXISTS statement as for mixed format. For statement-based binary logging format, operations on temporary tables are logged on the master and replicated on the slave, provided that the statements involving temporary tables can be logged safely using statement-based format. binlog_format=STATEMENT is now the only logging mode in which temporary tables are replicated on the slave.
  • You cannot now change the binlog_format setting from ROW or MIXED to STATEMENT at runtime, because any CREATE TEMPORARY TABLE statements will have been omitted from the binary log in the previous mode. You can still switch from STATEMENT to ROW or MIXED format, even when temporary tables have been created.
  • Thanks to George Lorch and Laurynas Biveinis from Percona for the patch. (Bug #18843730, Bug #72475)
  • Replication: Regardless of the number of virtual IPs configured on a machine, Group Replication could access only the first 12 addresses. (Bug #86772, Bug #26324852)
  • Replication: The delayed initialization mechanism used for server starts has been improved. Now, it only blocks connections until the server is in read mode. (Bug #86271, Bug #26037344)
  • Replication: When a primary member, for example the primary in single-primary group or in a multi-primary group, which also had asynchronous replication channels feeding data into it was stopped, the asynchronous channels would continue applying changes. Although super_read_only was being set when STOP GROUP_REPLICATION was issued, this did not stop any running asynchronous replication channels which were already running. This meant that changes could be made locally on the member, and that the asynchronous replication channels had to be stopped manually. Now when Group Replication stops, either due to an error or when STOP GROUP_REPLICATION is issued, all asynchronous replication channels are stopped. (Bug #86222, Bug #26024253)
  • Replication: The logging of Group Replication has been improved. Now logging includes information when a member joins or leaves, when the view changes, and so on. (Bug #84798, Bug #25495393)
  • Linux: On Alpine Linux, mysql would lose its connection to the server if its standard output was not writable. Also, for mysql and mysqldump, order of result flushing for stdout and stderr is now deterministic. (Bug #27169809)
  • Microsoft Windows: On Windows, with the myisam_use_mmap and flush system variables enabled, MyISAM did not always flush table files properly. (Bug #26880757)
  • JSON: JSON expressions used as arguments with the LAG() function were not always evaluated correctly. (Bug #26740557)
  • JSON: Repeated execution of a prepared statement that employed JSON_ARRAY() was not handled correctly. (Bug #26704312)
  • References: This issue is a regression of: Bug #25867454.
  • JSON: When executing the JSON_INSERT() function, the check that is performed to determine whether or not a given insert is being made into the root element tested whether the length of the path was 1—that is, whether the path consisted of a single leg determining which position the inserted element has inside the root element. A problem occurred when there were auto-wrapping path legs at the beginning of the path, in which case a path whose length is greater than 1 might also refer to an element in the root, so that checking the path length did not reliably inform us whether the target element of the insert was the root or some other element.
  • To fix this, the check of the path length for detection of the root element has been replaced with a check as to whether the matched element has a parent; if it has none, it must be the root element. (Bug #26649978)
  • References: This issue is a regression of: Bug #86213, Bug #26022576.
  • JSON: When serializing a JSON value to its binary representation, it is necessary to make sure that the destination buffer has sufficient space to hold an integer or double value of the required size. Allocation of this buffer previously reserved only the minimum amount of memory needed, which made it very likely that a reallocation would be needed shortly thereafter. This could adversely affect performance, especially when serializing arrays with many numeric values. The serialization is now performed in a manner such that the allocation increases the size of the destination buffer size exponentially, which reduces the amount of the time spent performing this task when processing large arrays. (Bug #88656, Bug #27171283)
  • JSON: When a JSON document was converted to string representation, floating-point values that had no fractional part could be represented such that they became indistinguishable from integers. When the string representation of such a JSON document was passed through the JSON parser again, the information that the numeric value was originally specified as a floating-point value was lost.
  • To rectify this problem, a fractional part is now added to the string representation of a floating-point value in a JSON document if the value has no fractional part and is not represented using scientific format. This makes the string representation of a floating-point value distinguishable from that of an integer, so that it continues to be treated as a floating-point number even if the string is parsed again.
  • This fix also makes ST_GeomFromGeoJSON() use the same JSON parser as the other JSON functions rather than its own custom parser as had been the case since MySQL 5.7.8; this special handling was due to the fact that ST_AsGeoJSON() dropped the fractional part of negative zero (-0 instead of -0.0), causing the JSON parser to interpret -0 as integer 0, thus losing the distinction between positive and negative zero. Since ST_AsGeoJSON() now uses the standard JSON parser, it represents negative zero as correctly as -0.0, obviating any need for ST_GeomFromGeoJSON() to preserve negative zero explicitly on its own when parsing the output from ST_AsGeoJSON(). (Bug #88230, Bug #27028889)
  • JSON: When inserting JSON values created from the result of a GROUP BY query, the inserted values could sometimes include the concatenation of all the values previously inserted into that column. (Bug #87854, Bug #26867509)
  • JSON: When called using strings extracted from JSON documents as arguments, the LEAD() and LAG() functions returned the same value for every row. (Bug #87839, Bug #26848089)
  • JSON: The microseconds part of the last-updated field in each histogram in the INFORMATION_SCHEMA.COLUMN_STATISTICS table (showing when the histogram was last updated) was dropped when serializing the histogram into JSON and so was not stored. (Bug #87833, Bug #26846289)
  • JSON: When a JSON_SET() statement updated a JSON value to the same value using a partial update (in other words, when the partial update was essentially a NOOP), it was possible that logical diffs for this operation were produced, even though no binary diffs were produced. Now in such cases, neither logical update nor binary diffs are generated. (Bug #87113, Bug #26483625)
  • JSON: Following the implementation of JSON partial updates, the same JSON document could have different binary representations on the master and the slave. This could lead row-based replication—which uses binary equality to find the matching row on the slave—to fail if this occurred. Now the string representation of the JSON document is used for the comparison instead.
  • Also as a result of this fix, updates can be skipped in more cases than previously; this is true where the binary representation has changed, but not the contents of the document. (Bug #86532, Bug #26177130)
  • For builds on 32-bit platforms with Undefined Behavior Sanitizer enabled, a stack-overrun check could cause a server exit. (Bug #27224961)
  • The server could hang during spatial reference system (SRS) creation while another session was using that SRS. (Bug #27220467)
  • A lock for the privilege cache was acquired unnecessarily during privilege-checking operations not involving table permissions. (Bug #27197483)
  • Persisting the read-only gtid_owned or gtid_executed system variable caused an assertion failure at server startup. These variables can no longer be persisted. (Bug #27193853)
  • Improper handling of plugin loading and unloading could cause a server exit. (Bug #27151550, Bug #88589, Bug #27116827, Bug #88483)
  • Error propagation from some windowing functions was not always performed correctly. (Bug #27135084, Bug #27136492)
  • Negation of some very large values was not handled correctly by an internal function. (Bug #27134168)
  • Instituted stricter checks when performing addition involving date intervals. (Bug #27134148)
  • Recently introduced SRID and COLUMN_STATISTICS metadata locks were not instrumented by the Performance Schema. (Bug #27124506)
  • The name of a derived table was not saved before the table was materialized and assigned the name of the temporary table. Later, when trying to reset the table name, this caused the server to fail due to the missing reference to the original value of the name. (Bug #27121663)
  • Performance Schema queries that used indexes on OBJECT_TYPE columns could return incorrect results. (Bug #27121500)
  • Compiling with -DWITH_ASAN=1 and -DWITH_ASAN_SCOPE=1 detected a stack-use-after-scope memory error. (Bug #27108794, Bug #88460)
  • FILE privilege checking for prepared SELECT ... INTO OUTFILE statements was incorrect. (Bug #27094955)
  • Some messages with note priority were written to the error log when log_error_verbosity was less than 3. (Bug #27082862)
  • The ha_create_table_from_engine function failed to pass a table object to the ha_create routine. (Bug #27066335)
  • Partition by and order by elements of unused window definitions were not included when estimating memory requirements. This is resolved by assigning a parsing context (CTX_WINDOW), but only when the current context is CTX_NONE. As part of this fix, unused window definitions are now removed after being checked for syntax and semantic errors. (Bug #27062031)
  • GROUP BY with a ROLLUP that generated NULL was not handled correctly. (Bug #27060420)
  • An Event Scheduler event for which global autocommit was disabled at event expiration time caused an assertion to be raised. (Bug #27041552, Bug #88255)
  • Length calculations for string-valued user-defined variables could be incorrect if the collation was changed. (Bug #27041543, Bug #88256)
  • CREATE TABLE ... SELECT statements that attempted to create a non-InnoDB table raised an assertion if a pre-existing view referenced the table to be created. (Bug #27041536, Bug #88258)
  • When used as an argument to the IF() function, the value of a TIMESTAMP column could be handled differently for different collations. (Bug #27041526, Bug #88259)
  • With statement-based binary logging, using CREATE TABLE ... SELECT to create a BLACKHOLE table caused an assertion to be raised. (Bug #27041516, Bug #88260)
  • For debug builds, a TIMESTAMP-related assertion could be raised with explicit_defaults_for_timestamp enabled. (Bug #27041502, Bug #88261)
  • Under LOCK TABLES, an attempt to execute a DML statement on a table with foreign keys led to assertion failure if the statement was incompatible with the mode under which the tables in the foreign key relationship were locked. (Bug #27041477, Bug #88264)
  • With a LOCK TABLES statement active, queries that select from the INFORMATION_SCHEMA.FILES table could raise an assertion trying to obtain a metadata lock. (Bug #27041452, Bug #88266)
  • Server component installation did not properly perform auto-increment handling, which could result in a server exit. (Bug #27041374, Bug #88276)
  • With big_tables=1 and character_set_connection=ucs2, SHOW TABLE STATUS could raise an assertion. (Bug #27041323, Bug #88279)
  • With a backup lock active, removal of binary log files and relay log files incorrectly was permitted. (Bug #27030339)
  • When evaluating an end-range condition in a scan of a non-covering secondary index, and the end-range condition referenced an indexed virtual column, InnoDB sometimes read the wrong column from the index, which could lead to assertion failures or wrong results. (Bug #27010089)
  • In event items in filter rules, the audit_log plugin did not properly process values specified as a JSON array. (Bug #27010045)
  • An integer overflow was sometimes possible when adding date values, with the potential to return invalid results. (Bug #27004806)
  • TRUNCATE TABLE on an InnoDB table with an active LOCK TABLES raised an assertion if more than one table instance was locked. (Bug #26999526)
  • Some windowing functions including NTH_VALUE() did not return NULL in all cases in which they should have. (Bug #26975882)
  • If one of the temporal arguments to LEAST() or GREATEST() was of type DATETIME, but the aggregated data type was something other than VARCHAR or a temporal type, the LEAST() or GREATEST() item had temporal properties set for it in spite of the fact that it was not of a temporal data type. The temporal properties for the LEAST() or GREATEST() item, including its fractional precision, were therefore not calculated correctly, leading to failure at a later point in statement execution.
  • To fix this issue, the data type of LEAST() or GREATEST() is now temporarily set to a temporal type if one or more, but not all, of its arguments are of temporal types regardless of their aggregated data type. (Bug #26975864)
  • IFNULL() did not always check for errors correctly when processing multiple arguments. (Bug #26975848, Bug #27062796, Bug #27062694)
  • With compression enabled for the client/server protocol, logical packets that are multiples of size 0xFFFFFF could cause the connection to be dropped. Thanks to Facebook Inc. for the patch. (Bug #26974113, Bug #88092)
  • Installing and uninstalling a plugin many times from multiple sessions could cause the server to become unresponsive. (Bug #26946491)
  • A virtual column definition that included a function removed in MySQL 8.0 caused startup to fail with a “No database selected” error when starting the MySQL 8.0 server on a MySQL 5.7 data directory. (Bug #26945125, Bug #88040)
  • These errors occurred after an in-place upgrade from MySQL 5.7 to 8.0:
  • Starting the server with an --explicit-defaults-for-timestamp=0 setting returned an Invalid default value for 'cached_time' error.
  • Starting the server with --initialize and --explicit-defaults-for-timestamp=0 configuration settings returned an Invalid default value for 'SET_TIME' error.
  • Duplicate SET data type values caused a Duplicated value in SET error, regardless of the sql_mode configuration setting.
  • (Bug #26944731, Bug #88039, Bug #26948678, Bug #88032)
  • Queries with a common table expression and a derived table or view that contained a window function produced incorrect results. (Bug #26907753, Bug #87939)
  • The deprecation warnings were clarified regarding use of the --symbolic-links and --skip-symbolic-links server options (and their equivalents). The server no longer warns about a missing data directory when invoked with the --help option. (Bug #26898576, Bug #87913)
  • VALUES() was not handled correctly in some cases. (Bug #26881946)
  • The tablespace discovery mechanism in MySQL Cluster was disabled, which prevented serialized dictionary information from being imported into the data dictionary in cases where the table exists in the storage engine dictionary but not in the MySQL data dictionary. (Bug #26867488)
  • For debug builds, validation checks on relevant generated columns could be missed for UPDATE statements, leading to a server exit. (Bug #26838771)
  • For window functions, an error could be produced that a window was not defined, when it was defined. (Bug #26813454, Bug #87780)
  • When a materialized derived table was determined to be superfluous, the routine that deleted the corresponding object left it in an inconsistent state. Now in such cases, the derived table's TABLE_LIST object left in a consistent state after its materialized object is deleted, by setting its table pointer to NULL. (Bug #26798989)
  • Incorrect results were obtained for a query with MAX() and a HAVING clause used inside a view. (Bug #26781725)
  • Metadata locking for definition changes to tables underlying a view could be inconsistent with metadata locking for other statements on the tables. (Bug #26770836)
  • In MySQL 8.0, view column names are restricted to 64 characters. A MySQL 5.7 view with longer column names was marked as invalid during an upgrade to 8.0 was marked invalid. Now such views produce an error during the upgrade and must be altered to have legal column names before the upgrade will succeed. (Bug #26743291, Bug #87650)
  • Concurrent calls to GET_LOCK() could cause deadlock, even with a wait time of 0. (Bug #26739438, Bug #87620)
  • FROM_UNIXTIME() did not always work correctly with LAG(). (Bug #26739028)
  • Following an INSERT statement with BLOB values in the ON DUPLICATE KEY UPDATE clause that failed with a constraint violation, a similar statement with no reason to return an error could cause a server exit. (Bug #26734162)
  • The Performance Schema now stores rewritten rather than raw SQL statement text when available. (Bug #26732229)
  • Re-executing a prepared statement that used window functions could cause a server exit. (Bug #26730020)
  • An in-place upgrade to MySQL 8.0 caused a server exit if tables contained columns with a pre-5.0 DECIMAL data type. This data type is not supported, so upgrades now detect such columns and warn that in-place upgrade cannot be done. Affected tables must be upgraded by dumping and restoring them. (Bug #26727481)
  • A comparison operator used to order keys in a data dictionary cache hash map incorrectly determined that two storage-engine private IDs used by different storage engines were equal. (Bug #26723442)
  • Values in the XID_GTRID column of the Performance Schema events_transactions_current table were displayed incorrectly for XA transactions. (Bug #26710081, Bug #87559)
  • Incorrect results or a server exit could result when SHA2() was passed a user-defined variable in some character sets. (Bug #26704451)
  • Incorrect NULL handling by LAG() and LEAD() could cause a server exit. (Bug #26703246, Bug #26703156)
  • mysqlpump no longer includes the SQL_NO_CACHE modifier in statements because that modifier is now deprecated and results in deprecation warnings. (Bug #26694675)
  • If an error occurred while setting up the temporary table for duplicate weedout in a semi-join (for example, because the disk was full), the server did not terminate gracefully with an appropriate error message.
  • Now in the event that the temporary table is not successfully created, the query is aborted. (Bug #26679983)
  • The server did not always clean up correctly after executing an IN subquery that used a hash semi-join. (Bug #26679495)
  • Building with the -DWITHOUT_SERVER=ON CMake option failed due to attempting to link the authentication_ldap_sasl_client client-side plugin against the embedded server library. (Bug #26665217)
  • During data directory creation or upgrade from MySQL 5.7 to 8.0, server startup would fail due to a Performance Schema initialization failure if the server was started in read_only mode. Additionally, Information Schema metadata was not updated at startup, and Performance Schema and Information Schema version information was stored without verifying that schema tables were created.
  • The versioning scheme used for the data dictionary and Information Schema system views is now consistent with the Performance Schema versioning scheme. (Bug #26636238, Bug #87436)
  • The CREATE_OPTIONS column in the INFORMATION_SCHEMA.TABLES table did not show correct information. (Bug #26634507)
  • Incorrect results could be returned for queries that used an outer join and a derived table referenced a const value from an inner table of the outer join. (Bug #26627181)
  • AFTER UPDATE triggers were not invoked for INSERT ... ON DUPLICATE KEY UPDATE when the value to be updated and the new value were the same. (Bug #26626277, Bug #87371)
  • Assignment of anonymous roles to the mandatory_roles system variable was incorrectly permitted. Additionally, assigning a value to mandatory_roles now requires the ROLE_ADMIN privilege, in addition to the SYSTEM_VARIABLES_ADMIN or SUPER privilege normally required to set a global system variable. (Bug #26576989)
  • The server fell back to using the built-in error messages if the lc_messages_dir value was invalid at server startup, but not if lc_messages or lc_time_names were invalid. Now the server uses the built-in messages if any of those variables are invalid at startup. (Bug #26576922)
  • SET DEFAULT ROLE ALL did not include roles named in the mandatory_roles system variable. (Bug #26571995)
  • On Windows, CMake did not automatically add x64 toolchain support for some Visual Studio versions. (Bug #26566360)
  • Problems could occur when a derived table with an ORDER BY clause was merged into an outer query, and when the columns from the ORDER BY were not also referenced in the outer query. (Bug #26542829)
  • Parallel inserts of schema SDI into the SDI B-tree could raise an assertion when creating tables in the same schema in parallel. (Bug #26539665, Bug #87225)
  • Changing the UMASK and UMASK_DIR environment variables from their default values had no effect on database directory and table file access. (Bug #26529942)
  • For debug builds, incorrect nullability assessment of derived table column references could cause CONCAT() to raise an assertion. (Bug #26524721)
  • A server exit could result from simultaneous attempts by multiple threads to register and deregister metadata Performance Schema objects, or to acquire and release metadata locks. (Bug #26502135)
  • MSI packages for Windows failed to detect when Microsoft Visual C++ 2010 Redistributable Package was installed. (Bug #26501092, Bug #87139)
  • Queries that used window functions for tables that contained a BLOB column could cause a server exit. (Bug #26496880)
  • Persisted variables belonging to plugins were not always handled properly at server startup. (Bug #26495619)
  • A server exit could occur for queries that used DISINCT and ORDER BY ... LIMIT and were executed using range access and a temporary table for the ORDER BY. (Bug #26483909)
  • LDAP authentication plugins could fail if their associated system variables were set to invalid values. (Bug #26474964)
  • The Linux RPM spec file for RHEL6 and higher is updated with comments that recommend installing the redhat-rpm-config package to add convenience macros that make rebuilding the RPM package easier. Thanks to Simon Mudd for the patch. (Bug #26474153, Bug #87098)
  • If the error log was misconfigured and the server could not start, no output describing the problem was produced. (Bug #26447825, Bug #87087)
  • When a materialized semi-join operation was evaluated more than once, and one of the tables in the materialization was a const table (that is, with join type JT_CONST), invalid data was accessed during the second materialization when referencing the const table. (Bug #26436185)
  • Password-expiration options did not work correctly for authentication plugins that use external authentication methods. (Bug #26435766)
  • Adding an ORDER BY to a query that included an outer join and a subquery caused a constant value defined for a column in the subquery to be incorrectly promoted to a constant value in the case when the subquery returns 0 rows. (Bug #26432173)
  • For the autocommit system variable, the Performance Schema variables_info table always reported the VARIABLE_SOURCE column as COMPILED. (Bug #26428017)
  • For debug builds, INSERT IGNORE statements that tried to insert NULL into a GEOMETRY NOT NULL column raised an assertion because there is no valid value to convert the NULL to. This is now handled as a nonignorable ER_BAD_NULL_ERROR_NOT_IGNORED error. (Bug #26412713)
  • SET PERSIST_ONLY changed the VARIABLE_SOURCE column of the Performance Schema variables_info table when it should not have. (Bug #26395134)
  • The server failed to check the maximum path length for partition names. (Bug #26390632)
  • Problems occurred when a window with buffering followed an equi-join on a unique index, due to the fact that the window modified the input record with the assumption that, the next time control passes back to the join, a new record was read to the input record. This problem is addressed by reinstating the input record in such cases. (Bug #26389508)
  • Identifiers containing a mixt of backslashes and backticks could be parsed incorrectly. (Bug #26372491)
  • audit_log plugin THD objects could be created with incorrect thread ID information, leading to assertion failure. (Bug #26362452)
  • The HISTOGRAM column in the column_statistics data dictionary table used a key named charset-id to indicate collation numbers. This key has been renamed to collation-id. (Bug #26330090, Bug #86794)
  • Starting the server with the --skip-name-resolve option could cause localhost in account entries to match non-localhost hosts. (Bug #26328274, Bug #26202411, Bug #86546)
  • Installing and uninstalling Performance Schema example plugins concurrently with deletes from tables associated with those plugins could cause a server exit. (Bug #26281359)
  • When HASH_SCAN was specified as one of the values for the slave_rows_search_algorithms system variable, which is the default from MySQL 8.0.2, and row-based replication was in effect, updates to a table containing virtual generated fields could raise an assertion. The issue was caused by an error when generating string representations of the virtual generated fields in order to create hashes for use in searches. To remove the issue, MySQL no longer creates hashes for virtual generated fields. (Bug #26280724)
  • The server permitted SHOW CREATE TABLE on nontable files created for full-text searching. (Bug #26271244)
  • For debug builds, CREATE OR REPLACE VIEW for an existing view raised an assertion for column names greater than 64 characters. Now an appropriate error is reported. (Bug #26266789)
  • SET PERSIST could be ineffective due to sorting variables written to mysqld-auto.cnf. Variables are now written in the order persisted. (Bug #26259671)
  • Attempting a partial backup with mysqlpump on a GTID-enabled server failed and produced an error message suggesting incorrectly that this was not possible. (It is possible using the --set-gtid-purged option.) (Bug #26199978)
  • GRANT GRANT OPTION ON *.* TO user granted GRANT OPTION for static but not dynamic privileges. REVOKE ALL ... FROM CURRENT_USER() revoked static but not dynamic privileges. (Bug #26191109, Bug #25658967)
  • Error logging could attempt to log freed messages, resulting in a server exit. (Bug #26188656, Bug #86562)
  • A HAVING condition was optimized away for an alias on an aggregate column where there was no GROUP BY clause. (Bug #26188578)
  • ST_Crosses() could return an incorrect result when at least one parameter is a geometry collection and multiple elements of the geometry collection must be taken into account in order to determine whether the geometries cross. (Bug #26188208, Bug #86559)
  • MBROverlaps() incorrectly returned false for two crossing perpendicular lines. (Bug #26188118, Bug #86558)
  • ALTER USER user DEFAULT ROLE ALL produced an error. (Bug #26174169)
  • mysqldump exited abnormally for large --where option values. (Bug #26171967, Bug #86496)
  • A query using a window function with a window which partitioned or ordered on the result of an aggregate function where this evaluated as NULL returned incorrect results. (Bug #26164633)
  • The Performance Schema could leak memory due to nondeletion of file instances created for ALTER TABLE operations that used the table-copy algorithm. (Bug #26152751, Bug #86482)
  • Failed creation of a temporary table using REPLACE could under some circumstances result in an assertion in a later statement. (Bug #26126789, Bug #86422)
  • mysqlpump did not properly parse TABLESPACE clauses in the result from SHOW CREATE TABLE statements it executed to determine table structure. (Bug #26116415)
  • The binary file for the udf_example user-defined function was omitted from binary distributions. (Bug #26115002)
  • Long SET PERSIST statements could cause a server exit. (Bug #26100122)
  • An incorrect formula was used to calculate maximum length of result strings for a few string functions: QUOTE(), AES_DECRYPT(), and WEIGHT_STRING(). This could affect, for example, the length of character columns created for CREATE TABLE ... AS SELECT ... QUOTE(). (Bug #26049942, Bug #86305)
  • Schema creation and removal operations could fail due to checking for schema directories under the data directory rather than checking the data dictionary. (Bug #26043994, Bug #86282)
  • SHOW PLUGINS did not handle plugins that were terminating, resulting in a server exit. The statement now displays the status for such plugins as DELETING. (Bug #26029765)
  • Some statements could cause a buffer overflow in the digest code. Thanks to Laurynas Biveinis and Roel van de Paar for the patch. (Bug #26021187)
  • Previously, when the Performance Schema failed to initialize, it wrote a nonspecific init failed warning to the error log. Now it prints more specific messages about which memory allocation failed. (Bug #25996291)
  • Incorrect results could occur on a table with a unique index when the optimizer chose a loose index scan even though the unique index had no index extensions. (Bug #25989915, Bug #86165, Bug #26532061, Bug #87207)
  • References: This issue is a regression of: Bug #21749123, Bug #78244.
  • For XA COMMIT, precommit handling could set an error in the diagnostics area that was not reported correctly on the calling side, causing an assertion to be raised. (Bug #25978684, Bug #86142)
  • The MIN_VALUE column of the Performance Schema variables_info table displayed incorrect values on 32-bit big-endian platforms. (Bug #25967079)
  • A memory leak occurred when the optimizer excluded a subquery associated with a temporary table. (Bug #25951134)
  • An assertion could be raised for updates when a view or derived table considered read only had nested references not seen as read only. (Bug #25832861, Bug #85796)
  • Certificate and key files automatically generated by the server could have an incorrect access mode. (Bug #25832856)
  • Queries on the INFORMATION_SCHEMA TABLES and STATISTICS tables, if evaluated using Index Condition Pushdown, could push down internal data dictionary functions, resulting in an assertion being raised. (Bug #25820175, Bug #85765)
  • ST_AsText() could read freed memory. (Bug #25818451)
  • CREATE USER IF NOT EXISTS was not written to the binary log if the user existed. This could result in inconsistent replication behavior if the user did not exist on slave servers. A similar issue occurred for ALTER USER IF EXISTS. To avoid inconsistencies, these statements now are written to the binary log. (Bug #25813089, Bug #85733)
  • An invalid utf8 input string caused a heap buffer overflow error. (Bug #25811623, Bug #25946444)
  • A race condition made it possible to cause a server exit by persisting variables from multiple sessions simultaneously. (Bug #25768813)
  • Plugins can create or drop INFORMATION_SCHEMA tables, but views that reference INFORMATION_SCHEMA tables were not validated when plugins were unloaded or unloaded. (Bug #25761992, Bug #85579)
  • mysql wrote some password-related statements to the .mysql_history file. (Bug #25750609)
  • Incorrect handling of internal memory buffers could cause a server exit. (Bug #25737271)
  • On a read-only server with GTIDs enabled, a DROP TEMPORARY TABLE IF EXISTS statement relating to a nonexistent or filtered table could write an unnecessary transaction to the binary log and create an unnecessary GTID. In this situation, the missing temporary table was previously assumed to be transactional, leading to the statement being split. Now, MySQL checks that the temporary table exists and that its DROP TEMPORARY TABLE statement is recorded in the binary log. If this is not the case, no GTID is created. Thanks to Laurynas Biveinis for the patch. (Bug #25656992, Bug #85258)
  • The MeCab full-text parser plugin failed to load on Windows. (Bug #25633175)
  • The SET_TIME column of the Performance Schema variables_info table was initialized incorrectly. (Bug #25608115)
  • Executing a stored procedure containing a statement that created a table from the contents of certain SELECT statements could result in a memory leak. (Bug #25586773)
  • The Performance Schema failed to check the maximum host length for client connections. (Bug #25510805)
  • For spatial functions, some set operations produced a result with SRID 0 when given arguments in a different SRID. (Bug #25510403)
  • Large --ssl-cipher values could cause client programs to exit. (Bug #25483593)
  • A missing argument-count check during preparation of a stored procedure call could result in a server exit. (Bug #25398451, Bug #84512)
  • Temporary tables used in processing a recursive common table expression with UNION DISTINCT and a great many columns now use the MEMORY engine instead of InnoDB. (Bug #25190109)
  • If the MySQL root user account was renamed, a query that accessed an INFORMATION_SCHEMA view returned an error stating that the user specified as the definer does not exist. To avoid this error, a new system user account, 'mysql.infoschema'@'localhost', is now the DEFINER for INFORMATION_SCHEMA views. (Bug #25185947, Bug #84027)
  • When an UPDATE required a temporary table having a primary key larger than 1024 bytes and that table was created using InnoDB, the server could exit. (Bug #25153670)
  • SET DEFAULT ROLE was not transactional like other account-management statements. (Bug #25122897)
  • mysqlpump included the gtid_executed table in dumps of the mysql system database, causing the gtid_executed position to be lost upon server restart after the dump was reloaded. mysqlpump no longer dumps the gtid_executed table. (Bug #25109007)
  • For geometry calculations, invalid input parameters could lead to an incorrect result buffer and cause an assertion to be raised or a server exit. (Bug #25062396)
  • IFNULL(decimal, int) could lose a digit after the decimal point when used in a query that included GROUP BY and was executed using a temporary table. (Bug #25051195, Bug #83699)
  • For some queries, such as those involving UNION, column width for GROUP_CONCAT() could be calculated incorrectly, leading to incorrect application of group_concat_max_len. (Bug #25050090, Bug #83667)
  • Audit logging of events for the Performance Schema global_variables table was improved so as to not report events for rows materialized but not reported to the SQL layer. (Bug #24970428)
  • ST_Buffer() could return an invalid result or raise an error for some inputs that should have produced a valid output geometry. (Bug #24947868, Bug #26735293, Bug #25662426)
  • For builds with AddressSanitizer or Undefined Behavior Sanitizer enabled, division by zero could occur during Performance Schema timer initialization. (Bug #24785784)
  • Operations that rely heavily on the metadata locking (MDL) subsystem caused a performance degradation. Traversal of MDL ticket lists was time consuming in cases where there were large number of MDL tickets. (Bug #24734971, Bug #83143)
  • When binlog_format is ROW or (from MySQL 8.0.4) MIXED, operations on temporary tables are not logged. Previously, the exception to this rule was that when the connection was terminated at the end of the session, the statement DROP TEMPORARY TABLE IF EXISTS was logged for any temporary tables that had been opened in the session. For row-based replication, this behavior caused an unnecessary write to the binary log, and added a transaction sequence number for the GTID where these were enabled.
  • Now, when a temporary table is created in a session, the binary logging format is tracked. The DROP TEMPORARY TABLE IF EXISTS statement is only logged at the end of the session if statement-based format was in effect when the temporary table was created, so the CREATE TEMPORARY TABLE statement was logged. If row-based or mixed-format binary logging was in use when the table was created, the DROP TEMPORARY TABLE IF EXISTS statement is not logged.
  • Thanks to Laurynas Biveinis for the patch. (Bug #24670909, Bug #83003)
  • Concurrent INSERT, ALTER TABLE, and DROP DATABASE operations could result in deadlock. (Bug #24510948, Bug #82704)
  • Under some conditions, the audit_log plugin could recursively lock a mutex, resulting in an unresponsive server. (Bug #24437533)
  • In some cases, the optimizer chose a loose index scan (QUICK_GROUP_MIN_MAX_SELECT) for a GROUP BY query even when there was a predicate with a disjunction. This is fixed by not performing a range scan when the condition in the WHERE clause results in more than one disjoint range tree. (Bug #24423143)
  • Incorrect results could occur when the optimizer chose an index on a generated column to fetch values. (Bug #24345509)
  • Debug symbol packages are now included for all apt platforms (previously, they were only available on Debian 9). (Bug #24008883)
  • With SQL_MODE='', UNIX_TIMESTAMP(COUNT(1)) returned NULL instead of 0 as expected. (Bug #23529242)
  • When deleting rows from a table that had an indexed virtual BLOB column with a NOT NULL constraint, and the generated column expression evaluated to NULL in one of the rows that were being deleted, conversion of the NULL to its NOT NULL equiva

New in MySQL 5.7.21 (Jan 16, 2018)

  • Audit Log Notes:
  • MySQL Enterprise Audit now supports compression and encryption of audit log files. Encryption is based on a user-defined password. To use this feature, the MySQL keyring must be enabled because audit logging uses it for password storage. MySQL Enterprise Audit also now supports logging in JSON format, in addition to the existing XML formats. For JSON format, functions are available that provide runtime log reading capabilities. For additional information, see MySQL Enterprise Audit.Note
  • Compared to previous MySQL versions, interpretation of the log file name (the audit_log_file system variable value) has changed, as has log file renaming behavior at audit log plugin initialization and termination. See Audit Log File Name.
  • Configuration Notes:
  • For RHEL, SLES, and Fedora RPMs, the default plugin directory for debug builds has been changed from /usr/lib64/mysql/plugin to /usr/lib64/mysql/plugin/debug. (Bug #27072155, Bug #88363)
  • The installation scripts for MySQL Enterprise Audit and MySQL Enterprise Firewall now create their associated tables in the mysql system database as InnoDB rather than MyISAM tables. (Bug #26323351, Bug #26906601)
  • The hardcoded memory page size of 8KB for the memory-mapped transaction coordinator was too small for platforms such as ARM64 and PowerPC where the page size is much larger. The server now invokes a system call to get the page size of the current platform rather than using a hardcoded value. A consequence for the --log-tc-size option is that the minimum and default values are now 6 times the page size. Also, the value must be a multiple of the page size. Thanks to Alexey Kopytov for the patch. (Bug #23014086, Bug #80818, Bug #26931470, Bug #87995)
  • Performance Schema Notes:
  • The Performance Schema setup_timers table is now deprecated, to be removed in MySQL 8.0, as is the TICK row in the performance_timers table.
  • Pluggable Authentication:
  • For the LDAP authentication plugins, handling of the group search attribute indicated by the authentication_ldap_sasl_group_search_attr and authentication_ldap_simple_group_search_attr system variables is more flexible. If the group search attribute is isMemberOf, LDAP authentication directly retrieves the user attribute isMemberOf value and assign it as group information. If the group search attribute is not isMemberOf, LDAP authentication searches for all groups where the user is a member. (The latter is the default behavior.) This behavior is based on how LDAP group information can be stored two ways: 1) A group entry can have an attribute named memberUid or member with a value that is a user name; 2) A user entry can have an attribute named isMemberOf with values that are group names. (Bug #26317645)
  • The LDAP authentication plugins now permit the authentication string that provides user DN information to begin with a + character. In the absence of this character, the authentication string value is treated as is without modification, as it has been previously. If the authentication string begins with +, the plugin constructs the full user DN value from the account user name as the cn attribute value, together with the authentication string (with the + removed). The authentication string is stored as given in the mysql.user system table, with the full user DN constructed on the fly before authentication.
  • For the LDAP authentication plugins, the group search attribute was fixed and not configurable. Two new system variables now enable using custom group filters: authentication_ldap_sasl_group_search_filter and authentication_ldap_simple_group_search_filter. (Bug #26091340)
  • Security Notes:
  • Incompatible Change: Passwords are now restricted to a maximum of 256 characters for the sha256_password authentication plugin, and for the PASSWORD() function when old_passwords=2. Also, the number of password hashing rounds is capped to limit CPU time used. (Bug #27099029, Bug #27194270)
  • The linked OpenSSL library for the MySQL Commercial Server has been updated to version 1.0.2n. Issues fixed in the new OpenSSL version are described at http://www.openssl.org/news/vulnerabilities.html.
  • This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #27212666, Bug #27236394)
  • MySQL now supports key migration between underlying keyring keystores. This enables DBAs to switch a MySQL installation from one keyring plugin to another. See Migrating Keys Between Keyring Keystores.
  • MySQL Enterprise Edition now includes a keyring plugin, keyring_encrypted_file, that is similar to the keyring_file plugin in its use of a local data file for key storage, but that also encrypts the file based on a user-defined password. See Using the keyring_encrypted_file Keyring Plugin.
  • Test Suite Notes:
  • Documentation for the MySQL Test Suite is now maintained in the MySQL source tree using Doxygen (see http://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_MYSQL_TEST_RUN.html). The related Unix man pages that previously were produced from the old test suite manual are no longer updated and have gone out of date. Consequently, they are no longer included in MySQL distributions. (Bug #27021754)
  • The MySQL test suite now includes CRC32() tests. Thanks to Daniel Black for the patch. (Bug #26495791, Bug #87136)
  • Functionality Added or Changed:
  • InnoDB: The innodb_undo_tablespaces configuration option is deprecated and will be removed in a future release.
  • Replication: Host names can now be specified as part of a whitelist for group replication connections, using the group_replication_ip_whitelist system variable. Host names support CIDR notation. Host names that resolve to IPv6 addresses are not supported. For host names, name resolution takes place only when a connection request is made by another server. A host name that cannot be resolved is not considered for whitelist validation, and a warning message is written to the error log. Forward-confirmed reverse DNS (FCrDNS) verification is carried out for resolved host names. Warning: Host names are inherently less secure than IP addresses in a whitelist. FCrDNS verification provides a good level of protection, but can be compromised by certain types of attack. Specify host names in your whitelist only when strictly necessary, and ensure that all components used for name resolution, such as DNS servers, are maintained under your control. You can also implement name resolution locally using the hosts file, to avoid the use of external components.
  • Replication: The group_replication_allow_local_disjoint_gtids_join system variable has been deprecated and is scheduled for removal in a future version.
  • The -DWITH_ASAN_SCOPE CMake option enables the AddressSanitizer -fsanitize-address-use-after-scope Clang flag for use-after-scope detection. The default is off. To use this option, -DWITH_ASAN must also be enabled. (Bug #27095089)
  • Bugs Fixed:
  • Important Change; Partitioning: Checking for tables that used the generic partitioning handler could cause delays of several minutes when starting the MySQL Server. To keep this from happening, the --disable-partition-engine-check option is now enabled by default. (Bug #85830, Bug #25846957)
  • Performance; JSON: Creating a representation of a JSON string now optimizes for the most common case—that the string to be processed contains no special characters that need to be escaped—scanning for the first special character in the string, and copying each sequence of characters which do not require escaping in a single memcpy() call, rather than checking each character in turn to determine whether it needed to be escaped, escaping it if so, and then copying it, one by one, as was done previously.
  • This fix also corrects a failure to escape the control character u001f, or unit separator character. (Bug #86898, Bug #26388690, Bug #87722, Bug #26780307)
  • References: See also: Bug #25977595.
  • InnoDB: Multiple updates from different clients on a partitioned table caused an unexpected lock wait timeout due to an incorrectly set lock type. (Bug #26731025, Bug #87619)
  • InnoDB: An ALTER TABLE operation caused the server to halt. (Bug #26492721)
  • InnoDB: The innodb_table_stats data dictionary table was not updated with new partition names when renaming a partitioned table. (Bug #26390658, Bug #86927)
  • InnoDB: A FLUSH TABLES operation failed to drop an aborted index. While removing the table from the cache, the clustered index was dropped prior to checking for the aborted index. (Bug #26256456, Bug #86607)
  • InnoDB: An iterative approach to processing foreign cascade operations resulted in excessive memory use. (Bug #26191879, Bug #86573)
  • References: This issue is a regression of: Bug #16244691.
  • InnoDB: An INSERT operation on table with spatial index raised an assertion due to a failure that occurred during a lock conflict check. (Bug #25729649)
  • InnoDB: Warnings that should only appear in a debug version of MySQL were printed to the error log when the length of the history list exceeded 2000000. (Bug #24296076, Bug #82213)
  • InnoDB: Attempting to reduce the buffer pool size to less than the buffer pool chunk size did not report a warning. (Bug #23590280)
  • InnoDB: A “wrong key column” error was added to address an unsupported index creation scenario. (Bug #22486025)
  • InnoDB: Full-text search on indexed columns that use a binary collation did not return case sensitive matches. (Bug #21625016, Bug #78048)
  • Packaging: When trying to install MySQL Server on Fedora 27 using the MySQL Yum repository, installation failed due to a conflict with the native mariadb-connector-c-devel package. With this fix, the appropriate “obsoletes” have been added for that and other native packages. (Bug #26963839)
  • Replication: All servers that belong to a group must have unique UUIDs set by server_uuid, but this was not being enforced by Group Replication and it was possible to add members with duplicated UUIDs. (Bug #27105803)
  • Replication: During distributed recovery as part of joining the group, when the applier was signaling that it had applied all transactions, it was also blindly searching for partial transactions. This was to avoid future applier errors, which would happen if the applier stopped at this point. However, this search and remove only made sense for applier stop cases. Upon execution completeness it should not be done, otherwise it can corrupt or purge the applier relay log, which can led to data loss. To solve this issue, when the applier is waiting for execution completeness, it no longer searches for and removes partial transactions. (Bug #27049034)
  • Replication: Group Replication executes internal operations on the server during start and stop of the plugin, such as enabling or disabling read only mode, using an internal session. When this internal session was opened, if the total number of sessions exceeded the number of permitted open sessions set by max_connections, the operation was failing as expected but a thread was left behind, which later would cause issues. (Bug #27008102, Bug #27016552)
  • Replication: The fix for Bug #26117735 (MySQL Bug 86288) could cause a debug assertion when running mysqlbinlog with the --read-from-remote-server option and the --rewrite-db option, depending on the database names specified in the rewrite rule. The issue has now been corrected. (Bug #26878022)
  • Replication: With MySQL compiled using yaSSL, and semisynchronous replication in use, a deadlock could be caused by incorrect handling of acknowledgement packets. Multiple acknowledgement packets can be read together by yaSSL, but the receiver thread for semisynchronous replication only handled the first acknowledgement packet seen after polling. Now, the receiver thread handles all acknowledgement packets that are present in the buffer. (Bug #26865538)
  • Replication: If Group Replication was configured to start on server boot when the server was being initialized using --initialize or --initialize-insecure, because the replication applier infrastructure was not initialized this resulted in an assertion. Now, Group Replication is not started when the server is being initialized. (Bug #26802395)
  • Replication: In a group with heavy load, joining members could need to retrieve a large amount of data to gain synchrony with the group. If the amount of data retrieved exceeded the View_change packet size of 4Mb the members would fail to join the group and enter Error state. Now, the packet size is taken from slave_max_allowed_packet, which defaults to 1GB. Depending on the load your group processes, you might want to increase the packet size further by configuring slave_max_allowed_packet. (Bug #26770576)
  • Replication: With semisynchronous replication in use, if RESET MASTER was issued while an active transaction was waiting for an acknowledgement from the slave, the count of waiting sessions in the Rpl_semi_sync_master_wait_sessions server status variable was incorrect after the wait was completed. (Bug #26748533)
  • Replication: In a group where a joining member consistently received transactions, the joining member could sometimes not enter the online state. This was due to the way the incoming queue of messages was tested. (Bug #26731317)
  • Replication: XA ROLLBACK statements that failed because an incorrect transaction ID was given, could be recorded in the binary log with the correct transaction ID, and could therefore be actioned by replication slaves. A check is now made for the error situation before binary logging takes place, and failed XA ROLLBACK statements are not logged. (Bug #26618925, Bug #87393)
  • Replication: The receiver thread for semisynchronous replication was not able to receive acknowledgements from slaves that used compression of the master/slave protocol (slave_compressed_protocol = ON). The receiver thread now handles compressed acknowledgements correctly. (Bug #26027024, Bug #86230)
  • Replication: On replication slaves, in the XA_STATE field in the Performance Schema table events_transactions_current, the state of XA transactions was incorrectly reported as COMMITTED instead of PREPARED after the XA PREPARE statement was applied on the slave. (Bug #25940184)
  • Replication: In a multi-source replication topology, a memory leak could occur on the slave when binlog_rows_query_log_events was enabled on the master, and a statement already applied from another channel was skipped on the slave. In this situation, the instance of the Rows_query log event stored on the slave was not being deleted. The log event instance is now cleaned up and the memory is freed. Thanks to Vlad Lesin for his contribution to the patch. (Bug #25695434, Bug #85371, Bug #85034)
  • Replication: A memory leak was fixed in GTID-based replication. Memory was not being freed after the repository tables were updated for skipped or ignored events. (Bug #25656123, Bug #85251)
  • Replication: When a worker thread on a multi-threaded slave failed to apply a transaction on which a later transaction depended, the coordinator thread could begin scheduling the dependent transaction before being notified of the issue. If a STOP SLAVE request was made during this situation, it caused an assertion to be raised in debug builds. (Bug #25585436)
  • Replication: When group_replication_enforce_update_everywhere_checks=ON the Group Replication plugin checks if there are foreign key cascades and disallows updates to such tables. However SET NULL operations were not being checked, which could cause data inconsistency. Now, when group_replication_enforce_update_everywhere_checks=ON, operations on child tables are blocked if the table has a SET NULL option configured. (Bug #25404162)
  • Replication: On Windows, any errors generated by Group Replication now contain the detailed error message rather than just the error number. (Bug #24918678)
  • Replication: With statement-based replication in use, if an UPDATE or DELETE statement was used inside an XA transaction ending with XA COMMIT ONE PHASE, and the statement did not affect any rows, a replication error occurred. An XA END statement was not written to the binary log, so slave servers identified the XA transaction as still being active at the time of the commit request. The required XA END statement is now written even if no rows were affected by the transaction. (Bug #24812958, Bug #83295)
  • Replication: Regardless of the number of virtual IPs configured on a machine, Group Replication could access only the first 12 addresses. (Bug #86772, Bug #26324852)
  • Microsoft Windows: On Windows, with the myisam_use_mmap and flush system variables enabled, MyISAM did not always flush table files properly. (Bug #26880757)
  • Microsoft Windows: On Windows, resolution was improved of a timer used for query performance assessment. (Bug #22305994, Bug #26734457)
  • JSON: When inserting JSON values created from the result of a GROUP BY query, the inserted values could sometimes include the concatenation of all the values previously inserted into that column. (Bug #87854, Bug #26867509)
  • In event items in filter rules, the audit_log plugin did not properly process values specified as a JSON array. (Bug #27010045)
  • VALUES() was not handled correctly in some cases. (Bug #26881946)
  • References: See also: Bug #19601973, Bug #17458914.
  • In some cases, virtual generated column expressions containing comparison operators could cause problems with subsequent statements accessing the same table. (Bug #26881855)
  • For debug builds, validation checks on relevant generated columns could be missed for UPDATE statements, leading to a server exit. (Bug #26838771)
  • The default value of the authentication_ldap_sasl_auth_method_name system variable was incorrectly set to SIMPLE rather than SCRAM-SHA-1, and the variable could be set to impermissible values. (Bug #26838525, Bug #26093370)
  • Following an INSERT statement with BLOB values in the ON DUPLICATE KEY UPDATE clause that failed with a constraint violation, a similar statement with no reason to return an error could cause a server exit. (Bug #26734162)
  • The Performance Schema now stores rewritten rather than raw SQL statement text when available. (Bug #26732229)
  • Incorrect results or a server exit could result when SHA2() was passed a user-defined variable in some character sets. (Bug #26704451)
  • mysqlpump no longer includes the SQL_NO_CACHE modifier in statements because that modifier is now deprecated and results in deprecation warnings. (Bug #26694675)
  • Building with the -DWITHOUT_SERVER=ON CMake option failed due to attempting to link the authentication_ldap_sasl_client client-side plugin against the embedded server library. (Bug #26665217)
  • Setting authentication_ldap_simple_max_pool_size=0 and authentication_ldap_simple_init_pool_size=0 at runtime did not disable the LDAP connection pool for the authentication_ldap_simple authentication plugin. (Bug #26646063)
  • Accounts that use an LDAP authentication plugin and were created without any authentication string could be authenticated by the LDAP server regardless of password specified at connect time. (Bug #26634245)
  • Incorrect results could be returned for queries that used an outer join and a derived table referenced a const value from an inner table of the outer join. (Bug #26627181)
  • AFTER UPDATE triggers were not invoked for INSERT ... ON DUPLICATE KEY UPDATE when the value to be updated and the new value were the same. (Bug #26626277, Bug #87371)
  • Changing the UMASK and UMASK_DIR environment variables from their default values had no effect on database directory and table file access. (Bug #26529942)
  • Creating a table with excessive index information could cause a server exit. (Bug #26529369)
  • MSI packages for Windows failed to detect when Microsoft Visual C++ 2010 Redistributable Package was installed. (Bug #26501092, Bug #87139)
  • audit_log plugin THD objects could be created with incorrect thread ID information, leading to assertion failure. (Bug #26362452)
  • When HASH_SCAN was specified as one of the values for the slave_rows_search_algorithms system variable, which is the default from MySQL 8.0.2, and row-based replication was in effect, updates to a table containing virtual generated fields could raise an assertion. The issue was caused by an error when generating string representations of the virtual generated fields in order to create hashes for use in searches. To remove the issue, MySQL no longer creates hashes for virtual generated fields. (Bug #26280724)
  • Attempting a partial backup with mysqlpump on a GTID-enabled server failed and produced an error message suggesting incorrectly that this was not possible. (It is possible using the --set-gtid-purged option.) (Bug #26199978)
  • The Performance Schema could leak memory due to nondeletion of file instances created for ALTER TABLE operations that used the table-copy algorithm. (Bug #26152751, Bug #86482)
  • mysqlpump did not properly parse TABLESPACE clauses in the result from SHOW CREATE TABLE statements it executed to determine table structure. (Bug #26116415)
  • Some statements could cause a buffer overflow in the digest code. Thanks to Laurynas Biveinis and Roel van de Paar for the patch. (Bug #26021187)
  • Previously, when the Performance Schema failed to initialize, it wrote a nonspecific init failed warning to the error log. Now it prints more specific messages about which memory allocation failed. (Bug #25996291)
  • Incorrect results could occur on a table with a unique index when the optimizer chose a loose index scan even though the unique index had no index extensions. (Bug #25989915, Bug #86165, Bug #26532061, Bug #87207)
  • References: This issue is a regression of: Bug #21749123, Bug #78244.
  • Restarting the LDAP server could cause LDAP authentication plugins that used a connection pool to fail to authenticate properly. (Bug #25989788)
  • CREATE USER IF NOT EXISTS was not written to the binary log if the user existed. This could result in inconsistent replication behavior if the user did not exist on slave servers. A similar issue occurred for ALTER USER IF EXISTS. To avoid inconsistencies, these statements now are written to the binary log. (Bug #25813089, Bug #85733)
  • Incorrect handling of internal memory buffers could cause a server exit. (Bug #25737271)
  • MySQL did not compile with GCC 7. (Bug #25643811, Bug #26825211)
  • Executing a stored procedure containing a statement that created a table from the contents of certain SELECT statements could result in a memory leak. (Bug #25586773)
  • When an UPDATE required a temporary table having a primary key larger than 1024 bytes and that table was created using InnoDB, the server could exit. (Bug #25153670)
  • For geometry calculations, invalid input parameters could lead to an incorrect result buffer and cause an assertion to be raised or a server exit. (Bug #25062396)
  • Under some conditions, the audit_log plugin could recursively lock a mutex, resulting in an unresponsive server. (Bug #24437533)
  • In some cases, the optimizer chose a loose index scan (QUICK_GROUP_MIN_MAX_SELECT) for a GROUP BY query even when there was a predicate with a disjunction. This is fixed by not performing a range scan when the condition in the WHERE clause results in more than one disjoint range tree. (Bug #24423143)
  • Setting the MYSQL_GROUP_SUFFIX environment variable had no effect. (Bug #23072792)
  • Queries with many left joins were slow if join buffering was used (for example, using the block nested loop algorithm). (Bug #18898433, Bug #72854)
  • A prepared statement containing an ORDER BY list that referred to a parameter was not always handled correctly. (Bug #87863, Bug #26867652)
  • The server handled triggers and generated columns incorrectly. (Bug #86637, Bug #26251621)

New in MySQL 5.7.20 (Oct 16, 2017)

  • AUDIT LOG NOTES:
  • Event-matching filter rules for the audit_log plugin now support an abort element, which can be used to prevent qualifying events from executing. For more information, see Audit Log Filtering. This capability can be used, for example, to augment the capabilities of MySQL Enterprise Firewall, which blocks SQL statements on a per-user basis, by writing audit filtering rules that match statements and block them based on characteristics of the statements themselves.
  • DEPRECATION AND REMOVAL NOTES:
  • Previously, the --transaction-isolation and --transaction-read-only server startup options corresponded to the tx_isolation and tx_read_only system variables. For better name correspondence between startup option and system variable names, transaction_isolation and transaction_read_only have been created as aliases for tx_isolation and tx_read_only. The tx_isolation and tx_read_only variables are now deprecated and will be removed in MySQL 8.0. Applications should be adjusted to use transaction_isolation and transaction_read_only instead.
  • The query cache is now deprecated and is removed in MySQL 8.0.The mysql client by default strips comments in statements sent to the server, and this behavior is controlled using --skip-comments (strip comments), and --comments (preserve comments).
  • Comment stripping is now deprecated. This feature and the options to control it will be removed in a future MySQL release.
  • These syntax constructs for table and column references are now deprecated and will be removed in a future version of MySQL. Instances of these constructs should be changed to remove the leading period.
  • INSTALLATION NOTES:
  • For platforms that use systemd (see Managing MySQL Server with systemd), the data directory is initialized if empty at server startup. This might be a problem if the data directory is a remote mount that has temporarily disappeared: The mount point would appear to be an empty data directory, which then would be initialized as a new data directory. It is now possible to suppress this automatic initialization behavior.
  • PACKAGING NOTES:
  • mysqlcheck was missing in the MySQL Server Docker image, which prevented mysql_upgrade from running. (Bug #26400146, Bug #86968)
  • SECURITY NOTES:
  • Certificates automatically generated by mysqld and mysql_ssl_rsa_setup now use X509 v3 rather than v1. (Bug #26521654)
  • The keyring_okv plugin now supports password-protecting the key file used for secure connections. See Using the keyring_okv KMIP Plugin.
  • X PLUGIN NOTES:
  • A Mysqlx.Connection.CapabilitiesGet request using MySQL X Protocol did not return the complete list of available authentication mechanisms. (Bug #26044113)
  • For mixed case or uppercase schema names, the statement list_objects could incorrectly report a collection as a table. (Bug #25769683)
  • The X Plugin was omitted from the list of plugins to include for testing data directory permissions. (Bug #24823999)
  • FUNCTIONALITY ADDED OR CHANGED:
  • Replication: In previous versions issuing STOP GROUP_REPLICATION stopped the plugin but the server still accepted transactions. This meant the transactions were not transmitted to the group. To make STOP GROUP_REPLICATION safer, now super_read_only is set to ON immediately upon issuing STOP GROUP_REPLICATION, which ensures no transactions are accepted. (Bug #25495067, Bug #84795)
  • Replication: The group_replication_member_weight variable has been added which enables you to control the election of new primaries in single-primary mode. In previous versions primary election was based on the member's UUID, with the lowest UUID elected as the new primary in the event of fail over. Use this variable to assign numeric weights to members to ensure that specific members are elected, for example during scheduled maintenance of the primary or to ensure certain hardware is prioritised.
  • BUGS FIXED:
  • InnoDB: Invalid error handling code was removed from a function related to tablespace import. (Bug #26595476)
  • InnoDB: A check for discarded partitions during a DML operation only checked the first partition. Failure to check for other discarded partitions caused an assertion failure. (Bug #25942592)
  • InnoDB: Replication lag occurred on slave instances during large update operations on tables with many partitions. (Bug #25687813, Bug #85352)
  • InnoDB: A failure occurred during an end range comparison. (Bug #25669686)
  • InnoDB: Enabling the innodb_buffer_pool_load_now setting failed in readonly mode. The event that signals the buffer pool load thread was not initialized. (Bug #25586766)
  • InnoDB: Test-related code intended to simulate a random read on a non-existent page raised an invalid assertion. (Bug #25479538)
  • References: This issue is a regression of: Bug #25053705.
  • InnoDB: A long wait for a dictionary operation lock held by a full-text search synchronization operation caused a server exit. (Bug #24938374)
  • Partitioning: In certain cases when fetching heap records a partition ID could be set to zero. (Bug #86255, Bug #26034430)
  • Partitioning: Queries involving NULL were not always handled correctly on tables that were partitioned by LIST. (Bug #76418, Bug #20748521)
  • References: See also: Bug #86255, Bug #26034430.
  • Replication: MySQL internal administration commands that update replication-specific repository tables, for example during a replication synchronization check using the mysqlrplsync utility, can now bypass read locks. This enables such commands to execute regardless of the settings for the read_only and super_read_only system variables and the autocommit mode. (Bug #26414532, Bug #86224)
  • Replication: When the Group Replication plugin Delayed_initialization_thread failed to start due to unavailable resources, a locked mutex was being kept behind which would cause issues on Delayed_initialization_thread destructor. The fix ensures that the mutex is unlocked when the thread fails to start. (Bug #26394678)
  • Replication: If hostname resolution was not working for a member in Group Replication, the error returned when attempting to connect was referring to credentials. The error message has been improved to describe the problem with hostname resolution. (Bug #26368004)
  • Replication: If the options file contained Group Replication related settings the server could stop unexpectedly on start up. (Bug #26314472)
  • Replication: FLUSH LOGS attempted to send an OK message after having already sent an error response during the commit phase. (Bug #26272158)
  • Replication: With some workloads that contained large inserts, the XCOM transaction cache could consume a large amount of memory. The fix limits the size of the cache to reduce the impact to memory usage. (Bug #26241291)
  • Replication: Group Replication partition threads were not visible in the Performance Schema tables. (Bug #26241008)
  • Replication: COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE was set to an incorrect value when group_replication_recovery_complete_at="transactions_certified" on a recovering member. (Bug #26180350)
  • Replication: The values of the group_replication_recovery_use_ssl and group_replication_recovery_ssl_verify_server_cert variables were not being updated when configured for the Group Replication recovery channel. (Bug #26142801)
  • Replication: When replicating a partitioned table with an index, on a replication slave where HASH_SCAN was specified as part of the slave_rows_search_algorithms setting, the slave I/O thread sometimes stopped with an error HA_ERR_KEY_NOT_FOUND. (Bug #26137159)
  • Replication: group_replication_force_members could be used in situations where the group was working properly, in other words a majority was reachable. This incorrect use could cause instability in the group. Therefore, its use has been restricted to the scenario for which it was created, for forming a new membership from a subset of a previous group's membership when a majority of the members are unreachable. (Bug #26093967)
  • Replication: The delayed initialization mechanism used for server starts has been improved. Now, it only blocks connections until the server is in read mode. (Bug #26037344)
  • References: See also: Bug #84731, Bug #25475132.
  • Replication: It was possible to set server_uuid to the same value as group_replication_group_name. Doing so could result in unexpected behavior because GTIDs are identified by a UUID. Now it is not possible to set server_uuid to the same value as group_replication_group_name. (Bug #26035931)
  • Replication: The system variable pseudo_slave_mode, which is for internal server use, sometimes raised an assertion when it was changed inside a transaction. The server no longer changes this variable inside a transaction. (Bug #26034192, Bug #86250)
  • Replication: When a primary member, for example the primary in single-primary group or in a multi-primary group, which also had asynchronous replication channels feeding data into it was stopped, the asynchronous channels would continue applying changes. Although super_read_only was being set when STOP GROUP_REPLICATION was issued, this did not stop any running asynchronous replication channels which were already running. This meant that changes could be made locally on the member, and that the asynchronous replication channels had to be stopped manually. Now when Group Replication stops, either due to an error or when STOP GROUP_REPLICATION is issued, all asynchronous replication channels are stopped. (Bug #26024253)
  • Replication: A misleading warning was issued when the command FLUSH LOGS or PURGE LOGS BEFORE was used on a binary log file with an expiry time set, and the binary log file was in use. The warning related to the file being in use, and implied that a purge attempt had taken place, even if the expiry time had not yet been reached. Now, MySQL checks the expiry time of the binary log file first, and only then checks whether the file is in use. So the warning is only issued for an in-use binary log file that is old enough to be purged. (Bug #25973525)
  • Replication: Group Replication stopped unexpectedly when more than 1024 file descriptors were in use. (Bug #25892493)
  • Replication: Now that XA transactions are prepared and committed in two parts, an issue with statement-based replication has been identified. If two XA transactions committed on the master are being prepared on the slave in the inverse order, locking dependencies can occur that cannot be safely resolved. The issue is not present with row-based replication.
  • XA transactions are therefore now considered unsafe for statement-based replication.
  • Replication: If the Group Replication plugin was uninstalled while a group was running, the plugin was marked for uninstall. This could cause the server shutdown to not complete successfully. The fix ensures that the Group Replication plugin cannot be uninstalled if the majority of the group cannot be reached. In such a case it is necessary to issue STOP GROUP_REPLICATION before uninstalling the plugin. (Bug #25673788)
  • Replication: Replication clients no longer enable LOCAL capability for LOAD DATA statements, because they do not use LOAD DATA LOCAL statements. (Bug #24763131)
  • Replication: In case of a failure while creating multiple slave applier worker threads, some threads would be left orphaned and their resources would not be collected. Thanks to Laurynas Biveinis for his contribution to fixing this bug. (Bug #24679056, Bug #82980)
  • Replication: The binlog_checksum option cannot be changed within a transaction. MySQL cannot log this statement, as would be required inside a transaction, while the requested function is being performed on the binary log. (Bug #22914463)
  • Replication: The logging of Group Replication has been improved. Now logging includes information when a member joins or leaves, when the view changes, and so on. (Bug #84798, Bug #25495393)
  • Compiling with -DWITHOUT_SERVER=1 resulted in my_symlink.c compilation failure due to missing #include for my_dir.h. Thanks to Christian Hesse for the patch. (Bug #26495816, Bug #87137)
  • yaSSL could incorrectly perform TLS cipher negotiation. (Bug #26482173)
  • The Linux RPM spec file for RHEL6 and higher is updated with comments that recommend installing the redhat-rpm-config package to add convenience macros that make rebuilding the RPM package easier. Thanks to Simon Mudd for the patch. (Bug #26474153, Bug #87098)
  • If the error log was misconfigured and the server could not start, no output indicating the problem was produced. (Bug #26447825, Bug #87087)
  • mysqld_multi was modified to use mysqld --initialize rather than the deprecated mysql_install_db. Thanks to Zhan Shi for the patch. (Bug #26446321, Bug #87080)
  • Adding an ORDER BY to a query that included an outer join and a subquery caused a constant value defined for a column in the subquery to be incorrectly promoted to a constant value in the case when the subquery returns 0 rows. (Bug #26432173)
  • The server failed to check the maximum path length for partition names. (Bug #26390632)
  • Identifiers containing a mixture of backslashes and backticks could be parsed incorrectly. (Bug #26372491)
  • Source packages for Debian platforms contained prebuilt debug binaries, causing build failures on any architectures other than the one on which those binaries were built. (Bug #26186911)
  • The mysqld_pre_systemd script in RPM packages found the error log setting in option files if specified as log-error but not as log_error, though both are permitted. (Bug #26148391, Bug #86466)
  • When running mysqlbinlog with the --read-from-remote-server option, rewrite rules specified using the --rewrite-db option were ignored, so data was not written to the target database. (Bug #26117735, Bug #86288)
  • REFERENCES privilege checking could use the incorrect database in some cases. (Bug #26106655)
  • Uninstalling the daemon_memcached plugin caused a serious error. (Bug #25909540)
  • The rpl_diff.inc test case file did not find the data difference between servers. Thanks to Yura Sorokin for the patch. (Bug #25860138, Bug #85838)
  • An ngram fulltext parser search query returned incorrect results and raised an assertion. (Bug #25851975)
  • Selecting from a view could yield different results with materialization enabled versus materialization disabled. (Bug #25782811, Bug #85622)
  • The Performance Schema failed to check the maximum host length for client connections. (Bug #25510805)
  • mysqlpump displayed incorrect progress information about the number of tables dumped. (Bug #25432850)
  • Some mysqldump warnings went to the standard output rather than the standard error output and consequently were written to the dump file. (Bug #25380000, Bug #82992)
  • LOAD DATA failed to accept multibyte characters that followed an escape sequence. (Bug #25147988, Bug #83950, Bug #25865525)
  • A server error occurred when a full text search result exceeded the innodb_ft_result_cache_limit setting. The patch for this bug also backports a related patch (Bug #21140111). (Bug #25033538)
  • If a stored function was considered a constant by the optimizer, calling it from a subquery in a NOT IN condition in the WHERE clause could cause a server exit. (Bug #23577867)
  • A mysqldump memory leak was fixed. Thanks to Yura Sorokin for the patch. (Bug #23531150, Bug #81714)
  • Incorrect results or a server exit could result when a query used Batched Key Access optimization and a virtual generated column was part of the join buffer. (Bug #23169112)
  • If a session rolled back to a savepoint and then was killed, the statements up to the point of the savepoint could be committed. (Bug #22350047, Bug #79596)
  • For clients that used Connector/Python and authenticated using the sha256_password plugin, the server could handle connections incorrectly. (Bug #21421642)

New in MySQL 8.0.3 RC (Sep 21, 2017)

  • C API Notes:
  • The MySQL C API now enables clients to specify that metadata transfer for result sets is optional. Suppression of metadata transfer can improve performance, particularly for sessions that execute many queries that return few rows each. For more information, see C API Optional Result Set Metadata.
  • Character Set Support:
  • MySQL now supports Russian collations for the utf8mb4 Unicode character set.
  • Compilation Notes:
  • For debug builds, the SAFE_MUTEX compilation flag was disabled if the memcached plugin was included in the build. This no longer occurs; SAFE_MUTEX is always enabled for debug builds. Some code issues found as a result of this change were corrected. (Bug #26442367, Bug #87068)
  • Binary packages on EL6 and EL7 now are compiled using Devtoolset 6 rather than Devtoolset3 and GCC 6.2.1 rather than 4.9.2. (Bug #26436968, Bug #87061)
  • MySQL now compiles for SPARC on Oracle Linux. (Bug #26306331, Bug #86745)
  • MySQL compilation on macOS using Clang now requires a Clang version different from 8.0, which has problems with certain inline constructs. (Bug #26279510, Bug #86711)
  • 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.
  • Configuration Notes:
  • The performance_schema_max_mutex_classes system variable default value was increased from 220 to 250. The performance_schema_max_thread_classes system variable default value was increased from 50 to 100. (Bug #26193630)
  • The new cte_max_recursion_depth system variable implements a common table expression (CTE) maximum recursion depth. The server terminates execution of any CTE that recurses more levels than the value of this variable. For more information, see Limiting Common Table Expression Recursion. (Bug #26136509, Bug #86444)
  • The back_log system variable default value is now the value of max_connections, which enables the permitted backlog to adjust to the maximum permitted number of connections.
  • To enable the Event Scheduler by default, the event_scheduler system variable default value was changed from OFF to ON.
  • The max_allowed_packet system variable default value was increased from 4194304 (4M) to 67108864 (64M).
  • The max_error_count system variable default variable was increased from 64 to 1024.
  • Data Dictionary Notes:
  • These INFORMATION_SCHEMA tables have been reimplemented as views on data dictionary tables.
  • Queries on those tables are now more efficient because they obtain information from data dictionary tables rather than by other, slower means. For example, the server no longer must create a temporary table for each query of the INFORMATION_SCHEMA table.
  • Also as a result of this change, foreign key information is retrieved from the data dictionary, not from InnoDB.
  • If you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate these changes. (Bug #25583288)
  • Crash safety was improved for CREATE and DROP operations, and, if applicable, ALTER operations for stored programs (other than triggers), views, and user-defined functions (UDFs). The exception for triggers is made because trigger operations are already atomic. A behavior change for DROP VIEW occurs if any named views do not exist. Previously, the statement returned an error indicating which views did not exist and it was unable to drop, but also dropped the views that did exist. Now the statement still indicates which views did not exist, but fails with an error and no changes are made.
  • Deprecation and Removal Notes:
  • Replication: The deprecated global scope for the sql_log_bin system variable has been removed. sql_log_bin now has session scope only. Applications that rely on accessing @@global.sql_log_bin should be adjusted.
  • The deprecated tx_isolation and tx_read_only system variables have been removed. Use transaction_isolation and transaction_read_only instead.
  • The deprecated query cache has been removed.
  • The have_query_cache system variable remains deprecated, always has a value of NO, and will be removed in a future MySQL release.
  • The deprecated EXTENDED and PARTITIONS keywords for the EXPLAIN statement have been removed. These keywords are unnecessary because their effect is always enabled.
  • The unused date_format, datetime_format, time_format, and max_tmp_tables system variables have been removed.
  • The deprecated multi_range_count system variable has been removed.
  • The deprecated log_warnings system variable and --log-warnings server option have been removed. Use the log_error_verbosity system variable instead.
  • The deprecated secure_auth system variable and --secure-auth client option have been removed. The MYSQL_SECURE_AUTH option for the mysql_options() C API function was removed.
  • The deprecated --ignore-builtin-innodb server option and ignore_builtin_innodb system variable have been removed.
  • InnoDB Notes:
  • Renaming of columns in a parent foreign key is temporarily disabled due to ongoing work on foreign key locking. This restriction will be lifted in MySQL 8.0.4. (Bug #26334071)
  • Optimizer Notes:
  • The optimizer now supports a SET_VAR hint that sets the session value of a system variable for the duration of a single statement. Examples:
  • SELECT /*+ SET_VAR(sort_buffer_size = 16M) */ name FROM people ORDER BY name;
  • INSERT /*+ SET_VAR(foreign_key_checks=OFF) */ INTO t2 VALUES(2);
  • The optimizer now uses column-value histogram statistics stored in the column_statistics data dictionary table to construct query execution plans. Histogram use applies to predicates involving comparison of a column to a constant. See Optimizer Statistics.
  • Previously, there was no way of skipping the use of index dives to estimate index usefulness, except by using the eq_range_index_dive_limit system variable. Now index dive skipping is possible for single-table queries under certain query conditions (see Range Optimization).
  • The optimizer_switch system variable has a new flag named use_invisible_indexes to control whether the optimizer uses invisible indexes for query execution plan construction. If the flag is off (the default), the optimizer ignores invisible indexes (the same behavior as prior to the introduction of this flag). If the flag is on, invisible indexes remain invisible but the optimizer takes them into account for execution plan construction.
  • Packaging Notes:
  • mysqlcheck was missing in the MySQL Server Docker image, which prevented mysql_upgrade from running. (Bug #26400146, Bug #86968)
  • For Debian, non-debug binaries were moved from the mysql-server package to the mysql-server-core package. (Bug #26382333)
  • The Debian/Ubuntu mysql-community-source package is no longer produced because the MySQL source tarball it contained is provided by other packages at dev.mysql.com. (Bug #26201482)
  • Performance Schema Notes:
  • As of MySQL 8.0.2, Performance Schema table definitions are maintained internally to the server. In consequence of that change, CREATE TABLE and DROP TABLE are no longer possible for Performance Schema tables. (Bug #26136994)
  • The events_statements_summary_by_digest table now provides, for each row, a sample statement that produces the digest value in the row. Applications can use this information as a more efficient means of capturing statement samples than alternatives such as probing the xxx_history_long tables. The latter approach requires enabling the corresponding xxx_history_long consumers, which is additional overhead for applications that do not otherwise need those tables. For more information, see Performance Schema Statement Digests and Sampling, and Statement Summary Tables.
  • Additionally, the FIRST_SEEN and LAST_SEEN timestamp columns of the events_statements_summary_by_digest table now have a fractional seconds part.
  • The Performance Schema setup_instruments table now has columns for instrument metadata: Instrument properties, instrument volatility, and a documentation string describing the the instrument purpose. Also, the TIMED column now can be NULL, indicating that the instrument does not support timing. See The setup_instruments Table.
  • The new Performance Schema setup_threads table exposes instrumented thread class names and attributes. See The setup_threads Table.
  • Security Notes:
  • A new caching_sha2_password authentication plugin is available. Like the sha256_password plugin, caching_sha2_password implements SHA-256 password hashing, but uses caching to address latency issues at connect time. It also supports more connection protocols and does not require linking against OpenSSL for RSA password-exchange capabilities. See SHA-2 Pluggable Authentication.
  • MySQL now maintains information about password history, enabling DBAs to require that new passwords not reuse old ones for some number of password changes or period of time. It is possible to establish password-reuse policy globally using the password_history and password_reuse_interval system variables, as well as on a per-account basis using the CREATE USER and ALTER USER statements. Together with existing password-expiration capabilities to require that passwords be changed periodically, the new password-history capabilities provide DBAs more complete control over password management. For more information, see Password Management.
  • Important
  • MySQL implements password-reuse restrictions by means of new columns in the mysql.user system table and a new mysql.password_history system table. If you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate these system database changes. Until this is done, password changes will not be possible.
  • If the server is started with the --skip-grant-tables option to disable authentication checks, the server now enables --skip-networking to prevent remote connections.
  • Spatial Data Support:
  • Incompatible Change: Previously, these functions that test geometry relationships supported only Cartesian spatial reference systems (SRSs): ST_Contains(), ST_Crosses(), ST_Disjoint(), ST_Equals(), ST_Intersects(), ST_Overlaps(), ST_Touches(), ST_Within(), MBRContains(), MBRCoveredBy(), MBRCovers(), MBRDisjoint(), MBREquals(), MBRIntersects(), MBROverlaps(), MBRTouches(), MBRWithin().
  • These functions now detect geometry arguments in a geographic (ellipsoidal) SRS and return geographic results. Calculations for projected SRSs and SRID 0 remain the same. For more information, see Spatial Relation Functions That Use Object Shapes, and Spatial Relation Functions That Use Minimum Bounding Rectangles.
  • Note
  • If spatial data contains SRID values that refer to a geographic spatial reference system, existing queries using these functions will return different results, compared to previous MySQL versions.
  • InnoDB: Spatial reference identifier (SRID) support was added for InnoDB spatial indexes.
  • Spatial data types now permit an SRID attribute, to explicitly indicate the spatial reference system (SRS) for values stored in the column. See Spatial Data Types.
  • To indicate each column's SRID attribute value, if there is one, the INFORMATION_SCHEMA.COLUMNS table now has an SRS_ID column.
  • A spatial column with an explicit SRID attribute is SRID-restricted: The column takes only values with that ID, and SPATIAL indexes on the column become subject to use by the optimizer. The optimizer ignores SPATIAL indexes on spatial columns with no SRID attribute. See SPATIAL Index Optimization.
  • SQL Syntax Notes:
  • ALTER TABLE now supports easier column renaming using RENAME COLUMN old_name TO new_name syntax. See ALTER TABLE Syntax. For changing a column name but not its definition, RENAME COLUMN is more convenient than CHANGE, which requires respecifying the current column definition. With CHANGE, you must look up the definition if you do not know it, and if you do not respecify it exactly, there is a possibility of data change or loss. (Bug #11746522, Bug #26949, Bug #11747473, Bug #32497, Bug #11765084, Bug #58006, Bug #14031617)
  • X Plugin Notes:
  • The X Plugin could not be installed when the server was started with the --skip-grant-tables option. (Bug #26516678)
  • X Plugin socket connections were not working correctly. (Bug #26427112, Bug #87019)
  • When compiling MySQL from source, certain infrequently used CMake arguments caused issues for the X Plugin build. (Bug #26141933)
  • A Mysqlx.Connection.CapabilitiesGet request using MySQL X Protocol did not return the complete list of available authentication mechanisms. (Bug #26044113)
  • For mixed case or uppercase schema names, the statement list_objects could incorrectly report a collection as a table. (Bug #25769683)
  • The X Plugin was omitted from the list of plugins to include for testing data directory permissions. (Bug #24823999)
  • Functionality Added or Changed:
  • InnoDB: InnoDB now supports atomic DDL, which ensures that DDL operations are either committed in their entirety or rolled back in case of an unplanned server stoppage.
  • Recovery logs for atomic DDL operations are written to the mysql.innodb_ddl_log data dictionary table. Enabling the innodb_print_ddl_logs configuration option prints DDL recovery logs to the error log.
  • The introduction of atomic DDL prevents orphan temporary or intermediate tables from being left behind by failed ALTER TABLE operations. (Bug #24620918)
  • InnoDB: A new type of backup lock permits DML on InnoDB tables during an online backup while preventing operations on InnoDB files that could result in an inconsistent snapshot. The new backup lock is supported by LOCK INSTANCE FOR BACKUP and UNLOCK INSTANCE syntax. The BACKUP_ADMIN privilege is required to use these statements.
  • InnoDB: The new innodb_dedicated_server configuration option, which is disabled by default, causes InnoDB to automatically configure the following options according to the amount of memory detected on the server.
  • This option is intended for MySQL server instances that run on a dedicated server. For more information, see Enabling Automatic Configuration for a Dedicated MySQL Server.
  • InnoDB: Renaming a general tablespace is now supported by ALTER TABLESPACE ... RENAME TO syntax.
  • The ALTER TABLESPACE and DROP TABLESPACE ENGINE clause is deprecated and will be removed in a future release.
  • InnoDB: Code related to obsoleted InnoDB system tables was removed. INFORMATION_SCHEMA views based on InnoDB system tables were replaced by internal system views on data dictionary tables.
  • After upgrading to MySQL 8.0.3 or later, update any scripts that reference previous InnoDB INFORMATION_SCHEMA view names.
  • INNODB_TABLESPACES_BRIEF, a new INFORMATION_SCHEMA view, provides space, name, path, flag, and space type data for InnoDB tablespaces.
  • InnoDB: When InnoDB was integrated with the global data dictionary, file-per-table tablespace names in the data dictionary were created in the form of innodb_file_per_table_x, where x is the InnoDB tablespace ID. For ease of use, file-per-table tablespace names in the data dictionary are once again the same as the table name.
  • Upgrade from MySQL 5.7 to MySQL 8.0 appends MySQL 5.7 innodb_table_stats and innodb_index_stats tabelspace names in the data dictionary with “_backup57” to differentiate them from their MySQL 8.0 counterparts.
  • InnoDB: The default innodb_autoinc_lock_mode setting was changed from 1 (consecutive) to 2 (interleaved). Interleaved lock mode permits the execution of multi-row inserts in parallel, which improves concurrency and scalability. The new innodb_autoinc_lock_mode default setting reflects the change from statement-based replication to row based replication as the default replication type in MySQL 5.7. Statement-based replication requires the consecutive auto-increment lock mode to ensure that auto-increment values are assigned in a predictable and repeatable order for a given sequence of SQL statements, whereas row-based replication is not sensitive to the execution order of SQL statements. For more information, see InnoDB AUTO_INCREMENT Lock Modes.
  • For systems that use statement-based replication, the new innodb_autoinc_lock_mode default setting may break applications that depend on sequential auto-increment values. To restore the previous default, set innodb_autoinc_lock_mode to 1.
  • InnoDB: Serialized Dictionary Information (SDI) is now present in all InnoDB tablespace files except for temporary tablespace and undo tablespace files. SDI is serialized metadata for schema, table, and tablespace objects. The presence of SDI data provides metadata redundancy. For example, dictionary object metadata may be extracted from tablespace files if the data dictionary becomes unavailable. SDI extraction is performed using the ibd2sdi tool. SDI data is stored in JSON format.
  • The inclusion of SDI data in tablespace files increases tablespace file size. An SDI record requires a single index page, which is 16k in size by default. However, SDI data is compressed when it is stored to reduce the storage footprint.
  • InnoDB: The innodb_flush_neighbors default value was changed from 1 to 0, which disables flushing of neighboring pages from the buffer pool. A setting of 0 is optimal for non-rotational storage (SSD) devices where seek time is not a significant factor. For systems that use rotational storage (HDD), it is recommended to change the setting back to the previous default value of 1.
  • InnoDB: Default values for configuration options that affect buffer pool preflushing and flushing behavior were modified.
  • InnoDB: The minimum innodb_undo_tablespaces value changed from 0 to 2. In previous releases, the system tablespace is used for rollback segments if innodb_undo_tablespaces is set to 0. A minimum value of 2 ensures that rollback segments are created in undo tablespaces instead of the system tablespace. For more information about undo tablespaces, see Configuring Undo Tablespaces.
  • Replication; JSON: Added the binlog_row_value_options system variable. Currently this variable can be unset, or set to the value PARTIAL_JSON. This causes MySQL's row-based replication to use a compact binary log format for each update modifying only a small portion of a JSON document and using any combination of JSON_SET(), JSON_REPLACE(), and JSON_REMOVE(). The compact format includes only the modified parts of the JSON document, not the full document, in the after-image used for the update in the binary log. If the modification requires more space than the full document, or if it is not possible to generate a partial update, the full document is used instead.
  • See the description of the variable as well as Partial Updates of JSON Values, for more information.
  • Replication: The IGNORE_SERVER_IDS option of the CHANGE MASTER TO statement is now deprecated when using GTID-based replication (gtid_mode=ON). With GTIDs, transactions that have already been applied are automatically ignored, so this function is not needed.
  • Before starting GTID-based replication, check for and clear all ignored server ID lists that have previously been set on the servers involved. The SHOW_SLAVE_STATUS statement, which can be issued for individual channels, displays the list of ignored server IDs if there is one. If there is no list, the Replicate_Ignore_Server_Ids field is blank.
  • If gtid_mode=ON is set for the server, a deprecation warning is now issued if you include the IGNORE_SERVER_IDS option in a CHANGE MASTER TO statement. A deprecation warning is also issued if you issue a SET GTID_MODE=ON statement when any channel has existing server IDs set with IGNORE_SERVER_IDS. If you do receive the deprecation warning, you can still clear a list after gtid_mode=ON is set by issuing a CHANGE MASTER TO statement containing the IGNORE_SERVER_IDS option with an empty list.
  • Replication: The following obsolete mysqlbinlog options are now deprecated and will be removed in a future release.
  • The deprecation warnings for these options are sent to standard error, rather than to standard output, so that they do not interfere with the operation of tools that use the output of mysqlbinlog.
  • Replication: The log_slave_updates system variable is now set to ON by default, so you do not need to specify --log-slave-updates explicitly when you start a replication slave.
  • The log_slave_updates system variable is read-only. If you need to prevent a replication slave from logging the updates performed by its SQL thread to its own binary log, specify --skip-log-slave-updates when you start the slave, or specify log_slave_updates=OFF in the configuration file for the slave.
  • Replication: The Group Replication thread states are now shown in the Performance Schema tables.
  • Replication: The group_replication_communication_debug_options variable has been added which enables you to dynamically filter out debugging and tracing messages per Group Replication component, such as GCS, XCOM, and so on. (Bug #10200)
  • JSON: The JSON_MERGE() function is renamed to JSON_MERGE_PRESERVE().
  • This release also adds the JSON_MERGE_PATCH() function, an RFC 7396 compliant version of JSON_MERGE_PRESERVE(); its behavior is the same as that of JSON_MERGE_PRESERVE(), except that JSON_MERGE_PATCH() removes any member in the first object with a matching key in the second object, provided that the value associated with the key in the second object is not JSON null.
  • JSON_MERGE() is still supported as an alias of JSON_MERGE_PRESERVE(), but is now deprecated and subject to removal in a future MySQL release.
  • See Functions That Modify JSON Values, for more information. (Bug #81283, Bug #23255346)
  • InnoDB now uses Variance-Aware Transaction Scheduling (VATS) for scheduling the release of transaction locks when the system is highly loaded, which helps reduce lock sys wait mutex contention. Lock scheduling uses VATS when >= 32 threads are suspended in the lock wait queue.
  • For more information about Variance-Aware Transaction Scheduling (VATS), see Identifying the Major Sources of Variance in Transaction Latencies: Towards More Predictable Databases.
  • Thanks to Jiamin Huang for the contribution. (Bug #25290971, Bug #84266)
  • The binary log is now enabled by default at server startup. The log_bin system variable is set to ON by default, instead of OFF, even if the --log-bin option has not been specified. Binary logging is standard practice for production installations, so enabling it by default removes configuration and planning steps that were usually required.
  • To enable the server to start with log_bin = ON, the server_id system variable is now set to 1 by default, instead of 0. For servers in a replication topology, you must still change this setting to specify a unique server ID for each replication server. Previously, the server could not start with log_bin = ON if no server ID was specified. Now, the server can start, but a warning message is issued if you did not set an explicit server ID.
  • With binary logging enabled for a server, all statements that change data are logged to the server's binary log, which is a sequence of files with a base name and numeric extension. By default, the server creates binary log files and an index file in the data directory, with base names of host_name-bin.xxxxxx and host_name-bin.index, using the value of the pid-file option, which by default is the name of the host machine. You can choose the names and locations of the files by specifying the --log-bin and --log-bin-index options. You are recommended to specify a base name explicitly, so that if the host name changes, you can easily continue to use the same binary log file names. The log_bin_basename system variable holds the base name and any specified path for the binary log files.
  • The relay log and relay log index on a replication slave, whose names are specified by the --relay-log and --relay-log-index options, cannot be given the same names as the binary log and binary log index. From MySQL 8.0.3, the server issues an error message and does not start if the binary log and relay log file base names would be the same.
  • The server creates a new binary log file in the series each time it starts or flushes the logs. The server also creates a new binary log file automatically after the current file's size reaches max_binlog_size, which defaults to the maximum permitted value of 1GB. In MySQL 8.0.3, binary log files expire by default after 30 days, and can then be automatically removed at startup or when the binary log is flushed. You can purge binary log files manually using the PURGE BINARY LOGS statement, or specify a different binary log expiration period using the binlog_expire_logs_seconds system variable.
  • Many other options are available to modify the behavior of binary logging. For more information, see The Binary Log and Binary Logging Options and Variables.
  • To disable binary logging, you can specify the --skip-log-bin or --disable-log-bin option at startup. If either of these options is specified and --log-bin is also specified, the option specified later takes precedence. If you disable binary logging, you must also specify --skip-log-slave-updates, as the --log-slave-updates option is enabled by default from MySQL 8.0.3 and requires binary logging. If you use mysqld to initialize the data directory manually by invoking it with the --initialize or --initialize-insecure option, binary logging is disabled by default, but can be enabled by specifying the --log-bin option with or without a base name.
  • References: See also: Bug #26730000.
  • The expire_logs_days system variable, which specifies the binary log expiration period in days, is now deprecated and will be removed in a future release. expire_logs_days does not provide sufficient flexibility for defining the binary log expiration period.
  • binlog_expire_logs_seconds can be used to set the binary log expiration period in seconds. In MySQL 8.0.3, the effects of the two variables are currently cumulative. For example, if expire_logs_days is 1 and binlog_expire_logs_seconds is 43200, then the binary log is purged every 1.5 days. This produces the same result as setting binlog_expire_logs_seconds to 129600 and expire_logs_days to 0. Note that the default expire_logs_days setting of 30 days is currently added to the binary log expiration period if expire_logs_days is not specified. To use binlog_expire_logs_seconds alone, set expire_logs_days=0 explicitly.
  • To disable automatic purging of the binary log, you must set both expire_logs_days and binlog_expire_logs_seconds explicitly to 0.
  • The new get_sysvar_source plugin service enables plugins to retrieve the source of system variable settings.
  • The zlib library version bundled with MySQL was raised from version 1.2.3 to version 1.2.11. MySQL implements compression with the help of the zlib library.
  • The zlib compressBound() function in zlib 1.2.11 returns a slightly higher estimate of the buffer size required to compress a given length of bytes than it did in zlib version 1.2.3. The compressBound() function is called by InnoDB functions that determine the maximum row size permitted when creating compressed InnoDB tables or inserting rows into compressed InnoDB tables. As a result, CREATE TABLE ... ROW_FORMAT=COMPRESSED or INSERT operations with row sizes very close to the maximum row size that were successful in earlier releases could now fail.
  • If you have compressed InnoDB tables with large rows, it is recommended that you test compressed table CREATE TABLE statements on a MySQL 8.0.3 test instance prior to upgrading.
  • In MySQL 8.0.2, the system variables for the slave status logs, master_info_repository and relay_log_info_repository, were set to TABLE instead of FILE by default. In MySQL 8.0.3, the FILE setting for both these system variables is deprecated, and a warning is issued if it is used. The FILE setting will be removed in a future release.
  • The TABLE setting ensures that replication repository information is stored in InnoDB tables, rather than in files in the data directory. The use of tables makes replication resilient to unexpected halts.
  • The default names for the slave status logs when stored as files were master.info and relay-log.info. The names could be changed using the --master-info-file and --relay-log-info-file options, respectively. As InnoDB tables, the slave status logs are named mysql.slave_master_info and mysql.slave_relay_log_info.
  • Bugs Fixed:
  • Incompatible Change; JSON: If a JSON object contained multiple members with the same key name, MySQL kept the first member and discarded the remainder.
  • When a JSON text is evaluated in JavaScript, the last name-value pair is kept if multiple pairs with the same name are specified. MySQL now does likewise, and implements the last of the three options just listed.
  • The fix for this issue also corrects a failure in the MySQL 8.0 server to handle insertion into a JSON column of data containing JSON arrays as the values for multiple identical keys. (Bug #86620, Bug #86866, Bug #26238736, Bug #26369555)
  • Performance; JSON: Creating a representation of a JSON string now optimizes for the most common case—that the string to be processed contains no special characters that need to be escaped—scanning for the first special character in the string, and copying each sequence of characters which do not require escaping in a single memcpy() call, rather than checking each character in turn to determine whether it needed to be escaped, escaping it if so, and then copying it, one by one, as was done previously.
  • This fix also corrects failure to escape the special character 1F (Unit Separator). (Bug #86898, Bug #26388690)
  • InnoDB: A long semaphore wait occurred when executing ALTER TABLE, DROP TABLE, and DROP DATABASE operations. (Bug #26779650)
  • InnoDB: Invalid error handling code was removed from a function related to tablespace import. (Bug #26595476)
  • InnoDB: File-per-table tablespaces created prior to MySQL 5.6 caused a failure during an in-place upgrade to MySQL 8.0.2. The tablespaces were not registered with the InnoDB SYS_TABLESPACES system table, as required.
  • Tables with decimal columns created prior to MySQL 5.5 also caused a failure during an in-place upgrade to MySQL 8.0.2, due to a precision type mismatch. (Bug #26542296, Bug #87229)
  • InnoDB: A segmentation fault occurred when attempting to open a table that was altered while strict mode was disabled to include conflicting TABLESPACE and COMPRESSION attributes. (Bug #26375851)
  • InnoDB: A segmentation fault occurred during a DML operation that used the TempTable storage engine. (Bug #26363837)
  • InnoDB: Implicit row format conversion during an ALTER TABLE ... REORGANIZE PARTITION operation raised an invalid assertion. (Bug #26326611)
  • InnoDB: An ALTER TABLE operation that rebuilt an encrypted table did not set the encryption attribute properly. (Bug #26243264)
  • InnoDB: A memory leak was encountered on Windows when using the TempTable storage engine for in-memory internal temporary tables. (Bug #26237680)
  • InnoDB: Misleading errors were produced when running Valgrind tests on a server build that was not enabled for Valgrind testing. (Bug #26037206)
  • InnoDB: Problematic code related to dropping orphan full-text search tables caused an invalid object ID assertion failure on startup. (Bug #25998362)
  • InnoDB: Allocated memory was not initialized before it was written to a file, resulting in a Valgrind error. (Bug #25913151, Bug #85986)
  • InnoDB: Replication lag occurred on slave instances during large update operations on tables with many partitions. (Bug #25687813, Bug #85352)
  • InnoDB: A cursor position check by a multiversion concurrency control row search function raised an assertion. (Bug #25377592)
  • InnoDB: The wrong variable was passed to the row_mysql_handle_errors routine causing an assertion failure. (Bug #25183130)
  • InnoDB: A long wait for a dictionary operation lock held by a full-text search synchronization operation caused a server exit. (Bug #24938374)
  • InnoDB: Assertion code was modified to account for the possibility of a transaction attempting to acquire an explicit lock on a record while another transaction converts an implicit lock to an explicit lock on the same record prior to a commit operation. (Bug #24344131)
  • InnoDB: A FLUSH TABLES ... FOR EXPORT operation on an encrypted or page-compressed table raised an assertion. (Bug #22916982)
  • InnoDB: A CREATE TABLE ... SELECT operation raised an assertion failure when the newly created table was dropped before the transaction was committed. (Bug #22154768)
  • Partitioning: In certain cases when fetching heap records a partition ID could be set to zero. (Bug #86255, Bug #26034430)
  • Partitioning: It was possible for a CREATE TABLE statement that failed to create a partitioned InnoDB table not to be rolled back correctly. This was due to an extraneous commit made while performing a check of foreign key information. Since partitioned tables do not presently support foreign keys, this check is unnecessary, and so is no longer made in such cases. (Bug #85299, Bug #25667278)
  • Replication: On a multi-threaded slave, it was possible for a deadlock state to occur due to the timing of updates to the record of disk space used by the relay log. The timing of the update has now been changed so that the deadlock cannot occur. (Bug #26729635)
  • Replication: With slave_preserve_commit_order=1 set, a deadlock could occur between a transaction holding a shared write lock on a table, and a transaction earlier in the commit order that also required a shared write lock. (Bug #26666609)
  • Replication: The Group Replication flow control variables now correctly permit you to have some members in a group that do not affect the minimum throughput of the flow-control mechanism, effectively ignoring those members in case they become blocked. (Bug #26537497)
  • Replication: It was possible to start the server with invalid values for the Group Replication flow control options. Now, the --group-replication-flow-control-min-quota, --group-replication-flow-control-max-quota, and --group-replication-flow-control-min-recovery-quota options are validated on server startup. (Bug #26531899)
  • Replication: The unused variable opt_reckless_slave was removed. (Bug #26500285)
  • Replication: When the Group Replication plugin Delayed_initialization_thread failed to start due to unavailable resources, a locked mutex was being kept behind which would cause issues on Delayed_initialization_thread destructor. The fix ensures that the mutex is unlocked when the thread fails to start. (Bug #26394678)
  • Replication: If hostname resolution was not working for a member in Group Replication, the error returned when attempting to connect was referring to credentials. The error message has been improved to describe the problem with hostname resolution. (Bug #26368004)
  • Replication: In the case of delayed initialization of the Group Replication plugin, deployed in single-primary mode, secondaries were able to get writes through an asynchronous replication channel, which is not allowed in normal initialization of the Group Replication plugin. (Bug #26314756)
  • Replication: If the options file contained Group Replication related settings the server could stop unexpectedly on start up. (Bug #26314472)
  • Replication: FLUSH LOGS attempted to send an OK message after having already sent an error response during the commit phase. (Bug #26272158)
  • Replication: With GTIDs generated for incident log events, MySQL error code 1590 (ER_SLAVE_INCIDENT) could not be skipped using the --slave-skip-errors=1590 startup option on a replication slave. (Bug #26266758)
  • Replication: The Group Replication plugin no longer sets auto_increment_increment and auto_increment_offset variables when single primary mode is active. (Bug #26263155)
  • Replication: Group Replication partition threads were not visible in the Performance Schema tables. (Bug #26241008)
  • Replication: COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE was set to an incorrect value when group_replication_recovery_complete_at="transactions_certified" on a recovering member. (Bug #26180350)
  • Replication: The values of the group_replication_recovery_use_ssl and group_replication_recovery_ssl_verify_server_cert variables were not being updated when configured for the Group Replication recovery channel. (Bug #26142801)
  • Replication: When replicating a partitioned table with an index, on a replication slave where HASH_SCAN was specified as part of the slave_rows_search_algorithms setting, the slave I/O thread sometimes stopped with an error HA_ERR_KEY_NOT_FOUND. (Bug #26137159)
  • Replication: group_replication_force_members could be used in situations where the group was working properly, in other words a majority was reachable. This incorrect use could cause instability in the group. Therefore, its use has been restricted to the scenario for which it was created, for forming a new membership from a subset of a previous group's membership when a majority of the members are unreachable. (Bug #26093967)
  • Replication: It was possible to set server_uuid to the same value as group_replication_group_name. Doing so could result in unexpected behavior because GTIDs are identified by a UUID. Now it is not possible to set server_uuid to the same value as group_replication_group_name. (Bug #26035931)
  • Replication: The system variable pseudo_slave_mode, which is for internal server use, sometimes raised an assertion when it was changed inside a transaction. The server no longer changes this variable inside a transaction. (Bug #26034192, Bug #86250)
  • Replication: When write sets are used for parallelization by a replication slave (as specified by the binlog_transaction_dependency_tracking system variable), empty transactions are now ignored, and the handling of relay log rotation has been optimized. (Bug #25982097)
  • Replication: The Performance Schema replication_applier_status_by_worker table sometimes incorrectly displayed a value for APPLYING_TRANSACTION for an inactive worker, because the table was being populated before the worker thread stopped. (Bug #25896166, Bug #85951)
  • Replication: On a member which had both Group Replication and asynchronous replication running simultaneously, asynchronous replication was not respecting the restrictions required by Group Replication, such as only using InnoDB storage engine, tables requiring primary keys and so on. This could also be encountered when running mysqlbinlog against the member. Now, members that are running Group Replication and asynchronous replication do not allow Group Replication's requirements to be broken. (Bug #25609945)
  • Replication: Joining a member running a lower version to a group running a higher version resulted in the members running the higher version becoming unreachable. (Bug #25568493)
  • Replication: Attempting to uninstall the plugin while START GROUP_REPLICATION executed could result in unexpected behavior. (Bug #25423650)
  • Replication: In case of a failure while creating multiple slave applier worker threads, some threads would be left orphaned and their resources would not be collected. Thanks to Laurynas Biveinis for his contribution to fixing this bug. (Bug #24679056, Bug #82980)
  • JSON: Containers in the internal representations of JSON objects and arrays (Json_object and Json_array) have been changed to use smart pointers rather than raw pointers to Json_dom, so that orphaned DOM objects are now automatically destroyed. (Bug #26161264)
  • JSON: ASCII character 31 (u001f, the unit separator) in a string literal within a JSON document was not quoted when the JSON document was formatted as a string (for example, by CAST('"u001f"' AS JSON)). (Bug #25977959)
  • JSON: When a path_expression identified a nonarray value, the JSON_INSERT() and JSON_ARRAY_INSERT() functions failed to evaluate path_expression[0] as equal to path_expression. (Bug #86213, Bug #26022576)
  • JSON: Searches with JSON_EXTRACT() that used wildcards took an inordinate amount of time. (Bug #84523, Bug #25418534)
  • Under heavy load, an infinite loop occurred in Performance Schema buffer container code. (Bug #26666274)
  • MySQL-specific typedefs such as uchar and my_bool were inadvertently reintroduced into the client namespace if the mysql.h header file was included. (Bug #26588846, Bug #26582752, Bug #87337)
  • uint8korr() and related macros were fixed so that they explicitly do unaligned accesses, even on x86. (Bug #26568748)
  • The main.mysql_upgrade_grant, main.roles-upgrade, and auth_sec.secure_file_priv_warnings, test cases mishandled the error log. The sys_vars.innodb_redo_log_encrypt_basic test case output was unstable. Thanks to Laurynas Biveinis for the patches. (Bug #26562401, Bug #87279, Bug #26575150, Bug #87313, Bug #26575142, Bug #87314, Bug #26582158, Bug #87303)
  • For debug builds, with sql_buffer_result enabled, recursive common table expressions caused a server exit. (Bug #26556025)
  • Incorrect resolution of a window function as a constant function could result in a server exit. (Bug #26500442)
  • Compiling with -DWITHOUT_SERVER=1 resulted in my_symlink.c compilation failure due to missing #include for my_dir.h. Thanks to Christian Hesse for the patch. (Bug #26495816, Bug #87137)
  • Compiling with -DWITH_SSL=system -DWITH_ZLIB=system assumed that the system openssl zlib command was available, which might not be the case. Now availability of that command is checked, and if unavailable, the zlib_decompress utility is built. (Bug #26494495, Bug #87123)
  • yaSSL could incorrectly perform TLS cipher negotiation. (Bug #26482173)
  • Some thread_stack settings could result in a server exit. (Bug #26438067)
  • REPLACE(UUID(),...) expressions could be cached (improperly) and return the same value for each row of a result set. (Bug #26395601)
  • When building MySQL within the source tree, make install installed some CMake files into the mysql-test directory within the tree. (Bug #26385175, Bug #86905)
  • The PROCESS_ID column in the Performance Schema session_connect_attrs and session_account_connect_attrs tables was changed from INT to BIGINT UNSIGNED to accommodate larger process ID values. Thanks to Daniël van Eeden for the patch. (Bug #26357806, Bug #86835)
  • The index on a generated column, whose value was generated from JSON_EXTRACT(), was sometimes not used by the optimizer when it should have been. (Bug #26352119)
  • Setting the log_error_services system variable to NULL caused a server exit. (Bug #26331795)
  • For tar file packages, some test suite shared libraries were installed in the server package rather than the test package. (Bug #26329850)
  • SHOW COLUMNS for a valid view could fail. (Bug #26322203, Bug #86778)
  • An operation that caused renaming or removal of histogram statistics could cause a server exit. (Bug #26303972)
  • For a VARCHAR column, sorting using an explicit collation (ORDER BY col_name COLLATE collation_name) was much slower than with an implicit collation (no COLLATE clause), even if the explicit collation was the same as the implicit collation. (Bug #26286790, Bug #86710)
  • SET binlog_format = ROW produced a syntax error because ROW is now a reserved word. This syntax is now recognized specially to preserve backward compatibility. (Bug #26269280)
  • SET PERSIST_ONLY, should be permitted only to users who have the PERSIST_RO_VARIABLES_ADMIN and SYSTEM_VARIABLES_ADMIN privileges, but was incorrectly also permitted to users with the SUPER privilege. (Bug #26247864)
  • The information_schema_stats configuration option, introduced in MySQL 8.0.0, was removed and replaced by information_schema_stats_expiry.
  • information_schema_stats_expiry defines an expiration setting for cached INFORMATION_SCHEMA table statistics. For more information, see Optimizing INFORMATION_SCHEMA Queries.
  • The TABLES_DYNAMIC, STATISTICS_DYNAMIC, and SHOW STATISTICS_DYNAMIC internal system views were removed. (Bug #26203731, Bug #83957)
  • Source packages for Debian platforms contained prebuilt debug binaries, causing build failures on any architectures other than the one on which those binaries were built. (Bug #26186911)
  • The UDF registration service did not work if used during server startup. (Bug #26173244)
  • Disabling table instrumentation by changes to the Performance Schema setup_objects table could cause incorrect index names in index statistics. (Bug #26162562)
  • A misleading error message was returned when attempting to drop a nonexistent tablespace file. (Bug #26133507, Bug #86438)
  • When running mysqlbinlog with the --read-from-remote-server option, rewrite rules specified using the --rewrite-db option were ignored, so data was not written to the target database. (Bug #26117735, Bug #86288)
  • Timestamp data copied from the data dictionary cache during a DDL operation was converted using a time_zone value that was no longer valid. The resulting timestamp data was incorrect, causing an error in release builds and an assertion failure in debug builds. (Bug #26091333, Bug #86290)
  • Successful data dictionary updates but failure to write the binary log event could result in an inconsistent state. (Bug #26037355)
  • mysqlbinlog now prints the full metadata for the event type Table_map_log_event. (Bug #26020990)
  • For UPDATE or DELETE statements with an ORDER BY ... LIMIT clause, the optimizer sometimes failed to identify a cheaper ordering method than filesort. (Bug #25899921)
  • The rpl_diff.inc test case file did not find the data difference between servers. Thanks to Yura Sorokin for the patch. (Bug #25860138, Bug #85838)
  • The combination of an index virtual generated column, a foreign key, and a trigger could cause an assertion to be raised. (Bug #25817660)
  • Selecting from a view could yield different results with materialization enabled versus materialization disabled. (Bug #25782811, Bug #85622)
  • After using SET PERSIST to set the event_scheduler system variable, the server failed to restart if started with the --skip-grant-tables option. (Bug #25776940)
  • An assertion could be raised for MIN()/MAX() access to system tables. (Bug #25738624)
  • A failed DROP VIEW could be written to the binary log. (Bug #25680097)
  • SHOW CREATE VIEW sometimes added a database name prefix to table names that was not present in the original view definition. (Bug #25634576, Bug #85176)
  • The Performance Schema variables_info table displayed incorrect VARIABLE_SOURCE and VARIABLE_PATH values for variables set within option files specified by !include or !includedir directives. (Bug #25563891)
  • mysqlpump displayed incorrect progress information about the number of tables dumped. (Bug #25432850)
  • The mysqlpump progress indicator was incorrect for number of tables. (Bug #25432850)
  • Calculations for UCA 9.0.0 collations were inefficient for tailoring rules containing contraction characters. (Bug #25426632, Bug #84577, Bug #25426632, Bug #84577)
  • GROUP BY DESC on DECIMAL values could incorrectly group NULL with non-NULL values. (Bug #25407964)
  • Some mysqldump warnings went to the standard output rather than the standard error output and consequently were written to the dump file. (Bug #25380000, Bug #82992)
  • NULL values generated as a result of WITH ROLLUP were replaced with the previous row's value when executing a prepared statement on a view having the GROUP BY .. WITH ROLLUP clause. (Bug #25174118)
  • A parser refactoring in MySQL 8.0.1 resulted in incorrect handling of some INSERT ... ON DUPLICATE KEY UPDATE statements. These problems have been corrected. (Bug #24716127, Bug #25526439, Bug #25071305)
  • For debug builds, a CREATE TABLE statement with a VARBINARY or BINARY column having a default value in hexadecimal format caused a server exit. (Bug #24679166, Bug #83020)
  • A mysqldump memory leak was fixed. Thanks to Yura Sorokin for the patch. (Bug #23531150, Bug #81714)
  • If a session rolled back to a savepoint and then was killed, the statements up to the point of the savepoint could be committed. (Bug #22350047, Bug #79596)
  • MySQL accepted a reference to an alias of an aggregated expression defined in an outer query block even when the reference occurred within a GROUP BY subquery where the reference was meaningless. (Bug #21974346)
  • Some SELECT DISTINCT queries with GROUP BY could return incorrect results. (Bug #20692219)

New in MySQL 5.7.18 (Apr 10, 2017)

  • Functionality Added or Changed:
  • Replication: View change events from a Group Replication group can now be replicated to an external multithreaded slave (MTS) of type DATABASE. (Bug #25170698)
  • Replication: When a negative or fractional timeout parameter was supplied to WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(), the server behaved in unexpected ways.
  • If MySQL was configured to build with the -Wno-error option, mysql_config produced incorrect output for its --cflags option. The set of compiler options that mysql_config and pkg-config produce now is determined by whitelisting rather than blacklisting. (Bug #25040566, Bug #22898475, Bug #80662)
  • The performance of UTF-8 binary collations was improved. (Bug #24788778, Bug #83247, Bug #25076862)
  • Consistency and maintainability of Debian/Ubuntu packaging maintainer scripts was improved. (Bug #23588977)
  • mysql_secure_installation is more strict about what it considers valid yes and no responses. (Bug #13344753, Bug #62925)
  • The replace utility is deprecated and will be removed in MySQL 8.0. If you wish to continue using this utility, be sure to retain a copy from an installed version of MySQL.
  • Bugs Fixed:
  • InnoDB: The restriction that required the first undo tablespace to use space ID 1 was removed. The first undo tablespace may now be assigned a space ID other than 1. Space ID values for undo tablespaces are still assigned in a consecutive sequence. (Bug #25551311)
  • InnoDB: A DROP TABLE operation raised an assertion on a server with an innodb_force_recovery setting of 5 or 6. DROP TABLE is no longer permitted with these innodb_force_recovery settings. (Bug #25385590)
  • References: This issue is a regression of: Bug #19779113.
  • InnoDB: Compiling the server without the Performance Schema caused a build failure. (Bug #25348787)
  • InnoDB: During read-ahead, the wrong page size was used to calculate the tablespace size. (Bug #25330449)
  • InnoDB: Compiling on Fedora 25 using DWITH_LZ4=system resulted in a build failure due to a deprecated LZ4_COMPRESS_LIMITEDOUTPUT function. (Bug #25297593)
  • InnoDB: Disabling macros such as UNIV_PFS_MUTEX, UNIV_PFS_RWLOCK, and UNIV_PFS_THREAD caused compilation errors. (Bug #25251082)
  • InnoDB: A NULL virtual column field name in a virtual index caused a server exit during a field name comparison that occurs while populating virtual columns affected by a foreign key constraint. (Bug #25222337)
  • InnoDB: The file handle type name for InnoDB file I/O Performance Schema instrumentation was changed from os_pfs_file_t to pfs_os_file_t. (Bug #25220118)
  • InnoDB: During a range comparison, a secondary index field number was passed instead of clustered index field number, eventually causing the retrieval of an incorrect field. (Bug #25175249)
  • InnoDB: A server exit on restart was caused by missing my_thread_init() and my_thread_exit() functions for background threads that initialize the st_my_thread_var structure. (Bug #25167032)
  • InnoDB: A memcached read operation with a non-default read batch size configuration resulted in a server exit. (Bug #25147515)
  • InnoDB: A gap lock was taken unnecessarily during foreign key validation while using the READ COMMITTED isolation level. (Bug #25082593)
  • InnoDB: After a TRUNCATE TABLE operation on a table with a FULLTEXT index, space size was incorrectly calculated resulting in an invalid read. (Bug #25053705)
  • InnoDB: During a checkpoint, all MLOG_FILE_NAME redo log records were written in a single mini-transaction (mtr), causing a log parsing buffer overflow. (Bug #24793413, Bug #83245)
  • InnoDB: A mechanism was added to debug builds to ensure that keys for InnoDB Performance Schema instrumentation are registered with Performance Schema. The mechanism causes startup to fail on debug builds if the number of Performance Schema keys does not match the number of registered Performance Schema keys. (Bug #24686908)
  • InnoDB: A race condition while updating table statistics could result in an estimated row count of 1 and an incorrect query execution plan. (Bug #24666839, Bug #82968)
  • InnoDB: An error in code related to table statistics raised an assertion in the dict0stats.cc source file. (Bug #24585978)
  • InnoDB: A concurrent DML operation during an in in-place ALTER TABLE operation that rebuilt the table did not update a virtual index, resulting in a mismatch between the virtual index and clustered index. (Bug #23219499)
  • InnoDB: A TRUNCATE TABLE operation held the dict_sys mutex while scanning for and removing pages from the buffer pool, causing concurrent DDL operations to stall. The mutex is now released during the scan and acquired again when the scan is completed. (Bug #23070734, Bug #80060)
  • InnoDB: SELECT COUNT(*) performance regressed in some cases due to a modification introduced in MySQL 5.7.2 that caused InnoDB to count rows by traversing the clustered index instead of a smaller secondary index. The modification was reverted. (Bug #23046302, Bug #80580)
  • InnoDB: Inserting GIS data into an r-tree raised an assertion due to a missing page number field that was encountered when storing the b-tree cursor. (Bug #23044098)
  • InnoDB: Performance Schema instrumentation for InnoDB file I/O was disabled on Windows. (Bug #14025581)
  • InnoDB: The row_search_mvcc() function unnecessarily traversed the entire table for a range query, which occurred when the record was not in the transaction read view. (Bug #84202, Bug #23481444, Bug #25251375)
  • Partitioning: Updating a row of a table that had partitioning on a generated column could raise an assertion failure for debug builds, and return incorrect results in nondebug builds. (Bug #22574695, Bug #80080)
  • Replication: MEMBER_STATE of a group replication member did not go from ERROR to OFFLINE when the STOP GROUP_REPLICATION command was executed if the error state was due to ER3092. (Bug #25674926)
  • Replication: With flow control enabled, reaching a minimum flow control quota of 1 will made Group Replication not stop throttling when the cause of throttling was no longer in effect. (Bug #25461354)
  • Replication: Using an unresolvable host name in group_replication_group_seeds caused START GROUP_REPLICATION to fail. The fix ensures that host names in group_replication_group_seeds are validated when starting Group Replication and the list must contain at least one valid address. Invalid addresses are ignored. (Bug #25460324, Bug #84674)
  • Replication: The _gr_user account created by Group Replication plugin installation was not reliably removed when the plugin was uninstalled. (Bug #25298987)
  • Replication: When starting Group Replication on an offline node, the node could be configured for replication, but fail for recovery. (Bug #25256910)
  • Replication: When using a multi-threaded slave, applier errors displayed worker ID data that was inconsistent with data externalized in Performance Schema replication tables. (Bug #25231367)
  • Replication: Not all Group Replication GCS debug and trace messages were enabled in debug mode. (Bug #25209109)
  • Replication: Compiling MySQL 5.7.17 failed with a variable length array error. (Bug #25163241)
  • Replication: In row-based replication, a message that incorrectly displayed field lengths was returned when replicating from a table with a utf8mb3 column to a table of the same definition where the column was defined with a utf8mb4 character set. (Bug #25135304, Bug #83918)
  • Replication: Group Replication GCS was not discarding messages when a member within the group was inactive. (Bug #25134074)
  • Replication: Some unnecessary warnings were given when the Group Replication plugin was compiled on Windows platforms. (Bug #25119288)
  • Replication: As assertion could be raised if the Group Replication plugin attempted to contact the server when that was no longer possible. (Bug #25071492)
  • Replication: The GTID transaction skipping mechanism that silently skips a GTID transaction that was previously executed did not work properly for XA transactions. (Bug #25041920)
  • Replication: After executing restarts on the group replication applier SQL thread, the plugin could no longer detect failure of the thread. (Bug #24969065)
  • Replication: When the MTS slave applier stopped because of an (injected) error, it reported no useful information for troubleshooting. (Bug #24822686)
  • Replication: FLUSH BINARY LOG could become slow with data replicated from many servers. (Bug #24806259, Bug #83270)
  • Replication: A partially failed CREATE USER, RENAME USER, or ALTER USER statement was not correctly consuming an auto-generated or specified GTID when binary logging was disabled. (Bug #24693798)
  • Replication: Binlog_sender, which writes events from the binary log to a packet buffer and then sends the packet to the slave, did not reduce the size of the send buffer as expected. (Bug #24643036)
  • Replication: When using a multi-threaded slave (slave_parallel_workers greater than 0) the value of Seconds_Behind_Master was incorrect when rotating a relay log. (Bug #23532304)
  • Replication: The server prevented several replication-related administrative statements from working if the read_only system variable was enabled. (Bug #22857926)
  • Replication: CHANGE MASTER TO for a channel that did not exist could raise an assertion. (Bug #22255698)
  • Replication: The delay specified by the binlog_group_commit_sync_delay system variable was applied to too many binary log commit groups. (Bug #21420180)
  • JSON: MySQL JSON source code built using with clang 3.9 raised undesired warnings. (Bug #25039600)
  • mysqldump failed to properly quote certain identifiers in SQL statements written to the dump output. (Bug #25717383)
  • Client preauthorization by the server was missing a length check for a length-encoded string. (Bug #25714674)
  • The (undocumented) WINDOWS_RUNTIME_MD CMake option has been removed. (Bug #25611359)
  • mysqld_safe failed to restart the server if a PID_FILE.shutdown file was present. (Bug #25572504)
  • References: This issue is a regression of: Bug #11751149.
  • For Debian/Ubuntu packages, user-defined collation files could be overwritten during MySQL upgrades. Charset files are now marked as conffiles so that user customizations generate a prompt during upgrades whether to overwrite them. (Bug #25525628, Bug #84761)
  • For CREATE TABLE statements that specified the table name with a database qualifier and included a DATA DIRECTORY or INDEX DIRECTORY option, an error occurred if there was no default database. (Bug #25514146, Bug #84861)
  • Starting the server with performance_schema_digests_size=1 caused an abnormal exit. (Bug #25492129, Bug #84786)
  • MySQL failed to compile on some platforms with -DWITH_LIBWRAP=ON. CMake support now checks whether tcpd.h has proper function prototypes. (Bug #25395543, Bug #84495)
  • mysqld_safe did not check whether the directory named by the --basedir option existed. (Bug #25365194)
  • Configuring CMake with -G ninja resulted in build output that was inappropriate for build platforms other than Xcode or Visual Studio. (Bug #25358460)
  • mysqld_safe failed if the error log file named by the --log-error option was a FIFO. (Bug #25356221, Bug #84427)
  • For prepared statements, an alias within a subquery or derived table might cause incorrect behavior during statement execution if another alias depended on it. (Bug #25343335, Bug #84398, Bug #25171608)
  • mysqld_safe could fail if the --datadir option value ended with a / character. (Bug #25319457)
  • A recent change to mysqld_safe caused the mysql.server script to be unable to start it if the base directory was specified as an absolute path that differed from the compiled-in default absolute path. (Bug #25319392, Bug #84263)
  • The connection_control plugin failed to compile if the Performance Schema was disabled. (Bug #25308357, Bug #84304)
  • Passwords did not expire correctly for accounts created using MySQL Workbench. (Bug #25299309)
  • For System V init scripts for RPMs, the [mysqld] option-file section was being ignored for some options, such as pid-file. (Bug #25287707, Bug #84172)
  • Init scripts failed to launch mysqld_safe if a non-default base directory was used. (Bug #25261472, Bug #84219)
  • CMake now detects whether a GCC 5.3.0 loop optimization bug occurs and attempts a workaround if so. (Bug #25253540)
  • mysqld_safe --no-defaults did not work (inadvertent consequence of an earlier bug fix). (Bug #25244898, Bug #84173)
  • Semicolon (;) characters within or between statements could cause distinct digests to be generated from identical statements. (Bug #25244533, Bug #83253)
  • For a client linked against libmysqlclient, invalid memory access could occur during use of prepared statements. (Bug #25164932)
  • The fix for Bug #25088048 caused the command used by mysqld_safe to start the MySQL server to no longer include the mysqld path. (Bug #25144379)
  • References: This issue is a regression of: Bug #25088048.
  • Executing a stored procedure containing a query that accessed a view could allocate memory that was not freed until the session ended. (Bug #25053286)
  • Compilation on FreeBSD 11 failed attempting to check MAP_NORESERVE, which is no longer defined. (Bug #25048128, Bug #83689)
  • CMake support was added for compiling using the -std=c++03 option under Developer Studio 12.5. This is now used rather than stlport by default. (Bug #24947136, Bug #83512, Bug #25229424)
  • Privilege checking could be incorrect for a derived table used within a multiple-table UPDATE invoked within a stored procedure or view object, for the second or subsequent execution of the object, if the derived table was merged into the outer query. (Bug #24810564)
  • Connections from a client to a server with SSL enabled succeeded even if --ssl-mode had a value of VERIFY_CA or VERIFY_IDENTITY and the client did not provide a CA certificate. (Bug #24732452, Bug #23189252)
  • If InnoDB statistics were incorrect, FOUND_ROWS() could return 1 even when the previous SELECT returned no rows. (Bug #24714857, Bug #83110)
  • CMake now sets -DWITH_NUMA=ON for Debian platforms where possible. (Bug #24689101)
  • A query could produce incorrect results if the WHERE clause contained a dependent subquery, the table had a secondary index on the columns in the select list followed by the columns in the subquery, and GROUP BY or DISTINCT permitted the query to use a Loose Index Scan. (Bug #24671968, Bug #83005)
  • The DebugPrintTest and DebugPrintDeathTest unit tests did not handle divide-by-zero testing properly on the Aarch64 platform. Thanks to Alexey Kopytov for the patch. (Bug #24624555, Bug #82889)
  • Some account-management statements could incorrectly set the account password_lifetime value to NULL. (Bug #24619222)
  • Changes made to mysqld_safe in recent MySQL releases require the --ledir, --mysqld, --mysqld-version options to be specified on the command line; they can no longer be specified in option files. This could cause failure of init scripts that invoke mysqld_safe. Such scripts now pass the value of the MYSQLD_OPTS environment variable as the first command-line argument to mysqld_safe, with the value set to such command line-only mysqld_safe option values as may be required. On platforms that use /etc/sysconfig/mysqld, the MYSQLD_OPTS value can be set in that file with a line such as this:
  • MYSQLD_OPTS=" --ledir=/mysqld_ledir --mysqld=my_wrapper "
  • The value of MYSQLD_OPTS can also include mysqld options for mysqld_safe to pass to mysqld. (Bug #24619033, Bug #82920)
  • References: This issue is a regression of: Bug #24464380, Bug #24483092, Bug #25088048, Bug #25378439, Bug #25378565.
  • For LOAD DATA used to insert data into an updateable view, the check to verify whether a column is actually updatable was missing. (Bug #24595937)
  • Queries of the form SELECT NULL IN (subquery) could raise an assertion due to a missing null-pointer check. (Bug #24595612)
  • References: This issue is a regression of: Bug #22090717.
  • When populating the variables_by_thread table, the Performance Schema could attempt to access session variables of other threads that were being deinitialized. (Bug #24555658)
  • On Debian/Ubuntu platforms, the systemd startup script for MySQL ignored datadir settings in /etc/mysql/my.cnf. (Bug #24517024, Bug #82709)
  • For the null_audit plugin, setting the null_audit_event_record system variable improperly could cause a server exit. This variable should be set only from within the null_audit plugin, so it is now read only. (Bug #24493829, Bug #82670)
  • A regular expression pattern match into a large string could result in a server exit due to memory allocation failure or integer overflow. (Bug #24449076, Bug #24449090)
  • An incorrect error was reported for CREATE TABLE statements with a large value for the CONNECTION table option. The value is now limited to 1024 bytes. (Bug #24437124)
  • For debug builds, if the binary log was enabled, executing the audit_log plugin audit_log_filter_set_filter function could cause a server exit. (Bug #24437009)
  • MySQL Enterprise Firewall did not record events if the audit_log plugin was installed. (Bug #24413450, Bug #82473)
  • EXPLAIN SELECT COUNT(*) FROM tbl_name could incorrectly report an Extra value of Select tables optimized away due to a modification introduced in MySQL 5.7.2 that caused InnoDB to count rows by traversing the clustered index instead of a smaller secondary index. The Extra value now displays Count Rows. (Bug #24337385, Bug #82313)
  • mysqldumpslow failed to parse timestamps in the slow query log; it had not been updated to track a change in log timestamp format. (Bug #24007040)
  • Complete logical backups made with mysqlpump could not be restored if GTIDs were enabled. (Bug #23748432)
  • Messages written by the audit_log plugin to the error log regarding MYSQL_AUDIT_CONNECT event failures now print the underlying error cause as well to aid debugging. (Bug #23710632)
  • FORCE INDEX was ineffective for SELECT COUNT(*) queries. (Bug #23596760, Bug #81854)
  • The audit_log plugin audit_log_filter_remove_filter() function caused a server exit if given a NULL argument. (Bug #23522793)
  • Grant tables with incorrect structure may cause problems in user management operations. As a consequence of the fix for this, for any operation that modifies a grant table, the server now checks whether the table has the expected structure and produces an error if not. mysql_upgrade must be run to update the tables to the expected structure. (Bug #23295423, Bug #25095876, Bug #25448037)
  • Improper handling of a lock used by the version_tokens plugin and user-defined functions could result in a server exit if a UDF was called while version_tokens was being uninstalled. (Bug #23210850)
  • The QUOTE() function could allocate excessive memory. A limit of max_allowed_packet bytes is now imposed and returns NULL with a warning for attempts to allocate more. (Bug #23195404)
  • When attempting to locate the data directory, mysqld_safe incorrectly considered $MY_BASEDIR_VERSION/var as one of the possible locations. (Bug #23013510, Bug #80866)
  • The main.log_tables-big test case could be unstable on highly loaded hosts. Thanks to Laurynas Biveinis for the patch. (Bug #22874167, Bug #80607)
  • The rpl.rpl_key_rotation test case did not synchronize properly with the master server. Thanks to Laurynas Biveinis for the patch. (Bug #22838596, Bug #80531)
  • Queries that used an aggregate function with DISTINCT could produce incorrect results. (Bug #22686994, Bug #80310)
  • For RPM packages, the default error-log location in the deployed /etc/my.cnf file differed from the location in the installed logrotate script, causing logrotate to fail. (Bug #22322685)
  • After performing inserts in a table containing an AUTO_INCREMENT column and then performing a SELECT operation, the LAST_INSERT_ID() returns the correct value, but the value of the mysql_insert_id() C API function was being reset to 0. (Bug #22028117, Bug #78778)
  • With the use_index_extensions flag of the optimizer_switch system variable disabled, some SELECT DISTINCT queries could return incorrect results. (Bug #21749123, Bug #78244)
  • Debian packages were missing an AppArmor-related include file and incorrectly were marked dependent on AppArmor (making it impossible to disable AppArmor by uninstalling it). (Bug #20768958)
  • In a replication environment, SET PASSWORD or ALTER USER could fail to execute on the slave due to failure to parse the hash string correctly. (Bug #20228478)
  • On non-Linux Unix systems, the mysql.server startup script used the Linux command pidof rather than pgrep. (Bug #13788154, Bug #64342)
  • Starting multiple instances of mysqld_safe after an abnormal server exit could result in one mysqld_safe instance killing another. As a consequence of the bug fix, the mysqld_safe.pid file is no longer used. (Bug #11751149, Bug #41908)
  • The --help message for mysqld_safe was corrected to mention that the --no-defaults, --defaults-file, and --defaults-extra-file options, if given, must be the first argument. (Bug #11745176, Bug #11192)
  • The bounds check for the XML parser position stack for each level (which has a fixed depth) used the size of the array as the upper limit, and so was off by one. This is fixed by decreasing the allowable depth by one, which actually matches the maximum number of elements in the position stack. (Bug #83871, Bug #25111907)Timestamps for server-side prepared statements could be written to the binary log up to a second behind timestamps for the corresponding nonprepared statements, leading to time value differences between master and slave servers. (Bug #74550, Bug #19894382, Bug #25187670)

New in MySQL 5.7.17 (Dec 28, 2016)

  • Compilation Notes:
  • For GCC versions higher than 4.4, -fno-expensive-optimizations was replaced with -ffp-contract=off, which has the effect of enabling more optimizations. Thanks to Alexey Kopytov for the patch. (Bug #24571672, Bug #82760)
  • MySQL Enterprise Notes:
  • Enterprise Encryption for MySQL Enterprise Edition now enables server administrators to impose limits on maximum key length by setting environment variables. These can be used to prevent clients from using excessive CPU resources by passing very long key lengths to key-generation operations. For more information, see Enterprise Encryption Usage and Examples. (Bug #19687742)
  • Packaging Notes:
  • RPM packages now are built with -DWITH_NUMA=ON for platforms with NUMA support: OEL higher than EL5, Fedora, SLES, Docker. (Bug #24689078)
  • Security Notes:
  • Incompatible Change: These changes were made to mysqld_safe:
  • Unsafe use of rm and chown in mysqld_safe could result in privilege escalation. chown now can be used only when the target directory is /var/log. An incompatible change is that if the directory for the Unix socket file is missing, it is no longer created; instead, an error occurs. Due to these changes, /bin/bash is required to run mysqld_safe on Solaris. /bin/sh is still used on other Unix/Linux platforms.
  • The --ledir option now is accepted only on the command line, not in option files.
  • mysqld_safe ignores the current working directory.
  • Other related changes:
  • Initialization scripts that invoke mysqld_safe pass --basedir explicitly.
  • Initialization scripts create the error log file only if the base directory is /var/log or /var/lib.
  • Unused systemd files for SLES were removed.
  • (Bug #24483092, Bug #25088048)
  • References: See also: Bug #24464380, Bug #24388753.
  • MySQL Server now includes a plugin library that enables administrators to introduce an increasing delay in server response to clients after a certain number of consecutive failed connection attempts. This capability provides a deterrent that slows down brute force attacks that attempt to access MySQL user accounts. For more information, see The Connection-Control Plugin.
  • OpenSSL is ending support for version 1.0.1 in December 2016; see https://www.openssl.org/policies/releasestrat.html. Consequently, MySQL Commercial Server builds now use version 1.0.2 rather than version 1.0.1, and the linked OpenSSL library for the MySQL Commercial Server has been updated from version 1.0.1 to version 1.0.2j. For a description of issues fixed in this version, see https://www.openssl.org/news/vulnerabilities.html.
  • This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead.
  • Test Suite Notes:
  • mysql-test-run.pl could not be run with --valgrind-option=--tool=custom_tool, for values of custom_tool such as massif or helgrind, because it added the options for memcheck that might not be understood by other tools. Also, the mysql-test-run.pl --callgrind option did not work because it supplied an invalid --base option to callgrind. Thanks to Daniel Black for the patch on which the fixes were based. (Bug #23713613, Bug #82039)
  • Functionality Added or Changed:
  • Incompatible Change; Partitioning: The generic partitioning handler in the MySQL server is deprecated, and will be removed in MySQL 8.0. As part of this change, the mysqld --partition and --skip-partition options as well as the -DWITH_PARTITION_STORAGE_ENGINE build option are also deprecated, and will later be removed; partitioning will no longer be shown in the INFORMATION_SCHEMA.PLUGINS table or in the output of SHOW PLUGINS.
  • Following the removal of the generic partitioning handler, the storage engine used for a given table will be expected to provide its own (“native”) partitioning handler as the InnoDB and NDB storage engines currently do. Currently, no other MySQL storage engines provide native partitioning support, nor is any planned for any other storage engines in current or development versions of MySQL.
  • Use of tables with nonnative partitioning now results in an ER_WARN_DEPRECATED_SYNTAX warning. Also, the server performs a check at startup to identify tables that use nonnative partitioning; for any found, the server writes a message to its error log. To disable this check, use the --disable-partition-engine-check option.
  • To prepare for migration to MySQL 8.0, any table with nonnative partitioning should be changed to use an engine that provides native partitioning, or be made nonpartitioned. For example, to change a table to InnoDB, execute this statement:
  • ALTER TABLE table_name ENGINE = INNODB;
  • InnoDB: By default, InnoDB reads uncommitted data when calculating statistics. In the case of an uncommitted transaction that deletes rows from a table, InnoDB excludes records that are delete-marked when calculating row estimates and index statistics, which can lead to non-optimal execution plans for other transactions that are operating on the table concurrently using a transaction isolation level other than READ UNCOMMITTED. To avoid this scenario, a new configuration option, innodb_stats_include_delete_marked, can be enabled to ensure that InnoDB includes delete-marked records when calculating persistent optimizer statistics. (Bug #23333990)
  • The systemd service file for mysqld now includes a Documentation value in the [Unit] section to provide a link to the systemd documentation in the MySQL Reference Manual. (Bug #24735762)
  • Unit testing now uses Google Mock 1.8. (Bug #24572381, Bug #82823)
  • If mysqld is invoked with --daemonize, stdout and stderr are redirected to /dev/null if connected to a terminal type device, so that mysqld can behave as a true daemon. (Bug #21627629)
  • The libmysqld embedded server library is deprecated and will be removed in MySQL 8.0. These are also deprecated and will be removed: The mysql_config --libmysqld-libs, --embedded-libs, and --embedded options; the CMake WITH_EMBEDDED_SERVER, WITH_EMBEDDED_SHARED_LIBRARY, and INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR, options; and the mysqltest --embedded-server option; the mysqltest_embedded and mysql_client_test_embedded test programs.
  • MySQL Group Replication is a new MySQL plugin that enables you to create a highly available distributed MySQL service across a group of MySQL server instances, with data consistency, conflict detection and resolution, and group membership services all built-in. By using a powerful new group communication service, which provides an implementation of the popular Paxos algorithm, the group of MySQL Server instances automatically coordinates on data replication, consistency, and membership. This provides all of the built-in mechanisms necessary for making your MySQL databases highly available.
  • By default Group Replication operates in single-primary mode where a single server instance, called the primary, accepts write requests. The remaining server instances in the group, called secondaries, function as replicas of the primary. In the event of an unexpected failure of the primary, an automatic primary election process takes place and one of the secondaries is elected as the new primary. Group Replication also supports virtually synchronous multi-primary replication, with certain considerations and restrictions, which offers update everywhere functionality. In this mode all members are equal and you can distribute your reads and writes across all MySQL Server instances in the group.
  • Regardless of the operating mode, Group Replication provides a dynamic membership service that relies on distributed failure detection. Server instances can join and leave the group dynamically, and you can query the group's membership list at any point through Performance Schema tables. Server instances that join the group automatically synchronize their state with the group by doing an automatic point-in-time recovery which ensures that they reach synchrony with the group.
  • MySQL Group Replication's virtually synchronous replication is also a fully integrated part of MySQL, using the InnoDB storage engine, the Performance Schema tables, standard GTIDs and the well known replication infrastructure (binary and relay logs, multi-source replication, multi-threaded slave execution, etc.), which makes it a familiar and intuitive experience for existing MySQL users and makes it very easy to integrate with MySQL's standard asynchronous and semisynchronous replication, allowing you to mix and match as needed to create varied and complex replication topologies.
  • Bugs Fixed:
  • Incompatible Change: A change made in MySQL 5.7.8 for handling of multibyte character sets by LOAD DATA was reverted due to the replication incompatibility (Bug #24487120, Bug #82641)
  • References: See also: Bug #23080148.
  • NDB Cluster: MySQL Cluster encountered race conditions compiling lex_hash.h. (Bug #24931655, Bug #83477)
  • InnoDB: The INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS table reported NULL for a foreign key constraint name (UNIQUE_CONSTRAINT_NAME) after restarting the server. (Bug #25126722)
  • InnoDB: A prepared XA transaction was rolled back by a high priority transaction. The high priority transaction should wait if the blocking transaction is in a prepared state. (Bug #25032066)
  • InnoDB: InnoDB passed an invalid argument to syscall(SYS_futex). (Bug #24923840, Bug #83375)
  • InnoDB: On a MySQL 64-bit build on Windows, a file I/O retry result was misinterpreted due to a missing cast necessary for the correct operation of the retry path, resulting in a failing assertion and operating system error. (Bug #24711351)
  • InnoDB: The GCC mach_parse_compressed function should load one to five bytes depending on the value of the first byte. Due to a GCC bug, GCC 5 and 6 emit code to load four bytes before the first byte value is checked (GCC Bug #77673). A workaround prevents this behavior.
  • Thanks to Laurynas Biveinis for the patch. (Bug #24707869, Bug #83073)
  • InnoDB: Due to a glibc bug, short-lived detached threads could exit before the caller had returned from pthread_create(), causing a server exit.
  • Thanks to Laurynas Biveinis for the patch. (Bug #24605956, Bug #82886)
  • InnoDB: After increasing the value of innodb_undo_logs and restarting the server, the number of active undo tablespaces was not increased when assigning undo tablespaces to newly allocated rollback segments. (Bug #24488141)
  • InnoDB: InnoDB incorrectly reported an error about missing encryption when restoring pages from the doublewrite buffer during recovery. (Bug #24471076)
  • InnoDB: A cached undo segment was not removed from the rollback segment history during a slow shutdown. (Bug #24450908)
  • InnoDB: An error during a table-rebuilding operation on a table with only a generated clustered index (GEN_CLUST_INDEX) raised and assertion due to an error called with an invalid key name. (Bug #24444831)
  • InnoDB: Rotating the tablespace encryption master key while the server is in read-only mode raised an assertion instead of displaying an error message. (Bug #24404091)
  • InnoDB: On a table without an explicitly defined primary key, InnoDB did not replace the implicit clustered index (GEN_CLUST_INDEX) when a unique key was defined on a NOT NULL column. (Bug #24397406)
  • InnoDB: A high priority transaction involving a foreign key constraint check was not able to kill a lower priority blocking transaction. (Bug #24347476)
  • InnoDB: Page cleaner threads asserted due to a regression related to the adaptive hash index feature. (Bug #24346574)
  • References: This issue is a regression of: Bug #21407023.
  • InnoDB: InnoDB failed to free memory used by the full-text optimizer thread. (Bug #24331265)
  • InnoDB: When adding a new index, the server dropped an internally defined foreign key index and attempted to use a secondary index defined on a generated virtual column as the foreign key index, causing a server exit. InnoDB now permits a foreign key constraint to reference a secondary index defined on a generated virtual column. (Bug #23533396)
  • InnoDB: An INFORMATION_SCHEMA.FILES query resulted in a server exit due to a race condition with a concurrent tablespace creation operation. (Bug #23477214)
  • InnoDB: A table-copying online ALTER TABLE operation on a ROW_FORMAT=REDUNDANT table with indexed virtual columns raised an assertion. (Bug #22018745)
  • InnoDB: SHOW ENGINE INNODB STATUS output showed a “cleaning up” state for an idle thread. Thread state information was not reset after statement execution. (Bug #21974225, Bug #78777)
  • InnoDB: After a server restart, concurrent INSERT operations a table with an auto-increment primary key resulted in a duplicate entry error. The current auto-increment value was not changed after auto_increment_increment and auto_increment_offset settings were modified. (Bug #20989615, Bug #76872)
  • Replication: When using XA transactions, if a lock wait timeout or deadlock occurred for the applier (SQL) thread on a replication slave, the automatic retry did not work. The cause was that while the SQL thread would do a rollback, it would not roll the XA transaction back. This meant that when the transaction was retried, the first event was XA START which was invalid as the XA transaction was already in progress, leading to an XAER_RMFAIL error. (Bug #24764800)
  • References: See also: Bug #24923091, Bug #24966941.
  • Replication: The group commit update of GTIDs has been refactored to improve performance on workloads with many small transactions. (Bug #24398760)
  • Replication: If the relay_log option was not specified in a configuration file, the relay_log_basename variable was being internally constructed on the fly using hostname but the relay_log_basename variable was not set. When a slave tried to access this uninitialized variable it resulted in an unexpected halt of the server. (Bug #24352667)
  • Replication: For servers built with yaSSL, using group replication with secure connections could result in timeout failures waiting for view delivery. (Bug #23592214)
  • Replication: Tables with special DEFAULT columns, such as DEFAULT CURRENT_TIMESTAMP, that existed only on a slave were not being updated when using row-based replication (binlog_format=ROW). (Bug #22916743)
  • Replication: An XA PREPARE statement that failed during the intermediate steps could lead to an inconsistent XA transaction state, where ID = -1 but the binlogged flag was set to true. This caused asserts while executing XA COMMIT and XA ROLLBACK queries. (Bug #22915670)
  • Replication: Enabling semisynchronous replication when a server was during the commit stage could cause the master to stop unexpectedly. This was related to the patch for Bug# 75570. (Bug #22202516)
  • Replication: The number of generated unwanted fseeks into the binary log file being replicated to a slave has been reduced. (Bug #83226, Bug #24763579)
  • Replication: The rpl.rpl_binlog_errors test was failing sporadically on Windows. (Bug #82302, Bug #24330138)
  • Replication: When binlog_group_commit_sync_delay was set to a value between 1 and 9, if binlog_group_commit_sync_no_delay_count was set to a value greater than 1, and the number of transaction commits was less than binlog_group_commit_sync_no_delay_count, these commits hung forever if no more commits were received; and if binlog_group_commit_sync_no_delay_count was set to 0, all transaction commits hung forever. (Bug #80652, Bug #22891628)
  • Replication: Using semisynchronous replication was not possible with more than 1024 simultaneous connections. (Bug #79865, Bug #23581389)
  • Some Linux startup scripts did not process the datadir setting correctly. (Bug #25159791)
  • CREATE TABLE with a DATA DIRECTORY clause could be used to gain extra privileges. (Bug #25092566)
  • CMake now avoids configuring the -fexpensive-optimizations option for GCC versions for which the option triggers faulty shift-or optimizations. (Bug #24947597, Bug #83517)
  • OEL RPM packages now better detect which platforms have multilib support (for which 32-bit and 64-bit libraries can be installed). Thanks to Alexey Kopytov for the patch. (Bug #24925181, Bug #83457)
  • OEL RPM packages now better detect which platforms do not have multilib support (for which 32-bit and 64-bit libraries can be installed). Thanks to Alexey Kopytov for the patch. (Bug #24916428, Bug #83428)
  • Information about building MySQL 5.6 compatibility libraries in the MySQL 5.7 and higher .spec file is needed only for building libmysqlclient and libmysqld. Information about building the InnoDB memcached plugin was removed. (Bug #24908345, Bug #83409)
  • Compiling MySQL using Microsoft Visual Studio 2015 Version 14.0.25420.1 in relwithdebinfo mode failed with linking errors. (Bug #24748505)
  • To better provide atomic file creation, Debian packaging scripts now use the coreutils install command rather than touch, chmod, and chown. (Bug #24688682)
  • For SLES packages, a typo in the installation script postamble prevented some cleanup from occurring. (Bug #24605300, Bug #82389)
  • Warnings occurring during CREATE TABLE ... SELECT could cause a server exit. (Bug #24595992)
  • For LOAD DATA statements, input data with too many column values produced only a warning, rather than an error as in MySQL 5.6. An error now occurs. (Bug #24577194, Bug #82830)
  • For segmentation faults on FreeBSD, the server did not generate a stack trace. (Bug #24566529, Bug #23575445, Bug #81827)
  • The .mylogin.cnf option file is intended for use by client programs, but the server was reading it as well. The server no longer reads it. (Bug #24557925)
  • The X Plugin was built with compilation options different from other plugins. (Bug #24555770, Bug #82777)
  • If mysqladmin shutdown encountered an error determining the server process ID file, it displayed an error message that did not clearly indicate the error was nonfatal. It now indicates that execution continues. (Bug #24496214)
  • The data structure used for ZEROFILL columns could experience memory corruption, leading eventually to a server exit. (Bug #24489302)
  • Operation of the mysql-multi.server.sh script was based on my.cnf in the data directory. That option file is no longer used, so mysql-multi.server.sh has been removed. (Bug #24487870)
  • Use of very long subpartition names could result in a server exit. Now partition or subpartition names larger than 64 characters produce an ER_TOO_LONG_IDENT error. (Bug #24400628, Bug #82429)
  • The Gis_wkb_vector copy constructor was not explicitly instantiated, causing build problems for the Intel compiler. (Bug #24397833, Bug #82358)
  • Upgrading from MySQL 5.6 to 5.7.13 and then to 5.7.14 resulted in an incorrect column order in the mysql.slave_master_info system table. (Bug #24384561, Bug #82384)
  • The AppArmor profile installed by Ubuntu packages was missing an entry permitting libnuma to read a /sys hierarchy path, resulting in server startup failure. (Bug #23854929)
  • For an INSERT statement for which the VALUES list produced values for the second or later row using a subquery containing a join, the server could exit after failing to resolve the required privileges. (Bug #23762382)
  • Infinite recursion could occur if the audit_log plugin signalled an error while handling an error. (Bug #23717558, Bug #82052)
  • MySQL now uses readdir() rather than readdir_r(). The latter has been deprecated since glibc 2.24 and caused debug builds of MySQL and builds using GCC 6.1 to fail.
  • Additionally, several problems resulting in GCC 6.1 compiler warnings were corrected. (Bug #23708395, Bug #24437737, Bug #82515, Bug #24459890, Bug #25103242)
  • For audit log events in the connection class, the connection_type value was available only for connect events. The value is now available in connect, disconnect, and change-user events. (Bug #23541550)
  • On Solaris, gettimeofday() could return an invalid value and cause a server shutdown. (Bug #23499695)
  • The keyring_file plugin could attempt to write keys to its storage file when the file did not exist. To ensure that keys are flushed only when the correct storage file exists, keyring_file now stores a SHA-256 checksum of the keyring in the file. Before updating the file, the plugin verifies that it contains the expected checksum. (Bug #23498254)
  • START GROUP REPLICATION uses stacked Srv_session and did not return to the correct thread. START GROUP REPLICATION and STOP GROUP REPLICATION are now removed from the list of permitted commands. (Bug #23337984)
  • A union query resulting in tuples larger than max_join_size could result in a server exit. (Bug #23303485)
  • The optimizer could choose ref access on a secondary index rather than range access on the primary key, even when the cost was higher. (Bug #23259872, Bug #81341)
  • For a query with ORDER BY and LIMIT, an optimizer trace did not record the optimizer's switch to a different index. (Bug #23227428, Bug #81250)
  • For some deeply nested expressions, the optimizer failed to detect stack overflow, resulting in a server exit. (Bug #23135667)
  • The sys schema ps_truncate_all_tables() function did not work with read_only enabled or for users with the SUPER privilege with super_read_only enabled, due to errors attempting to truncate Performance Schema tables. The server now skips the read_only/super_read_only check for Performance Schema tables, with the result that ps_truncate_all_tables() will work under such configurations. (Bug #23103937, Bug #81009)
  • For sessions created through the X Plugin, incorrect thread attachment/detachment could cause a server exit. (Bug #23057045)
  • When a JSON value consisted of a large sub-document wrapped in many levels of JSON arrays, objects, or both, serialization of the JSON value sometimes required an excessive amount time to complete. (Bug #23031146)
  • A binary (in-place) upgrade from MySQL 5.6 to 5.7 followed by a data export performed using mysqlpump resulted in an Invalid default value for date_column error for attempts to reload the dump file. (Bug #22919028, Bug #80706)
  • SQL statements executed through the X Plugin were not instrumented in the Performance Schema. (Bug #22859462)
  • DROP INDEX operations could fail due to inconsistent handling of index prefix lengths for TEXT-type columns (TINYTEXT and so forth). (Bug #22740093, Bug #80392)
  • The innodb_numa_interleave system variable was erroneously available on some systems that were not NUMA-enabled. Thanks to Tomislav Plavcic for the patch.
  • CMake now sets the default WITH_NUMA value based on whether the current platform has NUMA support. For platforms without NUMA support, CMake behaves as follows:
  • With no NUMA option (the normal case), CMake continues normally, producing only this warning: NUMA library missing or required version not available
  • With -DWITH_NUMA=ON, CMake aborts with this error: NUMA library missing or required version not available
  • (Bug #22678436, Bug #80288)
  • When taking the server offline, a race condition within the Performance Schema could lead to a server exit. (Bug #22551677)
  • On macOS, if a table with an associated trigger was renamed to a new name containing both lowercase and uppercase characters, DROP TRIGGER for the trigger resulted in an ER_NO_SUCH_TABLE error for the table. (Bug #22512899, Bug #79873)
  • In the MYSQL_FIELD C API structure, the org_table value for derived tables was *, which could cause failure for queries that depend on this value. The org_table value for views and derived tables now is set as follows: If the column is selected from a view, org_table names the view. If the column is selected from a derived table, org_table names the base table. If a derived table wraps a view, org_table still names the base table. If the column is an expression, org_table is the empty string. (Bug #22364401, Bug #79641)
  • The Performance Schema events_statements_summary_by_digest table could contain multiple rows for the same statement digest and schema combination, rather than the expected single (unique) row. (Bug #22320066, Bug #79533)
  • For Performance Schema system and status variable tables, variable values expressed in a character set different from utf8 could be truncated or incorrect. (Bug #22313205)
  • Queries that were grouped on a column of a BLOB-based type, and that were ordered on the result of the AVG(), VAR_POP(), or STDDEV_POP() aggregate function, returned results in the wrong order if InnoDB temporary tables were used. (Bug #22275357, Bug #79366)
  • On Ubuntu, error messages were displayed during upgrades from Community to Commercial packages that made it appear as though mysqld and my_print_defaults had not been installed. Those messages were spurious and have been silenced. (Bug #21807248)
  • An invalid string value in the WHERE clause of an UPDATE statement, caused an index scan rather than a range scan to be used. For values not present in the index, this could be much slower. Now the optimizer determines this to be an “impossible WHERE” condition. (Bug #21032418, Bug #76933)
  • The return value from an fread() call was not checked. (Bug #20671150)
  • An in-place ALTER TABLE operation failed to report an error when adding a DATE or DATETIME column under these conditions: a) the column was NOT NULL and no default value was supplied; b) strict and NO_ZERO_DATE SQL modes were enabled; c) the table was not empty.
  • An ALTER TABLE operation failed with an error rather than a warning when adding a DATE or DATETIME column under these conditions: a) the column was NOT NULL and no default value was supplied; b) strict SQL mode was enabled and NO_ZERO_DATE SQL mode was not enabled; c) the table was not empty. (Bug #16888677)

New in MySQL 5.7.16 (Oct 13, 2016)

  • Security Notes:
  • Incompatible Change: For STANDALONE and WIN builds, the default secure_file_priv value has changed from the empty string to NULL. This is a secure-by-default setting because it disables import and export operations. To permit those operations, set secure_file_priv to the path name of the directory to use for those operations. (Bug #24679907, Bug #24695274, Bug #24707666)
  • The linked OpenSSL library for the MySQL Commercial Server has been updated to version 1.0.1u. For a description of issues fixed in this version, see http://www.openssl.org/news/vulnerabilities.html. This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #24753389)
  • Functionality Added or Changed:
  • yaSSL was upgraded to version 2.4.2. This upgrade corrects issues with: Potential AES side channel leaks; DSA padding for unusual sizes; the SSL_CTX_load_verify_locations() OpenSSL compatibility function failing to handle long path directory names. (Bug #24512715, Bug #24740291)

New in MySQL 5.7.15 (Sep 6, 2016)

  • Security Notes:
  • The validate_password plugin now supports the capability of rejecting passwords that match the current session user name, either forward or in reverse. To enable control over this capability, the plugin exposes a validate_password_check_user_name system variable. By default, this variable is disabled; the default will change to enabled in MySQL 8.0. For more information, see Password Validation Plugin Options and Variables.
  • Test Suite Notes:
  • In mysql-test-run.pl, a limit of 50 was imposed on the number of workers for parallel testing, which on systems with more than 50 CPUs resulted in exhaustion of unique thread IDs. The ID-exhaustion problem has been corrected, and the limit of 50 on number of workers has been lifted. Thanks to Daniel Black for the patch on which this change was based.
  • Functionality Added or Changed:
  • InnoDB: A new dynamic configuration option, innodb_deadlock_detect, can be used to disable deadlock detection. On high concurrency systems, deadlock detection can cause a slowdown when numerous threads wait for the same lock. At times, it may be more efficient to disable deadlock detection and rely on the innodb_lock_wait_timeout setting for transaction rollback when a deadlock occurs. (Bug #23477773)
  • The systemd support script for the unit file (mysqld_pre_systemd) now assists in creating the error log file only if its location matches the pattern /var/log/mysql*.log. In other cases, the error log directory must be writable or the error log must be present and writable for the user running the mysqld process. Also, mysqld_pre_systemd now avoids creating insecure temporary files. (Bug #24516262)
  • The CMake WITH_LZ4 option has been added to control which LZ4 library is used during compilation. By default WITH_LZ4 is set to bundled, so the library provided with MySQL is used. Setting WITH_LZ4 to system uses the LZ4 library from the operating system. (Bug #23607230)
  • Bugs Fixed:
  • InnoDB: An ALTER TABLE ... ENCRYPTION='Y', ALGORITHM=COPY operation on a table residing in the system tablespace raised an assertion. (Bug #24381804)
  • InnoDB: Creating an encrypted table on a Fusion-io disk with an innodb_flush_method setting of O_DIRECT caused a fatal error. (Bug #24329079, Bug #82073)
  • InnoDB: An operation that dropped and created a full-text search table raised an assertion. (Bug #24315031)
  • InnoDB: Accessing full-text search auxiliary tables while dropping the indexed table raised an assertion. (Bug #24009272)
  • InnoDB: An online DDL operation on a table with indexed BLOB columns raised an assertion during logging of table modifications. (Bug #23760086)
  • InnoDB: In some cases, code that locates a buffer pool chunk corresponding to given pointer returned the wrong chunk.
  • Thanks to Alexey Kopytov for the patch. (Bug #23631471, Bug #79378)
  • Replication: The addition of the transaction-write-set-extraction=XXH64 option uses xxHash symbols from liblz4. Although the xxHash symbols are exported by liblz4, the header file is not part of the API, so compilation failed when building with WITH_LZ4=system. The fix ensures that xxHash is built separately from liblz4 so that it is available both when using the system and bundled LZ4 libraries. (Bug #82426, Bug #24399819)
  • References: See also: Bug #23607230.
  • Replication: mysqlbinlog --read-from-remote-server log1 log2 was opening a new connection for log2 without freeing the connection used for log1. Thanks to Laurynas Biveinis for the contribution. (Bug #81675, Bug #23540182)
  • Replication: The MTR binary log test suite failed to clean up copied files. Thanks to Daniel Black for the contribution. (Bug #80881, Bug #23016254)
  • Replication: With binlog_row_image=FULL, when updating single tables temporary tables were unnecessarily being used. The fix ensures single table update follows the same pattern as multi-table update. (Bug #79867, Bug #22510353)
  • mysqld_safe attempted to read my.cnf in the data directory, although that is no longer a standard option file location. (Bug #24482156)
  • For mysqld_safe, the argument to --malloc-lib now must be one of the directories /usr/lib, /usr/lib64, /usr/lib/i386-linux-gnu, or /usr/lib/x86_64-linux-gnu. In addition, the --mysqld and --mysqld-version options can be used only on the command line and not in an option file. (Bug #24464380)
  • It was possible to write log files ending with .ini or .cnf that later could be parsed as option files. The general query log and slow query log can no longer be written to a file ending with .ini or .cnf. (Bug #24388753)
  • Privilege escalation was possible by exploiting the way REPAIR TABLE used temporary files. (Bug #24388746)
  • The client library failed to build on Solaris using the Cstd library. (Bug #24353920)
  • If the basedir system variable was set at server startup from the command line or option file, the value was not normalized (on Windows, / was not replaced with /). (Bug #23747899, Bug #82125)
  • kevent statement timer subsystem deinitialization was revised to avoid a mysqld hang during shutdown on OS X 10.12. (Bug #23744004, Bug #82097)
  • For accounts for which multiple GRANT statements applied, mysqlpump could fail to dump them all. (Bug #23721446)
  • The MYSQL_ADD_PLUGIN macro had a spelling error that caused MYSQL_SERVER not to be defined. (Bug #23508762, Bug #81666)
  • In-place ALTER TABLE operations which when executed separately caused no table rebuild could when combined into a single statement result in a table rebuild. (Bug #23475211, Bug #81587)
  • For keyring plugins, the data access layer is now created only as necessary, not once per operation, which improves keyring performance. (Bug #23337926)
  • A blank server name in CREATE SERVER statements produced a server exit rather than an error. (Bug #23295288)
  • The optimizer failed to check a function return value for an area calculation, leading to a server exit. (Bug #23280059)
  • The server could fail to free memory allocated for execution of queries that used generated columns. (Bug #23205454)
  • References: This issue is a regression of: Bug #22392268.
  • mysqlpump output for triggers that contained multiple statements in the trigger body failed to load correctly. (Bug #23072245)
  • Queries that satisfied the following conditions could return different results than in MySQL 5.6: 1) A subquery appeared in the select list; 2) The subquery contained a WHERE condition that referenced a value in the outer query; 3) The outer query contained a GROUP BY that required creation of a temporary table. (Bug #23049975)
  • Passwords that were rejected by the validate_password plugin were written by the server to the error log as cleartext. (Bug #22922023)
  • A prepared statement that used a parameter in the select list of a derived table that was part of a join could cause a server exit. (Bug #22392374, Bug #24380263)
  • MEDIUMINT columns used in operations with long integer values could result in buffer overflow. (Bug #19984392)
  • A spurious ER_NO_SUCH_TABLE error could occur when attempting to execute a prepared CREATE TABLE ... SELECT statement that used a temporary table in the FROM clause and called a stored function. The same error could occur for a nonprepared version of the statement if used in a stored procedure when the procedure was re-executed. (Bug #16672723, Bug #68972)
  • EINTR handling in the client library has been fixed so that interrupted read and write calls are retried. Previously, EINTR was ignored. (Bug #82019, Bug #23703570)

New in MySQL 5.7.14 (Jul 29, 2016)

  • SYS SCHEMA NOTES:
  • The sys schema now has a quote_identifier() function that, given a string argument, produces a quoted identifier suitable for inclusion in SQL statements. (Bug #22011361, Bug #78823)
  • Output from the sys schema diagnostics() procedure now includes the Tls_version column from the mysql.slave_master_info system table.
  • FUNCTIONALITY ADDED OR CHANGED:
  • The %global compatver value for RPM packages for RHEL/OEL and Fedora releases was updated from 5.6.25 to 5.6.31. (Bug #23038018)
  • Specifying an empty value for the --port option (for example, --port=, --port="") is now deprecated and results in a warning. An empty value will be an error in MySQL 8.0. (Bug #23023457, Bug #80903)
  • CMake support for compiling with Solaris Studio 12.5 was added. (Bug #82249, Bug #24303829, Bug #81274, Bug #23212938)
  • The INFORMATION_SCHEMA INNODB_LOCKS and INNODB_LOCK_WAITS tables are now deprecated and will be removed in a future MySQL release.
  • BUGS FIXED:
  • Performance: A flaw in the allocation of memory for appending string values caused some operations to be performed slowly, including creation of tables having generated columns and inserts of large values into JSON columns. (Bug #80556, Bug #22843444)
  • InnoDB: Full-text search auxiliary tables could be dropped by one session while being access by another. (Bug #23742339)
  • InnoDB: Selecting full-text index information schema tables for a deleted table caused a segmentation fault. (Bug #23479595)
  • InnoDB: A tablespace operation did not properly update the SYS_VIRTUAL system table. (Bug #23325659)
  • InnoDB: Rollback of a full-text index synchronization operation raised an assertion. The rollback operation attempted to acquire a mutex still held by the background synchronization thread. (Bug #23320569)
  • InnoDB: After compressing a table, an incorrect data length was passed to an internal tablespace encryption function, causing an assertion. (Bug #23279788)
  • InnoDB: An r-tree page lock placed during a search operation prevented an undo operation within the same transaction from merging pages. (Bug #23241575)
  • InnoDB: A bulk load insert of a record with a compressed size greater than half of the compressed page size resulted in infinite B-tree page splitting when compressing the uncompressed page. (Bug #23120933)
  • InnoDB: A lock order violation related to InnoDB full-text search caused errors and raised an assertion. (Bug #23120005)
  • InnoDB: In read-only mode, InnoDB attempted to set a corrupt bit in the SYS_INDEXES system table. In read-only mode, the corruption should only be marked in memory. (Bug #23077748)
  • InnoDB: InnoDB attempted to materialize non-key generated virtual columns that were not required for partitioning. (Bug #23037025)
  • InnoDB: An insert operation on a table containing virtual and spatial indexes raised an assertion due to an invalid parent path encountered during page splitting. (Bug #23008863)
  • InnoDB: An ALTER TABLE operation on a table with an indexed virtual column raised an assertion. (Bug #22965271)
  • InnoDB: Adding or dropping a generated virtual column could raise an assertion due to a table handle held by an active memcached connection. (Bug #22922527)
  • InnoDB: A full-text query that involved a large number of records exceeded the result cache limit and caused a server exit. (Bug #22709692, Bug #80296)
  • InnoDB: InnoDB did not block the creation of a foreign key constraint with referential actions on the base column of a generated stored column. (Bug #22687023, Bug #80304)
  • InnoDB: The optimizer failed to mark the columns required for MATCH function evaluation when the secondary index used for the full-text query was not chosen by the optimizer. (Bug #22679209, Bug #80298)
  • InnoDB: In READ COMMITTED isolation level, InnoDB unnecessarily acquired the lock_sys mutex at COMMIT for a transaction block consisting of read-only SELECT statements.
  • InnoDB: Setting innodb_monitor_enable to all did not enable all counters. (Bug #22576241, Bug #80083)
  • InnoDB: InnoDB now permits defining a foreign key constraint with a cascading referential action on the base column of an indexed virtual column, and defining cascading referential actions on non-virtual foreign key columns that are explicitly included in a virtual index. (Bug #22469130, Bug #79772)
  • InnoDB: An assertion was raised during rollback of an ALTER TABLE operation that dropped and added a secondary index. (Bug #22005726)
  • Partitioning: In some cases, an issue with partition pruning being attempted a second time during optimization after all partitions had already been pruned at parsing time led to an assert. (Bug #23194259)
  • Replication: Replication slaves could exit trying to apply an UPDATE row event containing virtual generated columns received from a master that was set to binlog_row_image=minimal. (Bug #23604483)
  • Replication: When using row-based replication and InnoDB, replication slaves reverted to using an older locking scheme when a transaction had already acquired an AUTOINC lock related to a LOAD FILE or INSERT ... SELECT type of statement, reducing replication slave performance. The fix ensures that sql_command is set correctly for any of the DML events such as WRITE_ROWS_EVENT, UPDATE_EVENT, and DELETE_EVENT. (Bug #79324, Bug #22247668)
  • Replication: When using statement-based or mixed binary logging format with --read-only=ON, it was not possible to modify temporary tables. (Bug #62008, Bug #12818255)
  • References: See also: Bug #14294223, Bug #16561483.
  • MySQL Server upgrades performed using RPM packages failed when upgrading from MySQL 5.6 Community to MySQL 5.7 Community or MySQL 5.6 Commercial to MySQL 5.7 Commercial. (Bug #23736787)
  • On CentOS, mysqld installed from a MySQL Community distribution failed to start if a my.cnf file with no datadir value specified was used. (Bug #23721277, Bug #82049)
  • The -DWITH_EDITLINE=system CMake option failed with recent versions of the editline library. (Bug #23708332)
  • Executing prepared statements with the audit_log plugin installed could cause a server exit. (Bug #23699991)
  • The sys schema ps_trace_statement_digest() procedure failed for statements not supported by EXPLAIN, for statements for which EXPLAIN could not find tables, and for statements with no digest found during the monitored period. (Bug #23621189)
  • A SELECT Performance Schema tables when an internal buffer was full could cause a server exit. (Bug #23550835, Bug #23298025, Bug #81464)
  • The code for reading character set information from Performance Schema statement events tables (for example, events_statements_current) did not prevent simultaneous writing to that information. As a result, the SQL query text character set could be invalid, which could result in a server exit. Now an invalid character set causes SQL_TEXT column truncation. (Bug #23540008)
  • An error message spelling error was corrected. Thanks to Derek Jones for the patch. (Bug #23525874, Bug #81713)
  • In the Performance Schema, allocating a record when a buffer was full could lead to a server exit. (Bug #23515302)
  • A buffer overflow in the regex library was fixed. (Bug #23498283)
  • Upgrading from native MySQL 5.6 Debian/Ubuntu packages to Oracle-supplied MySQL 5.7 packages caused server restart failures. (Bug #23498230)
  • The CMake configuration was too aggressive in making symbols invisible, resulting in link problems with GCC 5.3 on Solaris. (Bug #23344916, Bug #81593)
  • Audit log filtering against the user was performing comparisons against USER(), not CURRENT_USER(). (Bug #23344762)
  • After upgrading only the server using RPM packages, the server could fail to start, complaining about a bad errmsg.sys file. (Bug #23338603)
  • Upgrading from native Ubuntu 5.7.12 packages to MySQL 5.7.13 packages failed with conflict messages. (Bug #23327563)
  • For debug builds, the server exited abnormally if a shutdown command was issued while the audit_log plugin was loaded and an active connection existed. (Bug #23310864)
  • The server could fail to interpret expired passwords as expired. (Bug #23291841)
  • Certain arguments to NAME_CONST() could cause a server exit. (Bug #23279858)
  • For unit-testing with the MySQL test suite, the make unit-test command is no longer available. The ctest program should be used instead. See Unit Tests Added to Main Test Runs. (Bug #23273434)
  • Audit log plugins (including query rewrite plugins, which use the audit API) were being acquired and released per statement, negatively affecting scalability. To improve performance, these plugins now are acquired once and released only when the connection ends. (Bug #23236404, Bug #81298)
  • mysql-test-run.pl now has a --manual-boot-gdb option that is similar to --boot-gdb but attaches the debugger to the server during the bootstrapping process, permitting the use of a remote debugger. (Bug #23090633)
  • The -fexpensive-optimizations option to GCC caused ARM64 and PowerPC builds to compute floating-point operations slightly differently from other platforms. CMake now checks for this problem and disables the option as necessary. (Bug #23046775)
  • The test_service_sql_api.test_session_general_log test case now cleans up the general_log table by truncating it at the end of the test. Thanks to Daniel Black for the patch. (Bug #23021111, Bug #80895)
  • Lines written to the error log had no space separating the timestamp and thread ID columns if the thread ID took five or more characters. (Bug #23005009, Bug #80854)
  • For the innodb_buffer_stats_by_schema and innodb_buffer_stats_by_table sys schema views, the pages_hashed and pages_old columns were incorrect. Thanks to Tsubasa Tanaka for the patch. (Bug #22988461, Bug #80833)
  • An incorrect result could be returned for a query using a merged derived table or a view when compared to a similar query using a base table directly, if the query included a WHERE condition in a scalar subquery inside a HAVING condition of the main query block. (Bug #22967439)
  • ST_GeomFromGeoJSON() treated JSON NULL as invalid input. Now it treats JSON NULL as SQL NULL and thus returns SQL NULL for JSON NULL input. (Bug #22930020, Bug #80712)
  • For the host_summary_by_statement_latency and x$host_summary_by_statement_latency sys schema views, the max_latency column was incorrect. (Bug #22848110, Bug #80569)
  • ST_Distance() could raise an assertion for NULL return values. (Bug #22760390)
  • In the absence of SQL_CALC_FOUND_ROWS, FOUND_ROWS() for a UNION statement always returned the actual number of rows found even when LIMIT was present. (Bug #22602381, Bug #80148)
  • A statement containing a format specifier resulted in a server exit when the query rewrite plugin tried to log the statement. (Bug #22601485)
  • With the query cache enabled, executing a prepared statement with CURSOR_TYPE_READ_ONLY and then again with CURSOR_TYPE_NO_CURSOR caused the server to return an error. (Bug #22559575, Bug #80026)
  • mysql_real_connect() was not thread-safe when invoked with the MYSQL_READ_DEFAULT_FILE or MYSQL_READ_DEFAULT_GROUP option enabled. (Bug #22322504, Bug #79510)
  • With GTIDs enabled, XA COMMIT on a disconnected XA transaction within a multiple-statement transaction raised an assertion. (Bug #22173903)
  • The sys schema create_synonym_db() function failed if the synonym name was a reserved word or contained backtick (`) characters. (Bug #22011361, Bug #78823)
  • The sys schema host_summary view could fail with a division-by-zero error. (Bug #21970078)
  • The GCC workaround for compiling on ARM64 added by Bug #21552524 is needed only for GCC before 5.2.1. (Bug #21845828)
  • The sys schema format_path() function replaced substrings of the path name argument without verifying that the substrings were delimited by path name separators. Replacement now works correctly, including on Windows. A consequence is that backslashes in Windows path names are no longer converted to forward slashes in the result. (Bug #21512106)
  • MySQL now supports compiling using the GCC __atomic builtins introduced in GCC 4.7 that permit a more efficient implementation of the MySQL atomics API. These __atomic builtins are only used for platforms where the old GCC __sync builtins are not available, such as PowerPC where the server otherwise would not build. (Bug #21221500)
  • If a stored function updated a view for which the view table had a trigger defined that updated another table, it could fail and report an error that an existing table did not exist. (Bug #21142859, Bug #76808)
  • mysql_upgrade failed to upgrade the sys schema if a sys database directory existed but was empty. (Bug #81352, Bug #23249846, Bug #22875519)
  • The bundled Protobuf sources (under the extra directory) were upgraded from version 2.6.0 to 2.6.1. (Bug #81280, Bug #23213376)
  • Protobuf is currently used only by the X plugin, but MySQL builds built the protobuf libraries and executables even if X plugin building was disabled with -DWITH_RAPID=0. (Bug #81066, Bug #23097750)
  • On Solaris, a misaligned memory buffer could cause a server exit when selecting from the global_status Performance Schema table. (Bug #81065, Bug #23097305)
  • A compilation error was corrected for a make_link() call when compiling in C++11 mode. Thanks for Daniel Black for the contribution. (Bug #80996, Bug #23080289)
  • Two mysql-test-run.pl tests (ctype_gb18030_binlog and ctype_ldml) failed to produce repeatable output due to improper cleanup. Thanks to Daniel Black for the patch. (Bug #80896, Bug #23021095)
  • MySQL failed to build with GCC 6 using the default mode for C++ of -std=gnu++14. The CMake configuration has been adjusted to explicitly set the mode to -std=gnu++03 for GCC 6. (Bug #80371, Bug #22732697)
  • Ubuntu packages create the root user account using the auth_socket authentication plugin to achieve secure-by-default installation if installation was done with a blank root password. However, auth_socket was being used even if the password was not blank. (Bug #80137, Bug #22594846, Bug #23321113, Bug #81518)
  • Compiling the InnoDB memcached plugin did not work on some platforms where MySQL was configured using -DWITH_LIBEVENT=system. (Bug #80073, Bug #22573379, Bug #23567441)
  • The client-side plugin deinitialization function signature was changed from int (*deinit)() to int (*deinit)(void) to avoid warnings when compiling with -Wstrict-prototypes. (Bug #78177, Bug #21680094, Bug #81419, Bug #23282498)
  • Several issues were addressed in the sys schema stored procedures that show enabled or disabled Performance
  • Schema setup:
  • Enabled and disabled accounts were shown as host@user, not user@host.
  • Disabled users in ps_setup_show_disabled were called enabled_users.
  • ps_setup_show_enabled() showed disabled objects.
  • setup_actors content was not filtered (all rows were returned whether the actor was enabled or disabled).
  • Output order is more deterministic.

New in MySQL 5.7.13 (Jun 2, 2016)

  • ACCOUNT MANAGEMENT NOTES:
  • In MySQL 5.7.8, the maximum length of MySQL user names was increased from 16 to 32 characters, but some applicable contexts for this increase were overlooked. Additional changes in maximum user name length now have been applied.
  • 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 system database. A server from MySQL 5.7.13 or higher for which mysql_upgrade has not been run continues to permit a maximum of 77 characters in the system tables mentioned previously, and an ER_USER_COLUMN_OLD_LENGTH error will occur in those system table contexts where a user_name@host_name value from 78 to 93 characters long is given.
  • AUDIT LOG NOTES:
  • The audit_log plugin that forms the basis for MySQL Enterprise Audit now supports fine-grained filtering of events. This enables a reduction in the number of log entries written to the audit log file, which increases overall performance due to fewer write operations during log recording. It also simplifies subsequent audit log processing in terms of readability and processing time.
  • Fine-grained audit log filtering is rule based, implemented using tables that store filter definitions and a set of user-defined functions (UDFs) that enable filter manipulation. To simplify installing the tables and UDFs along with the audit_log plugin, an installation script is now provided. For more information, see Installing or Uninstalling MySQL Enterprise Audit, and Audit Log Filtering.
  • By default, audit log filtering now logs no auditable events for any users. This differs from the pre-MySQL 5.7.13 legacy audit log, which logs all auditable events for all users. To produce log-everything behavior, see the installation instructions.
  • CONFIGURATION NOTES:
  • On platforms for which systemd support is installed, systemd has the capability of managing multiple MySQL instances. For details, see Configuring Multiple MySQL Instances Using systemd. Consequently, mysqld_multi and mysqld_multi.server are not installed because they are unnecessary. (Bug #81093, Bug #23134620)
  • SECURITY NOTES:
  • The linked OpenSSL library for the MySQL Commercial Server has been updated to version 1.0.1t. Issues fixed in the new version are described at http://www.openssl.org/news/vulnerabilities.html.
  • This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #23229564)
  • MySQL Server now includes an SQL interface for keyring key management, implemented as a set of user-defined functions (UDFs) that access the functions provided by the internal keyring service. For more information, see Keyring Key Management Functions. For information about the keyring service functions invoked by the UDFs, see The Keyring Service. For general keyring information, see The MySQL Keyring.
  • FUNCTIONALITY ADDED OR CHANGED:
  • For better separation of output from multiple statements, mysqltest now flushes output sent to stdout when the output destination is not a file. Previously, flushing occurred only for file output. (Bug #21435906)
  • support-files/MacOSX/ReadMe.txt is no longer included in MySQL distributions. (Bug #81038, Bug #23088916)
  • The version of the tcmalloc library included in MySQL distributions was very old. It has been removed and is no longer included with MySQL. (Bug #80994, Bug #23068660)
  • The my_make_scrambled_password() function in the C client library was restricted earlier in MySQL 5.7 (not exported to client programs). The function has once again been made visible to client programs. (Bug #80974, Bug #23061746)
  • It is possible to use ALTER TABLE to change the default value of a column col_name, which may change the value of a generated column expression that refers to the column using DEFAULT(col_name). For this reason, ALTER TABLE operations that change the definition of a column now cause a table rebuild if any generated column expression uses DEFAULT(). (Bug #80299, Bug #22680839)
  • This release adds an unquoting extraction operator ->>, sometimes also referred to as an inline path operator, for use with JSON documents stored in MySQL. The new operator is similar to the -> operator, but performs JSON unquoting of the value as well.
  • The ->> operator can be used in SQL statements wherever JSON_UNQUOTE(JSON_EXTRACT()) would be allowed. This includes (but is not limited to) SELECT lists, WHERE and HAVING clauses, and ORDER BY and GROUP BY clauses.
  • For more information, see Functions That Search JSON Values, and JSON Path Syntax. (Bug #78736, Bug #21980346)
  • BUGS FIXED:
  • InnoDB: A rollback operation run concurrently with an operation involving a generated virtual column caused a server exit. (Bug #23313102)
  • References: This issue is a regression of: Bug #21869656.
  • InnoDB: Potential buffer overflow issues were corrected for the InnoDB memcached plugin. (Bug #23187607)
  • InnoDB: An ALTER TABLE operation that added an AUTO_INCREMENT column on a table with virtual columns raised an assertion. (Bug #23052231)
  • InnoDB: Statements executed in a transaction that was rolled back asynchronously by a higher priority transaction caused a deadlock error and subsequent replication failure. (Bug #23021168, Bug #80898)
  • InnoDB: An ALTER TABLE operation that attempted to add a generated virtual column and a full-text index raised an assertion. (Bug #23014521)
  • InnoDB: The full-text index cache was freed during a background index cache synchronization. (Bug #22996488)
  • InnoDB: A full-text index operation raised an assertion. (Bug #22963169)
  • InnoDB: Memory was allocated to I/O slots unnecessarily, causing an apparent memory leak. (Bug #22956469, Bug #80772)
  • InnoDB: An ALTER TABLE operation raised an assertion when attempting to create a key containing a generated column. (Bug #22951879)
  • InnoDB: A startup failure due to an invalid option resulted in a server exit after a subsequent restart. An error returned by the innobase_start_or_create_for_mysql function was not checked. (Bug #22939581, Bug #80761)
  • InnoDB: An ALTER TABLE ... IMPORT TABLESPACE operation on file-per-table tablespace containing an encrypted table failed when run in a different session than the preceding ALTER TABLE ... DISCARD TABLESPACE operation. (Bug #22918999, Bug #80708)
  • InnoDB: A FLUSH TABLES operation on a table with a discarded tablespace raised an assertion. (Bug #22899690, Bug #80669)
  • InnoDB: A DML operation involving a table with a virtual column raised an assertion. (Bug #22899305)
  • InnoDB: An invalid read at innobase_get_computed_value() raised a Valgrind error. (Bug #22898168, Bug #80667)
  • InnoDB: Online DDL operations like ALTER TABLE ... ADD INDEX were not permitted for tables created with the ENCRYPTION attribute. (Bug #22897921)
  • InnoDB: InnoDB memcached code assumed the nonexistence of the htonll() function on OS X, resulting in a build failure on OS X 10.10 and later. (Bug #22865112)
  • InnoDB: Starting the server in read-only mode failed when encrypted tables were present. The call to fil_encryption_rotate() was not skipped when the server was started in read-only mode. (Bug #22723797)
  • InnoDB: An R-tree purge operation raised an assertion. (Bug #22698076, Bug #80327)
  • InnoDB: An INSERT operation on a table with a FULLTEXT index and FTS_DOC_ID column failed because the inserted FTS_DOC_ID value exceeded the permitted gap between consecutive FTS_DOC_ID values. To avoid this problem, the permitted gap between the largest used FTS_DOC_ID value and new FTS_DOC_ID value was raised from 10000 to 65535. (Bug #22679185)
  • InnoDB: Validation code for transparent page compression incorrectly permitted innodb_strict_mode=OFF, which allowed the COMPRESSION attribute to be applied to a general tablespace. Page compression is only supported with file-per-table tablespaces. (Bug #22615096, Bug #80182)
  • InnoDB: An memory order issue related to atomic operations caused assertion failures on ARM64 and POWER platforms. (Bug #22608616)
  • InnoDB: DROP TABLESPACE returned an error if the remote general tablespace data file was missing. (Bug #22232892, Bug #79330)
  • InnoDB: An ALTER TABLE operation that changed table row format from COMPACT to COMPRESSED raised an assertion. A function involved in the operation passed incorrect page size information. (Bug #22046353)
  • InnoDB: With innodb_autoinc_lock_mode=0, multiple threads waiting for a table-level lock caused an unexpected deadlock. (Bug #21983865, Bug #78761)
  • InnoDB: A race condition in trx_kill_blocking() raised an assertion. (Bug #21508537)
  • InnoDB: An OPTIMIZE TABLE operation on a table with a full-text index raised an assertion. (Bug #21378944)
  • InnoDB: A buffer pool load operation resulted in a “Cannot allocate 0 bytes” error. (Bug #21371070)
  • InnoDB: A FLUSH TABLES ... FOR EXPORT operation appeared to stall. A loop in the ibuf_contract_in_background function failed to exit. (Bug #21133329, Bug #77011)
  • InnoDB: A full-text query raised an assertion. Under certain circumstances, DDL operations such as ALTER TABLE ... RENAME caused full-text auxiliary tables to be removed on server restart. (Bug #13651665)
  • Replication: With gtid_mode=ON, executing an empty query before setting gtid_next made the latter action fail. It was because only statements that do not change the data can be executed before one can successfully change gtid_next, and an empty query was not considered one of those “safe” statements. This fix allows the setting of gtid_next after an empty query. (Bug #22811150)
  • Replication: Slaves running MySQL 5.7 could not connect to a MySQL 5.5 master due to an error retrieving the server_uuid, which is not part of MySQL 5.5. This was caused by changes in the method of retrieving the server_uuid. (Bug #22748612)
  • References: This issue is a regression of: Bug #21455603.
  • Replication: Setting certain semisynchronous-replication configurations on the master server when semisynchronous replication was not enabled on it might cause the server to exit. This fix prevents the unexpected exits to occur in the situation. (Bug #22602324)
  • Replication: The variable explicit_defaults_ts was not initialized during the construction of a Query_event object. That caused Valgrind warnings for dependency on an uninitialized variable. This fix makes sure the variable is initialized. (Bug #22110916, Bug #78999)
  • References: This issue is a regression of: Bug #18885916, Bug #72794.
  • Replication: In the next_event() function, which is called by a slave's SQL thread to read the next even from the relay log, the SQL thread did not release the relaylog.log_lock it acquired when it ran into an error (for example, due to a closed relay log), causing all other threads waiting to acquire a lock on the relay log to hang. With this fix, the lock is released before the SQL thread leaves the function under the situation. (Bug #21697821)
  • References: See also: Bug #20492319.
  • Replication: A partially failed statement was not correctly consuming an auto-generated or specified GTID when binary logging was disabled. The fix ensures that a partially failed DROP TABLE, a partially failed DROP USER or a partially failed DROP VIEW consume respectively the relevant GTID and save it into @@GLOBAL.GTID_EXECUTED and mysql.gtid_executed table when binary logging is disabled. (Bug #21686749)
  • Replication: An intermittent ASan error was being reported on the rpl.rpl_checksum_cache test. The error reported was related to the binary log sender doing a heap-use-after-free on a given memory address. (Bug #78995, Bug #22109863)
  • Replication: mysqldump has been updated to make it compatible with multi-source replication. Now when replication channels other than the default channel are found, mysqldump --dump-slave outputs a CHANGE MASTER TO statement for each replication channel. (Bug #78467, Bug #21855705)
  • Replication: If a multi-threaded replication slave running with relay_log_recovery=1 stopped unexpectedly, during restart the relay log recovery process could fail. This was due to transaction inconsistencies not being filled, see Handling an Unexpected Halt of a Replication Slave. Prior to this fix, to recover from this situation required manually setting relay_log_recovery=0, starting the slave with START SLAVE UNTIL SQL_AFTER_MTS_GAPS to fix any transaction inconsistencies and then restarting the slave with relay_log_recovery=1. This process has now been automated, enabling relay log recovery of a multi-threaded slave upon restart automatically. (Bug #77496, Bug #21507981)
  • Fedora builds now are configured using -DMYSQL_MAINTAINER_MODE=0 to silence GCC 6 warnings. (Bug #23274249)
  • Allocation of a large number (2^20) of Performance Schema index statistic objects could cause a server exit. (Bug #23188107)
  • If the keyring_okv plugin configuration directory was missing, attempts to rotate the InnoDB master key could cause a server exit. (Bug #23149683)
  • INSERT with ON DUPLICATE KEY UPDATE and REPLACE on a table with a foreign key constraint defined failed with an incorrect “duplicate entry” error rather than a foreign key constraint violation error. (Bug #23135731)
  • References: This issue is a regression of: Bug #78853, Bug #22037930.
  • Contention in Performance Schema mutex instrumentation creation and destruction has been reduced, such that mutexes for which instruments are frequently created and destroyed are maintained in separate pages from those for which instruments are rarely created and destroyed. (Bug #22965826)
  • With certain build options, an uninitialized variable in get_key_scans_params() could produce a compilation error. (Bug #22916059)
  • Adding new tokens to the parser caused query digest values to change. (Bug #22906606)
  • For debug builds, CONCAT_WS() could raise an assertion if there was nothing to append. (Bug #22888420)
  • Fixed Valgrind warnings for failed LEAST() evaluations. (Bug #22883278)
  • INET_NTOA() could cause a server exit when producing an error message. (Bug #22881810)
  • References: This issue is a regression of: Bug #22042027.
  • The my_write() call could cause a server exit if it attempted to check the current connection and the connection had been killed. (Bug #22867809)
  • References: This issue is a regression of: Bug #21688407.
  • Invoking Enterprise Encryption functions in multiple threads simultaneously could cause a server exit. (Bug #22839278)
  • Setting log_syslog_tag to NULL could cause a server exit. (Bug #22834781)
  • References: This issue is a regression of: Bug #22180046.
  • If the expression for an indexed generated column contained an AND or OR operator, the optimizer could choose that index too often and create execution plans that produced incorrect results. (Bug #22810883)
  • CREATE TABLE statements in mysqlpump output could be missing KEY clauses and would not load. (Bug #22726732)
  • Attempting to use Enterprise Encryption functions after creating and dropping them could cause a server exit. (Bug #22669012)
  • Setting sort_buffer_size to a very large value could cause some operations to fail and result in a server exit. (Bug #22594514)
  • For an InnoDB table containing generated columns, using the table in a join could result in a server exit due to improper error checking. (Bug #22561845)
  • REPLACE on a table with an indexed generated column could cause a server exit if the index prefix length was calculated incorrectly. (Bug #22445211)
  • An UPDATE operation affecting a generated virtual BLOB column could cause a server exit. (Bug #22444212)
  • SHOW CREATE TABLE for a table containing a generated column could cause a server exit or produce an Illegal mix of collations error. (Bug #22392268)
  • On a slave server, replication of an UPDATE statement that updated an indexed BLOB virtual generated column of an InnoDB table could cause a server exit. (Bug #22241015)
  • An assertion could be raised when a deadlock occurred due to a SELECT ... GROUP BY ... FOR UPDATE query executed using a Loose Index Scan. (Bug #22187476)
  • mysqlpump could exit due to improper handling of error conditions in a dump thread. (Bug #22017120)
  • Several potential buffer overflow issues were corrected. (Bug #21977380, Bug #23187436, Bug #23202778, Bug #23195370, Bug #23202699)
  • If the CA certificate as given to the --ssl-ca option had an invalid path, yaSSL returned an error message different from OpenSSL. Now both return SSL connection error: SSL_CTX_set_default_verify_paths failed. (Bug #21920657)
  • Installing MySQL from a yum or zypper repository resulted in /var/log/mysqld.log being created with incorrect user and group permissions. (Bug #21879694, Bug #78512)
  • With show_compatibility_56=OFF, SHOW VARIABLES and SHOW STATUS statements having a WHERE clause did not work. (Bug #21783883)
  • The audit_log plugin failed to abort the current operation when told to do so by a plugin handler for a MYSQL_AUDIT_PARSE_PREPARSE event. (Bug #21457956)
  • Memory leaks reported by Valgrind for mysqlpump were fixed. (Bug #21237667)
  • Some string functions returned one or a combination of their parameters as their result. If one of the parameters had a non-ASCII character set, the result string had the same character set, resulting in incorrect behavior when an ASCII string was expected. (Bug #18740222)
  • On Fedora 24, upgrades using a Community MySQL Server RPM failed to replace an installed MariaDB Galera server due to a change in the MariaDB package. (Bug #81390, Bug #23273818)
  • The mysql_read_defaults_options() function was missing a break statement, causing any option value for the --ssl-cipher option also to be applied to the --tls-version option, with unpredictable results. (Bug #81139, Bug #23129821)
  • A DELETE from joined tables using a derived table in the WHERE clause failed if one of the joined tables was used in the derived table. (Bug #81014, Bug #23074801)
  • Compiling of clients that used the MySQL C API could fail if they used an obsolete path to mysql.h or and did not set the include path. This was due to use of #include notation rather than #include "file_name" in internal MySQL header files, which have been adjusted. (Bug #80935, Bug #23047194)
  • MySQL did not compile under Solaris 12 using Sun Studio. To correct this, instances of __attribute__ were changed to MY_ATTRIBUTE. (Bug #80748, Bug #22932576)
  • The service_mysql_keyring.h and services.h header files misspelled mysql_keyring_service_st as mysql_keyring_file_service_st. (Bug #80688, Bug #22908232)
  • The fix for Bug #79194 did not cover the eq_ref access method, with the result that left joins could return incorrect results.
  • Note
  • This bug fix has a very small negative performance effect such that it fails to cache an eq_ref-accessed row that is on the inner side of an outer join. Regular inner joins are not affected.
  • (Bug #80526, Bug #22833364)
  • References: This issue is a regression of: Bug #79194, Bug #22176604.
  • The sanity() macro in strings/decimal.c produced Valgrind warnings due to reading uninitialized buffer contents. (Bug #80461, Bug #22782203, Bug #22839915)
  • Starting the server with --initialize failed if the keyring_file_data system variable was also set at startup. To handle this, with --initialize the server no longer skips registration of plugins loaded with the --early-plugin-load option. (Bug #80451, Bug #22777039)
  • Loading the Rewriter query rewrite plugin when there was no query_rewrite database resulted in Valgrind warnings. (Bug #80333, Bug #22710312)
  • The optimizer transformed EXISTS (SELECT * ...) constructs to EXISTS (SELECT 1 ...) before all columns in the inner subquery had been resolved, which could result in rejection of valid queries that included a HAVING clause without GROUP BY in the subquery. (Bug #80231, Bug #22655856)
  • For a server compiled with -DWITH_PERFSCHEMA_STORAGE_ENGINE=0, a memory leak could occur for buffered log messages used during server startup. (Bug #80089, Bug #22578574)
  • A query could return incorrect results under these conditions: A column with a default value contained NULL; SELECT DISTINCT or a GROUP BY clause was used and the column containing the NULL value was part of the select list; an InnoDB temporary table was used during query processing. (Bug #79591, Bug #22343910)
  • A null pointer dereference of a parser structure could occur during stored procedure name validation. (Bug #79396, Bug #22286421)
  • Database initialization failed during installation using Ubuntu 15.10 packages. (Bug #79377, Bug #22252900)
  • mysql_upgrade failed to widen the User and Proxied_user columns in the mysql.proxies_priv system table from 16 to 32 characters. (Bug #78254, Bug #21762656)
  • Failure of UNINSTALL PLUGIN could lead to inaccurate or confusing errors for subsequent INSTALL PLUGIN operations. (Bug #74977, Bug #20085672)
  • mysqld_multi displayed misleading error messages when it was unable to execute my_print_defaults. (Bug #74636, Bug #19920049)
  • Previously, upgrading the server using an RPM package (including installation using yum) required upgrading the client package to the same MySQL version, which may be undesirable for some installations. This rule has been relaxed so that upgrading to a General Availability (GA) server version requires only that some GA client version be installed, which is less likely to require a client upgrade. (Bug #72230, Bug #18518216)
  • mysqldump failed silently with no error message when it encountered an error while executing FLUSH LOGS. (Bug #71783, Bug #18284273)

New in MySQL 5.7.12 (Apr 11, 2016)

  • Configuration Notes:
  • Incompatible Change: To load a keyring plugin, the --early-plugin-load option is used. Previously, the default --early-plugin-load option value was the name of the keyring_file plugin library file. Now the default value is empty.
  • Important
  • InnoDB tablespace encryption requires the keyring_file plugin to be loaded prior to InnoDB initialization, so this change of default --early-plugin-load value introduces an incompatibility for upgrades from 5.7.11 to 5.7.12 or higher. Administrators who have encrypted InnoDB tablespaces must take explicit action to ensure continued loading of the keyring_file plugin: Start the server with an --early-plugin-load option that names the plugin library file. For example, on platforms where the plugin library file suffix is .so, use these lines in the server my.cnf file:
  • [mysqld]
  • early-plugin-load=keyring_file.so
  • On other platforms, adjust the file name suffix as necessary. For more information, see The MySQL Keyring.
  • (Bug #80413, Bug #22748738)
  • Security Notes:
  • InnoDB: The InnoDB tablespace encryption feature, which provides at-rest data encryption for InnoDB tables, now supports Oracle Key Vault for encryption key management. Oracle Key Vault support relies on the keyring_okv plugin which is available in MySQL Enterprise Edition. A secure and robust encryption key management solution such as OKV is critical for security and for compliance with various security standards. For more information, see InnoDB Tablespace Encryption.
  • The linked OpenSSL library for the MySQL Commercial Server has been updated to version 1.0.1s. Issues fixed in the new version are described at http://www.openssl.org/news/vulnerabilities.html.
  • This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #22685885, Bug #22923458)
  • MySQL Enterprise Edition now includes a keyring_okv plugin that uses Oracle Key Vault for keyring backend storage. For more information, see The MySQL Keyring.
  • Functionality Added or Changed:
  • For queries with many OR conditions, the optimizer now is more memory-efficient and less likely to exceed the memory limit imposed by the range_optimizer_max_mem_size system variable. In addition, the default value for that variable has been raised from 1536000 to 8388608. (Bug #79450, Bug #22283790)
  • Bugs Fixed:
  • InnoDB; Partitioning: INSERT and SELECT statements against a partitioned InnoDB table having generated columns were not always handled correctly. (Bug #22444530)
  • References: See also Bug #21776494, Bug #21824564, Bug #21864838.
  • InnoDB: An error was returned on startup when a replication slave attempted to access an encrypted table. The server UUID used to compose the master key name was not persisted to the tablespace data file, resulting in the use of an incorrect master key. (Bug #22912582)
  • InnoDB: In debug builds, an unnecessary buf_block_align() call could cause a latching order violation. A DML operation resulted in a page mismatch assertion due to the same buf_block_align() call. (Bug #22709463, Bug #21321238)
  • InnoDB: An ALTER TABLE ... ADD COLUMN operation on a table with virtual columns raised an assertion. (Bug #22650296)
  • InnoDB: An unnecessary comparison in tablespace encryption code caused compiler warnings. (Bug #22645816)
  • InnoDB: INNODB_SYS_TABLESPACES could report incorrect ALLOCATED_SIZE and FILE_SIZE values for a general tablespace created outside of the data directory. The i_s_dict_fill_sys_tablespaces() function generated an incorrect remote file path. (Bug #22590095, Bug #80070)
  • InnoDB: In debug builds, an update operation on a table with virtual columns raised an assertion. (Bug #22572997)
  • InnoDB: Modifications were made to InnoDB code to handle warnings when compiling with Microsoft Visual Studio 2015. (Bug #22542547, Bug #79964)
  • InnoDB: Running REPLACE operations on multiple connections resulted in a hang. (Bug #22530768, Bug #79185)
  • InnoDB: Tabespace encryption-related operations resulted in a hang on FreeBSD. (Bug #22520464, Bug #79901)
  • InnoDB: MySQL stalled when syncing the InnoDB full-text index cache. (Bug #22516559, Bug #16510576, Bug #73816)
  • InnoDB: A CREATE TABLE ... DATA DIRECTORY operation failed to create a table while innodb_flush_method was set to O_DIRECT. (Bug #22180006, Bug #79200)
  • References: This bug is a regression of Bug #21113036.
  • InnoDB: In debug builds, a buffer pool resizing operation resulted in a segmentation violation. The buf_pool_resizing variable was not protected. (Bug #22179317)
  • InnoDB: The innodb_open_files setting could exceed the open files limit. (Bug #22111472)
  • InnoDB: InnoDB attempted crc32 checksum validation instead of innodb after a crc32 checksum validation failure, causing repeated crc32 checksum validation attempts. Checksum validation order is now optimized dynamically.
  • Thanks to Daniel Black for the patch. (Bug #79725, Bug #22452597)
  • Replication: The recovery channel must be set using the CHANGE MASTER command, and the plugin will not set default values for the user or password fields in CHANGE MASTER. The server side recovery channel is restricted to MASTER_USER and MASTER_PASSWORD, whereas all other settings for the change master are added on the plugin side, as done previously. Attempting to use other values will emit ER_SLAVE_CHANNEL_OPERATION_NOT_ALLOWED errors. The password value used on CHANGE MASTER commands for the recovery channel is not logged as plain text in any log or history files. Also, at the end of recovery, the plugin no longer resets info objects, but does continue to purge the logs. (Bug #22815932)
  • Replication: When a binlog-less slave connected to a GR master, it failed with "Error running query" in the error log. But, there was no information available in "SHOW SLAVE STATUS" or P_S.replication_applier_status_by_worker. (Bug #22699395)
  • Replication: Setting the relay log recovery to 1 could generate an error during recovery. Once the relay log recovery happened, repositories were not initiated and the server reported an error related to this. Also, attempting to execute "START GROUP_REPLICATION" in this situation could cause a crash. To fix this, the recovery procedure will no longer take the group_replication_channel into consideration. It now skips the relay logs of the GR channel to proceed further. (Bug #22523554)
  • Replication: Issuing STOP SLAVE caused a spurious Error reading packet from server: Lost connection to MySQL server during query message to be written to the error log. With this fix, when connection to the master is lost, the abort_slave flag is checked and the error message is printed only if the flag is not set. (Bug #22305605, Bug #79504)
  • References: See also Bug #12977988, Bug #22290309.
  • Replication: When binlog was disabled, the GTID specified by GTID_NEXT when committing an empty transaction caused by a 'BEGIN' command was being saved into GLOBAL@gtid_executed when it should not have been. However, when binlog was enabled, the same situation did not save it.
  • Now, when "@@SESSION.GTID_NEXT == 'UUID:NUMBER'", the 'BEGIN' command causes an 'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET' error inside an empty or non-empty transaction regardless of the binlog setting, since it causes an implicit commit like other DDLs. In this case, the GTID specified by GTID_NEXT is not saved into GLOBAL@gtid_executed. (Bug #22130929)
  • Replication: When replication was configured but not started on a slave, the variable currently_executing_gtid was not properly initialized, but it would be used if the performance_schema table replication_applier_status_by_worker was queried, causing assertion failures and pointer issues. With this fix, the variable is now properly initialized at the construction of the Relay_log_info object. (Bug #21953132, Bug #78722)
  • Replication: RESET SLAVE ALL could delete a channel even when master_pos_wait and wait_until_sql_thread_after_gtid were still waiting for binlog to be applied. This could cause a MySQL server exit when the functions tried to access the channel that was deleted. Now, a channel reference counter was added that is increased if the channel should not be deleted when the functions are running. RESET SLAVE ALL will wait for no reference, and then it will delete the channel. (Bug #21842399, Bug #78445)
  • Replication: When relay_log_recovery=1, a slave server, at its initialization, still tried to scan the relay log files in order to update Retrieved_Gtid_Set and the transaction parser state, which was an unnecessary waste of resources because the slave I/O thread would just be initialized to the SQL thread position in the new relay log file. With this fix, the slave server skips scanning the relay log files when relay_log_recovery=1. (Bug #21798355, Bug #78352)
  • Replication: In Slave_worker::write_info(), DBUG_ENTER() had “Master_info::write_info” as its argument instead of “Slave_worker::write_info”. This fix corrects the argument. Thanks to Stewart Smith for the patch. (Bug #21658067, Bug #78133)
  • Replication: XA transactions were not handled correctly when --gtid-mode=ON and the binary log was disabled. It was because on both master and slave servers, the GTID state was sometimes not saved and the GTID ownership was sometimes not cleaned up. This fix makes sure those steps are now properly performed. (Bug #21618727)
  • References: See also Bug #22165138, Bug #77740, Bug #21452916.
  • Replication: When a multi-threaded slave stopped with an error, the same error message was printed three times. Now, the SQL thread's kill acceptance status is saved, and only printed once. (Bug #21198611, Bug #77237)
  • Replication: When using a multi-threaded slave with relay_log_info_repository set to TABLE, the slave applier thread failed to write XA transactions to the worker configuration. (Bug #20988291)
  • Replication: mysqlbinlog --verbose displayed BINARY and VARBINARY data as ordinary strings, causing any single quote (“'”) or backslash (“\”) among the data to be printed as such, which was confusing to the users and, in the case of a backslash, caused the next character to be skipped. This fix makes mysqlbinlog print the characters' hexadecimal values (“\x27” for single quote and “\x5c” for backslash) instead. (Bug #20836250)
  • Replication: The test case main.merge failed when the variables binlog_format was set to “ROW,” as the server tried to get information for table creation for a child table before it was opened. With this fix, the server skips getting information for the table in the situation. (Bug #20574550)
  • Replication: If a query on a master generated an error and partial results were written to the binary log, for example due to a DROP TABLE IF EXISTS statement applying to multiple tables that would break foreign key constraints, when a slave configured with replication filters encountered the query it could be incorrectly binary logged. This caused errors such as:
  • Last_SQL_Error: Query caused different errors on master and slave. Error on master: message (format)='Cannot delete or update a parent row: a foreign key constraint fails' error code=1217 ; Error on slave: actual message='no error', error code=0. Default database: 'db1'. Query: 'DROP TABLE IF EXISTS `table1` /* generated by server */'
  • There were two fixes required for this bug.
  • If a DROP TABLE statement used to drop a single table fails, to avoid partial results causing this bug the query is not written to the binary log. If a DROP TABLE statement used to drop a list of tables fails, any partial results it generates are written to the binary log with an error.
  • When a query that generates an error as expected was received by a slave but it was skipped due to replication filters, the slave was incorrectly checking the error. The fix for Bug #76493 ensures that this comparison of the expected error from the master with the actual error from the slave does not happen.
  • (Bug #77684, Bug #21435502)
  • References: See also Bug #20797764.
  • RTRIM() on large strings could be very slow. (Bug #22884187)
  • References: This bug was introduced by Bug #18315770, Bug #12368495.
  • Integer overflow could occur during client handshake processing, leading to a server exit. (Bug #22722946)
  • Missing initializers in the query plan constructor resulted in Valgrind warnings. (Bug #22573117)
  • The obsolete support-files/MySQL-shared-compat.spec.sh file was removed from distributions. (Bug #22525609)
  • mysqlpump failed (syntax error) when a view name contained a space character. View names are now quoted. (Bug #22505474)
  • UNHEX() with an invalid argument could result in garbage characters in the warning message. (Bug #22358933)
  • Improper host name checking in X509 certificates could permit man-in-the-middle attacks. (Bug #22295186, Bug #22738607)
  • For debug builds, when an indexed nonnullable generated column with an empty string generated expression was updated during an insert for a duplicated key, there was an optimization that resulted in the server failing to find the duplicated index, causing an assertion to be raised. (Bug #22195364)
  • A boolean mode full-text search caused a segmentation fault. (Bug #22176795)
  • Queries on generated columns that used WITH ROLLUP could raise an assertion. (Bug #22131343)
  • For a prepared statement that used a derived table, an assertion could be raised at execute time when checking statement privileges. (Bug #22108567)
  • Concurrent selecting and flushing of a FEDERATED table while killing connections accessing it could result in a server exit. (Bug #21918190)
  • For debug builds, when a query using join buffering and one of the tables inserted into the join buffer was accessed using a dynamic range scan on an index containing a virtual column, a Valgrind error occurred when writing columns to the join buffer. (Bug #21872184)
  • After iterations of uninstalling and installing the audit_log plugin, the server could hang. (Bug #21796658)
  • With a LOCK TABLES statement in effect, access to Performance Schema tables could fail, as could SHOW STATUS with show_compatibility_56=OFF. (Bug #21789221)
  • Executing GRANT PROXY statements after altering the definition of the mysql.user system table could result in a server exit. (Bug #21699037)
  • Certain error messages included part of the SQL statement that produced them, possibly exposing data. (Bug #21682356)
  • The Performance Schema assumed that tables named using a #sql prefix were temporary and could be ignored. But it is possible to create nontemporary tables using that prefix. The Performance Schema now uses table attributes other than the name to identify temporary tables. (Bug #21105475, Bug #22532368, Bug #79934)
  • Account filtering performed by the audit_log plugin incorrectly used the account named by the USER() function rather than the CURRENT_USER() function (the latter being the account used for authentication). (Bug #19509471)
  • NAME_CONST() can return null if incorrect arguments are given. In some cases, this was not handled and could cause a server exit. (Bug #19143243)
  • Character set conversion operations on NULL parameters to prepared statements could cause a server exit. (Bug #18823979)
  • Loose Index Scan was not chosen for queries that had an equality condition. (Bug #18109609)
  • Long or complex SQL statements could cause the parser to run out of memory. The new parser_max_mem_size system variable now enables control over the maximum amount of memory available to the parser. The default value places no limit on memory available, but the value can be reduced to protect against out-of-memory situations. (Bug #14744160)
  • A Valgrind warning for memory_free_noop() was silenced. (Bug #80457, Bug #22782197)
  • The MySQL server failed to start if built with the -m32 option on Solaris/Sparc, due to improper static data alignment in init_delegates(). (Bug #80445, Bug #22763880)
  • The plugin_keyring.h header file misspelled st_mysql_keyring as st_mysql_keyring_file. (Bug #80414, Bug #22748867)
  • For shared-memory connections on Windows, the client library opened a handle on a mutex but did not close it. Subsequent attempts to restart the server on the other end of the connection failed if the client still had the mutex handle open. (Bug #80234, Bug #22646779)
  • mysqld attempted to initialize plugins specified using the --early-plugin-load option when the --help option was specified. (Bug #80077, Bug #22573767)
  • ALTER USER IDENTIFIED WITH ... expired the account password, even if the authentication plugin did not support password expiration. (Bug #79999, Bug #22551523)
  • Some Performance Schema global instruments, if not enabled at server startup, could be in a state where it was not possible to enable them at runtime. This restriction has been lifted. Affected instruments include mutex, rwlock, cond, and socket instances.
  • Thanks to Zhang Yingqiang for the patch. (Bug #79784, Bug #22517278)
  • Setting the super_read_only system variable at server startup had no effect. (Bug #79328, Bug #22233503)
  • These audit_log plugin issues were corrected:
  • Calling my_message() from the MYSQL_AUDIT_GENERAL_CLASS handler resulted in infinite recursion.
  • Diagnostic messages were improved for the case when the MYSQL_AUDIT_GENERAL_CLASS handler returned nonzero.
  • Calling my_message() from the MYSQL_AUDIT_SERVER_STARTUP_CLASS handler did not abort server startup as it should have.
  • SHOW GLOBAL VARIABLES produced different output for the null_audit_abort_value system variable with show_compatibility_56 enabled and disabled.
  • (Bug #79079, Bug #22136709, Bug #79091, Bug #22142166, Bug #79092, Bug #22142209, Bug #21783798)
  • For INSERT and UPDATE operations that caused FOREIGN KEY constraint violations, errors were reported rather than warnings when the IGNORE keyword was used. (Bug #78853, Bug #22037930)
  • Using the server session service, executing an SQL statement from a thread with no VIO context could raise an assertion. (Bug #78734, Bug #21959409)
  • Error messages raised by JSON_KEYS() and JSON_EXTRACT() contained the wrong data. (Bug #78699, Bug #22026278)
  • CREATE VIEW statements that used the TIMESTAMPDIFF() function with MICROSECOND as the unit resulted in incorrect view definitions. (Bug #78506, Bug #21877062)
  • For an existing user, CREATE USER IF NOT EXISTS produced an error rather than a warning. Similarly, for an nonexisting user, ALTER USER IF EXISTS produced an error rather than a warning. (Bug #78374, Bug #21807286)
  • For some queries, an Index Merge access plan was chosen over a range scan when the cost for the range scan was the same or less. (Bug #77209, Bug #21178196)
  • UNHEX() could attempt a left shift of a negative number. (Bug #73964, Bug #19642015)
  • EXPLAIN for SELECT ... FOR UPDATE statements acquired locks. (Bug #72858, Bug #18899860)
  • Processlist state information was not updated correctly for LOAD DATA INFILE and could show a state different from executing. (Bug #69375, Bug #16912362)

New in MySQL 5.7.11 (Feb 5, 2016)

  • Compilation Notes:
  • A value of system is now permitted for the WITH_BOOST CMake option. If this option is not set or is set to system, it is assumed that the correct version of Boost is installed on the compilation host in the standard location. In this case, the installed version of Boost is used rather than any version included with a MySQL source distribution. (Bug #22224313)
  • In addition to the mysql-5.7.11.tar.gz source tarball, another tarball named mysql-boost-5.7.11.tar.gz is provided. The new tarball contains everything in the first tarball, but also contains all the required Boost header files in a subdirectory named boost. This is for the benefit of those who do not have the correct Boost version installed and do not wish to or cannot download it. To build from this source distribution, add -DWITH_BOOST=boost to the CMake command line.
  • Data Type Notes:
  • Bit functions and operators comprise BIT_COUNT(), BIT_AND(), BIT_OR(), BIT_XOR(), &, |, ^, ~, . Currently, bit functions and operators require BIGINT (64-bit integer) arguments and return BIGINT values, so they have a maximum range of 64 bits. Arguments of other types are converted to BIGINT and truncation might occur.
  • A planned extension for MySQL 5.8 is to permit bit functions and operators to take binary string type arguments (BINARY, VARBINARY, and the BLOB types), enabling them to take arguments and produce return values larger than 64 bits. Consequently, bit operations on binary arguments in MySQL 5.7 might produce different results in MySQL 5.8. To provide advance notice about this potential change in behavior, the server now produces warnings for bit operations for which binary arguments will not be converted to integer in MySQL 5.8. These warnings afford an opportunity to rewrite affected statements. To explicitly produce MySQL 5.7 behavior in a way that will not change after an upgrade to 5.8, cast bit-operation binary arguments to convert them to integer. For more information and examples, see Bit Functions and Operators.
  • Installation Notes:
  • Previously, mysqld --initialize required the data directory to not exist or, if it existed, to be empty. Now an existing data directory is permitted to be nonempty if every entry either has a name that begins with a period (.) or is named using an --ignore-db-dir option. (Bug #79250, Bug #22213873)
  • Packaging Notes:
  • Packaging support for Ubuntu 15.10 was added. (Bug #79104, Bug #22147191)
  • Security Notes:
  • The linked OpenSSL library for the MySQL Commercial Server has been updated from version 1.0.1p to version 1.0.1q. Issues fixed in the new version are described at http://www.openssl.org/news/vulnerabilities.html.
  • This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #22348181)
  • The default value of the default_password_lifetime system variable that controls the global password expiration policy has been changed from 360 (360 days) to 0 (no password expiration). The default of 360 sometimes took people by surprise when account passwords expired a year after upgrading to MySQL 5.7. To continue to use a value other than 0 as the password expiration, start the server with an explicit setting for default_password_lifetime.
  • MySQL client programs now support an --ssl-mode option that enables you to specify the security state of the connection to the server. Permitted option values are PREFERRED (establish a secure encrypted connection if the server supports the capability, falling back to an unencrypted connection otherwise), DISABLED (establish an unencrypted connection), REQUIRED (establish a secure connection, or fail), VERFIFY_CA (like REQUIRED, but additionally verify the server certificate), VERIFY_IDENTITY (like VERIFY_CA, but additionally verify that the server certificate matches the host name to which the connection is attempted). For backward compatibility, the default is PREFERRED if --ssl-mode is not specified.
  • These clients support --ssl-mode: mysql, mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlshow, mysqlpump, mysqlslap, mysqltest, mysql_upgrade.
  • The --ssl-mode option comprises the capabilities of the client-side --ssl and --ssl-verify-server-cert options. Consequently, both of those options are now deprecated and will be removed in a future MySQL release. Use --ssl-mode=REQUIRED instead of --ssl=1 or --enable-ssl. Use --ssl-mode=DISABLED instead of --ssl=0, --skip-ssl, or --disable-ssl. Use --ssl-mode=VERIFY_IDENTITY instead of --ssl-verify-server-cert options. (The server-side --ssl option is not deprecated.)
  • For the C API, the new MYSQL_OPT_SSL_MODE option for mysql_options() corresponds to the --ssl-mode option. The MYSQL_OPT_SSL_ENFORCE and MYSQL_OPT_SSL_VERIFY_SERVER_CERT options for mysql_options() correspond to the client-side --ssl and --ssl-verify-server-cert options. They are now deprecated and will be removed in a future MySQL release. Use MYSQL_OPT_SSL_MODE with an option value of SSL_MODE_REQUIRED or SSL_MODE_VERIFY_IDENTITY instead.
  • For more information, see Command Options for Secure Connections, and mysql_options().
  • In consequence of this change, the minor C API version number was incremented.
  • MySQL now supports a keyring service that enables internal MySQL server components and plugins to securely store sensitive information for later retrieval. The implementation includes a keyring_file plugin that stores data in a file local to the server host. For more information, see The MySQL Keyring.
  • Functionality Added or Changed:
  • InnoDB: A new InnoDB configuration option, innodb_tmpdir, allows you to configure a separate temporary file directory for online ALTER TABLE operations. This option was introduced to help avoid tmpdir overflows that could occur as a result of large temporary files created during online ALTER TABLE operations. innodb_tmpdir is a SESSION variable and can be configured dynamically using a SET statement. (Bug #19183565)
  • InnoDB: InnoDB now supports at-rest data encryption for InnoDB tables stored in file-per-table tablespaces. Encryption is enabled by specifying the ENCRYPTION option when creating or altering an InnoDB table. For more information, see InnoDB Tablespace Encryption.
  • Replication: The log_statements_unsafe_for_binlog variable was added to provide control over whether the warnings generated by error 1592 are added to the binary log or not.
  • yaSSL was upgraded to version 2.3.9. This upgrade corrects an issue in which yaSSL handled only cases of zero or one leading zeros for the key agreement instead of potentially any number, which in rare cases could cause connections to fail when using DHE cipher suites. (Bug #22361038)
  • The Valgrind function signature in mysql-test/valgrind.supp was upgraded for Valgrind 3.11. (Bug #22214867)
  • The audit_log plugin now produces events in the MYSQL_AUDIT_TABLE_ACCESS_CLASS class. These events are abortable. (Bug #21458192)
  • The format of log output produced by mysqld_safe now is configurable using the --mysqld-safe-log-timestamps option. This option can be used to produce log timestamps in formats compatible with the server or in formats used by mysqld_safe in older versions of MySQL. For more information, see mysqld_safe — MySQL Server Startup Script. (Bug #78475, Bug #21862951)
  • The mysql_kill(), mysql_list_fields(), mysql_list_processes(), and mysql_refresh() C API functions are deprecated and will be removed in a future version of MySQL. The same is true of the corresponding COM_PROCESS_KILL, COM_FIELD_LIST, COM_PROCESS_INFO, and COM_REFRESH client/server protocol commands. Instead, use mysql_query() to execute a KILL, SHOW COLUMNS, SHOW PROCESSLIST, or FLUSH statement, respectively.
  • The mysql_plugin utility is deprecated and will be removed in a future version of MySQL. Alternatives include loading plugins at server startup using the --plugin-load or --plugin-load-add option, or at runtime using the INSTALL PLUGIN statement.
  • Storage engines now can request notification about acquisition and release of exclusive metadata locks. As result, the LOCK_STATUS column of the metadata_locks Performance Schema table has two new status values. The PRE_ACQUIRE_NOTIFY and POST_RELEASE_NOTIFY status values are brief and signify that the metadata locking subsubsystem is notifying interested storage engines while entering lock acquisition or leaving lock release operations.
  • Bugs Fixed:
  • InnoDB; Partitioning: When OPTIMIZE TABLE rebuilt a partitioned InnoDB table, it placed the resulting partition tablespace files (*.ibd files) in the default data directory instead of the directory specified using the DATA DIRECTORY option. (Bug #75112, Bug #20160327)
  • InnoDB: InnoDB failed to update index statistics when adding or dropping a virtual column. (Bug #22469660, Bug #79775)
  • InnoDB: A small InnoDB buffer pool size with a large innodb_stats_persistent_sample_pages setting resulted in a Difficult to find free blocks in the buffer pool warning. (Bug #22385442)
  • InnoDB: memcached connections are blocked from accessing tables that contain an indexed virtual column. Accessing an indexed virtual column requires a callback to the server, but a memcached connection does not have access to the server code. (Bug #22384503, Bug #79691)
  • InnoDB: InnoDB did not return an informative message when refusing an online ALTER TABLE operation that attempted to add an index and a virtual column. (Bug #22374827)
  • InnoDB: An invalid innodb_saved_page_number_debug setting caused a server exit. (Bug #22311319, Bug #79516)
  • InnoDB: InnoDB failed to free a table object when a compressed table and temporary compressed table were created in the same shared tablespace. (Bug #22306581)
  • InnoDB: In Numa-related code, the size information passed to the mbind() call in the buf_chunk_init() function was incorrect. (Bug #22293530, Bug #79434)
  • InnoDB: Numa support was incomplete for online buffer pool resizing operations. (Bug #22293511, Bug #79354)
  • InnoDB: A SELECT COUNT(*) query that counted the results of a full-text subquery raised an assertion. (Bug #22270139)
  • InnoDB: InnoDB passed a buffer with an incorrect TINYBLOB data length for a virtual column, resulting in a purge thread failure. (Bug #22256752)
  • InnoDB: A purge failure occurred while deleting data from a table that contained a spatial index. (Bug #22230442)
  • InnoDB: An assertion was raised when purge accessed a freed page while attempting to rebuild virtual column data from the clustered index. (Bug #22204260)
  • InnoDB: Only prefix bytes were logged for an indexed virtual column, resulting in an a Clustered record for sec rec not found error. (Bug #22202788)
  • InnoDB: A small buffer pool with an innodb_page_size setting of 64K could cause startup, bootstrap, and recovery failures. (Bug #22179133, Bug #79201)
  • InnoDB: Unreachable code that checks for 32-bit file offsets was removed. (Bug #22163880, Bug #79150)
  • InnoDB: A slow shutdown failure was caused by background threads adding undo records to the purge history list during or after purge thread exit. (Bug #22154730)
  • InnoDB: The InnoDB purge thread died attempting to purge a virtual column index record that was not delete-marked. (Bug #22141031)
  • InnoDB: In debug builds, an ALTER TABLE operation that increased the column length of a virtual column raised an assertion. (Bug #22139917)
  • InnoDB: ut_allocator prepended the allocation payload with a 12-byte header on 32-bit systems, causing unaligned memory access. On 32-bit SPARC systems, the unaligned memory access caused a crash during bootstrap. (Bug #22131684)
  • InnoDB: In debug builds, an ALTER TABLE operation that added a new virtual column before an existing virtual column raised an assertion. (Bug #22123674, Bug #22111464)
  • InnoDB: InnoDB startup messages related to dumping and loading of the buffer pool were improved. (Bug #22096661, Bug #78960)
  • InnoDB: Creating a table with a full-text index and a foreign key constraint failed when foreign_key_checks was disabled. (Bug #22094601, Bug #78955)
  • References: This bug is a regression of Bug #16845421.
  • InnoDB: Support was enabled for ALGORITHM=INPLACE operations that add an index on an existing virtual column while dropping another virtual column. Support was also enabled for ALGORITHM=INPLACE operations that add a virtual column and an index. When adding an index on a newly-added virtual column, purge now skips the uncommitted virtual index. (Bug #22082762)
  • InnoDB: The wrong table object was used to compute virtual column values for a query that accessed multiple instances of the same table. (Bug #22070021)
  • InnoDB: A purge thread failure occurred when inserting and deleting spatial data. The child page number field was not stored during the R-tree search stage. (Bug #22027053)
  • InnoDB: Starting the server with an empty innodb_data_home_dir entry in the configuration file caused InnoDB to look for the buffer pool file in the root directory, resulting in a startup error. (Bug #22016556, Bug #78831)
  • InnoDB: A failure to compute virtual column values caused an excessive number of error messages. (Bug #21968375)
  • InnoDB: An INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX query raised an assertion. A dictionary mutex was taken while InnoDB populated an in-memory heap table. The mutex was not released before InnoDB attempted to convert the in-memory heap table to an optimized internal temporary table. (Bug #21950756, Bug #78714)
  • InnoDB: To avoid a potential hang and redo log overwrite, the innodb_log_file_size minimum value was increased from 1MB to 4MB, and the length calculation in log_margin_checkpoint_age() was revised. (Bug #21924224, Bug #78647)
  • InnoDB: A full-text query run under high concurrency caused a server exit due to an invalid memory access. (Bug #21922532)
  • InnoDB: An ALTER TABLE operation on a table partitioned across multiple tablespaces moved existing partitions to the table's default tablespace, resulting in an assertion on SHOW CREATE TABLE. Likewise, ALTER TABLE tbl_name TABLESPACE tablespace_name moved existing partitions to the named tablespace. Only ALTER TABLE ... REORGANIZE PARTITION should move existing partitions to the table's default tablespace or to a named tablespace. Running ALTER TABLE tbl_name TABLESPACE tablespace_name on a table partitioned across multiple tablespaces should only change the table's default tablespace. (Bug #21914047, Bug #22124042, Bug #79030)
  • InnoDB: With a large innodb_sort_buffer_size setting, adding an index on an empty table performed more slowly than expected. (Bug #21762319, Bug #78262)
  • InnoDB: A race condition occurred between fil_names_write() and file_rename_tablespace_in_mem(). (Bug #21549928)
  • InnoDB: Purge attempted to access undo pages that were freed by a preceding undo log truncate operation, resulting in an assertion. (Bug #21508627)
  • InnoDB: InnoDB did not return an informative message when refusing an online ALTER TABLE operation on a table with a spatial index. (Bug #20111575)
  • InnoDB: A compiler barrier was added to ut_relax_cpu(). The ut_always_false dummy global variable was removed from ut_delay(). (Bug #20045167, Bug #74832)
  • InnoDB: Incorrect index values were returned while dropping a virtual column. The altered table object was used to evaluate virtual column values. (Bug #79773, Bug #22469459)
  • References: This bug is a regression of Bug #22082762.
  • Partitioning: Subquery scans on partitioned tables with virtual columns could leak memory. (Bug #79145, Bug #22162200)
  • Replication: When a slave was configured with log_bin=OFF, the applier (SQL) thread was failing to correctly roll back partial transactions left in the relay log. The fix ensures that on reconnection, the applier thread correctly rolls back a partial transaction and starts applying it again from the next relay log file. (Bug #21691396)
  • Replication: The behavior of SET GTID_PURGED was not consistent between version 5.6 and 5.7. The fix ensures that version 5.7 does not initiate a transaction for SET GTID_PURGED statements. (Bug #21472492)
  • Replication: When DML invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column, that DML has to be marked as an unsafe statement. If the tables are locked in the transaction prior to the DML statement (for example by using LOCK TABLES), then the DML statement was not being marked as an unsafe statement. The fix ensures that such DML statements are marked correctly as unsafe. (Bug #17047208)
  • Replication: If pseudo_slave_mode was set to 1 while an XA transaction was in the prepare stage, an assert was generated. The fix ensures that changes from 0 to 1 can be made during XA transactions. Note that this variable is solely for internal use by the server. (Bug #79416, Bug #22273964, Bug #78695, Bug #21942487)
  • Replication: If the server stopped unexpectedly immediately before committing an XA transaction which had been prepared, and the transaction modified the mysql.gtid_executed table, then the subsequent recovery aborted due to an innodb_lock_wait_timeout error when it was reading the mysql.gtid_executed table. To fix the problem, XA transactions are no longer permitted to modify the mysql.gtid_executed table. (Bug #77740, Bug #21452916)
  • Replication: As part of the fix for Bug #16290902, when writing a DROP TEMPORARY TABLE IF EXISTS query into the binary log, the query is no longer preceded by a USE `db` statement. Instead the query uses a fully qualified table name, for example DROP TEMPORARY TABLE IF EXISTS `db`.`t1`;. This changed the application of replicate-rewrite-db filter rules, as they work only on the default database specified in a USE statement. This caused slaves to fail when the resulting CREATE TEMPORARY TABLE was applied. The fix ensures that at the time of writing a DROP TEMPORARY TABLE IF EXISTS query into the binary log, a check is made for the default database. If it exists then the query is written as USE default_db in the binary log. If a default database is not present then the query is logged with the qualified table name. (Bug #77417, Bug #21317739)
  • Replication: If generating a GTID for a transaction fails, the transaction is not written to the binary log but still gets committed. Although running out of GTIDs is a rare situation, if it did occur an error was written to the binary log as a sync stage error. With binlog_error_action=ABORT_SERVER, the server aborts on such an error, avoiding data inconsistency. When binlog_error_action=IGNORE_ERROR, the server continues binary logging after such an error, potentially leading to data inconsistency between the master and the slave. The fix changes the error to be correctly logged as a flush stage error. (Bug #77393, Bug #21276661)
  • Replication: When using --gtid-mode=on , --enforce-gtid-consistency , and --binlog-format=row, if a user defined function with multiple DROP TEMPORARY TABLE statements was executed on a master, the resulting binary log caused an error on slaves. The fix ensures that stored functions and triggers are also considered multi-statement transactions, and that when --enforce-gtid-consistency is enabled, functions with CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE statements generate an ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION error. (Bug #77354, Bug #21253415)
  • Replication: Stored procedure local variables that were used in an ALTER EVENT statement were not being replicated correctly. This was related to the fact that CALL statements are not written into the binary log. Instead each statement executed in a stored procedure is binary logged separately, with the exception that the query string is modified so that uses of stored procedure local variables are replaced with NAME_CONST('spvar_name', 'spvar-value') calls. DDL statements (which are always binary logged in statement binary log mode irrespective of the current binary log format) can also use stored procedure local variables and a clash could cause them to not be replicated correctly. The fix ensures that any stored procedure local variables used in a query are replaced with NAME_CONST(...), except for the case when it is a DML query and the binary log format is ROW. (Bug #77288, Bug #21229951)
  • Replication: DROP TABLE statements are regenerated by the server before being written to the binary log. If a table or database name contained a non-regular character, such as non-latin characters, the regenerated statement was using the wrong name, breaking replication. The fix ensures that in such a case the regenerated name is correctly converted back to the original character set. Also during work on this bug, it was discovered that in the rare case that a table or database name contained 64 characters, the server was throwing an assert(M_TBLLEN < 128) assertion. The assertion has been corrected to be less than or equal 128. (Bug #77249, Bug #21205695)
  • References: See also Bug #78036, Bug #22261585, Bug #21619371.
  • Replication: Irrespective of the current binlog_format setting, DDL that changes metadata on a master is always identified and written to the binary log in STATEMENT format. Such DDL could occur from event based SQL statements, such as CREATE EVENT or DROP EVENT, or transactions that had unsafe functions such as sysdate(). When binlog_format=MIXED and attempting to replicate such DDL, it was not being correctly identified and therefore was not being correctly replicated. (Bug #71859, Bug #19286708)
  • The System-V initialization script for RHEL6 or older failed to enable the mysqld service by default. (Bug #22600974)
  • Some activations of triggers that referenced a NEW value inside a query might cause a server exit. (Bug #22377554)
  • Parsing the output of ST_GeometryType() as a DATETIME value with a default character set of utf32 caused a server exit. (Bug #22340858)
  • For a character set loaded from an XML file, the server could fail to properly initialize its state map, leading to a server exit. (Bug #22338946)
  • Inserting a token of 84 4-byte characters into a full-text index raised an assertion. The maximum token length was 84 characters up to a maximum of 252 bytes, which did not account for 4-byte characters. The maximum byte length is now 336 bytes. (Bug #22291765, Bug #79475)
  • For some combination of consumers, the Performance Schema prepared statement instrumentation could cause a server exit. (Bug #22291560)
  • If a client attempted to use an unsupported client character set (ucs2, utf16, utf32), the error message reported to the client differed for SSL and non-SSL connections. (Bug #22216715)
  • Data corruption or a server exit could occur if a stored procedure had a variable declared as TEXT or BLOB and data was copied to that variable using SELECT ... INTO syntax from a TEXT or BLOB column. (Bug #22203532, Bug #22232332, Bug #21941152)
  • For debug builds, with the ONLY_FULL_GROUP_BY SQL mode disabled, the optimizer could attempt to sort on outer references, causing an assertion to be raised. (Bug #22200984)
  • Different handling of YEAR values for INSERT and SELECT could raise an assertion when such values were used in a generated-column expression. (Bug #22195458)
  • For debug builds, for queries involving MIN() or MAX() on an indexed column and a reference to an unindexed datetime column, the optimizer could attempt to access unread values, causing an assertion to be raised. (Bug #22186926)
  • Geohash decoding (for example, for ST_LongFromGeoHash(), ST_LatFromGeoHash(), and ST_PointFromGeoHash()) could yield incorrect results due to the rounding algorithm being too aggressive. (Bug #22165582)
  • In debug builds, with READ UNCOMMITTED transaction isolation level, a SELECT reading a generated column using an index could raise an assertion. (Bug #22133710)
  • For generated columns, the optimizer could fail to establish the proper table reference, resulting in a server exit. (Bug #22132822)
  • For some combination of consumers, the Performance Schema file instrumentation could fail due to an attempt to use a NULL pointer while instrumenting temporary file I/O. (Bug #22130453)
  • The Performance Schema could raise an assertion based on the (incorrect) assumption that instrumenting a temporary file open operation always resulted in an instrumented file. (Bug #22118669)
  • An ALTER TABLE statement that added an index on a virtual generated column using the INPLACE algorithm did not properly report warnings (or errors in strict SQL mode) for problems with virtual column values. Any subsequent ALTER TABLE on the same table using the COPY algorithm produced such warnings (or failures in strict SQL mode) due to evaluating the problematic value, but left the connection in a state that made further INPLACE alterations on the table fail for the same reason. (Bug #22095783)
  • If the left expression of an IN expression was a row subquery that accesses no tables, an assertion could be raised (in debug builds), or incorrect results could be returned (in release builds). (Bug #22089623)
  • Expressions that match an indexed generated column may be replaced with the generated column by the optimizer to enable use of the associated index. However, this optimization was not performed for single-table update and delete statements. The optimizer now extends this replacement optimization to such statements. (Bug #22077611)
  • ANSI SQL mode could cause inconsistencies in processing of generated column expressions. (Bug #22018979)
  • Removal of server session plugins was faulty and could cause a server exit. (Bug #21983102)
  • For some queries, if the optimizer used Disk-Sweep Multi-Range Read optimization on generated columns, the server could exit. (Bug #21980430)
  • mysqlpump tries to do as much work in parallel as possible, but the dump threads lacked a synchronization point before backing up the data, resulting in inconsistent backup. mysqlpump now locks the server and flushes all the tables using FLUSH TABLES WITH READ LOCK to ensure that any further connections view the same state of all the databases.
  • This change lifts the restriction aginst the --single-transaction option being mutually exclusive with parallelism. When using --single-transaction, it is no longer necessary to disable parallelism by setting --default-parallelism to 0 and not using any instances of --parallel-schemas. (Bug #21980284)
  • A fault in pthread_rwlock_unlock() wherein it decremented the lock counter even for already unlocked objects could result in deadlock. (Bug #21966621)
  • The Performance Schema could acquire a double lock on session system variables, causing a server hang or (in debug builds) an assertion to be raised. (Bug #21935106)
  • Certain queries containing WHERE 0 of the following form could cause a server exit due to uninitialized reads: SELECT (SELECT col AND constant FROM t WHERE 0) IN (SELECT constant FROM t1). (Bug #21922202)
  • CREATE TEMPORARY TABLE .. SELECT statements involving BIT columns that resulted in a column type redefinition could cause a server exit or an improperly created table. (Bug #21902059)
  • For UPDATE operations on InnoDB tables, there could be a mismatch between the value of a virtual generated column in the index and the value in the “before” buffer, resulting in a server exit. (Bug #21875520)
  • With character_set_server=utf16le, some values of ft_boolean_syntax could cause a server exit for full-text searches. (Bug #21631855)
  • With gtid_mode=ON, concurrent execution of SHOW TABLE STATUS and REVOKE ALL PRIVILEGES could lead to deadlock in there was a view in the database and REVOKE ALL PRIVILEGES failed for some but not all of the named users. (Bug #21463167)
  • mysqlpump could exit due to incorrect synchronization of view-handling threads during dump processing. (Bug #21399236, Bug #21447753)
  • With LOCK TABLES in force, an attempt to open a temporary MERGE table consisting of a view in its list of tables (not the last table in the list) caused a server exit. (Bug #20691429)
  • For certain prepared statements, the optimizer could transform join conditions such that it used a pointer to a temporary table field that was no longer available after the initial execution. Subsequent executions caused a server exit. (Bug #19941403)
  • Repeated execution of ALTER TABLE v1 CHECK PARTITION as a prepared statement, where v1 is a view, led to a server exit.
  • In addition, output for some administrative operations, when they are attempted on a view, changes from “Corrupt” to “Operation failed”. These include ANALYZE TABLE, OPTIMIZE TABLE, and REPAIR TABLE, and ALTER TABLE statements that perform ANALYZE PARTITION, CHECK PARTITION, OPTIMIZE PARTITION, and REPAIR PARTITION operations. (Bug #19817021)
  • Valgrind detected some possibly unsafe use of string functions in code used for asymmetric encryption. (Bug #19688135)
  • An out-of-memory failure in join buffer allocation could lead to incorrect results for multiple-table queries. (Bug #19031409)
  • SSL connections ignored any change made by passing the MYSQL_OPT_READ_TIMEOUT option to the mysql_options() C API function. (Bug #17618162)
  • For ALTER TABLE statements, the parser did not support the ALGORITHM clause for some operations involving tablespaces or partitions. (Bug #17400320)
  • Debian packages create the root user account using the auth_socket authentication plugin to achieve secure-by-default installation if installation was done with a blank root password. However, auth_socket was being used even if the password was not blank. (Bug #80137, Bug #22594846)
  • Solaris packages failed to note the dependency of the MySQL client library on the libstlport library. (Bug #79778, Bug #22504264)
  • Thread handle resource leakage could occur when creating threads for handling connections on Windows, which could lead to Windows servers eventually running out of handles. (Bug #79714, Bug #22455198)
  • Using systemd to start mysqld failed if configuration files contained multiple datadir lines. Now the last datadir line is used. (Bug #79613, Bug #22361702)
  • A derived table contained in the SET clause of an UPDATE statement should be materialized to avoid an error about updating a table that is also read in the same statement. Materialization did not occur for some statements, leading to that error. (Bug #79590, Bug #22343301)
  • MySQL 5.7.8 prohibited references to select list columns of the outer query from the HAVING clause of a correlated subquery in the inner query because they are not permitted by standard SQL. However, because this is a frequently used extension, it is once again permitted. (Bug #79549, Bug #22328395)
  • References: This bug was introduced by Bug #19823076.
  • Installing just shared libraries, clients, and development support files failed to install everything needed to build client applications because the binary_log_types.h header file was not installed. (Bug #79531, Bug #22321338)
  • SHOW CREATE TRIGGER could fail to display all applicable SQL modes. (Bug #79526, Bug #22313133)
  • On SELinux, mysqld --initialize with an --init-file option could fail to initialize the data directory. (Bug #79442, Bug #22314098, Bug #79458, Bug #22286481)
  • Syntax checks were not always performed when an ALTER TABLE statement changed a column's type from TEXT to JSON. This could lead to JSON columns containing invalid JSON data. This issue was observed when the original TEXT column used the utf8mb4_bin collation. (Bug #79432, Bug #22278524)
  • Hexadecimal and bit literals written to saved view definitions could be truncated. This could also affect extended EXPLAIN output. (Bug #79398, Bug #22268110)
  • ST_Buffer() returned an error for geometries with an SRID different from 0. Nonzero SRID values now are permitted but ignored (calculations are still done using Cartesian coordinates). (Bug #79394, Bug #22306745)
  • A regression caused failure of the workaround at Restrictions on Subqueries for avoiding ER_UPDATE_TABLE_USED errors when referencing the same table in a subquery as was used as target for an UPDATE or DELETE statement. (Bug #79333, Bug #22239474)
  • Statements causing multiple parse errors could cause an assertion to be raised. (Bug #79303, Bug #22222013)
  • Some queries with derived tables perform better with materialization than when merged into the outer query. The optimizer no longer uses merging by default for derived tables containing dependent subqueries in the select list. (Bug #79294, Bug #22223202)
  • ALTER USER and SET PASSWORD did not work at server startup when invoked in the file named using the --init-file option. (Bug #79277, Bug #22205360)
  • When not in strict SQL mode, attempts to implicitly insert NULL into a NOT NULL column resulted in different behavior depending on whether the table had a trigger. (Bug #79266, Bug #22202665)
  • Some replication-only code was not protected with #ifdef and failed to compile with the WITH_UBSAN CMake option enabled. (Bug #79236, Bug #22190632)
  • Configuring MySQL with the -DWITH_UBSAN=ON CMake option resulted in spurious runtime warnings from comp_err. These are now suppressed. Also, a CMake warning was added that undefined behavior address sanitizer support is currently experimental. (Bug #79230, Bug #22190656)
  • INSERT INTO ... SELECT statements could insert values other than DEFAULT into generated columns. (Bug #79204, Bug #22179637)
  • With the derived_merge flag of the optimizer_switch system variable enabled, queries that used a derived table on the inner side of an outer join could return incorrect results. (Bug #79194, Bug #22176604)
  • Memory leaks in libmysqld were corrected. (Bug #79187, Bug #22174219)
  • FOUND_ROWS() could return a negative value if the preceding query was a UNION involving SQL_CALC_FOUND_ROWS and LIMIT ... OFFSET. (Bug #79131, Bug #22155786)
  • IN-to-EXISTS subquery transformation could cause SELECT NULL IN (subquery) to return 0 rather than NULL.
  • IN-to-EXISTS subquery transformation could yield incorrect results for queries for which the table was nonempty, the subquery on the left side of the IN predicate produced an empty result, and semi-join optimization was disabled. (Bug #78946, Bug #22090717, Bug #19822406)
  • The result from WEIGHT_STRING() could be incorrect when used in a view. (Bug #78783, Bug #21974321)
  • If server was started with --thread-handling=no-threads, no foreground thread was created for a client connection. The Performance Schema did not account for the possibility of no foreground threads for queries on the session_connect_attrs table, causing an assertion to be raised. (Bug #78292, Bug #21765843)
  • mysqlpump generated incorrect INSERT statements for tables that had generated columns. (Bug #78082, Bug #21650559)
  • ALTER TABLE ... CONVERT TO CHARACTER SET operations that used the INPLACE algorithm were ineffective if the table contained only numeric data types. Also, such operations failed to clean up their temporary .frm file. (Bug #77554, Bug #21345391)
  • Heavy SHOW PROCESSLIST or SELECT ... FROM INFORMATION_SCHEMA.PROCESSLIST activity could result in the server accepting more than max_connections connections. (Bug #75155, Bug #20201006)
  • When used with the libmysqld embedded server, the mysql_stmt_execute() C API function failed with a malformed communication packet error, even for simple prepared statements. (Bug #70664, Bug #17883203)
  • Queries using SUM(DISTINCT) could produce incorrect results when there were many distinct values. (Bug #56927, Bug #11764126, Bug #79648, Bug #22370382)

New in MySQL 5.7.10 (Dec 7, 2015)

  • SECURITY NOTES:
  • Previously, MySQL supported only the TLSv1 protocol for encrypting secure connections. TLS support is now extended to enable a higher level of encrypted connection security: when compiled using OpenSSL 1.0.1 or higher, MySQL supports the TLSv1, TLSv1.1, and TLSv1.2 protocols; when compiled using the bundled version of yaSSL, MySQL supports the TLSv1 and TLSv1.1 protocols.
  • Because TLSv1.2 requires OpenSSL, support for this protocol is available in binary distributions only for MySQL Commercial Server, and not for MySQL Community Server (which is compiled using yaSSL). To enable TLSv1.2 support if you build from source, you must set the WITH_SSL CMake option to use OpenSSL.
  • The tls_version system variable enables specifying at startup the TLS protocols permitted by the server. On the client side, the --tls-version option enables specifying the TLS protocols permitted per client invocation.
  • The mysql_options() C API function has a new MYSQL_OPT_TLS_VERSION option that enables specifying from within the client library the TLS protocols permitted by a client program.
  • By default, MySQL attempts to use the highest TLS protocol version available, depending on which SSL library was used to compile the server and client, which key size is used, and whether the server or client are restricted from using some protocols by means of tls_version/--tls-version.
  • For more information, see Secure Connection Protocols and Ciphers.
  • FUNCTIONALITY ADDED OR CHANGED:
  • InnoDB: Enabling the new innodb_background_drop_list_empty debug configuration option helps avoid test case failures by delaying table creation until the background drop list is empty. (Bug #21891560)
  • InnoDB: The innodb_support_xa system variable, which enables support for two-phase commit in XA transactions, is deprecated. InnoDB support for two-phase commit in XA transactions is always enabled as of MySQL 5.7.10. Disabling innodb_support_xa is no longer permitted as it makes replication unsafe and prevents performance gains associated with binary log group commit.
  • MySQL distributions now include lz4_decompress and zlib_decompress utilities that can be used to decompress mysqlpump output that was compressed using the --compress-output=LZ4 and --compress-output=ZLIB options. For more information, see lz4_decompress — Decompress mysqlpump LZ4-Compressed Output, and zlib_decompress — Decompress mysqlpump ZLIB-Compressed Output. (Bug #21644479)
  • mysql_upgrade now attempts to print more informative errors than FATAL ERROR: Upgrade failed. (Bug #21489398)
  • These client programs now support the --enable-cleartext-plugin option: mysqlcheck, mysqldump, mysqlimport, mysqlshow. This option enables the mysql_clear_password cleartext authentication plugin. (See The Cleartext Client-Side Authentication Plugin.) (Bug #21235226)
  • These functions now produce warnings for invalid input: UNHEX(), INET_NTOA(), INET_ATON(), INET6_NTOA(), INET6_ATON(). Also, INET_ATON() now returns NULL and produces a warning for arguments that contain more than four groups of digits. (Bug #78856, Bug #22042027, Bug #78884, Bug #22071558)
  • BUGS FIXED:
  • InnoDB: When attempting to create a cascading foreign key constraint on a primary key column used in a virtual index, the error message that was returned did not include information from dict_foreign_has_col_in_v_index(). (Bug #22050059)
  • InnoDB: An in-place operation that rebuilt a table with multiple indexed virtual columns raised an assertion. (Bug #22018532)
  • InnoDB: A SELECT ... FOR UPDATE operation on a table that only contained virtual columns and a virtual column index raised an invalid assertion. (Bug #21981164, Bug #21880930)
  • InnoDB: The calculation in dict_index_node_ptr_max_size() that determines the maximum index record size treated fixed fields that exceeded the maximum column length as fixed-size fields instead of variable length fields. (Bug #21968191)
  • InnoDB: A server exit during a TRUNCATE TABLE operation on a table with a full-text index caused startup to fail. (Bug #21959479)
  • InnoDB: An ALTER TABLE ... DISCARD TABLESPACE operation raised an invalid assertion. (Bug #21957001, Bug #78728)
  • InnoDB: Compared to previous releases, small tablespaces containing tables with BLOB values had larger data files due to regression introduced in MySQL 5.7.5. (Bug #21950389, Bug #78623)
  • References: This bug is a regression of Bug #18756233.
  • InnoDB: The ord_part flag was not reset after a failed operation to create an index on a virtual column, causing InnoDB to assert on a subsequent insert operation. (Bug #21941320, Bug #21979969)
  • InnoDB: Successive open table operations on tables with virtual columns caused a memory access violation. (Bug #21939731)
  • InnoDB: An invalid search tuple was created for a table with virtual columns. (Bug #21922176)
  • InnoDB: InnoDB attempted to purge a virtual column index record that was not marked for deletion. (Bug #21901389)
  • InnoDB: Update vector generation for a full-text search DOC_ID did not initialize a new ufield, resulting in an assertion. (Bug #21891185)
  • InnoDB: InnoDB failed to prevent foreign key SET NULL or CASCADE constraints on virtual column base columns and virtual index columns. (Bug #21890816)
  • InnoDB: An invalid comparison raised an assertion under a 64k innodb_page_size setting. (Bug #21882024)
  • InnoDB: When estimating the maximum record size of a b-tree index page, InnoDB incorrectly treated long-length fixed fields (greater than 767 bytes) as fixed-size fields instead of variable length fields. (Bug #21880445)
  • InnoDB: In debug builds, dtuple_get_n_fields attempted to read freed memory that was previously allocated for a virtual column tuple, resulting in a server exit. (Bug #21875974)
  • InnoDB: Selecting from INNODB_CMPMEM with option big-tables=1 raised a buffer pool mutex assertion. (Bug #21871451, Bug #78494)
  • InnoDB: InnoDB returned an invalid corruption-related error message during an IMPORT TABLESPACE operation. (Bug #21838158, Bug #77321)
  • InnoDB: After a crash on Windows, copying the data directory to a non-Windows platform to perform the restore caused a crash recovery failure on startup. The code did not convert file path separators from “\” to “/” in the redo log. (Bug #21825127, Bug #78410)
  • InnoDB: A FLUSH TABLE ... FOR EXPORT operation asserted in row_quiesce_table_start() when run on a partitioned table with partitions residing in a system or general tablespace. (Bug #21796845)
  • InnoDB: A DROP TABLE operation resulted in a server exit. The return value of a function call was not checked, which lead to dereferencing of a null pointer. The patch for this bug also addresses a potential race condition. (Bug #21794102, Bug #78336)
  • InnoDB: In debug builds, an ordered scan across multiple partitions did not use a priority queue, resulting in an assertion. (Bug #21753477)
  • InnoDB: After restarting the server, the COMPRESSION column of the INNODB_SYS_TABLESPACES table displayed incorrect data. The COMPRESSION column was removed from INNODB_SYS_TABLESPACES. To view the current setting for page compression, use SHOW CREATE TABLE. (Bug #21687636, Bug #78197)
  • InnoDB: An invalid table flags value raised an assertion. The SYS_TABLES.MIX_LEN(flags2) value was not read for tables that use ROW_FORMAT=REDUNDANT. (Bug #21644827)
  • InnoDB: An online ALTER TABLE operation caused a server exit. (Bug #21640679)
  • InnoDB: An assertion was raised when crash recovery handling of an MLOG_TRUNCATE redo log record treated a shared tablespace as a file-per-table tablespace. Redo was skipped for the shared tablespace. (Bug #21606676)
  • InnoDB: Transaction rollback after recovery failed due to an invalid assertion. (Bug #21575121)
  • InnoDB: Insufficient information in the undo log about spatial columns raised an assertion and could result in a upgrade failure. Consequently, a slow shutdown is required prior to performing an in-place upgrade from MySQL 5.7.8 or 5.7.9 to 5.7.10 or higher. For more information, refer to Changes Affecting Upgrades to MySQL 5.7. (Bug #21508582)
  • References: This bug is a regression of Bug #21340268.
  • InnoDB: A secondary index is not permitted on a virtual column that is based on a foreign key-referenced column that uses ON DELETE CASCADE, ON DELETE SET NULL, ON UPDATE CASCADE, or ON UPDATE SET NULL. The restriction was not enforced. (Bug #21508402)
  • InnoDB: A duplicate key error that occurred during an online DDL operation reported an incorrect key name. (Bug #21364096, Bug #77572)
  • InnoDB: An ALTER TABLE operation caused the server to exit on disk full. (Bug #21326304, Bug #77497)
  • InnoDB: The system tablespace data file did not extend automatically when reaching the file size limit, causing startup to fail with a size mismatch error and preventing the addition of another system tablespace data file. (Bug #21287796, Bug #77128)
  • InnoDB: Altering the letter case of a column introduced an inconsistency between the frm file and data dictionary resulting in a failed CREATE INDEX operation on the altered column. (Bug #20755615)
  • InnoDB: An ALTER TABLE operation that converted a table to an InnoDB file-per-table tablespace did not check for unknown files with the same name as the destination .idb file, permitting an unknown file of the same name to be overwritten. (Bug #19218794, Bug #73225)
  • InnoDB: row_merge_read_clustered_index() did not handle a bulk load error correctly. (Bug #19163625)
  • Partitioning: Partition scans did not evaluate virtual generated columns properly. This could cause issues with partitioned tables having an index on a virtual BLOB column. (Bug #21864838, Bug #21881155)
  • Partitioning: While executing CHECK TABLE, when checking whether rows were in the correct partition, the partition engine missed updates for virtual generated columns. (Bug #21779554)
  • Partitioning: Performing an in-place ALTER TABLE on a partitioned InnoDB table having one or more partitions which used a separate tablespace could cause the server to fail. (Bug #21755994)
  • Partitioning: When all partitions were pruned, they were not initialized for scanning during initialization of indexes. This involved two related issues, one being that the active index was not set back to the maxmimum key value when the index was closed. In addition, when this occurred as part of a multi-range read, there were attempts to access unset variables. (Bug #78260, Bug #21754608, Bug #21620577)
  • Replication: On a multi-threaded slave configured with master_info_repository=TABLE and relay_log_info_repository=TABLE which had previously been run with autocommit=1, if the slave was stopped and autocommit changed to 0, executing START SLAVE caused the session to appear to hang. After the lock wait timeout, when START SLAVE proceeded the server would stop unexpectedely. The fix ensures that when master_info_repository=TABLE, relay_log_info_repository=TABLE, and autocommit=0 a new transaction is generated for start and commit to avoid deadlocks. (Bug #21440793)
  • Replication: Fatal errors encountered during flushing or synchronizing the binary log were being ignored. Such errors are now caught and handled depending on the setting of binlog_error_action. (Bug #76795, Bug #68953, Bug #20938915, Bug #16666407)
  • INSERT ... ON DUPLICATE KEY UPDATE could result in a memory leak when executed as a prepared statement. (Bug #22151233)
  • References: This bug was introduced by Bug #21908206.
  • If the server was started with --performance_schema_accounts_size=0, querying the Performance Schema status variable tables caused a server exit. (Bug #22131713)
  • For debug builds, using ALTER TABLE to add a generated column to a table could cause a deadlock. (Bug #22083048)
  • Some of the source files for spatial functions in the sql directory took excessive compile time and required too much compiler memory allocation. (Bug #22078874)
  • Internal buffer sizes in resolve_stack_dump were increased to accommodate larger symbol space requirements for C++ code. (Bug #22071592)
  • The systemd unit file did not specify any --pid-file option for mysqld, with the result that server startup could fail. The unit file now includes a default --pid-file option in the ExecStart value. This default can be overridden in the override.conf file by changing both PIDFile and ExecStart to specify the PID file path name. (Bug #22066787)
  • A query with nested derived tables and scalar subqueries in the select list of the derived tables might in some cases cause a server exit. (Bug #22062023)
  • When mysqld was run with --initialize, it used chown() to set the data directory owner, even if ownership was already correct. This caused problems for AppArmor and SELinux. The server now checks whether the data directory owner is correct and skips the chown() call if so. (Bug #22041387)
  • Failed evaluation of a generated column expression for CREATE TABLE or ALTER TABLE could cause a server exit. Now if expression evaluation causes truncation or provides incorrect input to a function, the statement terminates with an error and the DDL operation is rejected. (Bug #22018999)
  • Creating a unique index on a virtual POINT column could result in an error or assertion for later table accesses. (Bug #22017616)
  • Problems leading to Valgrind warnings for libmysqld were corrected. (Bug #22007587)
  • Sending a load spike to a newly started server could cause the Performance Schema to allocate a large amount of memory, possibly leading to out-of-memory failure. (Bug #22006088)
  • MySQL development RPM packages could fail to install if MySQL Connector/C development RPM packages were installed. (Bug #22005375)
  • A missing error check could result in a server exit for DELETE statements that referred to user-defined variables. (Bug #21982313)
  • Possible buffer overflow from incorrect use of strcpy() and sprintf() was corrected. (Bug #21973610)
  • MySQL RPM packages for RHEL5 failed to create the mysql system user. (Bug #21950975)
  • MySQL does not support columns of ROW type, but the server did not prevent generated columns from being created that used ROW expressions. These are now prohibited. (Bug #21940542)
  • The version_tokens plugin called the locking service using a timeout value of only one second. The timeout is now taken from the default value of the lock_wait_timeout system variable (that is, one year). (Bug #21928198)
  • Spatial functions could return invalid results if given a polygon or multipolygon argument containing holes such that a hole vertex touched the exterior ring at a point lying in the interior of an exterior ring segment. This could manifest itself as: ST_UNION() producing an invalid polygon; ST_SymDifference() producing an invalid multipolygon; ST_Intersection() producing an invalid self-intersecting polygon; ST_Difference() producing an invalid geometry. (Bug #21927733, Bug #21927639, Bug #21927558, Bug #21977775)
  • With the STRICT_TRANS_TABLES SQL mode enabled, it was not possible to insert data into a VIRTUAL generated column defined with the NOT NULL attribute. (Bug #21927469)
  • Problems leading to Valgrind warnings for OpenSSL random number generation were corrected. (Bug #21927436)
  • Querying views on Windows could lead to memory leaks. (Bug #21908206)
  • References: This bug was introduced by Bug #13901905.
  • Generated column definitions specified with the NULL attribute resulted in a syntax error. (Bug #21900170)
  • A stored procedure that used ST_Area() could return different numbers of rows for the first and second executions. (Bug #21889842)
  • For polygon values with an interior ring that touches an exterior ring, ST_Buffer() could return invalid polygon values. (Bug #21871856)
  • Two rows in the Performance Schema threads table could have the same THREAD_OS_ID value. (Bug #21865330)
  • For debug builds, using ALTER TABLE to change the expression for a generated column could cause a server exit. (Bug #21854004)
  • ALTER USER failed if the server was started with --skip-grant-tables. (Bug #21847825)
  • Performance Schema reads of a session's THD structure while the session was running could create race conditions and result in a server exit. (Bug #21841412)
  • A prepared statement that computes ST_IsSimple() or ST_Buffer_Strategy() on a nullable column in an outer join could return different numbers of rows for the first and second statement executions. (Bug #21841051)
  • Queries on the Performance Schema variables_by_thread table could cause a server exit when examining the system variables of a new connection. (Bug #21840950)
  • Executing HELP statements or statements involving the CONVERT_TZ() function could lead to a memory leak and to MyISAM reference-count errors at server shutdown. (Bug #21840241)
  • Spatial functions could read already freed memory. (Bug #21823135)
  • For Debian package control files, libnuma-dev was added to Build-Depends to enable NUMA support. (Bug #21822631)
  • Selecting DECIMAL values into user-defined variables could cause a server exit. (Bug #21819304)
  • Re-evaluation of a generated column expression could cause access to previously freed memory and a server exit. (Bug #21810529)
  • MySQL did not recognize functional dependencies from base columns in a generated column expression to the generated column. (Bug #21807579)
  • ST_SymDifference() could raise an assertion for polygons with self-intersection points. (Bug #21767301, Bug #79031, Bug #22124757)
  • USER field output from the audit log plugin was malformed. (Bug #21766380)
  • A server exit could occur for queries for which a) a GROUP BY included primary key and secondary key columns; and b) the WHERE clause included an equality predicate on the first primary key column where that column was constant. (Bug #21761044)
  • Building MySQL using parallel compilation sometimes failed with an attempt to compile sql_yacc.yy before lex_token.h had been created. (Bug #21680733)
  • With binary logging enabled, issuing DROP TEMPORARY TABLE when in XA_IDLE state caused an assertion to be raised. Now an ER_XAER_RMFAIL error is returned.
  • In consquence of the fix for this issue, statements that previously succeeded in XA_IDLE state now fail with an ER_XAER_RMFAIL error. When running with --gtid-mode=ON, an explicit DROP continues to fail with ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION. (Bug #21638823)
  • A query with a subquery in the left-hand part of an IN subquery that was transformed into a semi-join might cause a server exit. (Bug #21606400)
  • Concurrent FLUSH PRIVILEGES and REVOKE or GRANT statements could produce a small time window during which invalid memory access to proxy user information could occur, leading to a server exit. (Bug #21602056)
  • Using WITH ROLLUP within a subquery could cause a server exit. (Bug #21575790)
  • For debug builds, a call to MAKE_SET() with a subquery as argument might be evaluated before tables were locked, causing an assertion to be raised. (Bug #21547779)
  • Starting the server with the query_alloc_block_size system variable set to certain negative values on a machine without enough memory could result in out-of-memory errors. (Bug #21503595)
  • Using UNINSTALL PLUGIN to uninstall the daemon_example plugin could cause a server exit. (Bug #21467458)
  • FLUSH DES_KEY_FILE failed to reload the DES key file. (Bug #21370329)
  • If an error occurred during the setup phase of subquery materialization used to compute an IN predicate, cleanup of the temporary table did not happen, leading to Valgrind errors. (Bug #21346081)
  • On Windows, the sysbench benchmark tool's "run" command would hang when attempting to create multiple tables for the OLTP test when using shared memory connections. (Bug #21319192, Bug #77481)
  • Queries rejected by MySQL Enterprise Firewall were truncated to 512 characters when written to the error log. (Bug #20948270)
  • A server exit could occur for the second execution of a prepared statement for which an ORDER BY clause referred to a column position. (Bug #20755389)
  • Repeated execution of a prepared statement could cause a server exit if the default database was changed. (Bug #20447262)
  • mysql_plugin could exit due to improper checking of string operation operands. (Bug #20376670)
  • After failure to create a temporary table during join processing and releasing the table descriptor, an attempt to access the now-invalid descriptor could cause a server exit. (Bug #19918299)
  • Type conversion failure for DECIMAL values could cause a server exit. (Bug #19912326, Bug #20013538)
  • INSERT DELAYED could cause a server exit for tables partitioned with a character column as the key and for which the expression required a character set conversion. (Bug #19894161)
  • A server exit could occur when updating a view using an ALL comparison operator on a subquery that selects from an indexed column in the main table. (Bug #19434916)
  • With AddressSanitizer (ASAN) enabled, triggers that contained null or invalid characters could cause an ASAN server exit. (Bug #18831513)
  • Incorrect error checking for the NAME_CONST() function could lead to a server exit. (Bug #17733850)
  • Queries that needed to store the result of ST_AsWKB() in a temporary table could fail with an error message. (Bug #79060, Bug #22131961)
  • References: This bug was introduced by Bug #21614368.
  • If mysqld was started with the --help option, it created a binary log index file. If that file was located in the data directory and the command preceded data directory initialization, initialization then failed due to a nonempty data directory. (Bug #78986, Bug #22107047)
  • mysqladmin --help displayed the old-password command, even though the command itself was removed in MySQL 5.7.5. (Bug #78774, Bug #21972941)
  • The filename character set is intended for internal use, but references to it in SQL statements did not produce an error. Now they do. (Bug #78732, Bug #21958734)
  • If a generated column used an expression that is affected by the SQL mode, the expression could produce different results for the same input values, depending on the current SQL mode. (For example, interpretation of the || operator depends on the PIPES_AS_CONCAT SQL mode.) Now expression evaluation uses the SQL mode in effect at the time the column is defined. (Bug #78665, Bug #21929967)
  • Casting large hexadecimal values could produce an incorrect result and no truncation warning. (Bug #78641, Bug #21922414)
  • mysqlpump generated incorrect ALTER TABLE statements for adding foreign keys. (Bug #78593, Bug #21907297)
  • The error message returned when trying to define a BLOB, TEXT, JSON, or GEOMETRY column with a default value (Error 1101, ER_BLOB_CANT_HAVE_DEFAULT) referred to BLOB and TEXT columns only. The same error applies to any of these four types when trying to use the DEFAULT option with it in a column definition; the corresponding error message now makes this clear by referring to JSON and GEOMETRY columns as well. (Bug #78527, Bug #21887035)
  • A query using JSON_EXTRACT() returned the wrong result after a virtual index was added to the table. (Bug #78464, Bug #21854241)
  • It was possible to store non-ASCII data in columns intended to store data of character set ascii. (Bug #78276, Bug #21774967)
  • Adding a SPATIAL index to a MyISAM table could cause the cardinality of other indexes to become incorrect. (Bug #78213, Bug #21789000)
  • MySQL could fail to compile on Solaris 11.3 when /usr/gnu/bin/as was used as the linker. (Bug #77797, Bug #21484716)
  • Some punctuation characters in the armscii8 character set are represented by two encodings, with the result that a character stored using one encoding would not be found using a search with the other encoding. For such characters, MySQL now selects the encoding with the lowest value to consistently map instances onto the same encoding. (Bug #77713, Bug #21441405)
  • Item_copy_decimal::copy() did not take the div_precision_increment system variable value into account, resulting in DECIMAL values being returned with incorrect precision from some queries. (Bug #77634, Bug #21462523)
  • For queries with implicit grouping; an index with a string column as its first part; and a WHERE clause with an equality comparison comparing the column to a string with trailing characters in addition to the column value, an aggregate function that should return NULL returned non-NULL. (Bug #77480, Bug #21318711)
  • LOAD_FILE() could cause a server exit for some pathnames if the character set was cp932. (Bug #76555, Bug #20819220)
  • For constructs such as ORDER BY numeric_expr COLLATE collation_name, the character set of the expression was treated as latin1, which resulted in an error if the collation specified after COLLATE is incompatible with latin1. Now when a numeric expression is implicitly cast to a character expression in the presence of COLLATE, the character set used is the one associated with the named collation. (Bug #73858, Bug #20425399)

New in MySQL 5.7.9 (Oct 21, 2015)

  • Audit Log Plugin Notes:
  • Some events cannot be terminated. Previously, if an audit plugin returned nonzero status for a nonterminable event, the server ignored the status and continued processing the event. However, if an audit plugin used the my_message() function to terminate a nonterminable event, a server exit occurred. Now the server correctly handles termination of nonterminable events using my_message(). (Bug #21458066)
  • C API Notes:
  • Incompatible Change: The mysql_options() C API function has two new options, MYSQL_OPT_MAX_ALLOWED_PACKET and MYSQL_OPT_NET_BUFFER_LENGTH, that set the max_allowed_packet and net_buffer_length system variables, respectively. Each option name also now can be passed to the mysql_get_option() C API function to retrieve its value. For more information, see mysql_options(), and mysql_get_option().
  • The (undocumented) mysql_get_parameters() function has been removed. Applications that attempt to use it will get link errors and should be modified to use mysql_options() and mysql_get_option() instead. (Bug #20821550)
  • References: See also Bug #20686665.
  • Previously, it was necessary to call mysql_thread_end() for each mysql_thread_init() call to avoid a memory leak. C API internals have been reimplemented to reduce the amount of information allocated by mysql_thread_init() that must be freed by mysql_thread_end():
  • For release/production builds without debugging support enabled, mysql_thread_end() need not be called.
  • For debug builds, mysql_thread_init() allocates debugging information for the DBUG package (see The DBUG Package). mysql_thread_end() must be called for each mysql_thread_init() call to avoid a memory leak.
  • (Bug #20621281, Bug #21802367)
  • Compilation Notes:
  • MySQL distributions now contain a mysqlclient.pc file that provides information about MySQL configuration for use by the pkg-config command. This enables pkg-config to be used as an alternative to mysql_config for obtaining information such as compiler flags or link libraries required to compile MySQL applications. For more information, see Building C API Client Programs Using pkg-config.
  • A new INSTALL_PKGCONFIGDIR CMake option is available to specify the directory in which to install the mysqlclient.pc file. The default value is INSTALL_LIBDIR/pkgconfig, unless INSTALL_LIBDIR ends with /mysql, in which case that is removed first. (Bug #20637746)
  • Packaging Notes:
  • The shell and Perl versions of mysql_install_db have been removed from MySQL distributions. The executable C++ version of mysql_install_db implemented in MySQL 5.7.5 is still present, but remains deprecated (use mysqld --initialize instead) and will be removed in a future MySQL release. (Bug #21625471)
  • The deprecated _r versions of the libmysqlclient libraries are no longer installed. (Bug #21311067)
  • Performance Schema Notes:
  • Previously, the transaction instrument in the setup_instruments table was disabled by default, and the events_transactions_current and events_transactions_history consumers in the setup_consumers table were enabled by default. This setup is inconsistent, and having the consumers enabled could lead to the impression that transactions were instrumented by default. Now, the consumers are also disabled by default. To monitor transactions, enable the instrument and the applicable consumers. (Bug #21780891)
  • With the show_compatibility_56 system variable disabled, SHOW VARIABLES and SHOW STATUS statements failed if MySQL was compiled without Performance Schema support. Consequently, it is no longer possible to compile without the Performance Schema. If it is desired to compile without particular types of instrumentation, that can be done with the following CMake options:
  • For example, to compile without mutex instrumentation, configure MySQL using the -DDISABLE_PSI_MUTEX=1 option. (Bug #21669500)
  • Two changes were made regarding the effect of show_compatibility_56:
  • Previously, when show_compatibility_56=OFF, selecting from the following INFORMATION_SCHEMA system and status variable tables returned an empty result and a deprecation warning:
  • INFORMATION_SCHEMA.GLOBAL_VARIABLES
  • INFORMATION_SCHEMA.SESSION_VARIABLES
  • INFORMATION_SCHEMA.GLOBAL_STATUS
  • INFORMATION_SCHEMA.SESSION_STATUS
  • This caused confusion for applications that were not aware that such selects could be empty: An empty result and a warning was not sufficient notice to signal the need to migrate to the corresponding Performance Schema system and status variable tables.
  • To address this issue, selecting from the INFORMATION_SCHEMA system and status tables now produces an error, to make it more evident that an application is operating under conditions that require modification, as well as where the problem lies. The error code is ER_FEATURE_DISABLED_SEE_DOC. The error message indicates which table is disabled and that the show_compatibility_56 documentation should be consulted.
  • Previously, when show_compatibility_56=ON, selecting from the following Performance Schema status variable tables returned an empty result:
  • performance_schema.global_status
  • performance_schema.session_status
  • This made it more difficult to migrate applications from the INFORMATION_SCHEMA status variable tables to the corresponding Performance Schema tables: Successfully selecting from the Performance Schema tables required knowing both that the server is from MySQL 5.7 and that show_compatibility_56=OFF.
  • To address this issue, selecting from the Performance Schema status variable tables now produces the same result regardless of the value of show_compatibility_56. Thus, it is necessary to know only that the server is from MySQL 5.7.9 or higher. (If so, select from the Performance Schema tables. Otherwise, select from the INFORMATION_SCHEMA tables.)
  • For additional information about the effects of show_compatibility_56 and migration issues, see Server System Variables, and Migrating to Performance Schema System and Status Variable Tables. (Bug #21606701)
  • These Performance Schema tables now are world readable and accessible without the SELECT privilege: global_variables, session_variables, global_status, and session_status. An implication of this change is that SHOW VARIABLES and SHOW STATUS no longer require privileges on the underlying Performance Schema tables from which their output is produced when show_compatibility_56=OFF. (Bug #21251297)
  • With the show_compatibility_56 system variable enabled, the reported values of the Last_query_cost and Last_query_partial_plans status variables were incorrect.
  • With the show_compatibility_56 system variable disabled, the reported values of the Created_tmp_tables, Handler_external_lock, and Table_open_cache_% status variables were incorrect. (Bug #20483278, Bug #21788549, Bug #21788887)
  • The Performance Schema session_account_connect_attrs had mistakenly been changed to require the SELECT privilege. It requires no special privileges again. (Bug #77702, Bug #21436364)
  • References: This bug was introduced by Bug #14569746.
  • In the setup_timers table, a CYCLE timer for ARM64 platforms is now available. (Bug #77620, Bug #21374923)
  • The Performance Schema now includes these instruments for monitoring I/O on binary log and relay log cache files:
  • wait/io/file/sql/binlog_cache
  • wait/io/file/sql/binlog_index_cache
  • wait/io/file/sql/relaylog_cache
  • wait/io/file/sql/relaylog_index_cache
  • In addition, the default value of performance_schema_max_file_classes has been increased from 50 to 80. (Bug #76225, Bug #20675180)
  • The Performance Schema threads table now contains a THREAD_OS_ID column that indicates the thread or task identifier as defined by the underlying operating system. For example, the column value corresponds to the Process Explorer thread ID on Windows and the gettid() value on Linux. For more information, see The threads Table.
  • If you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate this change into the performance_schema database.
  • Plugin Notes:
  • The audit plugin API has been extensively revised to support a finer breakdown of the general event type (MYSQL_AUDIT_GENERAL_CLASS) into more specific events. This enables audit plugins to more precisely indicate the types of events in which they are interested and reduces overhead for plugins that have use for only a few event types. The API also now permits early termination of event execution. For more information, see Writing Audit Plugins. The general event type is still available but is deprecated and will be removed in a future MySQL release.
  • In addition, a security_context plugin service is now available. Audit plugins can use this service to examine or modify the security context of threads associated with audited events. See MySQL Services for Plugins.
  • Security Notes:
  • For RPM-based packages, the permissions used to create the data directory (/var/lib/mysql) have been changed from 755 to 751. This tightens the data directory permissions while still permitting world access to the mysql.sock file in that directory. (Bug #21066592)
  • Spatial Data Support:
  • The required version of the Boost library for server builds has been raised from 1.58.0 to 1.59.0. (Bug #21567456)
  • Spatial functions such as ST_MPointFromText() and ST_GeomFromText() that accept WKT-format representations of MultiPoint values now permit individual points within values to be surrounded by parentheses. For example, both of the following function calls are valid, whereas previously the second one produced an error:
  • ST_MPointFromText('MULTIPOINT (1 1, 2 2, 3 3)')
  • ST_MPointFromText('MULTIPOINT ((1 1), (2 2), (3 3))')
  • In addition, functions such as ST_AsText() and ST_AsWKT() that produce WKT-format results now display MultiPoint values with parentheses surrounding each point. (Bug #54065, Bug #11761559)
  • Schema Notes:
  • The sys schema included in MySQL distributions was updated to version 1.5.0. This includes new features and fixes for several issues:
  • sys schema objects now have a DEFINER of 'mysql.sys'@'localhost'. (Previously, the DEFINER was 'root'@'localhost'.) Use of the dedicated mysql.sys account avoids problems that occur if a DBA renames or removes the root account.
  • The following sys schema session views now provide progress reporting for long-running transactions.
  • The progress column of these views shows the percentage of work completed for stages that support progress reporting.
  • A new diagnostics() stored procedure enables DBAs and other support personnel to collect diagnostic information for investigating MySQL instances. A new metrics view and statement_performance_analyzer() stored procedure provide supporting infrastructure for the diagnostics() procedure.
  • The sys schema ps_is_instrument_default_enabled() and ps_is_instrument_default_timed() stored functions returned incorrect results in some cases.
  • The ENABLED and HISTORY columns that were added to the Performance Schema setup_actors table in earlier MySQL 5.7 releases caused the sys schema ps_setup_reset_to_default() stored procedure not to work.
  • Handing of event-timing information in the sys schema was updated to handle changes to Performance Schema event-timing columns in MySQL 5.7.8.
  • mysql_upgrade previously checked for an exact object-count value in the sys schema to determine whether an upgrade was needed. If local objects had been added, the resulting reinstallation removed those objects. Now it checks for at least the expected number of objects.
  • If you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade to incorporate these changes into the sys schema.
  • Thanks to Daniël van Eeden, Jesper Wisborg Krogh, Shlomi Noach, and Morgan Tocker for their contributions to this update. (Bug #78115, Bug #21647101, Bug #77927, Bug #21550271, Bug #78720, Bug #21966366)
  • Functionality Added or Changed:
  • Incompatible Change; InnoDB: To better manage redo log format changes, the redo log header of the first redo log file (ib_logfile0) now includes a format version identifier and a text string that identifies the MySQL version that created the redo log files.
  • A new boolean configuration option, innodb_log_checksums, replaces the innodb_log_checksum_algorithm option. innodb_log_checksums=ON enables a CRC-32C checksum, making it the only supported checksum for redo log pages.
  • This patch also removes unused fields from the redo log header and checkpoint pages.
  • Due to redo log format changes introduced by this patch, upgrading to or downgrading from MySQL 5.7.9 and higher requires a clean shutdown and, in some cases, removal of existing redo log files. For instructions related to this change, see Changes Affecting Upgrades to MySQL 5.7, and Changes Affecting Downgrades from MySQL 5.7. (Bug #21759424)
  • Important Change; InnoDB: DYNAMIC replaces COMPACT as the implicit default row format for InnoDB tables. A new configuration option, innodb_default_row_format, specifies the default InnoDB row format. Permitted values include DYNAMIC (the default), COMPACT, and REDUNDANT.
  • The COMPACT row format remained the default row format until this release to ensure compatibility with older versions of InnoDB in MySQL 5.1 and earlier. Now that MySQL 5.1 has reached the end of its product lifecycle, the newer DYNAMIC row format becomes the default. For information about advantages of the DYNAMIC row format, see DYNAMIC and COMPRESSED Row Formats.
  • Newly created tables use the row format defined by innodb_default_row_format when a ROW_FORMAT option is not specified explicitly or when ROW_FORMAT=DEFAULT is used.
  • Existing tables retain their current row format if a ROW_FORMAT option was specified explicitly. If a ROW_FORMAT option was not specified explicitly or if ROW_FORMAT=DEFAULT was used, any operation that rebuilds a table also silently changes the row format of the table to the format defined by innodb_default_row_format. For more information, see Specifying the Row Format for a Table.
  • Important Change: Introduced the -> JSON column-path operator. column->path is now supported as a synonym of JSON_EXTRACT(column, path), where column is a JSON column, and path is a valid JSON path.
  • An expression with ->, like its equivalent that uses JSON_EXTRACT() instead, can be used in place of a column identifier wherever the latter can occur within a valid SQL statement. For example, the following CREATE TABLE and SELECT statements are valid.
  • A column-path expression can be used for any column value that is read in a SELECT column list, or in a WHERE, ORDER BY, or GROUP BY clause in any SQL statement; such expressions cannot be used to set values.
  • When an SQL statement contains one or more expressions using -> notation, each of these is translated into an equivalent expression that employs the JSON_EXTRACT() function instead. This can be seen in the output from EXPLAIN when used on such a statement.
  • Like JSON_EXTRACT(), the -> operator returns as NULL if no matching value for an otherwise valid path is found.
  • For more information about -> and JSON_EXTRACT(), see Functions That Search JSON Values. See Searching and Modifying JSON Values, for information about JSON path support. See also Secondary Indexes and Virtual Generated Columns, for additionl information and examples.
  • InnoDB: A new INNODB_METRICS server operations counter (innodb_dict_lru_count) counts the number of tables evicted from the table cache LRU list. Thanks to Daniël van Eeden for the patch. (Bug #21682332, Bug #78190)
  • InnoDB: The new innodb_numa_interleave read-only configuration option allows you to enable the NUMA interleave memory policy for allocation of the InnoDB buffer pool. When innodb_numa_interleave is enabled, the NUMA memory policy is set to MPOL_INTERLEAVE for the mysqld process. After the InnoDB buffer pool is allocated, the NUMA memory policy is set back to MPOL_DEFAULT. This option is only available on NUMA-enabled systems.
  • MySQL distributions now include these header files because my_sys.h depends on them: my_thread_local.h, thr_cond.h, thr_mutex.h, thr_rwlock.h. (Bug #21909332)
  • MySQL Server RPM packages now obsolete MySQL Connector C. Installing MySQL Server causes older libmysqlclient from any MySQL Connector C packages to be removed and replaces them with the current libmysqlclient. (Bug #21900800)
  • yaSS was upgraded to version 2.3.8. (Bug #21888925)
  • Insert overhead for the MEMORY storage table was reduced by caching computed hash values. (Bug #21866029)
  • RPM .spec files were updated so that MySQL Server builds from source RPM packages will include the proper files to take advantage of operating system NUMA capabilities. This introduces a runtime dependency on libnuma.so.1. RPM and yum detect this and refuse to install if that library is not installed. (Bug #21775221)
  • The initial-password message written by mysqld --initialize to the error log has been reduced from a [Warning] to a [Note]. (Bug #21680457)
  • The JSON_APPEND() function was renamed to JSON_ARRAY_APPEND(). (Bug #21560934)
  • Unneeded scripts and test files were removed from the tests directory and that directory was renamed to testclients. (Bug #21490075)
  • The JSON value-updating functions JSON_APPEND(), JSON_SET(), JSON_REPLACE(), and JSON_INSERT() now treat SQL NULL values as JSON null literals, which is consistent with JSON_OBJECT() and JSON_ARRAY(). (Bug #21450922)
  • The server now generates a warning when the default_storage_engine or default_tmp_storage_engine system variable is set to a disabled storage engine named in the disabled_storage_engines system variable. (Bug #21405865)
  • Metadata locking for tablespaces has been extended so that, for DDL statements that refer to multiple tablespaces, a metadata lock is acquired on all used tablespaces. (Bug #21376265)
  • Support for building with Solaris Studio 5.13 was added. (Bug #21185883)
  • mysql_ssl_rsa_setup now is less noisy by default. Output from openssl commands is displayed only if --verbose is given. (Bug #21024979)
  • yaSSL was upgraded to version 2.3.7d. This fixes a connection-failure issue whenused with the thread pool plugin. (Bug #20774956)
  • mysqlpump now supports a --version option. (Bug #77894, Bug #21534277)
  • Performance Schema digests in DIGEST_TEXT columns have ... appended to the end to indicate when statements exceed the maximum statement size and were truncated. This is also now done for statement text values in SQL_TEXT columns. (Bug #75861, Bug #20519832)
  • Output from mysql_upgrade is now less noisy and more informative. (Bug #59077, Bug #11766046)
  • A new SHUTDOWN SQL statement is available. This provides a SQL-level interface to the same functionality previously available using the mysqladmin shutdown command or the mysql_shutdown() C API function. See SHUTDOWN Syntax.
  • Work was done to clean up the source code base, including: Removal of unneeded CMake checks; removing unused macros from source files; reorganizing header files to reduce the number of dependencies and make them more modular, removal of function declarations without definitions.
  • Bugs Fixed:
  • Important Change; InnoDB; Partitioning: There was no way to upgrade existing partitioned tables to use the native partitioning implemented for InnoDB tables in MySQL 5.7.6. This fix adds support to both mysql_upgrade and the mysql client for upgrading partitioned InnoDB tables created in previous releases, which used the ha_partition handler, to use InnoDB native partitioning instead.
  • mysql_upgrade now checks for all InnoDB tables that were created using the generic ha_partition handler and attempts to upgrade them to InnoDB native partitioning.
  • In the mysql client, pre-5.7.6 partitioned InnoDB tables can be upgraded one by one to native partitioning using the ALTER TABLE ... UPGRADE PARTITIONING statement that is implemented in this release.
  • (Bug #20727344, Bug #76374)
  • Important Change; Replication: The START SLAVE and STOP SLAVE statements can no longer be used for the group_replication_recovery channel. See Replication Channels, for more information. (Bug #21680074)
  • Important Change; Replication: In MySQL 5.7, the binlog_max_flush_queue_time system variable introduced in MySQL 5.6 no longer has any effect. This variable is now deprecated, and has been marked for eventual removal in a future MySQL release. (Bug #21347087)
  • Important Change; Replication: When using a single-threaded slave, the status of the applier thread is now reported as part of the replication_applier_status_by_worker table, instead of replication_applier_status_by_coordinator. This means that replication_applier_status_by_coordinator is now empty when using a single-threaded slave; it should be noted that such reporting for multi-threaded slaves has not been changed, and continues to be shown in that table. (Bug #74765, Bug #20001173)
  • InnoDB: The undo log contained insufficient information about virtual columns and virtual column indexes, which could cause a server exit when adding or dropping virtual columns. As a result, a slow shutdown (using innodb_fast_shutdown=0) is required prior to performing an in-place upgrade or downgrade from MySQL 5.7.8. For more information, refer to Upgrading or Downgrading MySQL. (Bug #21869656)
  • InnoDB: A table-rebuilding ALTER TABLE operation that created an index on a virtual column raised an assertion. (Bug #21847170)
  • InnoDB: A SELECT ... FOR UPDATE operation on a table with virtual generated columns raised an assertion. InnoDB unnecessarily retrieved a non-indexed virtual column for a covered secondary index scan. (Bug #21827963)
  • InnoDB: Creating a table with large rows failed when using a ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED due to an incorrect undo log record size calculation. The same operation succeeded with ROW_FORMAT=COMPACT or ROW_FORMAT=REDUNDANT.
  • ROW_FORMAT=DYNAMIC and ROW_FORMAT=COMPRESSED now permit a row length violation at DDL time if innodb_strict_mode is disabled. (Bug #21816041)
  • InnoDB: Adding an index on a generated virtual column with an index prefix length that exceeded the maximum length caused a server exit. (Bug #21812026)
  • InnoDB: A memory leak occurred after crash recovery. Memory allocated in fil_space_read_name_and_filepath() was not freed. (Bug #21811321)
  • InnoDB: Altering the data type or computation method of a virtual generated column caused an error. (Bug #21810004)
  • InnoDB: An assertion was raised when creating a spatial index. InnoDB failed to count irtual columns that preceded the spatial index column. (Bug #21807340)
  • InnoDB: Tablespace discovery modifications in MySQL 5.7.5 included the removal of code related to MLOG_FILE_CREATE2 redo log records. As a result, the redo log did not contain sufficient information about file creation. (Bug #21801423)
  • InnoDB: The redo log provided no indication that redo logging is disabled for index page writes during concurrent DDL operations. As a result, external hot backup tools could produce corrupt backups. (Bug #21796691)
  • InnoDB: In debug builds, recovery asserted during a transparent page compression test. A torn page from the doublewrite buffer caused an LSN debug check failure. (Bug #21796092)
  • InnoDB: Creating a virtual generated column on a partitioned table caused a server exit. (Bug #21790751, Bug #78326)
  • InnoDB: An old version of numactl headers on the build host caused a compilation error when building a MySQL version that includes NUMA memory policy support. (Bug #21785074)
  • InnoDB: A SELECT .. FOR UPDATE operation on an indexed virtual generated column raised an assertion. (Bug #21775459)
  • InnoDB: The mysql_system_tables_fix_for_downgrade.sql script, provided to facilitate system table alterations when downgrading from MySQL 5.7.6 or higher, was removed from the MySQL installation directory. The script was no longer valid for all downgrade paths. For more information, see Changes Affecting Downgrades from MySQL 5.7. (Bug #21753832)
  • InnoDB: The tablespace identifier (space_id) was logged twice for an MLOG_TRUNCATE redo log record. (Bug #21744589)
  • InnoDB: Crash recovery issued an invalid error message indicating that an isl file could not be opened or is not correct. (Bug #21691438)
  • InnoDB: The InnoDB Monitor displayed incorrect mutex creation information for a mutex with a long semaphore wait. (Bug #21682997, Bug #78179)
  • InnoDB: Error message formatting was corrected in the os_file_write_page() function. (Bug #21681433)
  • InnoDB: The i_s_dict_fill_sys_tablespaces() function could free memory associated with a file name before printing an error message. (Bug #21680518, Bug #78180)
  • InnoDB: In debug builds, scanned and applied redo log records are now printed with a string identifier instead of a numerical identifier when --debug=d,ib_log is passed to mysqld. For example, rec MLOG_2BYTES is now printed instead of rec 2. (Bug #21664268)
  • InnoDB: The number of system calls made by the InnoDB page compression feature was reduced. (Bug #21654695)
  • InnoDB: The recv_parse_log_rec function returned the length of the redo log record instead of 0 when encountering an incomplete MLOG_CHECKPOINT record. (Bug #21640085, Bug #78058)
  • References: This bug is a regression of Bug #17798076.
  • InnoDB: In debug builds, a parenthesis mismatch in a MATCH() ... AGAINST clause raised a full-text parser assertion. (Bug #21638907)
  • InnoDB: Debug code was added to avoid a doublewrite buffer assertion that was raised during Valgrind testing. (Bug #21631197)
  • InnoDB: Log messages were improved to help identify out-of-space errors that could occur when adding rollback segments. (Bug #21629618)
  • InnoDB: In debug builds, enabling the innodb_log_checkpoint_now debug option while a table-rebuilding ALTER TABLE operation is running could result in an infinite loop. (Bug #21628087, Bug #78056)
  • InnoDB: UNIV_INLINE was not defined for the dict_table_has_indexed_v_cols function. (Bug #21628058, Bug #78055)
  • InnoDB: Altering a virtual column data type is not supported as an in-place operation. (Bug #21617377)
  • InnoDB: Sorting was skipped by an ALTER TABLE statement that changed the primary key and dropped the last column of the previous primary key. (Bug #21612714, Bug #78020)
  • InnoDB: During recovery, an invalid isl file was treated as a missing isl file, resulting in the tablespace being opened using the file location defined in an MLOG_FILE_* record in the redo log. Recovery no longer opens the tablespace if the isl file is invalid. (Bug #21577278)
  • InnoDB: Code that provided a timeout mechanism intended to reduce adaptive hash index search latch (btr_search_latch) contention was removed. The code became obsolete after the introduction of adaptive hash index search system partitioning in MySQL 5.7.8. (Bug #21569876, Bug #77957)
  • InnoDB: The COMPRESSION option was displayed incorrectly in SHOW CREATE TABLE output. (Bug #21557723, Bug #77940)
  • InnoDB: An innodb_data_file_path mismatch raised an assertion, as did initializing the database with a data file size that was too small for the specified page size. (Bug #21551464)
  • InnoDB: A check was added to prevent accessing full-text index tables that are in an inconsistent state. (Bug #21529012)
  • InnoDB: A schema mismatch error occurred when importing a tablespace that was altered by DROP INDEX operation on the source server. (Bug #21514135, Bug #77659)
  • InnoDB: A virtual generated column on a table that uses index condition pushdown (ICP) caused an assertion. (Bug #21507796, Bug #21478287)
  • InnoDB: Creating an index on a virtual generated column after adding a full-text index on a preceding column raised an assertion. (Bug #21478389)
  • InnoDB: An INSERT operation raised a btr_search_enabled assertion. Assertion code was too restrictive. (Bug #21457373)
  • InnoDB: Reloading a table that was evicted while empty caused an AUTO_INCREMENT value to be reset. (Bug #21454472, Bug #77743)
  • InnoDB: A crash during a TRUNCATE TABLE operation caused the server to exit on startup. (Bug #21451922)
  • InnoDB: The .isl was not removed when dropping a general tablespace that was created outside of the MySQL data directory. (Bug #21446772)
  • InnoDB: An inconsistent read occurred under the REPEATABLE READ transaction isolation level. Transactions that operated on the same row were removed from transaction ID list in the incorrect order. (Bug #21433768)
  • References: This bug is a regression of Bug #17320977.
  • InnoDB: Attempting to create a general tablespace data file on a Windows root drive caused an error. (Bug #21419888)
  • InnoDB: After disabling the adaptive hash index feature, an adaptive hash index latch was unnecessarily obtained and released. (Bug #21407023)
  • InnoDB: An ALTER TABLE operation on a table with an index defined on a virtual column incorrectly modified the data of the virtual column. (Bug #21376546, Bug #77628)
  • InnoDB: Resizing the buffer pool online raised an assertion due to a memory full condition. (Bug #21348684, Bug #77564)
  • InnoDB: An ALTER TABLE ... IMPORT TABLESPACE operation with innodb_page_size=4K and ROW_FORMAT=DYNAMIC raised an assertion. (Bug #21341030)
  • InnoDB: For spatial indexes, InnoDB unnecessarily stored a 3072-byte prefix in undo log records instead of just the maximum bounding rectangle (MBR). For columns with externally stored data, both the prefix and MBR are logged. (Bug #21340268)
  • InnoDB: Invalid init_ftfuncs() assertion code was removed. (Bug #21300774)
  • InnoDB: Memory allocation sanity checks were added to the memcached code. (Bug #21288106)
  • InnoDB: An incorrect reference count caused a hang in the TrxInInnoDB constructor. innobase_close_connection() released the transaction object before destroying the TrxInInnoDB object where the reference count is adjusted. (Bug #21280816)
  • InnoDB: A MySQL 5.7.8 patch that reintroduced SHOW ENGINE INNODB MUTEX functionality caused a performance regression. (Bug #21266784)
  • InnoDB: A memcached flush_all command raised an assertion. A function that starts a transaction was called from within assertion code. (Bug #21239299, Bug #75199)
  • InnoDB: A shutdown hang occurred when a high priority transaction waited for a victim transaction to exit while the victim transaction waited for an asynchronous rollback t
  • InnoDB: A data corruption occurred on ARM64. GCC builtins did not issue the correct fences when setting or unsetting the lock word. (Bug #21102971, Bug #76135)
  • InnoDB: Server shutdown was delayed waiting for the purge thread to exit. To avoid this problem, the number of calls to trx_purge() was reduced, and the trx_purge() batch size was reduced to 20. (Bug #21040050)
  • InnoDB: In READ COMMITTED mode, a REPLACE operation on a unique secondary index resulted in a constraint violation. Thanks to Alexey Kopytov for the patch. (Bug #21025880, Bug #76927)
  • InnoDB: The IBUF_BITMAP_FREE bit indicated that there was more free space in the leaf page than was actually available. (Bug #20796566)
  • InnoDB: Moving the data directory before recovering a crashed database caused tablespace discovery to fail for file-per-table tablespaces created outside of the MySQL data directory. (Bug #20698468)
  • InnoDB: The innodb_buf_flush_list_now debug setting failed to flush all dirty pages to disk. (Bug #20582189)
  • InnoDB: An ALTER TABLE ... ADD FULLTEXT INDEX operation raised an assertion. A thread attempted to use a lower priority transaction that was being rolled back before the rollback operation completed. (Bug #20481175)
  • InnoDB: Running an ALTER TABLE operation on a referencing table with a cascading foreign key constraint during a concurrent DML operation on the referenced table caused a loss of referential integrity. (Bug #20367116)
  • InnoDB: Setting lower_case_table_names=0 on a case-insensitive file system could result in a hang condition when running an INSERT INTO ... SELECT ... FROM tbl_name operation with the wrong tbl_name letter case. An error message is now printed and the server exits when attempting to start the server with --lower_case_table_names=0 on a case-insensitive file system. (Bug #20198490, Bug #75185)
  • InnoDB: The server failed to start with an innodb_force_recovery setting greater than 3. InnoDB was set to read-only mode before redo logs were applied.
  • DROP TABLE is now supported with an innodb_force_recovery setting greater than 3. (Bug #19779113)
  • InnoDB: The trx_sys_read_pertable_file_format_id() function reported the wrong file format. (Bug #19206671)
  • Packaging; OS X: Using user=mysql during installation on OS X did not allow the mysql database to be installed. To fix this problem, OS X packages now use the --no-defaults option when creating this database. This also means that having a my.cnf file on the system no longer affects the installation. (Bug #21364902)
  • Partitioning: Error handling for failed partitioning-related ALTER TABLE operations against non-partitioned tables was not performed correctly (Bug #20284744)
  • Partitioning: ALTER TABLE when executed from a stored procedure did not always work correctly with tables partitioned by RANGE. (Bug #16613004)
  • Replication: The group replication applier channel does not support DATABASE as the slave_parallel_type; when group replication is started, this is checked for explicitly, and handled correctly. However, it remained possible to change this value indirectly at a later point in time by increasing the value of slave_parallel_workers while the slave SQL thread was stopped, which caused the applier to fail with an error. To fix this problem, the slave_parallel_type for the group_replication_applier is now checked to make sure that it is set to LOGICAL_CLOCK whenever the number of slave_parallel_workers is set greater then 0, and not merely when group replication is first started. (Bug #21798804)
  • Replication: As binlog_error_action=ABORT_SERVER is the default in MySQL 5.7.7 and later it is being used for more error situations. The behavior has been adjusted to generate a core dump to improve troubleshooting possibilities. (Bug #21486161, Bug #77738)
  • Replication: At runtime, some Gtid_set objects could be instrumented with a performance schema mutex key equal to 0 (which is invalid), due to its use as the effective default value when the mutex key was not actually supplied. This allowed these objects to be created without a valid key, which led to further issues when using them. (Bug #21485997)
  • Replication: When running the server with gtid_mode=ON, a DELETE from a MEMORY table following a restart was not written to the binary log correctly. (Bug #21045848)
  • Replication: The locking behavior of replication administration statements has changed to make SHOW SLAVE STATUS more concurrent. This makes the NONBLOCKING clause redundant for SHOW SLAVE STATUS and it has been removed. (Bug #20593028)
  • Replication: ER_CANT_USE_AUTO_POSITION_WITH_GTID_MODE_OFF errors were not reported using the correct format. (Bug #20545943)
  • Replication: When the dump thread was killed while dumping an inactive binary log, some events in this log could be skipped and thus not replicated. (Bug #78337, Bug #21816399)
  • References: See also Bug #74607, Bug #19975697.
  • Replication: XA transactions could cause an assert condition on XA COMMIT; this was happening because the internal transaction state was not reset between XA PREPARE and XA COMMIT or XA ROLLBACK, due to the fact that these operations constitute separate transactions under XA. In addition, XA ROLLBACK statements were not handled properly in some cases. (Bug #78264, Bug #21755890)
  • Replication: The interface between the Group Replication plugin and the Performance Schema engine made use of a type of memory allocation which was passed to the server, and was a potential source of problems when passing information between the plugin and performance_schema tables. The implementation for this interface has been reworked so as to avoid performing this type of memory allocation when sharing data. (Bug #78263, Bug #21755699)
  • Replication: The MTS submode set for each channel was ignored by the worker threads, which continued to read and use the global flag set for all slave channels. This could lead to errors when the coordinator was of one type and its workers of another. (Bug #77763, Bug #21464737)
  • Replication: Replication slaves could fail for having insufficient privileges when they had been granted only the REPLICATION SLAVE privilege. (Bug #77732, Bug #21455603)
  • Replication: The status variable Slave_open_temp_tables keeps track of the number of temporary tables that are opened by the replication slave. If multi-source replication is enabled, it is the total number of temporary tables for all channels. This fix addresses the following issues relating to this variable:
  • RESET SLAVE FOR CHANNEL channel forced the value of Slave_open_temp_tables to 0; in the event that some other replication channel had open temporary tables which were later dropped, the value wrapped around to a large negative value (1 - 232). This also caused spurious or missed warnings when issuing a STOP SLAVE or CHANGE MASTER TO statement.
  • The internal function that modifies Slave_open_temp_tables in such cases relied on two incorrect assumptions:
  • That the variable is updated by only one thread when multi-threaded slaves are not enabled, which is not true in the case of multi-source replication.
  • That non-atomic operations are safe with a single writer and multiple readers, which is not necessarily true for some platforms supported by MySQL.
  • Replication: The warning '@@session.gtid_executed' is deprecated and will be removed in a future release. was printed even when the session variable gtid_executed was not included in the result of a query. In addition, the result of SELECT @@session.gtid_executed included a duplicate warning. Both issues occurred because the warning was printed whenever the value of gtid_executed was accessed by a statement, such access occurring as a matter of course, whether or not a given variable is actually included in the result.
  • To fix this issue, we make handling of @@session.gtid_executed consistent with how the also-deprecated variable @@global.sql_log_bin is treated in such cases, by making the following changes:
  • gtid_executed is no longer included in the performnce_schema.session_variables table.
  • gtid_executed is still included in the information_schema.session_variables table, but when show_compatibility_56 = ON, the warning is not issued when querying the session_variables table, or when issuing SHOW VARIABLES or SHOW SESSION VARIABLES, even when using a matching LIKE clause with either of the SHOW statements.
  • The warning is still issued by a statement such as SELECT @@session.gtid_executed which accesses the value of the variable directly. (Bug #77574, Bug #21354712)
  • References: See also Bug #75980, Bug #20575529, Bug #76626, Bug #20854952.
  • Replication: When a transaction consisting of a single statement with a specified GTID failed in autocommit mode, its GTID was not released when rolling it back when binary logging was disabled. (Bug #77521, Bug #21338147)
  • Replication: The slave group event parser did not properly register an XA_ROLLBACK event as a transaction boundary. (Bug #77392, Bug #21273010)
  • Replication: mysqlbinlog printed a ROLLBACK statement at the end of the binary log file, which when played back failed with error 1782 @@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON. This occurred when the binary log file did not include any data related events, or when the relay log file included a Format_description_log_event that had been generated on the master at server startup.
  • The fix for this issue causes a relay log's Format_description_log_event to do nothing if it is applied by a BINLOG statement, and stops a ROLLBACK from setting gtid_next to ANONYMOUS when the state of gtid_next has not yet been determined by a subsequent event. (Bug #76887, Bug #20980932)
  • Replication: SAVEPOINT and ROLLBACK TO SAVEPOINT within a trigger led to an assertion. (Bug #76727, Bug #20901025)
  • Replication: While a SHOW BINLOG EVENTS statement was executing, any parallel transaction was blocked. The fix ensures that the SHOW BINLOG EVENTS process now only acquires a lock for the duration of calculating the file's end position, therefore parallel transactions are not blocked for long durations. (Bug #76618, Bug #20928790)
  • Replication: If a CREATE VIEW statement failed, it was being incorrectly written to the binary log even though it did not result in the creation of a partial view. The fix ensures that such statements are not recorded in the binary log. Additionally it was found that when a statement which had failed on a master was received by a slave with an expected error, if the statement was skipped on the slave, for example due to a replication filter, the expected error was being compared with the actual error that happened on the slave. The fix ensures that if a statement with an expected error is received by a slave, if the statement has not been filtered, only then is it compared with the actual error that happened on the slave. (Bug #76493, Bug #20797764)
  • Replication: The action specified for binlog_error_action was not always honored correctly after a hardware failure occurred during log rotation. (Bug #76379, Bug #20805298)
  • Replication: When using MySQL 5.7.6 and later with binlog_format=row and gtid_mode=off, if CREATE ... SELECT was killed during execution it could lead to an inconsistent state, breaking replication. The cause was that in MySQL 5.7.6 the way CREATE ... SELECT was logged was changed, so that a commit was introduced between the CREATE TABLE and SELECT steps. The fix ensures that CREATE ... SELECT does not commit in the middle of the transaction when binlog_format=row. (Bug #76320, Bug #77098, Bug #20742519, Bug #21114464)
  • Replication: Modifying the master_info_repository or relay_log_info_repository inside a transaction and later rolling back that transaction left the repository in an unusable state. We fix this by preventing any modification of these repositories inside a transaction. (Bug #74950, Bug #20074353)
  • Replication: Transactions added to gtid_executed using SET gtid_purged were not taken into account by WAIT_FOR_EXECUTED_GTID_SET() until a subsequent transaction was committed by a client or slave thread. (Bug #73838, Bug #19579811)
  • Replication: When the running with --relay-log-info-repository=TABLE, the mysql.slave_relay_log_info table is updated when a transaction is committed or when a flush is performed explicitly, such during relay log rotation. If a transaction that uses any nontransactional tables (such as MyISAM tables) is split across multiple relay logs, it is partially committed on relay log flush. When gtid_mode=ON, this caused the same GTID to be used for the remaining portion of the transaction, which raised an ER_GTID_NEXT_TYPE_UNDEFINED_GROUP error.
  • We fix this issue by postponing in such cases the update of the relay log information repository that normally occurs on relay log rotation until the commit for the transaction in question has been executed.
  • This issue did not affect tables using transactional storage engines such as InnoDB. (Bug #68525, Bug #16418100)
  • For an index-only scan over an indexed generated column, the server could do random calculations; the random results were not exposed to the user, but Valgrind warnings could occur, and the server could exit when calculations involved function
  • Although the use of JSON values with GREATEST() or LEAST() is not currently supported, the server did not handle attempts to do so correctly, leading to an assert (Linux) or exit() call (Windows) in debug builds. Now when you try to use JSON values with either of these functions, the server emits a suitable warning (ER_NOT_SUPPORTED_YET). (Bug #21828321)
  • For debug builds, a DROP TRIGGER statement could raise an assertion if the trigger was defined on a table that contained a generated column. (Bug #21824519)
  • A table that included a generated column referencing a JSON column in some cases become corrupted, so that a subsequent access of the table using a different connection caused the server to fail. (Bug #21808680)
  • References: See also Bug #21824519, Bug #78408.
  • For tables with VIRTUAL generated columns, an INSERT with an empty values list could cause a server exit. (Bug #21807818)
  • CMake configuration was adjusted to handle new warnings reported by Clang 3.7. (Bug #21803314)
  • Using a materialized view defined over a table containing generated columns could cause a server exit. (Bug #21797776)
  • For partitioned InnoDB tables containing a virtual generated column, reads from the table could return random data for the column. (Bug #21779011)
  • The CMake checks for NUMA availability could cause compilation problems on platforms without NUMA support. (Bug #21774859)
  • The optimizer did not consider nonfunctional expressions such as (a AND b) = 1 when looking for indexed generated columns to substitute for the (a AND b) expression. Now expressions using the AND and OR logical operators are considered. (Bug #21770798)
  • For debug builds, when the optimizer tried to clone certain types of keys for a range optimization, an assertion was raised. (Bug #21761867)
  • For debug builds, the server could exit when the optimizer attempted to estimate the cost for processing unique values when there were no keys. (Bug #21697002)
  • An INSERT into a view with a subquery could fail if executed as a prepared statement. (Bug #21696206)
  • mysql-test-run.pl now has an --valgrind-clients option that causes all clients started by .test files to be run with valgrind. This option requires valgrind 3.9 or later.
  • In addition, several client memory leak issues were fixed. (Bug #21672747)
  • For queries on InnoDB tables for which the optimizer used SPATIAL indexes for full index scans, the result was empty because such indexes do not support a full scan. The optimizer no longer considers SPATIAL indexes as candidates for full index scans. (Bug #21663612)
  • For some inputs, ST_Intersection() could return an invalid polygon. (Bug #21658453)
  • Added Microsoft Visual Studio 2015 support. Changes include using the native (added in VS 2015) timespec library if it exists, renamed lfind/lsearch and timezone/tzname to avoid redefinition problems, set TMPDIR to "" by default as P_tmpdir no longer exists, deprecated std::hash_map in favor of std::unordered_map, and added Wix Toolset 3.10 support. (Bug #21657078)
  • Spatial functions could simplify geometry values in contexts where the value might be used elsewhere in a query, producing incorrect results. (Bug #21652012)
  • If ST_ConvexHull() or ST_SRID() were used in a view definition, the resulting definition contained ST_Convex_Hull() (misspelled) or SRID() (deprecated). (Bug #21651588)
  • JSON_TYPE() returned OPAQUE for some binary values that it should have identified as BLOB. (Bug #21649073)
  • The mysql client parser incorrectly interpreted optimizer hint comments that contained ;, ", ', or ` characters. (Bug #21646026)
  • These Version Tokens issues were resolved:
  • version_tokens_delete() now strips whitespace surrounding token names in its argument, similar to version_tokens_set() and version_tokens_edit().
  • Passing NULL to version_tokens_delete() caused a server exit.
  • Passing an argument with an empty token name to to version_tokens_set() or version_tokens_edit() caused a server exit.
  • Passing NULL as the timeout value to version_tokens_lock_exclusive() or version_tokens_lock_shared() caused a server exit.
  • (Bug #21645001, Bug #21646106, Bug #21645944, Bug #21646017)
  • For debug builds, enabling the PAD_CHAR_TO_FULL_LENGTH SQL mode could cause SHOW FUNCTION STATUS to raise an assertion. (Bug #21632425)
  • mysqlpump did not exit with a message for some combinations of incompatible options. (Bug #21628662)
  • An assertion could be raised if the optimizer tried to create a temporary table based on a prepared statement parameter. (Bug #21625929)
  • Executing a prepared statement with multiple nested subqueries could raise an assertion. (Bug #21624851)
  • For debug builds, failure of subquery optimization could cause an assertion to be raised due to improper error handling. (Bug #21621313)
  • Some table and index optimizer hints were lost early in statement processing, so query rewrite plugins did not have access to them. This could cause incorrect matching between incoming statements and statement pattern templates. (Bug #21619780)
  • Queries containing nested subqueries combining grouping and outer references might cause a server exit. (Bug #21619634)
  • Passing NULL as the second or third argument to ST_AsGeoJSON() could cause the server to stop responding to the session or (in debug builds) to raise an assertion.
  • Giving input to HANDLER READ that could not be converted to the correct type could cause the server to stop responding to the session or (in debug builds) to raise an assertion. (Bug #21616810, Bug #21650603)
  • For debug builds, ST_IsValid(NULL) could raise an assertion. (Bug #21616647)
  • For debug builds, an assertion could be raised for negative zero values when converting time values to decimal. (Bug #21616585)
  • ST_AsWKB() could cause a server exit if given invalid data. (Bug #21614368)
  • If an aggregate function was used over a generated column that was itself part of a multiple-column index, the server could exit. (Bug #21613615)
  • A missing error check during column reference resolution could result in an incorrect error message or (in debug builds) an assertion being raised. (Bug #21613422)
  • For debug builds, an assertion could be raised in Filesort::make_sortorder() for attempts to sort Item_ref objects. (Bug #21611270)
  • JSON functions could return incorrect values if a path argument was passed as a user-defined variable that changed values between result set rows. (Bug #21602361)
  • Columns selected from the right-hand table of a left join, which was also a derived table, might produce incorrect NULL value information when used in an IN subquery. (Bug #21574933)
  • References: This bug was introduced by Bug #14358878.
  • For debug builds, an assertion was raised for some queries that have a semi-join and use the materialization strategy, if a key length or number of key parts was zero. (Bug #21566735)
  • Compilation using gcc 4.9 or 5.1 failed on ARM64 platforms. (Bug #21552524)
  • If a multiple-column UPDATE statement failed to update a JSON column that was then referenced in a later update, the server could exit. (Bug #21547877)
  • For debug builds, invalid geometry byte strings could cause spatial functions to raise an assertion rather than return an error to the caller. (Bug #21546656)
  • For debug builds, a too-strict assertion could be raised by invalid characters for LOAD DATA. (Bug #21542698)
  • The server could exit when InnoDB tried to update a secondary index on a VIRTUAL generated column of type BLOB. (Bug #21530366)
  • Binary logging of CREATE USER and statements could log the hash of the password hash (rather than the hash itself) when log_backward_compatible_user_definitions was enabled. Binary logging of ALTER USER statements could include attributes not present in the original statements.
  • In consequence of the fix for these issues, log_backward_compatible_user_definitions has been replaced by log_builtin_as_identified_by_password. If this variable is enabled, binary logging for CREATE USER statements involving built-in authentication plugins rewrites the statements to include an IDENTIFIED BY PASSWORD clause, and SET PASSWORD statements are logged as SET PASSWORD statements, rather than being rewritten to ALTER USER statements. (Bug #21516392, Bug #20535561)
  • For debug builds, incorrect caching of JSON values could cause an assertion to be raised. (Bug #21491442)
  • An empty string (which is not a valid JSON value) normally is parsed and returned as a JSON null literal, but in some cases could raise an assertion for debug builds. (Bug #21487833)
  • For temporary tables created to handle UNION statements that selected CHAR or SET columns, the maximum column width could be too long for InnoDB to handle. Now such columns are created as variable-length columns. (Bug #21480999)
  • Certain JSON functions could return incorrect results when used in prepared statements which had path expression constants. (Bug #21472872)
  • Valgrind errors could occur during partition pruning for tables containing generated columns. (Bug #21469535)
  • For builds configured with MAX_INDEXES greater than 64, certain queries for which the server used temporary tables could cause a server exit. (Bug #21466850)
  • Adding or dropping a VIRTUAL generated column could cause a server exit. (Bug #21465626)
  • An attempt to use a previously unused time zone with CONVERT_TZ() could produce warnings or errors or (in debug builds) raise an assertion if GTIDs were enabled but the binary log was not enabled.
  • In debug builds, an attempt to use a previously unused time zone with CONVERT_TZ() or as the value of the time_zone system variable inside a stored program could raise an assertion. (Bug #21459999, Bug #21459795)
  • For plugins that use the audit plugin API, MYSQL_AUDIT_GLOBAL_VARIABLE_SET events passed to the notification function did not include the new variable value. (Bug #21457699)
  • Queries on a table containing an indexed generated column could fail if the table name contained special characters. (Bug #21454155)
  • When a view was the inner table of an outer join, a JSON column could produce a non-NULL value when NULL was expected. (Bug #21448719)
  • If JSON_CONTAINS_PATH() was called with a one_or_all argument of all and a path argument contained a wildcard, the function found all matches per path, even though in this case one match is sufficient. (Bug #21442775)
  • JSON_SET() and JSON_REPLACE() sometimes produced an incorrect result if a path expression identified a nonarray value. (Bug #21442624)
  • Suppression of JSON conversion errors using non-strict SQL mode or INSERT IGNORE could then cause an assertion to be raised if an empty value inserted into a JSON NOT NULL column was copied to another JSON column. (Bug #21437989)
  • For debug builds, some spatial functions that accept raw byte data for spatial arguments (for example, specified as hex values) could raise an assertion if such an argument contained extra garbage following valid data. (Bug #21397107)
  • ALTER TABLE could raise an assertion for a table with an indexed virtual column having a column position greater than 64. (Bug #21391781)
  • Evaluation of virtual generated columns could fail to evaluate all base columns and result in invalid memory reads. (Bug #21390605)
  • For deeply nested JSON input, ST_GeomFromGeoJSON() or JSON_VALID() could produce stack overflow. (Bug #21389101, Bug #21377136)
  • Failure to parse a JSON string that contained a floating-point number with a large, negative exponent could cause a server exit. (Bug #21384048)
  • For debug builds, an incorrect assertion could be raised during subquery execution. (Bug #21383882)
  • For debug builds, a missing error check in Item_sum_hybrid::fix_fields() caused an assertion to be raised. (Bug #21383714)
  • For debug builds, invoking ST_AsGeoJSON() within GROUP BY ... WITH ROLLUP could raise an assertion. (Bug #21383497)
  • JSON_SEARCH() could return incorrect results if an invalid escape expression was specified. (Bug #21383284)
  • For debug builds, a NULL first argument to JSON_SET() could raise an assertion. (Bug #21381806)
  • For expressions of the form (subquery) IN (subquery), where a subquery could return a JSON value, failure to handle a row result could cause a server exit.` (Bug #21376088)
  • Failure of JSON_APPEND() to handle a legal condition could cause a server exit. (Bug #21373874)
  • Calls to ST_Buffer() could hang or raise an assertion. (Bug #21372946)
  • The server could exit in unclean fashion if configured to listen on a TCP/IP port number already in use by another server instance. (Bug #21368299)
  • Certain subqueries as arguments to PROCEDURE ANALYSE() could cause a server exit. (Bug #21350175)
  • A query with a right outer join inside a derived table might return wrong data. (Bug #21350125)
  • Starting the server with --skip-grant-tables (or with options such as --initialize for which --skip-grant-tables is implicit) prevented the INSTALL PLUGIN and UNINSTALL PLUGIN statements from working. (Bug #21335821)
  • mysql_ssl_rsa_setup could create an unwanted .rnd file in the data directory. (The file is actually created by openssl, which mysql_ssl_ras_setup invokes. mysql_ssl_rsa_setup now cleans up the file.) (Bug #21335818)
  • For spatial functions, input polygons were automatically closed if open. However, the Open Geospatial Consortium guidelines require that input polygons already be closed. Unclosed polygons are now rejected as invalid rather than being closed. (Bug #21327888)
  • When a VIRTUAL generated column was added to a table, it was not ensured that data being calculated by the generated column expression would not be out of range for the column. This could lead to inconsistent data being returned and unexpectedly failed statements.
  • ALTER TABLE now supports WITHOUT VALIDATION and WITH VALIDATION clauses to control whether ALTER TABLE validates the data for a VIRTUAL generated column:
  • With WITHOUT VALIDATION (the default if neither clause is specified), an in-place operation is performed (if possible), data integrity is not checked, and the statement finishes more quickly. However, later reads from the table might report warnings or errors for the column if values are out of range.
  • With WITH VALIDATION, ALTER TABLE copies the table. If an out-of-range or any other error occurs, the statement fails. Because a table copy is performed, the statement takes longer.
  • WITHOUT VALIDATION and WITH VALIDATION are permitted only with ADD COLUMN, CHANGE COLUMN, and MODIFY COLUMN operations. (Bug #21317507)
  • Some INFORMATION_SCHEMA queries consumed excessive memory due to suboptimal query plans and insufficient materialization. (Bug #21299665)
  • With the server configured to send error messages to syslog or a log file, messages generated prior to error log setup were sent to stderr or stdout. These messages are now buffered until error log setup has completed, then logged to the proper destination. (Bug #21296553)
  • Statement digests did not include information about optimizer hint comments, causing statements with and without hints to be aggregated. (Bug #21286261)
  • Executing a prepared statement using a derived table and an aggregate function in a subquery in the SELECT list could cause a server exit. (Bug #2127774)
  • GRANT created the account for nonexistent accounts even if the NO_AUTO_CREATE_USER SQL mode was enabled. (Bug #21271571)
  • ST_SymDifference() with multipolygon arguments could return incorrect results. (Bug #21263152)
  • A query with a NOT IN subquery that had COUNT(DISTINCT) could return incorrect results. (Bug #21243772)
  • When started using a very old data directory (from MySQL 5.0), the server could exit due to failure to properly read the old grant tables. (Bug #21216433)
  • A mulitple-table update involving generated columns that updated used a temporay table could cause a server exit or raise an assertion. (Bug #21216067)
  • Unit testing now uses Google Mock 1.7 rather than 1.6. (Bug #21215389)
  • For queries containing an expression of the form (x IN (subquery)) IN (subquery2), a combination of semi-join and subquery materialization strategies could cause a server exit. (Bug #21205577)
  • If a query contained an outer join such as LEFT JOIN (t1,t2,...) and a hint was used to disable join buffering on a right-side table but not on the others, a server exit occurred. (Bug #21205282)
  • For a cursor type of CURSOR_TYPE_READ_ONLY, retrieving the result set for the first execution of a prepared CALL staement could be missing the first result set row if the data was numeric; raise an assertion for debug builds if the data was string; cause loss of the server connection when calling mysql_stmt_fetch(). (Bug #21199582)
  • Dangling blob pointers could remain when closing an InnoDB table, resulting in a subsequent read of invalid memory and a server exit. (Bug #21153489)
  • For some operations where sorting or grouping required a temporary table, the table could have zero columns and raise an assertion. (Bug #21143151)
  • For debug builds, merging a derived table into an outer query block could raise an assertion. (Bug #21139722)
  • Queries containing an expression of the form (x IS NULL) IN (subquery) could cause a server exit. (Bug #21139402)
  • During server SSL file autogeneration, ca.pem briefly had insecure file permissions. (Bug #21138119)
  • An assertion could be raised due to incorrect error handling if a SELECT ... FOR UPDATE subquery resulted in deadlock and caused a rollback. (Bug #21096444)
  • Selecting the result of an INSERT() function call to which input was passed as a hexidecimal string could expose more information than was passed to the function. (Bug #21056907)
  • Subqueries having COUNT() with GROUP BY could yield incorrect results. (Bug #21055139)
  • The updatable property of a view is set during view creation. If the underlying table was dropped and re-created as a nonupdatable one, the updatable property of the original view was not revised accordingly. This could cause a server exit for attempts to insert or replace into the view is made. (This problem was specific to views with multiple tables/views and did not occur with update statements.) (Bug #21039264)
  • The locking functions provided by the version_token plugin were renamed: vtoken_get_read_locks(), vtoken_get_write_locks(), and vtoken_release_locks() are now named version_tokens_lock_shared(), version_tokens_lock_exclusive(), and version_tokens_unlock(), respectively.
  • These functions also failed to have any effect because they were implicitly unlocked at the end of the statement in which they were set. (Bug #21034322, Bug #21280801)
  • Servers linked against yaSSL and compiled with GCC 4.8.2 could fail to respond correctly to connection attempts until several seconds after startup.
  • yaSSL was upgraded to version 2.3.7e. (Bug #21025377)
  • When upgrading an old data directory (MySQL 5.0 or 5.1), mysql_upgrade could fail to properly read the mysql.proc table. (Bug #20968596)
  • For tables with subpartitions, the server could exit due to incorrect error handling during partition pruning if the partition could be identified but not the subpartition. (Bug #20909518)
  • mysql_upgrade could fail to look for checked tables in the wrong database during the repair phase. (Bug #20868496)
  • DELETE could check privileges for the wrong database when table aliases were used. (Bug #20777016)
  • mysqldump used incorrect syntax for generated column definitions. (Bug #20769542)
  • Within a trigger, use of a cursor that accessed OLD or NEW values from a row could cause a server exit. (Bug #20760261)
  • If a file was specified using an --init-file option, mysqld --initialize produced errors for statements in the file such as GRANT that affect user accounts. (Bug #20546898)
  • Failure during execution of an XA PREPARE statement could result in an invalid XA transaction state. Subsequent attempts to start another XA transaction led to an ER_XAER_OUTSIDE error. (Bug #20538956)
  • The audit log plugin could audit accounts named in the audit_log_exclude_accounts system variable. (Bug #20408206)
  • If a generated foreign key index was renamed by the same ALTER TABLE statement that added a new foreign key with the same name, the server could exit. (Bug #20146455)
  • ALTER TABLE operations that dropped and added the same FULLTEXT index were not performed as in-place (fast) operations that avoid using a temporary copy of the table. (Bug #20106837)
  • When the number of days calculated by DATE_FORMAT() function was negative, the server could exit. (Bug #19985318)
  • ALTER TABLE operations to add or modify columns could create geometry columns containing invalid data due to missing valida

New in MySQL 5.6.27 (Oct 7, 2015)

  • Functionality Added or Changed:
  • InnoDB: The new innodb_numa_interleave read-only configuration option allows you to enable the NUMA interleave memory policy for allocation of the InnoDB buffer pool. When innodb_numa_interleave is enabled, the NUMA memory policy is set to MPOL_INTERLEAVE for the mysqld process. After the InnoDB buffer pool is allocated, the NUMA memory policy is set back to MPOL_DEFAULT. This option is only available on NUMA-enabled systems.
  • Thanks to Stewart Smith for the patch. (Bug #18871046, Bug #72811)
  • yaSSL was upgraded to version 2.3.8. (Bug #21888925)
  • RPM .spec files were updated so that MySQL Server builds from source RPM packages will include the proper files to take advantage of operating system NUMA capabilities. This introduces a runtime dependency on libnuma.so.1. RPM and yum detect this and refuse to install if that library is not installed. (Bug #21775221)
  • yaSSL was upgraded to version 2.3.7d. This fixes a connection-failure issue when used with the thread pool plugin. (Bug #20774956)
  • Bugs Fixed:
  • InnoDB: Reloading a table that was evicted while empty caused an AUTO_INCREMENT value to be reset. (Bug #21454472, Bug #77743)
  • InnoDB: Memory allocation sanity checks were added to the memcached code. (Bug #21288106)
  • InnoDB: A memcached flush_all command raised an assertion. A function that starts a transaction was called from within assertion code. (Bug #21239299, Bug #75199)
  • InnoDB: A data corruption occurred on ARM64. GCC builtins did not issue the correct fences when setting or unsetting the lock word. (Bug #21102971, Bug #76135)
  • InnoDB: Server shutdown was delayed waiting for the purge thread to exit. To avoid this problem, the number of calls to trx_purge() was reduced, and the trx_purge() batch size was reduced to 20. (Bug #21040050)
  • InnoDB: In READ COMMITTED mode, a REPLACE operation on a unique secondary index resulted in a constraint violation. Thanks to Alexey Kopytov for the patch. (Bug #21025880, Bug #76927)
  • InnoDB: The IBUF_BITMAP_FREE bit indicated that there was more free space in the leaf page than was actually available. (Bug #20796566)
  • InnoDB: Setting lower_case_table_names=0 on a case-insensitive file system could result in a hang condition when running an INSERT INTO ... SELECT ... FROM tbl_name operation with the wrong tbl_name letter case. An error message is now printed and the server exits when attempting to start the server with --lower_case_table_names=0 on a case-insensitive file system. (Bug #20198490, Bug #75185)
  • InnoDB: The server failed to start with an innodb_force_recovery setting greater than 3. InnoDB was set to read-only mode before redo logs were applied.
  • DROP TABLE is now supported with an innodb_force_recovery setting greater than 3. (Bug #19779113)
  • InnoDB: The trx_sys_read_pertable_file_format_id() function reported the wrong file format. (Bug #19206671)
  • Partitioning: CREATE TABLE statements that used an invalid function in a subpartitioning expression did not always fail gracefully as expected. (Bug #20310212)
  • Partitioning: Error handling for failed partitioning-related ALTER TABLE operations against non-partitioned tables was not performed correctly (Bug #20284744)
  • Partitioning: ALTER TABLE when executed from a stored procedure did not always work correctly with tables partitioned by RANGE. (Bug #16613004)
  • Replication: Repeatedly checking for ERR_LOCK_WAIT_TIMEOUT (as done, for example by repeatedly executing SHOW SLAVE STATUS) during a prolonged write lock on a table led to an assert. (Bug #21095969)
  • Replication: If statement based logging was in use, when updating multiple tables in a single statement, a single transaction could be logged as two different transactions. This was due to the binary logging process not properly identifying statements which were operating over transactional tables. The fix ensures that they are correctly identified, even if such statements do not change the contents of the tables. (Bug #16621582, Bug #21349028)
  • Replication: When the dump thread was killed while dumping an inactive binary log, some events in this log could be skipped and thus not replicated. (Bug #78337, Bug #21816399)
  • References: See also Bug #74607, Bug #19975697.
  • Replication: Under certain circumstances it was possible for Retrieved_Gtid_Set on the slave to contain gaps while no gaps appeared in Executed_Gtid_Set or the slave's binary logs. This could happen when slave rotated the relay log in such a way that the last event of this log contained the record which set gtid_next, and was then restarted after reading GTIDs from the following log. Following the restart, Retrieved_Gtid_Set contained GTIDs which were executed incorrectly as well as spurious or "phantom" gaps.
  • TYhe fix for this problem adds a GTID to Retrieved_Gtid_Set before writing the event to the relay log, rather than after. If for some reason writing to relay log fails, the GTID is removed from Retrieved_Gtid_Set. (Bug #76959, Bug #21046372)
  • References: See also Bug #17943188.
  • Replication: SAVEPOINT and ROLLBACK TO SAVEPOINT within a trigger led to an assertion. (Bug #76727, Bug #20901025)
  • Replication: While a SHOW BINLOG EVENTS statement was executing, any parallel transaction was blocked. The fix ensures that the SHOW BINLOG EVENTS process now only acquires a lock for the duration of calculating the file's end position, therefore parallel transactions are not blocked for long durations. (Bug #76618, Bug #20928790)
  • Replication: If a CREATE VIEW statement failed, it was being incorrectly written to the binary log even though it did not result in the creation of a partial view. The fix ensures that such statements are not recorded in the binary log. Additionally it was found that when a statement which had failed on a master was received by a slave with an expected error, if the statement was skipped on the slave, for example due to a replication filter, the expected error was being compared with the actual error that happened on the slave. The fix ensures that if a statement with an expected error is received by a slave, if the statement has not been filtered, only then is it compared with the actual error that happened on the slave. (Bug #76493, Bug #20797764)
  • Replication: The action specified for binlog_error_action was not always honored correctly after a hardware failure occurred during log rotation. (Bug #76379, Bug #20805298)
  • Replication: Modifying the master_info_repository or relay_log_info_repository inside a transaction and later rolling back that transaction left the repository in an unusable state. We fix this by preventing any modification of these repositories inside a transaction. (Bug #74950, Bug #20074353)
  • Replication: When relay_log_recovery is set, the error log entry that reports the new recovery positions has been extended to also report the old relay log positions. (Bug #74089, Bug #21305976)
  • Replication: When a master with --binlog_checksum=none and --gtid-mode=ON was replicating to a slave with --binlog_checksum=crc32, restarting the slave's SQL thread caused an Event crc check error. This was due to the Format_description_log_event from the master not being correctly found in existing relay logs after restarting the slave's SQL thread. The fix ensures that the Previous_gtids_log_event is correctly skipped and that the correct Format_description_log_event is found in existing relay logs after restarting the slave's SQL thread. (Bug #73806, Bug #20644100, Bug #76746, Bug #20909880)
  • Replication: When the running with --relay-log-info-repository=TABLE, the mysql.slave_relay_log_info table is updated when a transaction is committed or when a flush is performed explicitly, such during relay log rotation. If a transaction that uses any nontransactional tables (such as MyISAM tables) is split across multiple relay logs, it is partially committed on relay log flush. When gtid_mode=ON, this caused the same GTID to be used for the remaining portion of the transaction, which raised an ER_GTID_NEXT_TYPE_UNDEFINED_GROUP error.
  • We fix this issue by postponing in such cases the update of the relay log information repository that normally occurs on relay log rotation until the commit for the transaction in question has been executed.
  • This issue did not affect tables using transactional storage engines such as InnoDB. (Bug #68525, Bug #16418100)
  • The CMake checks for NUMA availability could cause compilation problems on platforms without NUMA support. (Bug #21774859)
  • Certain subqueries as arguments to PROCEDURE ANALYSE() could cause a server exit. (Bug #21350175)
  • mysql_ssl_rsa_setup could create an unwanted .rnd file in the data directory. (The file is actually created by openssl, which mysql_ssl_ras_setup invokes. mysql_ssl_rsa_setup now cleans up the file.) (Bug #21335818)
  • An assertion could be raised due to incorrect error handling if a SELECT ... FOR UPDATE subquery resulted in deadlock and caused a rollback. (Bug #21096444)
  • Selecting the result of an INSERT() function call to which input was passed as a hexidecimal string could expose more information than was passed to the function. (Bug #21056907)
  • The updatable property of a view is set during view creation. If the underlying table was dropped and re-created as a nonupdatable one, the updatable property of the original view was not revised accordingly. This could cause a server exit for attempts to insert or replace into the view is made. (This problem was specific to views with multiple tables/views and did not occur with update statements.) (Bug #21039264)
  • Servers linked against yaSSL and compiled with GCC 4.8.2 could fail to respond correctly to connection attempts until several seconds after startup.
  • yaSSL was upgraded to version 2.3.7e. (Bug #21025377)
  • For tables with subpartitions, the server could exit due to incorrect error handling during partition pruning if the partition could be identified but not the subpartition. (Bug #20909518)
  • DELETE could check privileges for the wrong database when table aliases were used. (Bug #20777016)
  • Within a trigger, use of a cursor that accessed OLD or NEW values from a row could cause a server exit. (Bug #20760261)
  • MySQL sometimes produced no warning when it was unable to interpret a character in a given character set. (Bug #20238729)
  • On Windows, the validate_password plugin could cause a server exit during the dictionary check. (Bug #18636874)
  • On Windows, setting query_cache_min_res_unit to too large a value could result in a value of 0 and a subsequent server exit. (Bug #18487951)
  • EXPLAIN of statements containing GROUP_CONCAT() could cause a server exit. (Bug #17865675)
  • On Windows, heap corruption in the audit log plugin caused server startup failure. (Bug #14700102)
  • RPM installation scripts if configuration files contained multiple datadir lines. Now the last datadir line is used. (Bug #77878, Bug #21527467)
  • For wait events, the Performance Schema uses the CYCLE timer by default, but failed to fall back to a different timer if CYCLE was unavailable. (Bug #77577, Bug #21374104)
  • Updating VARCHAR and TEXT columns in the same UPDATE statement could produce incorrect results. When a VARCHAR column was assigned to a TEXT column and the VARCHAR column was then set to a different value, the TEXT column's result contained the VARCHAR column's new value. (Bug #77135, Bug #21143080)
  • If an INFORMATION_SCHEMA query that performed a table-open operation encountered a corrupt table and attempted to repair it, a deadlock could occur, resulting in an aborted transaction without an appropriate error being reported. Such queries now do not attempt table repair. (Bug #76912, Bug #21021848)
  • mysqladmin -u root -p could exit with a segmentation fault. (Bug #76538, Bug #20802751)
  • mysqlimport --use-threads did not actually use multiple threads. (Bug #76480, Bug #20772273)
  • The optimizer sometimes generates an index for a derived table (subquery in the FROM clause). If this occurred for a statement executed within a stored program, a memory leak could occur. (Bug #76349, Bug #20728894)
  • For OS X 10.9 packages, the version_compile_os system variable indicated 10.8. (Bug #75581, Bug #20400501)
  • The optimizer could incorrectly assume an out-of-memory condition while optimizing a range scan for the OR operator, resulting in overestimation of the number of qualifying rows. (Bug #75248, Bug #20229614)
  • On platforms where the char is unsigned, the server was unable to parse collation definitions that included non-7-bit ASCII characters. Affected platforms include ARM and PowerPC. Thanks to Alexey Kopytov for the patch. (Bug #74891, Bug #20928289, Bug #20928289)
  • The Performance Schema events_statements_history table could have an ERRORS column value of 0 when other columns indicated there were errors. (Bug #74614, Bug #19929832)
  • View creation from a UNION failed with a duplicate-column error if a SELECT statement in the UNION other than the first used the same column name multiple times. (Bug #74539, Bug #19886430)
  • Empty XML elements having the form were not handled correctly by the LOAD XML statement. (Bug #67542, Bug #16171518)

New in MySQL 5.6.26 (Jul 28, 2015)

  • MySQL Enterprise Notes:
  • MySQL Enterprise Edition incorporates these changes for MySQL Enterprise Firewall:
  • The firewall implements a DETECTING intrusion-detection mode. For accounts in this mode, the firewall detects suspicious statements and writes them to the error log but does not deny access. The new Firewall_access_suspicious status variable counts the number of such statements. The sp_set_firewall_mode() stored procedure now synchronizes between in-memory rules and those in persistent storage for DETECTING mode, just as it does for PROTECTING mode.
  • A new sp_reload_firewall_rules() stored procedure reloads the in-memory rules for a registered account from the rules stored in the mysql.firewall_whitelist table, providing better control over firewall operation for individual accounts.
  • A new mysql_firewall_flush_status() UDF resets firewall access-counter status variables.
  • To upgrade MySQL Enterprise Firewall if you have a version installed from a previous release, first uninstall the old version. Then install the new version and register your firewall configuration again. For instructions, see Installing or Uninstalling MySQL Enterprise Firewall.
  • Performance Schema Notes:
  • Current-event timing now provides more information. Previously, while a wait, stage, or statement event was executing, the respective tables displayed the event with TIMER_START populated, but with TIMER_END and TIMER_WAIT as NULL:
  • events_waits_currentevents_stages_currentevents_statements_current
  • To make it possible to determine how how long a not-yet-completed event has been running, the timer columns now are set as follows:
  • TIMER_START is populated (unchanged from previous behavior)
  • TIMER_END is populated with the current timer value
  • TIMER_WAIT is populated with the time elapsed so far (TIMER_END − TIMER_START)
  • To find events that have not yet completed (that is, have no END_EVENT_ID) and have taken longer than N picoseconds thus far, monitoring applications can use this expression in queries:
  • WHERE END_EVENT_ID IS NULL AND TIMER_WAIT > N
  • (Bug #75156, Bug #20889406)
  • Security Notes:
  • Security Fix: Due to the LogJam issue (https://weakdh.org/), OpenSSL has changed the Diffie-Hellman key length parameters for openssl-1.0.1n and up. OpenSSL has provided a detailed explanation at http://openssl.org/news/secadv_20150611.txt. To adopt this change in MySQL, the following modifications were made:
  • The key length used in vio/viosslfactories.c for creating Diffie-Hellman keys has been increased from 512 to 2,048 bits.
  • The linked OpenSSL library for the MySQL Commercial Server has been updated from version 1.0.1m to version 1.0.1p. Issues fixed in the new version are described at http://www.openssl.org/news/vulnerabilities.html. This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead.
  • (Bug #77275, Bug #21221862, Bug #18367167, Bug #21307471, Bug #21449838)
  • Functionality Added or Changed:
  • Replication: When using a multi-threaded slave, each worker thread has its own queue of transactions to process. In previous MySQL versions, STOP SLAVE waited for all workers to process their entire queue. This logic has been changed so that STOP SLAVE first finds the newest transaction that was committed by any worker thread. Then, it waits for all workers to complete transactions older than that. Newer transactions are not processed. The new logic allows STOP SLAVE to complete faster in case some worker queues contain multiple transactions. (Bug #75525, Bug #20369401)
  • Previously, the max_digest_length system variable controlled the maximum digest length for all server functions that computed statement digests. However, whereas the Performance Schema may need to maintain many digest values, other server functions such as MySQL Enterprise Firewall need only one digest per session. Increasing the max_digest_length value has little impact on total memory requirements for those functions, but can increase Performance Schema memory requirements significantly. To enable configuring digest length separately for the Performance Schema, its digest length is now controlled by the new performance_schema_max_digest_length system variable. (Bug #20963147)
  • Previously, changes to the validate_password plugin dictionary file (named by the validate_password_dictionary_file system variable) while the server was running required a restart for the server to recognize the changes. Now validate_password_dictionary_file can be set at runtime and assigning a value causes the named file to be read without a restart.
  • In addition, two new status variables are available. validate_password_dictionary_file_last_parsed indicates when the dictionary file was last read, and validate_password_dictionary_file_words_count indicates how many words it contains. (Bug #66697, Bug #14588145)
  • Bugs Fixed:
  • InnoDB: The ib_cursor_moveto function did not accept a search tuple with fewer fields than are defined for the index. (Bug #21121197, Bug #77083)
  • InnoDB: The ib_table_truncate function failed to release a transaction, resulting in a hang on server shutdown. (Bug #21121164, Bug #77084)
  • InnoDB: The ib_open_table_by_id function passed an incorrect argument to dict_table_open_on_id. (Bug #21121084, Bug #77100)
  • InnoDB: On Unix-like platforms, os_file_create_simple_no_error_handling_func and os_file_create_func opened files in different modes when innodb_flush_method was set to O_DIRECT. (Bug #21113036, Bug #76627)
  • InnoDB: Opening a foreign key-referenced table with foreign_key_checks enabled resulted in an error when the table or database name contained special characters. (Bug #21094069)
  • InnoDB: The page_zip_verify_checksum function returned false for a valid compressed page. (Bug #21086723)
  • InnoDB: An ALTER TABLE ... IMPORT TABLESPACE operation on a table with prefix index failed with a schema mismatch error. (Bug #20977779, Bug #76877)
  • InnoDB: A failure to load a change buffer bitmap page during a concurrent delete tablespace operation caused a server exit. (Bug #20878735)
  • InnoDB: Importing a tablespace with a full-text index resulted in an assertion when attempting to rebuild the index. (Bug #20637494)
  • InnoDB: After dropping a full-text search index, the hidden FTS_DOC_ID and FTS_DOC_ID_INDEX columns prevented online DDL operations. (Bug #20590013, Bug #76012)
  • InnoDB: The InnoDB memcached plugin handled unsigned NOT NULL integer columns incorrectly. Thanks to Piotr Jurkiewicz for the patch. (Bug #20535517, Bug #75864)
  • InnoDB: A DROP DATABASE operation raised an assertion. (Bug #19929435)
  • InnoDB: An index record was not found on rollback due to inconsistencies in the purge_node_t structure. (Bug #19138298, Bug #70214, Bug #21126772, Bug #21065746)
  • Partitioning: In certain cases, ALTER TABLE ... REBUILD PARTITION was not handled correctly when executed on a locked table. (Bug #75677, Bug #20437706)
  • Replication: If flushing the cache to the binary log failed, for example due to a disk problem, the error was not detected by the binary log group commit logic. This could cause inconsistencies between the master and the slave. The fix uses the binlog_error_action variable to decide how to handle this situation. If binlog_error_action=ABORT_SERVER, then the server aborts after informing the client with an ER_BINLOGGING_IMPOSSIBLE error. If binlog_error_action=IGNORE_ERROR, then the error is ignored and binary logging is disabled until the server is restarted again. The same is mentioned in the error log file, and the transaction is committed inside the storage engine without being added to the binary log. (Bug #76795, Bug #20938915)
  • Replication: When using GTIDs, a multi-threaded slave which had relay_log_recovery=1 and that stopped unexpectedly could encounter a relay-log-recovery cannot be executed when the slave was stopped with an error or killed in MTS mode error upon restart. The fix ensures that the relay log recovery process checks if GTIDs are in use or not. If GTIDs are in use, the multi-threaded slave recovery process uses the GTID protocol to fill any unprocessed transactions. (Bug #73397, Bug #19316063)
  • Replication: When two slaves with the same server_uuid were configured to replicate from a single master, the I/O thread of the slaves kept reconnecting and generating new relay log files without new content. In such a situation, the master now generates an error which is sent to the slave. By receiving this error from the master, the slave I/O thread does not try to reconnect, avoiding this problem. (Bug #72581, Bug #18731252)
  • Compilation failed when building MySQL without the Performance Schema. (Bug #21229433)
  • Incorrect cost calculation for the semi-join Duplicate Weedout strategy could result in a server exit. (Bug #21184091)
  • MySQL Enterprise Firewall recorded prepared statements as they were received by the server, not as normalized digests. (Bug #20929568)
  • Identifiers in normalized statements were sometimes quoted and sometimes not, an inconsistency that caused matching failure for statement digests and digest texts. This caused problems for MySQL Enterprise Firewall and for Performance Schema aggregation by digest. Identifiers now are quoted consistently. (Bug #20896539)
  • For MySQL Enterprise Firewall operation, max_digest_length had to be larger than mysql_firewall_max_query_size or normalized statements were truncated. (Bug #20894024)
  • Enabling MySQL Enterprise Firewall and binary logging could result in the server reading freed memory. (Bug #20848324)
  • For large values of max_digest_length, the Performance Schema could encounter an overflow error when computing memory requirements, resulting in a server exit. (Bug #20738072)
  • The Spencer regex library used for the REGEXP operator could be subject to heap overflow in some circumstances. (Bug #20642505)
  • A buffer-overflow error could occur for mysqlslap during option parsing. (Bug #20605441)
  • An off-by-one error in string-copying code could result in a buffer overflow. (Bug #20359808)
  • GROUP BY or ORDER BY on a CHAR(0) NOT NULL column could lead to a server exit. (Bug #19660891)
  • For some status variables that should monotonically increase, SHOW GLOBAL STATUS in one session could show them as decreasing when other concurrent sessions changed user or disconnected. (Bug #18591145)
  • mysql-systemd-start failed if datadir was set in /etc/my.cnf. (Bug #77357, Bug #21262883)
  • A call to the MySQL Enterprise Firewall sp_set_firewall_mode() stored procedure with an invalid user name produced an error but added the user to the firewall_users table anyway. (Bug #76914, Bug #21021875)
  • Ubuntu packages were missing dependencies for killall and psmisc. (Bug #76716, Bug #20893836)
  • On OS X 10.10 (Yosemite), mysqld failed to start automatically. The startup item has been replaced with a launchd job, which enables the preference pane checkbox for automatic startup to work again. (Bug #74434, Bug #19858350)
  • When choosing join order, the optimizer could incorrectly calculate the cost of a table scan and choose a table scan over a more efficient eq_ref join. (Bug #71584, Bug #18194196)

New in MySQL 5.6.23 (Feb 2, 2015)

  • Security Notes:
  • The linked OpenSSL library for the MySQL Commercial Server has been updated from version 1.0.1j to version 1.0.1k. Issues fixed in the new version are described at http://www.openssl.org/news/vulnerabilities.html.
  • This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #20375530)
  • Functionality Added or Changed:
  • Support for the SSL 2.0 and SSL 3.0 protocols has been disabled because they provide weak encryption. (Bug #19820550)
  • yaSSL was upgraded to version 2.3.7. (Bug #19695101, Bug #20201864)
  • The valid date range of the SSL certificates in mysql-test/std_data has been extended to the year 2029. (Bug #18366947)
  • Bugs Fixed:
  • InnoDB: A tablespace export operation set the purge state to PURGE_STATE_STOP but the purge thread did not check the purge state until the current purge operation was completed. In the case of a large history list, the tablespace export operation was delayed, waiting for the current purge operation to finish. The purge state is now checked with every purge batch. (Bug #20266847, Bug #75298)
  • InnoDB: An ALTER TABLE ... ADD INDEX operation raised an assertion due to assertion code that did not allow an online index status of ONLINE_INDEX_ABORTED_DROPPED. The assertion code has been relaxed. (Bug #20198726)
  • InnoDB: An error occurred when the push_warning_printf function was invoked during server recovery. This function was previously used to print a warning message to the client. Also, current_thd was NULL when the server was restarted. (Bug #20144839)
  • InnoDB: An ALTER TABLE operation that changed the name of a foreign key column resulted in a failure when reloading the foreign key constraint. The previous column name remained in the data dictionary cache instead of being evicted. (Bug #20031243)
  • InnoDB: Error messages regarding a size limitation on BLOB or TEXT data inserted in a single transaction have been revised. (Bug #19975322)
  • InnoDB: DML operations on a table with full-text search indexes raised an invalid assertion. (Bug #19905246)
  • References: This bug is a regression of Bug #19314480.
  • InnoDB: A multiple-table delete operation caused the server to halt. (Bug #19815702)
  • InnoDB: A FLUSH TABLES operation raised an assertion. (Bug #19803418)
  • InnoDB: With change buffering enabled, a buffered sequence of operations that should not have been buffered resulted in an Unable to purge a record error. (Bug #19528825, Bug #73767)
  • InnoDB: On non-Windows platforms, os-file_pread and os_file_pwrite functions return -1 when an error occurs. This value was printed in an error message as the number of bytes read or written. Instead of printing the -1 value in the error message, a separate error message indicating a system call failure is now printed. Thanks to David Bennett for the patch. (Bug #19315210, Bug #73365)
  • InnoDB: A slow shutdown (innodb_fast_shutdown=0) after crash recovery raised an assertion. Slow shutdown did not wait for background rollback operations to finish before proceeding. (Bug #16862810)
  • InnoDB: The integer column value was handled incorrectly for the memcached incr and decr commands. (Bug #69415, Bug #20083106, Bug #74874, Bug #20044123)
  • Partitioning: A failed ALTER TABLE ... TRUNCATE PARTITION statement or a failed TRUNCATE TABLE statement against a partitioned table sometimes left inconsistent metadata in the table cache; subsequent SQL statements reusing this metadata failed, and could in some cases also lead to a failure of the server. (Bug #74292, Bug #19786861)
  • Replication: If a client thread on a slave executed FLUSH TABLES WITH READ LOCK while the master executed a DML, executing SHOW SLAVE STATUS in the same client became blocked, causing a deadlock. The fix ensures that the read lock is only held during the period that the relay log is being updated and the deadlock is avoided. (Bug #19843808)
  • Replication: When an XA transaction was active, executing an internal rollback, for example using the BINLOG statement, resulted in an assertion. The fix ensures that a rollback happens only for a slave when a transaction spans multiple binary log files. Rollback does not happen now if the Format_description comes from the BINLOG statement being executed in the MySQL client. (Bug #74597, Bug #19928622)
  • Replication: In normal usage, it is not possible for a slave to have more GTIDs than the master. But in certain situations, such as after a hardware failure or incorrectly cleared gtid_purged, the master's binary log could be truncated. This fix ensures that in such a situation, the master now detects that the slave has transactions with GTIDs which are not on the master. An error is now generated on the slave and the I/O thread is stopped with an error. The master's dump thread is also stopped. This prevents data inconsistencies during replication. (Bug #72635, Bug #18789758)
  • Replication: When using SHOW SLAVE STATUS to monitor replication performance, Seconds_Behind_Master sometimes displayed unexpected lag behind the master. This was caused by Previous_gtids_log_events being written to the slave's relay log with a timestamp behind the master, and then being used to calculate the Seconds_Behind_Master. This fix ensures that events generated on the slave that are added to the relay log and are not used when calculating Seconds_Behind_Master. (Bug #72376, Bug #18622657)
  • On Ubuntu 14.10, MySQL install operations could fail to reload AppArmor. (Bug #20092641)
  • EXPLAIN within an XA transaction could raise an assertion. (Bug #19941492)
  • Binary log files created by streaming the binary log from a remote server with mysqlbinlog were given an access mode more permissive than the original files. (Bug #19649868)
  • If the audit_log plugin encountered a disk-full error, the server would exit.
  • Now, if the file system to which the audit log is being written fills up, a “disk full” error is written to the error log. Audit logging continues until the audit log buffer is full. If free disk space has not been made available by the time the buffer fills, client sessions will hang, and stopping the server at the time of client sessions hanging will result in audit log corruption. To avoid this if client sessions are hung, ensure that free space is available on the audit logging file system before stopping the server. (Bug #19411485)
  • For failure to create a temporary table due to being out of file descriptors, the server exited rather than returning an error. (Bug #18948649)
  • For some queries that contained a derived table (subquery in the FROM clause), delay of materialization resulted in a suboptimal execution plan due to a less accurate row-count estimate. (Bug #18607971)
  • For UPDATE and DELETE statements, the server could exit after attempting to access an uninitialized data structure. (Bug #18036143)
  • Starting the server with start service or mysqld_safe could result in failure to use the correct plugin directory. (Bug #17619241)
  • FLUSH TABLES on a FEDERATED table failed if the table had been idle longer than the wait_timeout time plus the TCP keepalive time. (Bug #17599258)
  • Selecting all columns from INFORMATION_SCHEMA.TABLES did not reopen tables if they were in the table cache, but selecting a subset of those columns under the same conditions did reopen tables. (Bug #16869534)
  • If my_write() encountered a disk-full condition, it could return an incorrect error value. (Bug #16078792, Bug #19984788)
  • InnoDB boolean full-text searches incorrectly handled + combined with parentheses; for example, +word1 +(>word2

New in MySQL 5.6.22 (Dec 2, 2014)

  • Compilation Notes:
  • Noisy compiler warnings on FreeBSD 10 were silenced. (Bug #18790490)
  • CMake workarounds for older Mac OS X and XCode versions were removed. On Mac OS X, compilation always uses Clang, even for 32-bit builds.
  • Compilation on Mac OS X is now supported for Mac OS 10.8 and up, using XCode 5 and up. Compilation on older versions may work but is unsupported. (Bug #18510941)
  • Previously, the MYSQL_MAINTAINER_MODE CMake option was turned on by default for debug builds and off for release builds, and MYSQL_MAINTAINER_MODE caused -Werror to be enabled when building with GCC. This made it cumbersome to enable -Werror under certain conditions, such as when compiling with Clang.
  • Now, MYSQL_MAINTAINER_MODE is on by default when compiling debug builds with GCC, and MYSQL_MAINTAINER_MODE enbles -Werror regardless of whether GCC or Clang is used. Enabling -Werror with Clang can be done simply by explicitly setting -DMYSQL_MAINTAINER_MODE=1 when running CMake. In addition, some compilation warnings reported by Clang 3.4 were fixed, making it possible to build the default debug build with -Werror. (Bug #18313717)
  • Build support was modified to produce the same warnings for Clang as for gcc. (Bug #17959689)
  • CMake configuration for the Clang compiler sets more appropriate flags for building on Linux. Specifically, -g -fno-omit-frame-pointer -fno-strict-aliasing is now added. (Bug #17633291)
  • Security Notes:
  • The linked OpenSSL library for the MySQL Commercial Server has been updated from version 1.0.1h to version 1.0.1j. Issues fixed in the new version are described at http://www.openssl.org/news/vulnerabilities.html.
  • This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #74174, Bug #19717832)
  • Functionality Added or Changed:
  • Replication: The variable binlogging_impossible_mode has been renamed binlog_error_action. binlogging_impossible_mode is now deprecated. (Bug #19507567)
  • The new -DWITH_UBSAN=ON CMake option enables the Undefined Behavior Sanitizer. This feature is supported by GCC 4.9 and up, and Clang 3.4 and up. (Bug #19587393)
  • Bugs Fixed:
  • InnoDB: An ALTER TABLE operation raised an assertion. When a foreign key object was removed from the dictionary cache, an incorrect foreign key object was removed from the rb-tree. (Bug #19908343)
  • References: This bug is a regression of Bug #18806829.
  • InnoDB: In debug builds, setting the innodb_limit_optimistic_insert_debug debug configuration option to 1 caused an infinite B-tree page split. (Bug #19904003, Bug #74605)
  • InnoDB: The dict_set_corrupted() function attempted to update the clustered index of the SYS_INDEXES data dictionary table incorrectly. (Bug #19584379)
  • InnoDB: Pages with a checksum value of zero were incorrectly treated as empty pages. A page should only be considered empty if its checksum value and LSN field values are zero. (Bug #19500258, Bug #73689)
  • References: This bug is a regression of Bug #17335427.
  • InnoDB: The InnoDB data dictionary was not updated when a ALTER TABLE ... CHANGE COLUMN operation changed the case of the column name. (Bug #19465984)
  • InnoDB: A memory access violation caused fts_optimize_thread and mysqld to terminate. (Bug #19314480)
  • InnoDB: A procedure, called from a function to perform an operation on a temporary table, caused the server to halt. (Bug #19306524)
  • InnoDB: Attempting to shut down the server after starting the server with innodb_force_recovery=6 resulted in a hang. (Bug #19265668, Bug #73341)
  • InnoDB: A COMMIT operation related to full-text search resulted in a segmentation fault. (Bug #18503734)
  • InnoDB: If a database is named using uppercase letters on a MySQL server with lower_case_table_names=2 (which is default on Mac OS X), InnoDB stores the database name as specified in the InnoDB internal system table (SYS_TABLES) but stores the name in lowercase on disk. During crash recovery, the case mismatch resulted in a conflict that would mark the tablespace .ibd file as missing. The patch for this bug converts database names to lowercase on crash recovery. (Bug #18412598, Bug #72043)
  • InnoDB: In debug builds, the InnoDB Lock Monitor asserted after a DROP TABLE operation, and the InnoDB Monitor encountered an assertion in buf_page_get_gen. (Bug #18062698, Bug #71343, Bug #18173184, Bug #68116)
  • InnoDB: A CREATE TABLE operation that failed with innodb_strict_mode=ON would succeed without printing a warning with innodb_strict_mode=OFF. (Bug #17852083)
  • InnoDB: For explicit cache coherency, a write barrier was added to the head of os_thread_create_func(), and a read barrier was added to before the assertion code in rw_lock_free_func(). (Bug #13364876, Bug #62692, Bug #18870970, Bug #72809)
  • InnoDB: The MySQL 5.6.20 patch for Bug #16963396 / MySQL Bug #69477 limited the size of redo log BLOB writes to 10% of the redo log file size. This limitation has been relaxed. Redo log BLOB writes are now limited to 10% of the total redo log size (innodb_log_file_size * innodb_log_files_in_group).
  • As a result, innodb_log_file_size * innodb_log_files_in_group should be 10 times larger than the largest BLOB data size found in the rows of your tables plus the length of other variable length fields (VARCHAR, VARBINARY, and TEXT type fields). No action is required if innodb_log_file_size * innodb_log_files_in_group is already sufficiently large or if your tables contain no BLOB data. (Bug #73707, Bug #19498877)
  • Partitioning: When multiple columns are used in KEY partitioning, their order may help determine the partition in which the row is placed. Changing this order by means of an ALTER TABLE that uses ALGORITHM=INPLACE can lead to inconsistency when placing rows in partitions; in other words, a row inserted before such an operation operation is placed in one partition, but the same row inserted afterwards is placed in a different one. For this reason, altering the order of a multicolumn index online is no longer allowed when that index is also used as the base for partitioning the table by KEY; instead, you must use a copying ALTER TABLE to perform the change. (Bug #17896265)
  • Replication: When using a MySQL version that had been compiled with the WITH_DEBUG option enabled, using expire_logs_days to purge binary logs caused a restart to crash the server. This problem arose after the fix for Bug #17283409. The fix ensures that current_thd is checked before calling DEBUG_SYNC(). (Bug #19553099)
  • Replication: Sometimes the slave I/O thread leaves a partial group in the current relay log, for example when it is killed or stopped. After it is restarted, a new relay log is created on rotation and a pair of ROTATE_EVENT and FORMAT_DESCRIPTION_EVENT is replicated from master and written into the new relay log. When using a multi-threaded slave, problems such as error 1755 were encountered when applying the remaining part of the group in the relay log. This fix ensures that if MASTER_AUTO_POSITION is enabled, then the worker rolls back the partial group, finishes its work, and then applies the new complete copy of the group. If MASTER_AUTO_POSITION is disabled, the worker does not roll back the partial group. (Bug #19545298)
  • Replication: When using row-based replication with slave_type_conversions enabled, a binary log with more than one Rows_log_event in succession caused a crash. This was due to the temporary tables generated as part of the slave_type_conversions process being released too early. This fix ensures that the temporary tables are not released too early, and also ensures that long transactions do not cause an out of memory error. (Bug #18770469, Bug #19704825)
  • Replication: When using binary log files that had been manually copied from the master, for example to avoid I/O thread reading delay, the multi-threaded slave generated error 1755. Because the Previous_gtid_log_event is logged using the master's server_id and not the slave's server_id, the previous events were not being skipped correctly. This fix ensures that the events in Previous_gtid_log_event are always skipped, regardless of whether they are from the relay log (generated on the slave) or from the binary log (generated on the master and manually copied to the slave as the relay log). (Bug #17812024)
  • Replication: When replicating from an earlier version MySQL master, such as version 4.1, checksums are not used for events. Replicating to a slave running a newer version of MySQL, such as version 5.6, which has slave_sql_verify_checksum enabled by default meant that the last 4 bytes of events from the older master were being incorrectly interpreted as the checksum. A warning is now generated and to avoid such a situation, set slave_sql_verify_checksum=0 to disable checksums on the slave. (Bug #17276183)
  • Replication: When restarting MySQL with relay_log_recovery enabled to recover from a crash, if the SQL thread had never been started, the position from which to start recovery was not correctly initialized because Relay_Master_Log_File was missing. This fix ensures that in such a situation each of the relay logs, starting from the first relay log file, is searched for a rotate event from the master, which specifies where replication started from. This rotate event is then used to set the SQL thread's Relay_Master_Log_File and Relay_Log_Pos and recovery continues as normal. (Bug #73039, Bug #19021091)
  • Replication: When using GTIDs for replication and with MASTER_AUTO_POSITION enabled, if a slave requested GTIDs which had been already been purged by the master, the master was sending all available GTIDs. This happened because the master reads all available binary logs and searches for a binary log which contains a GTID that is not contained in the union of gtid_executed and gtid_retrieved. If such a GTID is found, the master starts sending the information starting from that location. In a situation where the union of the slave's gtid_executed and gtid_retreived set did not contain the master's gtid_purged set, the slave would expect GTIDs which had already been purged by the master. This fix ensures that in such a situation, the slave's I/O thread is aborted with an error "Master has purged binary logs containing GTIDs that the slave requires.". (Bug #73032, Bug #19012085)
  • Replication: A kernel mutex contention was being caused because mysqlbinlog was calling localtime() for every event read, which in turn called stat(/etc/localtime). This fix ensures that mysqlbinlog uses localtime_r(), which is optimized to store the read only timezone internal structure. This also means that mysqlbinlog now establishes the time zone at the beginning of processing and you can not change it during processing. This is the same behavior as MySQL server. (Bug #72701, Bug #18808072)
  • Replication: The global scope for the sql_log_bin system variable has been deprecated, and this variable can now be set with session scope only. The statement SET GLOBAL SQL_LOG_BIN now produces an error. It remains possible for now to read the global value of sql_log_bin, but you should act to remove from your applications any dependencies on reading this value, as the ability to do so will be removed in a future MySQL release. (Bug #67433, Bug #15868071)
  • InnoDB table checksum calculation could yield an incorrect result if the value of the innodb_checksum_algorithm system variable was modified during the operation. (Bug #19931177)
  • GROUP BY on a CHAR(0) NOT NULL column could lead to a server exit. (Bug #19660891)
  • With the validate_password plugin activated and dictionary lookups enabled, passing a user-defined variable to PASSWORD() could cause a server exit. (Bug #19388163)
  • Debian packages were built using the complex set of character sets, not the all set of character sets. (Bug #19363801)
  • mysqldump failed to report a disk-full error if the dump destination was located on an NFS mount. (Bug #18817867)
  • InnoDB permitted a foreign key to be created which referenced a parent table for which the user did not have sufficient privileges. (Bug #18790730)
  • Copying InnoDB tables containing full-text columns from Windows to Linux caused a server exit on Linux during full-text index initialization. (Bug #18285007)
  • On Windows, the replace utility did not work. (Bug #16581605)
  • On CentOS 6, specifying a relative path name for the --socket option caused MySQL startup script failure. (Bug #74111, Bug #19775856)
  • In Solaris 11.2, dtrace -V output changed from Sun D to Oracle D, causing detection of DTrace availability to fail during MySQL configuration. (Bug #73826, Bug #19586917)
  • mysql_config --libs_r produces output containing link flags for libmysqlclient_r, even though that library was removed in MySQL 5.5 and replaced with a symlink to the underlying libmysqlclient library. The output now refers directly to libmysqlclient. (The implication is that it is no longer necessary to maintain the symlink for the sake of being able to use mysql_config --libs_r.) (Bug #73724, Bug #19506315)
  • For statement digest calculation, the Performance Schema failed to recognize signed literal numbers as values representable by ? and created multiple digests for statements that should have had the same signature. Now all instances of unary plus and unary minus followed by a number reduce to ? in digests. (Bug #73504, Bug #19389709)
  • Compilation on Windows using Visual Studio 2013 resulted in “unresolved external symbol” errors. (Bug #73461, Bug #19351573)
  • OLD_PASSWORD() is deprecated, but no warning was produced when it was invoked. (Bug #73376, Bug #19285177)
  • Certain queries for which subquery materialization or UNION DISTINCT was used together with a hash index on a temporary table could produce incorrect results or cause a server exit. (Bug #73368, Bug #19297190)
  • The IS_FREE_LOCK() and IS_USED_LOCK() function implementations contained a race condition due to which they could access freed memory when a user lock was concurrently checked and freed. Accessing freed memory could result in an incorrect function return value or server exit. (Bug #73123, Bug #19070633)
  • LOCK TABLES sometimes acquired an insufficiently strong lock for implicitly locked tables. (Bug #72887, Bug #18913551)
  • The ENABLED_LOCAL_INFILE CMake option incorrectly was enabled by default. (Bug #72106, Bug #18448743)
  • Use of ODBC-format date literals could produce incorrect query results. (Bug #69233, Bug #16812821)
  • mysql_install_db ignored option files in the default locations. (Bug #68807, Bug #16570238)
  • mysql_setpermission failed to properly quote user names in SQL statements that it generated. (Bug #66317, Bug #14486004)

New in MySQL 5.6.21 (Sep 24, 2014)

  • InnoDB Notes:
  • The --skip-innodb option is now deprecated and its use results in a warning. It will be removed in a future MySQL release. This also applies to its synonyms (--innodb=OFF, --disable-innodb, and so forth).
  • MySQL Enterprise Notes:
  • MySQL Enterprise Edition now includes a set of encryption functions based on the OpenSSL library that expose OpenSSL capabilities at the SQL level. These functions enable Enterprise applications to perform the following operations:
  • Implement added data protection using public-key asymmetric cryptography
  • Create public and private keys and digital signatures
  • Perform asymmetric encryption and decryption
  • Use cryptographic hashing for digital signing and data verification and validation
  • For more information, see MySQL Enterprise Encryption Functions.
  • Functionality Added or Changed:
  • Internally, spatial data types such as Geometry are represented as BLOB values, so when invoked with the --hex-blob option, mysqldump now displays spatial values in hex. (Bug #43544, Bug #11752369)
  • Bugs Fixed:
  • InnoDB; Partitioning: Large numbers of partitioned InnoDB tables could consume much more memory when used in MySQL 5.6 or 5.7 than the memory used by the same tables used in previous releases of the MySQL Server. (Bug #17780517, Bug #70641)
  • InnoDB: An ALTER TABLE ... ADD FOREIGN KEY operation could cause a serious error. (Bug #19471516, Bug #73650)
  • InnoDB: In debug builds, an INSERT operation affecting compressed tables would raise a sync-related assertion. (Bug #19295893)
  • InnoDB: Retrieval of multiple values with a single get command would return incorrect results instead of an error message. The InnoDB memcached plugin does not currently support retrieval of multiple values with a single get command. (Bug #19172212, Bug #72453)
  • InnoDB: Attempting to perform operations on a timed out key would cause the memcached daemon to crash and restart. (Bug #19172013, Bug #72586)
  • InnoDB: With a transaction isolation level less than or equal to READ COMMITTED, gap locks were not taken when scanning a unique secondary index to check for duplicates. As a result, duplicate check logic failed allowing duplicate key values in the unique secondary index. (Bug #19140907)
  • InnoDB: In rare cases, the purge process would attempt to delete a secondary index record that was not marked for deletion, resulting in an inconsistent secondary index. (Bug #19138298)
  • InnoDB: During recovery, a segmentation fault would occur when marking a table as corrupt. (Bug #18942294)
  • InnoDB: A failed in-place ALTER TABLE operation would leave behind non-unique temporary file names in the data dictionary preventing future ALTER TABLE operations on the same table due to temporary file name conflicts. To avoid this problem, temporary file names are made unique by appending a static global number that is initialized to a random distributed 32-bit number using ut_time() and ut_crc32(). The number is then incremented atomically for each assigned temporary file name. Previously, temporary files were named using the format #sql-ibtid, where tid is the table ID. Temporary files are now named using the format #sql-ibtid-inc, where tid is the table ID and inc is the incremented number. (Bug #18734396, Bug #72594)
  • InnoDB: srv_active_wake_master_thread() was called directly in innobase_commit and innobase_prepare, waking up the master thread and incrementing srv_activity_count. srv_active_wake_master_thread() should only be called after committing write transactions, not after read-only transactions or rollbacks. This patch also replaces some calls to srv_active_wake_master_thread() with calls to ib_wake_master_thread(). (Bug #18477009, Bug #72137)
  • InnoDB: An in-place ALTER TABLE operation on a table with a broken foreign key constraint could raise an assertion. (Bug #16869435)
  • InnoDB: Inserting a record into an InnoDB table with a key that falls between the maximum key of a full page and the minimum key of the “next” page could result in unnecessary page splits and under-filled pages. If the insert point is at the end of a page, InnoDB now attempts to insert to the next page before splitting the page. (Bug #15923864, Bug #67718)
  • Replication: After the fix for Bug #16861624, killing a multi-threaded slave worker which was waiting for a commit lock caused a debug assertion to fail. This fix ensures that such a situation can not occur. (Bug #19311260)
  • Replication: When committing a transaction, a flag is now used to check whether a thread has been created, rather than checking the thread itself, which uses more resources, particularly when running the server with master_info_repository=TABLE. (Bug #18684222)
  • Replication: A multi-threaded slave now checks that a free worker is available to dispatch the next event. In previous versions, a multi-threaded slave crashes with a worker error if the thread coordinator can not find a free worker. The crash was caused when the coordinator did not return a free worker, for example if the coordinator was aborted at the same time using STOP SLAVE. (Bug #18363515)
  • Replication: When mysqlbinlog processed multiple binary log files into a single output file, this file was not in a useful state for point-in-time recovery, when it failed with the error, When @@SESSION.GTID_NEXT is set to a GTID, you must explicitly set it to a different value after a COMMIT or ROLLBACK. Please check GTID_NEXT variable manual page for detailed explanation. Current @@SESSION.GTID_NEXT is 'xyz'. When mysqlbinlog processes a binary log containing GTIDs, it outputs SET gtid_next statements, but gtid_next is set to undefined whenever a commit occurs; this left gtid_next undefined when the server had finished processing the output from mysqlbinlog. When the next binary log file started with one or more anonymous statements or transactions, the combination of gtid_next being left undefined at the end of the first binary log and the second binary log containing anonymous transactions to the error described previously (Error 1837, ER_GTID_NEXT_TYPE_UNDEFINED_GROUP). To fix this issue, now, whenever mysqlbinlog encounters this situation, it inserts SET gtid_next = AUTOMATIC if required to avoid leaving the previous binary log with gtid_next undefined. In addition, as a result of this fix, mysqlbinlog no longer outputs session variable information for every binary log; now, this value is printed only once unless it changes. (Bug #18258933, Bug #71695)
  • Replication: When the I/O thread reconnected to a master using GTIDs and multithreaded slaves while in the middle of a transaction, it failed to abort the transaction, leaving a partial transaction in the relay log, and then retrieving the same transaction again. This occurred when performing a rotation of the relay log. Now when reconnecting, the server checks before rotating the log in such cases, and waits first for any ongoing transaction to complete. (Bug #17326020)
  • Replication: When using semisynchronous replication, if the binary log position was changed to a future position on a slave then an assertion error was generated on the master. This fix ensures that in such a situation the future position is correctly acknowledged and an error is instead generated on the slave. (Bug #70327, Bug #17453826)
  • Replication: When an SQL thread which was waiting for a commit lock was killed and restarted it caused a transaction to be skipped on slave. This fix ensures that thread positions are correctly persisted and transactions resume at the correct position. (Bug #69873, Bug #17450876)
  • Replication: On a master that is using semisynchronous replication, where rpl_semi_sync_master_wait_no_slave is enabled and rpl_semi_sync_master_timeout is set to long timeout, killing the I/O thread could cause the server to hang on shutdown. This fix ensures that if the dump thread finds that there no semisynchronous slaves connected to the master, the setting of rpl_semi_sync_master_wait_no_slave is ignored and the shutdown proceeds correctly. (Bug #71047, Bug #17879675)
  • Replication: When using row-based replication, setting a slave's slave_rows_search_algorithms variable to HASH_SCAN caused an ER_RECORD_NOT_FOUND error even though that record existed in the storage layer. This fix ensures that the unique key for each record is correctly maintained and such a situation does not occur. (Bug #72788, Bug #18860225)
  • Replication: When an event group was spanned across multiple relay log files, a slave could incorrectly identify GTID-header group boundaries. This meant that when a transaction was retried, or if the SQL thread was stopped in the middle of a transaction after some rotates, the Gtid_log_event was being silently skipped on the slave, and the transaction was logged with the slave's GTID. This problem also impacted on using START SLAVE UNTIL MASTER_LOG_POS = log_pos; with GTIDs enabled. If log_pos was in the middle of a transaction, the Gtid_log_event was not correctly detected as the beginning of the transaction and replication stopped before this event. With this fix, threads correctly detect that they are part of a group, and this is used to check if a Gtid_log_event is part of a transaction. (Bug #72313, Bug #18652178, Bug #18306199)
  • Replication: The error messages generated when a duplicate server UUID causes issues during replication have been improved. The slave error now identifies the duplicate server UUID and the master error identifies the zombie thread that has been killed. (Bug #72578, Bug #18731211)
  • Replication: The CLIENT_REMEMBER_OPTIONS flag for compressed slave connections is no longer reset and all options are retained. This restores functionality of all options to compressed slave connections. (Bug #72901, Bug #18923691, Bug #73324, Bug #19244772)
  • Replication: When using row-based replication, running a long transaction involving a large number of events could trigger an Out of Memory (OOM) error if the slave's table structure was not compatible with the master's table structure. Such an incompatible situation could occur if the table on the slave had been manually changed, or when replicating between different MySQL versions that have different data types. This OOM error was caused because the virtual temporary tables created for the row conversion were not being freed until the end of the transaction, which was a problem when replicating large numbers of events. Starting with this version, such virtual tables are correctly freed during the conversion process. (Bug #72610, Bug #18770469)
  • With DTrace support enabled, certain other compilation options could cause the build to fail. (Bug #19506247)
  • yaSSL client code did not validate the encryption size or session ID length, which could cause the client to exit. (Bug #19463277, Bug #19463565)
  • yaSSL could fail preauthorization if the client supplied inaccurate buffer lengths. (Bug #19370676, Bug #19355577)
  • Competition between threads could lead to timeout failure trying to rotate the audit log file. (Bug #19184973)
  • LPAD() and RPAD() could cause a server exit if the pad string argument was not well formed. (Bug #18935421)
  • The optimizer could create a zero-length column for a temporary table, causing a server exit. (Bug #18928848)
  • MOD for very small decimal right-hand arguments could cause a server exit. (Bug #18469276)
  • The client library now includes a call to X509_verify_cert_error_string() in the SSL certificate verification code, to be more robust in detecting invalid certificates. (Bug #18384260)
  • If the left-hand-side of an IN predicate was a scalar subquery but returned no row, the server could exit. (Bug #18223655, Bug #18447874)
  • The thread_concurrency system variable is deprecated, but no warning resulted from setting it at server startup. (Bug #17873011)
  • Sending a SIGQUIT or SIGINT signal to mysql could result in a glibc double free or corruption error. (Bug #17297324)
  • Invalid memory access could occur when using prepared statements if a mysql client connection was lost after statement preparation was complete and there was at least one statement that was in initialized state but not prepared yet. (Bug #70429, Bug #17512527)
  • LIKE matches failed for code points of HALF WIDTH KATAKANA in the sjis and cp932 character sets. (Bug #47641, Bug #11755818)
  • On EL7, installation of MySQL from RPM packages could fail if postfix had previously been installed using yum. (Bug #73507, Bug #19392051, Bug #19392149)
  • mysql_upgrade could fail if the mysql.user table contained multiple accounts with the same user name and host name where the host name differed in lettercase. This is still not permitted, but now mysql_upgrade prints a more informative error message to indicate the nature of the problem.
  • If the general query log or slow query log file was set to a FIFO or socket file, and the file reader went away, the server stopped executing statements. Now the server detects such files, logs an error message, and continues with the appropriate log disabled. (Bug #67088, Bug #14757009)
  • A simultaneous OPTIMIZE TABLE and online ALTER TABLE on the same InnoDB table could result in deadlock. (Bug #71433, Bug #18110156)
  • The query cache was not invalidated for a table when a CASCADE DELETE or CASCADE UPDATE referential constraint was specified and the database name or table name contained special characters. (Bug #72547, Bug #18710853)

New in MySQL 5.6.20 (Jul 31, 2014)

  • Security Notes:
  • Security Fix: The linked OpenSSL library for the MySQL 5.6 Commercial Server has been updated from version 1.0.1g to version 1.0.1h. Versions of OpenSSL prior to and including 1.0.1g are reported to be vulnerable to CVE-2014-0224. 
This change does not affect the Oracle-produced MySQL Community build of MySQL Server 5.6, which uses the yaSSL library instead. (CVE-2014-0224)
  • InnoDB Notes:
  • Important Change: Redo log writes for large, externally stored BLOB fields could overwrite the most recent checkpoint. The 5.6.20 patch limits the size of redo log BLOB writes to 10% of the redo log file size. The 5.7.5 patch addresses the bug without imposing a limitation. For MySQL 5.5, the bug remains a known limitation. 
As a result of the redo log BLOB write limit introduced for MySQL 5.6, innodb_log_file_size should be set to a value greater than 10 times the largest BLOB data size found in the rows of your tables plus the length of other variable length fields (VARCHAR, VARBINARY, and TEXT type fields). Failing to do so could result in “Row size too large” errors. No action is required if your innodb_log_file_size setting is already sufficiently large or your tables contain no BLOB data. (Bug #16963396, Bug #19030353, Bug #69477)
  • Functionality Added or Changed:
  • Replication: The new system variable binlog_impossible_mode controls what happens if the server cannot write to the binary log, for example, due to a file error. For backward compatibility, the default for binlog_impossible_mode is IGNORE_ERROR, meaning the server logs the error, halts logging, and continues updates to the database. Setting this variable to ABORT_SERVER makes the server halt logging and shut down if it cannot write to the binary log. (Bug #51014, Bug #11758766)
  • CMake support was updated to handle CMake version 3. (Bug #19001781)
  • New Debian7, Ubuntu12.04, and Ubuntu14.04 distribution support that was introduced with 5.6.17 now comes with the platform-specific packaging source placed under the packaging directory, in the deb-precise, deb-wheezy, and deb-trusty directories. (Bug #19020385)
  • Support for LinuxThreads has been removed from the source code. LinuxThreads was superseded by NPTL in Linux 2.6. (Bug #17007529, Bug #72888, Bug #18913935)
  • By default, mysql_install_db creates a my.cnf file in the installation base directory using a template. This may be undesireable for some deployments. To enable this behavior to be suppressed, mysql_install_db now supports a --keep-my-cnf option to preserve any existing my.cnf file and not create a new my.cnf file. (Bug #71600, Bug #18205019)
  • The mysqlhotcopy utility is now deprecated and will be removed in a future version of MySQL. Among the reasons for this: It works only for the MyISAM and ARCHIVE storage engines; it works on Unix but not Windows. Alternatives include mysqldump and MySQL Enterprise Backup.
  • The timed_mutexes system variable has no effect and is deprecated.
  • Bugs Fixed:
  • Important Change; Replication: A DROP TABLE statement may be divided into multiple statements before it is sent to the binary log if it contains regular (not temporary) tables and temporary tables, or if it contains temporary tables using both transactional and non-transactional storage engines. Now, when using GTIDs, DROP TABLE statements affecting these combinations of tables are no longer allowed unless the value of the gtid_next system variable is AUTOMATIC.
  • Naming all three of these types of tables in a single DROP TABLE statement causes the MySQL server to divide the original statement into three separate DROP TABLE statements in the binary log.
  • InnoDB: Opening a parent table that has thousands of child tables could result in a long semaphore wait condition. (Bug #18806829)
  • InnoDB: For single item full-text searches, deleted documents were included in inverse document frequency (IDF) calculations. (Bug #18711306, Bug #72548)
  • InnoDB: On mysqld start, specifying multiple data files using the innodb_data_file_path option would return a Space id in fsp header error after data is written to the second file. (Bug #18767811)
  • InnoDB: A DELETE operation on a table with full-text search indexes raised an assertion. (Bug #18683832)
References: See also Bug #14639605.
  • InnoDB: When calling the memcached flush_all command, InnoDB attempts to initialize a connection and a transaction. If the transaction is in TRX_STATE_NOT_STARTED state, InnoDB would fail to set CONN_DATA->CRSR_TRX to NULL, resulting in a serious error. (Bug #18652854)
  • InnoDB: When InnoDB is built as a shared library, attempting to load the InnoDB full-text search (FTS) INFORMATION_SCHEMA plugin would fail with a Can't open shared library 'ha_innodb.so' error. (Bug #18655281, Bug #70178)
  • InnoDB: A regression introduced in MySQL 5.6.5 would cause full-text search index tables to be created in the system tablespace (space 0) even though innodb_file_per_table was enabled. (Bug #18635485)
  • InnoDB: The InnoDB memcached plugin would call plugin_del without acquiring the lock_plugin mutex. This bug fix also addresses a race condition in ib_cursor_delete_row. (Bug #18409840)
  • InnoDB: The fix for Bug#16418661 added superfluous buf_flush_list() logic to InnoDB startup code. (Bug #17798076, Bug #70899)
  • InnoDB: A race condition in fts_get_next_doc_id resulted in Duplicate FTS_DOC_ID and Cannot find index FTS_DOC_ID_INDEX in InnoDB index translation table errors. (Bug #17447086, Bug #70311)
References: See also Bug #16469399.
  • InnoDB: Due to differences in memory ordering on different processor types, some mutex and read-write lock flags were not read consistently. (Bug #11755438, Bug #47213)
  • Partitioning: Selecting from a table having multiple columns in its primary key and partitioned by LIST COLUMNS(R), where R was the last (rightmost) column listed in the primary key definition, returned an incorrect result. (Bug #17909699, Bug #71095)
  • Replication: mysqlbinlog --raw did not check for errors caused by failed writes, which could result in silent corruption of binary logs. Now in such cases it stops with an error. (Bug #18742916, Bug #72597)
  • Replication: When a slave worker thread tried to execute a statement that was too large, the resulting error caused a crash. Now in such cases, the error is truncated to fit the size of the buffer. (Bug #18563480)
  • Replication: When using row-based replication, updating or deleting a row on the master that did not exist on the slave led to failure of the slave when it tried to process the change. This problem occurred with InnoDB tables lacking a primary key. (Bug #18432495, Bug #72085)
  • Replication: Quotation marks were not always handled correctly by LOAD DATA INFILE when written into the binary log. (Bug #18207212, Bug #71603)
  • Replication: Beginning in MySQL 5.6.20, when a user specified AUTO_INCREMENT value falls outside of the range between the current AUTO_INCREMENT value and the sum of the current and number of rows affected values it is replicated correctly. In previous versions, an error was generated by the slave even if the user specified AUTO_INCREMENT value fell outside of the range. (Bug #17588419, Bug #70583)
  • Replication: A group of threads involved in acquiring locks could deadlock.
  • Replication: On Windows, mysqldump failed if the error log file was deleted (missing) from the active MySQL server. (Bug #17076131)
  • Replication: Client applications should be able to set the BINLOG_DUMP_NON_BLOCK flag in the initial handshake packet (COM_BINLOG_DUMP). Clients connecting to a server issuing a COM_BINLOG_DUMP with the flag unset do not get an EOF when the server has sent the last event in the binary log, which causes the connection to block. This flag, which was removed in error in MySQL 5.6.5, is now restored in the current release. 
As part of this fix, a new --connection-server-id option is added to mysqlbinlog. This option can be used by the client to test a MySQL server for the presence of this issue. (Bug #71178, Bug #18000079)
  • When a SELECT included a derived table in a join in its FROM list and the SELECT list included COUNT(DISTINCT), the COUNT() returned 1 even if the underlying result set was empty. (Bug #18853696)
References: This bug is a regression of Bug #11760197.
  • Enabling optimizer trace could cause a server exit for queries with a subquery in a HAVING clause. (Bug #18791851)
  • SHA and MD5 functions failed for operations using the internal filename character set and could cause a server exit. (Bug #18786138)
  • Large arguments passed to mysqldump could lead to buffer overflow and program exit. (Bug #18779944)
  • Compiler flags were not passed to DTrace, causing problems for 32-bit builds cross-compiled on 64-bit platforms. (Bug #18593044)
  • ALTER TABLE on a partitioned table could result in the wrong storage engine being written into the table's .frm file and displayed in SHOW CREATE TABLE. (Bug #18618561)
  • With the max_heap_table_size system variable set to a large value (20GB), creation of a temporary table or a table using the MEMORY storage engine caused a server exit. (Bug #18463911)
  • For debug builds, a 0x00 character in a full-text query string that used the ujis_japanese_ci, utf8mb4_turkish_ci, or eucjpms_bin collation could raise an assertion. (Bug #18277305)
  • mysqladmin password masked the old password given on the command line, but not the new password. (Bug #18163964)
  • yaSSL code had an off-by-one error in certificate decoding that could cause buffer overflow. 
yaSSL code had an opendir() without a corresponding closedir(). (Bug #18178997, Bug #17201924)
  • For full-text queries on InnoDB tables, attempts to access deleted document IDs could lead to a server exit. (Bug #18079671)
  • MyISAM temporary files could be used to mount a code-execution attack. (Bug #18045646)
  • For queries that selected from the Performance Schema events_statements_current table, adding an ORDER BY clause could produce incorrect results. (Bug #17729044)
  • If a query had both MIN()/MAX() and aggregate_function(DISTINCT) (for example, SUM(DISTINCT)) and was executed using Loose Index Scan, the result values of MIN()/MAX() were set improperly. (Bug #17217128)
  • For UNION statements, the rows-examined value was calculated incorrectly. This was manifest as too-large values for the ROWS_EXAMINED column of Performance Schema statement tables (such as events_statements_current). (Bug #17059925)
  • Clients could determine based on connection error message content whether an account existed. (Bug #16513435, Bug #17357528)
  • An assertion could be raised when creating a index on a prefix of a TINYBLOB or GEOMETRY column in an InnoDB column. (Bug #16368875, Bug #18776592, Bug #17665767)
  • Use of a nonmultibyte algorithm for skipping leading spaces in multibyte strings could cause a server exit. (Bug #12368495, Bug #18315770)
  • For a view defined on a UNION, the server could create an invalid view definition. (Bug #65388, Bug #14117018, Bug #72018, Bug #18405221)
  • Configuring with cmake -DWITHOUT_SERVER to build clients without the server failed for builds outside of the source tree. (Bug #66000, Bug #14367046)
  • With big_tables enabled, queries that used COUNT(DISTINCT) on a simple join with a constant equality condition on a non-duplicate key returned incorrect results. (Bug #52582, Bug #11760197)
References: See also Bug #18853696.
  • Deadlock could occur if three threads simultaneously performed INSTALL PLUGIN, SHOW VARIABLES, and mysql_change_user(). (Bug #71236, Bug #18008907, Bug #72870, Bug #18903155)
  • mysql_config_editor exited when given an empty argument to the --login-path option. (Bug #71837, Bug #18311024, Bug #18830493)
  • MySQL did not compile with Bison 3. A workaround is to downgrade to Bison 2. (Bug #71250, Bug #18017820, Bug #18978946)
  • Uninstalling and reinstalling semisynchronous replication plugins while semisynchronous replication was active caused replication failures. The plugins now check whether they can be uninstalled and produce an error if semisynchronous replication is active. To uninstall the master-side plugin, there must be no semisynchronous slaves. To uninstall the slave-side plugin, there must be no semisynchronous I/O threads running. (Bug #70391, Bug #17638477)
  • If there was a predicate on a column referenced by MIN() or MAX() and that predicate was not present in all the disjunctions on key parts earlier in the compound index, Loose Index Scan returned an incorrect result. (Bug #71097, Bug #17909656)
  • Client auto-reconnect did not work for clients linked against libmysqlclient, even with MYSQL_OPT_RECONNECT enabled. (Bug #70026, Bug #17309863)
  • Upgrades using RPM packages could change the ownership of an installation directory. (Bug #71715, Bug #18281535)
  • Proxy users were unable to execute statements if the proxied user password had expired. (Bug #71337, Bug #18057562)
  • A new CMake option, SUNPRO_CXX_LIBRARY, enables linking against libCstd instead of stlport4 on Solaris 10 or later. This works only for client code because the server depends on C++98. Example usage: 
cmake -DWITHOUT_SERVER=1 -DSUNPRO_CXX_LIBRARY=Cstd
  • File permissions and line endings of several test and configuration files were made more consistent to avoid warnings from package checkers. (Bug #68521, Bug #16415173, Bug #16395459, Bug #68517, Bug #16415032, Bug #71112, Bug #17919313, Bug #71113, Bug #17919422)

New in MySQL 5.6.19 (May 31, 2014)

  • Functionality Added or Changed:
  • The obsolete and unmaintained charset2html utility has been removed from MySQL distributions. (Bug #71897, Bug #18352347)
  • The mysqlbug, mysql_waitpid, and mysql_zap utilities have been deprecated and will be removed in MySQL 5.7.
  • Bugs Fixed:
  • InnoDB: After upgrading from 5.6.10 to MySQL versions up to and including MySQL 5.6.18, InnoDB would attempt to rename obsolete full-text search auxiliary tables on server startup, resulting in an assertion failure. (Bug #18634201, Bug #72079)
  • InnoDB: For each insert, memset would be called three times to allocate memory for system fields. To reduce CPU usage, the three memset calls are now combined into a single call. (Bug #17858679, Bug #71014)
  • InnoDB: Enabling the InnoDB Table Monitor would result in a ib_table->stat_initialized assertion failure. (Bug #17039528, Bug #69641)
  • InnoDB: Setting innodb_max_dirty_pages_pct=0 would leave 1% of dirty pages unflushed. Buffer pool flushing is initiated when the percentage of dirty pages is greater innodb_max_dirty_pages_pct. The internal variables that store the innodb_max_dirty_pages_pct value and the percentage of dirty pages (buf_get_modified_ratio_pct and srv_max_buf_pool_modified_pct) were defined as unsigned integer data types, which meant that a innodb_max_dirty_pages_pct value of 0 required a dirty pages percentage of 1 or greater to initiate buffer pool flushing.
  • To address this problem, the buf_get_modified_ratio_pct and srv_max_buf_pool_modified_pct internal variables are redefined as double data types, which changes the range value for innodb_max_dirty_pages_pct and innodb_max_dirty_pages_pct_lwm from 0 .. 99 to 0 .. 99.99. Additionally, buffer pool flushing is now initiated when the percentage of dirty pages is “greater than or equal to” innodb_max_dirty_pages_pct. (Bug #13029450, Bug #62534)
  • Replication: Log rotation events could cause group_relay_log_pos to be moved forward incorrectly within a group. This meant that, when the transaction was retried, or if the SQL thread was stopped in the middle of a transaction following one or more log rotations (such that the transaction or group spanned multiple relay log files), part or all of the group was silently skipped.
  • This issue has been addressed by correcting a problem in the logic used to avoid touching the coordinates of the SQL thread when updating the log position as part of a relay log rotation whereby it was possible to update the SQL thread's coordinates when not using a multi-threaded slave, even in the middle of a group. (Bug #18482854)
  • 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 #18364070)
  • References: See also Bug #18236612.
  • Replication: In certain cases, the server mishandled triggers and stored procedures that tried to modify other tables when called by CREATE TABLE ... SELECT. This is now handled correctly as an error. (Bug #18137535)
  • Replication: When used on a table employing a transactional storage engine, a failed TRUNCATE TABLE was still written to the binary log and thus replayed on the slave. This could lead to inconsistency when the master retained data that was removed on the slave.
  • Now in such cases TRUNCATE TABLE is logged only when it executes successfully. (Bug #17942050, Bug #71070)
  • Replication: The server did not always handle the auto.cnf file correctly in cases where this file's permissions were incorrect. (Bug #17786581, Bug #70891)
  • Replication: When the binary log was rotated due to receipt of a SIGHUP signal, the new binary log did not contain the Previous_gtid_event required for subsequent processing of that binary log's GTID events. Now when SIGHUP is received, steps are taken to insure that the server writes the necessary Previous_gtid_event to the new log before writing any GTID events to the new log. (Bug #17026898)
  • Replication: When gtid_mode=ON, and a transaction is filtered out on the slave, the GTID of the transaction is still logged on the slave as an “empty” transaction (consisting of a GTID followed immediately by BEGIN and then COMMIT). This is necessary to prevent the transaction from being retransmitted the next time the slave reconnects or is involved in a failover. The current fix addresses two issues relating to such “empty” transactions:
  • No empty transaction was generated for CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE statements.
  • If the slave used a database filter (--replicate-do-db or --replicate-ignore-db option), no empty transaction was generated.
  • (Bug #71326, Bug #18095502, Bug #18145032)
  • The server could fail to properly reprepare triggers that referred to another table after that table was truncated. (Bug #18596756)
  • Certain INFORMATION_SCHEMA queries could cause a server exit. (Bug #18319790)
  • For indexes on prefixes or character string columns, index corruption could occur for assignment of binary data to the column due to improper character counting. (Bug #18359924)
  • Solaris-specific scripts were included in and installed by non-Solaris packages. (Bug #18305641)
  • Concurrent execution of a FLUSH TABLE operation and a stored program that used a cursor could cause a server exit. (Bug #18158639)
  • The client library could cause clients to exit due to incorrectly mapping the client error number to the corresponding message, if reallocation of packet buffer memory occurred. (Bug #18080920)
  • Calling mysql_get_server_version() with an invalid connection handler argument caused the client to exit. Now it returns 0 and reports a CR_COMMANDS_OUT_OF_SYNC error. (Bug #18053212)
  • mysqldump could create table definitions in the dump file that resulted in Too many columns errors when reloading the dump file. (Bug #17477959)
  • On Windows, calling mysql_thread_init() call without mysql_init() caused the client to exit. windows. Now it returns a nonzero result because it is an error to call mysql_thread_init() before the client library is initialized with mysql_library_init(). (Bug #17514920)
  • The optimizer trace could cause a server exit in cases where a subquery was transformed away. (Bug #17458054)
  • The Debug Sync facility could lose a signal, leading to a spurious ER_DEBUG_SYNC_TIMEOUT error. (Bug #14765080, Bug #18221750)
  • Compilation problems were fixed for errors reported by Clang and gcc when compiling in C++11 mode. (Bug #66803, Bug #14631159)
  • CMake produced not-useful warnings about INTERFACE_LINK_LIBRARIES policy. (Bug #71089, Bug #17905155, Bug #17894997)
  • LOAD DATA LOCAL INFILE could use all CPU if import errors occurred when there were no line delimiters. (Bug #51840, Bug #11759519)
  • On Windows, REPAIR TABLE and OPTIMIZE TABLE failed for MyISAM tables with .MYD files larger than 4GB. (Bug #69683, Bug #17235179)
  • A statement of the following form broke row-based replication because it created a table having a field of data type BIGINT with a display width of 3000, which is beyond the maximum acceptable value of 255: CREATE TABLE t1 AS SELECT REPEAT('A',1000) DIV 1 AS a; (Bug #71179, Bug #17994219)
  • Updates could fail to update all applicable rows in cases where multiple key values were identical except for trailing spaces. (Bug #69684, Bug #17156940)

New in MySQL 5.7.4 Milestone 14 Dev (Apr 10, 2014)

  • Performance Schema Notes:
  • 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.
  • Security Notes:
  • Incompatible Change: MySQL deployments installed using RPM packages 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 $HOME/.mysql_secret file.)
  • Installation creates no anonymous-user accounts.
  • Installation creates no test database.
  • Installation creates a single root account, 'root'@'localhost', that has no password.
  • A test database is created that is accessible by any user.
  • 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.
  • Functionality Added or Changed:
  • 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.
  • 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.
  • Incompatible Change: The deprecated ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE, and NO_ZERO_IN_DATE SQL modes now do nothing. Instead, their previous 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.
  • 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 Copying Tablespaces to Another Server (Transportable Tablespaces). (Bug #18121824, Bug #70196, Bug #18304194, Bug #71784)
  • InnoDB: Parameters used to identify an InnoDB pages are replaced by two new classes, and fold value and zip_size value calculations have been optimized. These changes simplify code by reducing the number of page identifier parameters passed to functions. (Bug #18073495)
  • InnoDB: The Fusion-io Non-Volatile Memory (NVM) file system on Linux provides atomic write capability, which makes the InnoDB doublewrite buffer redundant. For system tablespace files (ibdata files) located on Fusion-io devices that support atomic writes, the InnoDB doublewrite buffer is automatically disabled. (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: MySQL now supports rebuilding regular and partitioned InnoDB tables using online DDL (ALGORITHM=INPLACE) for the following operations:
  • OPTIMIZE TABLE
  • ALTER TABLE ... FORCE
  • ALTER TABLE ... ENGINE=INNODB (when run on an InnoDB table)
  • 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.
  • InnoDB: The InnoDB Tablespace Monitor and InnoDB Table Monitor are removed in MySQL 5.7.4. For the Tablespace Monitor, equivalent functionality will be introduced before the GA release of MySQL 5.7. For the Table Monitor, equivalent information can be obtained from InnoDB INFORMATION_SCHEMA tables.
  • InnoDB: 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 Set Support.
  • Replication: The binary log dump thread has been optimized by removing unnecessary reallocation of the send buffer. Previously, memory was allocated then freed for every event sent to the slave, even when this was not strictly necessary. Following this optimization, the MySQL Server can make better use of hardware resources by having the dump thread employ adaptative memory allocation, which can also result in less CPU usage. (Bug #11747349, Bug #31932, Bug #11752288, Bug #43426, Bug #13727951)
  • Replication: 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.
  • 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.
  • 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.
  • 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.
  • 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)
  • On Solaris, mysql_config --libs now includes -R/path/to/library so that libraries can be found at runtime. (Bug #18235669)
  • 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.
  • The CHECK_FUNCTION_REPLACEMENT() CMake macro was removed from Windows.cmake and replacement functions are set explicitly instead since the result of the check was already hard coded in WindowsCache.cmake. (Bug #18116661)
  • MySQL now compiles using Clang 3.4. (Bug #18047020)
  • In MySQL 5.7.1, the MySQL test suite mysql-test-run.sh program was modified to start the server with InnoDB rather than MyISAM as the default storage engine. All tests in the MySQL test suite were modified to include a force_default_myisam.inc file. This had to be done because most legacy test results were recorded with the MyISAM engine and failed with a result difference if run with InnoDB. A project is underway to migrate these tests and remove force_default_myisam.inc for tests that do not need MyISAM. In 5.7.4, the rpl and binlog suites and parts of the main suite were migrated. (Bug #17902011)
  • Performance Schema instrumentation was added to capture GTIDs for transaction events. (Bug #17799147)
  • Performance Schema overhead was reduced for the pfs_lock implementation and the uses of atomic operations in general. (Bug #17766582)
  • CMake now aborts the configuration process on Windows if a Visual Studio version earlier than 2010 is used. (Bug #17730320)
  • A new CMake option, WITH_MSAN, permits enabling MemorySanitizer for compilers that support it. (Bug #17632319)
  • Previously, ALTER TABLE in MySQL 5.6 could alter a table such that the result had temporal columns in both 5.5 and 5.6 format. Now ALTER TABLE upgrades old temporal columns to 5.6 format for ADD COLUMN, CHANGE COLUMN, MODIFY COLUMN, ADD INDEX, and FORCE operations. This conversion cannot be done using the INPLACE algorithm, so specifying ALGORITHM=INPLACE in these cases results in an error. (Bug #17246318)
  • Overhead was reduced for filesort comparison operations. (Bug #14635144)
  • Overhead was reduced for metadata lock acquisition for DML statements. (Bug #58627, Bug #11765641)
  • CMake now supports a -DTMPDIR=dir_name option to specify the default tmpdir value. If unspecified, the value defaults to P_tmpdir in . Thanks to Honza Horak for the patch. (Bug #68338, Bug #16316074)
  • 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)
  • 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)
  • mysql_install_db provides a more informative diagnostic message when required Perl modules are missing. (Bug #69844, Bug #18187451)
  • 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 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.
  • The metadata locking subsystem implementation 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.
  • The deprecated IGNORE clause for ALTER TABLE has been removed and its use produces an error.
  • The metadata locking subsystem now uses a lock-free algorithm for acquiring and releasing locks typical for DML statements. This gives better performance/scalability on multi-core machines in workloads involving lots of small read-only transactions.
  • To make it possible to change connections in a load-balanced environment, it is necessary to detect in the response packet whether there is session state to take into consideration when deciding whether a switch can be made.
  • For this purpose, session state consists of these values:
  • The default schema (database)
  • Session-specific values for system variables
  • User-defined variables
  • Temporary tables
  • Prepared statements
  • The OK response packet of the MySQL client/server protocol now includes tracker information so that session state changes can be detected. The tracker mechanism provides a means for MySQL Connectors, Fabric, and client applications to determine whether any session context is available to ensure session migration from one server to another.
  • The user interface to control the tracker and retrieve state-change information from it has the following components, which enable implementation of state-change tracking on the client side:
  • Clients can request notification when there is a change to any of the session state-related values just listed, in the form of a flag that is set in the OK packet received from the server after the change occurs. 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 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. By default, notification is enabled for time_zone, autocommit, character_set_client, character_set_results, and character_set_connection. (The latter three variables are those affected by SET NAMES.)
  • To enable applications to extract the state-change information returned in the OK packet by the server, the MySQL C API includes a pair of functions:
  • mysql_session_track_get_first() fetches the first state-change information received from the server.
  • mysql_session_track_get_next() fetches any remaining state-change information received from the server. Following a successful call to mysql_session_track_get_first(), call this function repeatedly as long as it returns success.
  • The mysqltest program has enable_session_track_info and disable_session_track_info commands to enable and disable tracking of session state-change information.
  • mysqlbug, an obsolete program for generating bug reports, has been removed from the source code.
  • 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.
  • Important Change; InnoDB; Partitioning: The FLUSH TABLES statement's FOR EXPORT option is now supported for partitioned InnoDB tables. (Bug #16943907)
  • InnoDB; Replication: Using the InnoDB memcached plugin (see InnoDB Integration with memcached) with innodb_api_enable_binlog set to 1 caused the server to leak memory. (Bug #70757, Bug #17675622)
  • 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: A !sync_check_iterate(check) assertion occurred in fts_create_doc_id() during an INSERT operation. (Bug #18253210)
  • InnoDB: The GCC 4.4 Compiler would emit a bogus warnings about InnoDB parsing functions, indicating that output is uninitialized. (Bug #18192536)
  • InnoDB: log_mutex_exit should be called before log_buffer_extend when the log buffer mutex is held. (Bug #18202904)
  • InnoDB: InnoDB would write to the redo log for some operations on temporary tablespaces. (Bug #18226934)
  • InnoDB: Doublewrite buffer error messages referenced page numbers in an inconsistent manner. (Bug #18242594)
  • InnoDB: The truncate_t::drop_indexes and truncate_t::create_indexes methods would disable redo logging when modifying the system tablespace. (Bug #18236000)
  • 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: An invalid memmove in fts_query_fetch_document would cause a serious error. (Bug #18229433)
  • 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: InnoDB would perform unnecessary redo log writes and flushing for temporary tablespaces. (Bug #18236692)
  • InnoDB: The user defined type, xid_t, was defined multiple times. (Bug #18251254)
  • 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: 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: 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: 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: InnoDB would fail 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: 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: TRUNCATE TABLE on Windows would report multiple 'chsize' returned OS error 71 errors. (Bug #18176071, Bug #71173)
  • 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)
  • 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: The UNIV_LOG_DEBUG debug flag, which is no longer fully functional, has been removed. (Bug #18080537)
  • InnoDB: A compilation error (unable to find string literal operator) was returned when building in c++11 mode. (Bug #18082139)
  • 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: 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 non-zero 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: When starting the server, unnecessary “checking space” log messages would be printed when processing the doublewrite buffer. (Bug #18101380)
  • InnoDB: A full-text tokenizer thread would terminate with an incorrect error message. (Bug #18021306)
  • 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: In debug builds, creating a unique index on a binary column, with input data containing duplicate keys, would cause an assertion. (Bug #18010711)
  • 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)
  • InnoDB: A boolean mode full-text search query would result in a memory access violation during parsing. (Bug #17978763)
  • 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: 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: 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: 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: A page allocation for an undo log due would fail with a “table is full” error message instead of an “undo log is full” error message. (Bug #17779822)
  • 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: Manipulating a table after discarding its tablespace using ALTER TABLE ... DISCARD TABLESPACE could result in a serious error. (Bug #17700280)
  • InnoDB: A race condition in DebugPolicy::enter() would cause a segmentation fault in sync_array_cell_print. (Bug #17713784)
  • InnoDB: Persistent optimizer statistics would cause stalls due to latch contention. (Bug #17699331, Bug #70768)
  • 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: 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: Databases names beginning with a digit or special character would cause a full-text search (FTS) parser error. (Bug #17607687)
  • 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: 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)
  • 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)
  • InnoDB: Truncating a memcached InnoDB table while memcached is performing DML operations would result in a serious error. (Bug #17468031)
  • InnoDB: In sync0rw.ic, rw_lock_x_lock_func_nowait would needlessly call os_thread_get_curr_id. (Bug #17509710, Bug #70417)
  • InnoDB: Attempting to rename a table to a missing database would result in a serious error. (Bug #17447500)
  • 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: 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 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)
  • 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: 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: 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 would fail 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: The function os_file_get_status would not work with raw devices. (Bug #17023438, Bug #69424)
  • 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 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: Renaming a column while also adding or dropping columns in the same ALTER TABLE operation would cause an error. (Bug #16864981)
  • 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: 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: On Windows, the full-text search (FTS) object ID was not in the expected hexadecimal format. (Bug #16559254)
  • InnoDB: The buf_buddy_relocate function would perform an unnecessary hash lookup. (Bug #16596057)
  • 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 would fail 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 prefectching of sibling leaf pages to reduce index lock holding time. (Bug #12734249, Bug #61736)
  • InnoDB: 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: 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)
  • 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: 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: 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 Performance Schema replication_connection_configuration table. (Bug #18174719)
  • 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 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)
  • 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)
  • 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: 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)
  • 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: 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)
  • 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: 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 with instances of the warning Slave SQL: Could not execute Query event. Detailed error: ;, Error_code: 0. (Bug #17581990, Bug #68429)
  • 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 Performance Schema threads 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)
  • 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)
  • Replication: Invalid event offsets in the binary log were not always handled correctly, which could lead to replication failure. (Bug #16736412, Bug #69087)
  • 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)
  • 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)
  • During compilation, attempts to create sql_yacc.h could be made from multiple directories simultaneously. (Bug #18319335)
  • 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)
  • mysql_secure_installation attempted to free memory incorrectly and exited abnormally after a failed attempt to read an option file. (Bug #18255657)
  • Compilation failed if MySQL was configured with CFLAGS set to include a -Werror option with an argument. (Bug #18173037)
  • A shared libmysqld embedded server library was not built on Linux. (Bug #18123048, Bug #16430656, Bug #68559)
  • 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)
  • 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)
  • 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)
  • 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)
  • Building MySQL from source on Windows using Visual Studio 2008 would fail with an identifier not found error due to a regression introduced by the patch for Bug#16249481. (Bug #18057449)
  • Repeated rebuilds in the same source tree resulted in libmysqld.a increasing in size each time. (Bug #18082702)
  • 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)
  • Type casting during LIKE pattern match operations could cause a server exit. (Bug #18114294)
  • SHOW GRANTS could be used to view the password hash for a proxied user. Password hash display now requires the SUPER privilege. (Bug #18057514)
  • 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)
  • Link failures were fixed on Solaris SPARC and Linux 64-bit platforms. (Bug #18004599)
  • 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)
  • A memory leak occurred within the Performance Schema during server startup. (Bug #18003651)
  • storage/ndb/CMakeLists.txt reset the CMake cache for some compiler flags for which the result should have been saved. (Bug #17949504)
  • 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)
  • Building libevent was incorrectly dependent on MySQL being configured with the -DWITH_INNODB_MEMCACHED=1 option. (Bug #17964544)
  • On Solaris, configuration failed if no STL_LIBRARY_NAME was found. (Bug #17954277)
  • 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)
  • The SUM_SORT_MERGE_PASSES column value in the Performance Schema events_statements_summary_by_digest table was calculated incorrectly. (Bug #17938255)
  • During shutdown, a mutex that was still locked could be removed, causing a server exit. (Bug #17959898)
  • If the Performance Schema events_statements_summary_by_digest table was full when a statement with a new digest was found, the Performance_schema_digest_lost status variable was not incremented. (Bug #17935314)
  • FORCE INDEX [FOR ORDER BY] (index_name) did not work for joins.
  • The fix for this bug also 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)
  • Shutdown of open connection threads could fail to occur cleanly during server shutdown. (Bug #17863690)
  • DECIMAL NOT NULL items could return NULL in subqueries. (Bug #17921777)
  • mysql_secure_installation exited if it connected using SSL and the user had an expired password. (Bug #17880395)
  • With the compressed client/server protocol enabled, Performance Schema statement instrumentation could raise an assertion. (Bug #17794846)
  • 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)
  • 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)
  • Build and execution problems were fixed for builds made with gcc 4.8.1 in 32-bit mode on SPARC. (Bug #17740390)
  • The server could exit when executing an INSERT ... SELECT with UNION, ROLLUP, and ON DUPLICATE KEY UPDATE with a subquery. (Bug #17727506)
  • The patch for Bug #16041903 introduced an incorrect DBUG_ASSERT that in debug builds raised a spurious assertion. (Bug #17746721)
  • Valgrind errors were produced during row comparator setup. (Bug #17755540)
  • In some cases, UNIX_TIMESTAMP() could return NULL when it should return 0. (Bug #17728371)
  • An assertion could be raised if a filesort failed to resize its main buffer when record properties changed. (Bug #17757914)
  • The resetconnection command for mysql did not report proper errors if the server was down or the user password had expired. (Bug #17772561)
  • Compilation failed if MySQL was configured using -DWITH_LIBWRAP=1. (Bug #17738805)
  • 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)
  • 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)
  • Incorrect reference counting in the range optimizer module resulted in potential for missing or duplicate rows in the query result set. (Bug #17619119)
  • Using the mysqldump --set-gtid-purged option with no value caused mysqldump to crash. (Bug #17650245)
  • A race condition between Performance Schema statement event threads led to a server exit. (Bug #17637970)
  • For debug builds, an aggregate function in a subquery join condition could raise an assertion. (Bug #17602807)
  • If SAFE_MUTEX was enabled (true only for debug builds), THR_LOCK_mutex was used before being initialized. (Bug #17641055, Bug #70639)
  • After the fix for Bug #16409270, it was not possible to #include following #include . (Bug #17514554)
  • 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)
  • Insufficient cleanup after removal of a SELECT_LEX structure caused dereferencing of a NULL pointer and a server exit. (Bug #17458169)
  • Within a CASE expression, use of a subquery referencing the VALUES() function could cause a server exit. (Bug #17458914)
  • mysql_config incorrectly included some flags to generate compiler warning output. (Bug #17400967)
  • 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)
  • SET PASSWORD combined with assignment of a variable from a subquery result could raise an assertion. (Bug #17458750)
  • On Windows, mysql_secure_installation exited if the root password was expired. (Bug #17415203)
  • 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)
  • 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)
  • With semi-join 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)
  • The SHA256 password authentication algorithm allocated a buffer one byte too short. (Bug #17397073)
  • 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 semi-join could cause a server exit. (Bug #16988465)
  • A spurious assertion was raised for queries processed using a semi-join 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 Mac 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)
  • On Mac 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)
  • For utf8 and utf8mb4 strings, handler functions unnecessarily called a Unicode conversion function. (Bug #14057034)
  • 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 nonmulti-byte algorithm for skipping leading spaces in multi-byte strings could cause a server exit. (Bug #12368495)
  • 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)
  • For the utf8_bin collation, ORDER BY LOWER(col_name) could produce incorrect ordering. (Bug #69005, Bug #16691598)
  • Several issues identified by the Coverity static analysis tool were fixed. Thanks to Honza Horak for the patch. (Bug #70830, Bug #17760511)
  • On Windows, the --local-service server option did not work, and was not displayed in the --help message. (Bug #69637, Bug #17049656)
  • The server wrote an excessive number of “Sort aborted” messages to the error log. (Bug #70173, Bug #17372396)
  • 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)
  • 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)
  • 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 implementers of third-party plugins. (Bug #70628, Bug #17702677)
  • For debug builds, JSON-format EXPLAIN statements for queries that involve semi-join materialization could cause a server exit. (Bug #70014, Bug #17305943)
  • For an existing user, GRANT with an empty password (IDENTIFIED BY [PASSWORD] '') did not change the password. (Bug #69899, Bug #17256161)
  • 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)
  • The wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_sync mutex was not properly instrumented for the Performance Schema. (Bug #70939, Bug #17813333)
  • Complex updates of Performance Schema tables involving joins or subqueries failed to update every row. (Bug #70025, Bug #17309657)
  • 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)
  • Compilation problems were fixed for errors reported by Clang and gcc when compiling in C++11 mode. (Bug #66803, Bug #14631159)
  • 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)
  • COUNT(DISTINCT) sometimes produced an incorrect result when the last read row contained a NULL value. (Bug #68749, Bug #16539979, Bug #71028, Bug #17867117)
  • When run by root, mysqld --help --verbose exited with a nonzero error code after displaying the help message. (Bug #70058, Bug #17324415)
  • 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)
  • 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)
  • 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 semi-join. (A workaround is to disable semi-join using SET optimizer_switch='semijoin=off';) (Bug #70608, Bug #17600176)
  • 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)
  • 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)
  • Some scripts displayed out-of-date information regarding where to report bugs. (Bug #68742, Bug #16530527)
  • CMake produced not-useful warnings about INTERFACE_LINK_LIBRARIES policy. (Bug #71089, Bug #17905155, Bug #17894997)
  • CMake produced a warning in ssl.cmake due to malformed syntax. (Bug #71094, Bug #17905144)
  • 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. (Bug #71201, Bug #17993294)
  • Some files in the Performance Schema file_instances table were not being removed because the file-removal operation was not instrumented. (Bug #69782, Bug #17209750)
  • 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)
  • 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)
  • 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)
  • During configuration, CMake improperly checked for the C++ header file cxxabi.h. (Bug #71268, Bug #18147458)
  • On Mac OS X, the libmysqlclient dylib file linked to itself. (Bug #61699, Bug #13890998, Bug #61243, Bug #12590037)
  • gcov printed warnings without file names. (Bug #33269, Bug #11747622)
  • cmake/configure.pl listed instances of WITH_COMMENT rather than the correct option COMPILATION_COMMENT. (Bug #65834, Bug #14298560)
  • FLUSH STATUS cleared

New in MySQL 5.6.17 (Mar 28, 2014)

  • 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. 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.
  • Incompatible Change: The deprecated ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE, and NO_ZERO_IN_DATE SQL modes now do nothing. Instead, their previous 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 deprecated ERROR_FOR_DIVISION_BY_ZERO, NO_ZERO_DATE, and NO_ZERO_IN_DATE SQL modes are still recognized so that statements that name them do not produce an error, but will be removed in a future version of MySQL. To make advance preparation for versions of MySQL in which these modes do not exist, applications should be modified to not refer to those mode names.
  • InnoDB: MySQL now supports rebuilding regular and partitioned InnoDB tables using online DDL (ALGORITHM=INPLACE)
  • On Solaris, mysql_config --libs now includes -R/path/to/library so that libraries can be found at runtime. (Bug #18235669)
  • mysql_install_db provides a more informative diagnostic message when required Perl modules are missing. (Bug #69844, Bug #18187451)
  • The IGNORE clause for ALTER TABLE is now deprecated and will be removed in a future version of MySQL. ALTER IGNORE TABLE causes problems for replication, prevents online ALTER TABLE for unique index creation, and causes problems with foreign keys (rows removed in the parent table).
  • 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.
  • Important Change; InnoDB; Partitioning: The FLUSH TABLES statement's FOR EXPORT option is now supported for partitioned InnoDB tables. (Bug #16943907)
  • InnoDB: Running a SELECT on a partitioned table caused a memory access violation in memcpy(). (Bug #18383840)
  • InnoDB: An invalid memmove in fts_query_fetch_document would cause a serious error. (Bug #18229433)
  • 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: 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: InnoDB would fail 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: 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: 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)
  • 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 non-zero 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: A full-text tokenizer thread would terminate with an incorrect error message. (Bug #18021306)
  • 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: 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: 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: 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: 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 would fail to start when innodb_data_file_path specified the data file size in kilobytes by appending K to the size value. (Bug #16287752)
  • InnoDB: An insert buffer merge would cause an assertion error due to incorrectly handled ownership information for externally stored BLOBs.
  • InnoDB: Decreasing the auto_increment_increment value would have no affect on the next auto-increment value. (Bug #14049391, Bug #65225)
  • Partitioning: When the index_merge_intersection flag (enabled by default) or the index_merge_union flag was enabled by the setting of the optimizer_switch system variable, queries returned incorrect results when executed against partitoned tables that used the MyISAM storage engine, as well as partitioned InnoDB tables that lacked a primary key. (Bug #18167648)
  • 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: 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: SHOW SLAVE STATUS used incorrect values when reporting MASTER_SSL_CRL and MASTER_SSL_CRLPATH. (Bug #17772911, Bug #70866)
  • 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.. 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 with instances of the warning Slave SQL: Could not execute Query event. Detailed error: ;, Error_code: 0. (Bug #17581990, Bug #68429)
  • Replication: A number of possible state messages used as values for the PROCESSLIST_STATE column of the Performance Schema threads table were longer than the width of the column (64 characters). The long state messages are now silently truncated in order to avoid errors. This fix applies in MySQL 5.6 only; a permanent fix for the issue is made in MySQL 5.7 and later. (Bug #17319380)
  • 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.
  • Replication: Modifying large amounts of data within a transaction can cause the creation of temporary files. Such files are created when the size of the data modified exceeds the size of the binary log cache (max_binlog_cache_size). Previously, such files persisted until the client connection was closed, which could allow them to grow until they exhausted all available disk space in tmpdir. To prevent this from occurring, the size of a temporary file created in this way in a given transaction is now reset to 0 when the transaction is committed or rolled back. (Bug #15909788, Bug #18021493, Bug #66237)
  • Replication: The server checks to determine whether semisynchronous replication has been enabled without a lock, and if this is the case, it takes the lock and checks again. If semisynchronous replication was disabled after the first but prior to the second one, this could cause the server to fail. (Bug #14511533, Bug #66411)
  • 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)
  • mysql_install_db could hang while reading /dev/random to generate a random root password. (Bug #18395378)
  • Compilation failed if MySQL was configured with CFLAGS set to include a -Werror option with an argument. (Bug #18173037)
  • A shared libmysqld embedded server library was not built on Linux. (Bug #18123048, Bug #16430656, Bug #68559)
  • While printing the server version, the mysql client did not check for buffer overflow in a string variable. (Bug #18186103)
  • Building MySQL from source on Windows using Visual Studio 2008 would fail with an identifier not found error due to a regression introduced by the patch for Bug#16249481. (Bug #18057449)
  • 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)
  • When tables are reopened from the table cache and the current thread is not instrumented for the Performance Schema, a table handle was unnecessarily instrumented. (Bug #18047865)
  • 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)
  • The SUM_SORT_MERGE_PASSES column value in the Performance Schema events_statements_summary_by_digest table was calculated incorrectly. (Bug #17938255)
  • If the Performance Schema events_statements_summary_by_digest 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 optimizer could push down a condition when the index did not have the key part present in the condition. (Bug #17814492)
  • 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)
  • DROP TRIGGER succeeded even with the read_only system variable enabled. (Bug #17503460)
  • If used to process a prepared CALL statement for a stored procedure with OUT or INOUT parameters, mysql_stmt_store_result() did not properly set the flags required to retrieve all the result sets. (Bug #14492429, Bug #17849978)
  • When run by root, mysqld --help --verbose exited with a nonzero error code after displaying the help message. (Bug #70058, Bug #17324415)
  • 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)
  • 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)
  • A deadlock error occurring during subquery execution could cause an assertion to be raised. (Bug #69969, Bug #17307201)
  • The Performance Schema stage/sql/Waiting to get readlock instrument is no longer used and has been removed. (Bug #71298, Bug #18035404)
  • 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)
  • 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)
  • Aggregating the results of a subquery in the FROM clause could produce incorrect results. (Bug #71244, Bug #18014565)
  • 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)
  • 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)
  • The msql2mysql, mysql_convert_table_format, mysql_find_rows, mysql_fix_extensions, mysql_setpermission, and mysqlaccess utilities are now deprecated and will be removed in MySQL 5.7. (Bug #27482, Bug #69012, Bug #69014, Bug #69015, Bug #69016, Bug #69017, Bug #11746603, Bug #16699248, Bug #16699279, Bug #16699284, Bug #16699317, Bug #18179576)

New in MySQL 5.6.16 (Feb 1, 2014)

  • Functionality Added or Changed:
  • 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, so specifying ALGORITHM=INPLACE in these cases results in an error. (Bug #17246318)
  • CMake now supports a -DTMPDIR=dir_name option to specify the default tmpdir value. If unspecified, the value defaults to P_tmpdir in . Thanks to Honza Horak for the patch. (Bug #68338, Bug #16316074)
  • Bugs Fixed:
  • InnoDB; Replication: Using the InnoDB memcached plugin (see InnoDB Integration with memcached) with innodb_api_enable_binlog set to 1 caused the server to leak memory. (Bug #70757, Bug #17675622)
  • InnoDB: A boolean mode full-text search query would result in a memory access violation during parsing. (Bug #17978763)
  • InnoDB: When new indexes are added by an ALTER TABLE operation, instead of only saving table-level statistics and statistics for the new indexes, InnoDB would save statistics for the entire table, including the table's other indexes. This behavior slowed ALTER TABLE performance. (Bug #17848838, Bug #16511145)
  • 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: InnoDB would report an incorrect operating system error code after failing to initialize. (Bug #17788055, Bug #70867)
  • 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: 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: 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: In debug builds, a merge insert buffer during a page read would cause a memory access violation. (Bug #17561188)
  • InnoDB: Truncating a memcached InnoDB table while memcached is performing DML operations would result in a serious error. (Bug #17468031)
  • InnoDB: In sync0rw.ic, rw_lock_x_lock_func_nowait would needlessly call os_thread_get_curr_id. (Bug #17509710, Bug #70417)
  • InnoDB: Attempting to rename a table to a missing database would result in a serious error. (Bug #17447500)
  • 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: 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)
  • 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: 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: The ALTER TABLE INPLACE algorithm would fail 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: The function os_file_get_status would not work with raw devices. (Bug #17023438, Bug #69424)
  • 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: Renaming a column while also adding or dropping columns in the same ALTER TABLE operation would cause an error. (Bug #16864981)
  • 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: On Windows, the full-text search (FTS) object ID was not in the expected hexadecimal format. (Bug #16559254)
  • References: See also Bug #16559119.
  • 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: Table renaming errors would appear in the LATEST FOREIGN KEY ERROR section of the SHOW ENGINE INNODB STATUS output. (Bug #12762390, Bug #61746)
  • 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)
  • 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 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: Creating and dropping large numbers of temporary tables could lead to increased memory consumption. (Bug #17806014)
  • 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: 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 did not properly decode DECIMAL values in a row-based binary log. This could cause invalid values to be printed out for DECIMAL columns. (Bug #17544169)
  • References: See also Bug #14309019.
  • 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 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)
  • Compilation errors occurred on Solaris 10; resolved by including my_config.h before system header files. (Bug #18046811)
  • FORCE INDEX [FOR ORDER BY] (index_name) did not work for joins.
  • The fix for this bug also 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)
  • With the compressed client/server protocol enabled, Performance Schema statement instrumentation could raise an assertion. (Bug #17794846)
  • In some cases, UNIX_TIMESTAMP() could return NULL when it should return 0. (Bug #17728371)
  • An assertion could be raised if a filesort failed to resize its main buffer when record properties changed. (Bug #17757914)
  • 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)
  • Using the mysqldump --set-gtid-purged option with no value caused mysqldump to crash. (Bug #17650245)
  • A race condition between Performance Schema statement event threads led to a server exit. (Bug #17637970)
  • In a view definition requireing resolution of aggregrate expressions within a subquery to an outer query, selecting from the view could cause a server exit. (Bug #17547804)
  • References: This bug is a regression of Bug #16436383.
  • An addressing error in accessing the join buffer could produce invalid results or a server exit. (Bug #17513341)
  • mysql_config incorrectly included some flags to generate compiler warning output. (Bug #17400967)
  • With semi-join 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)
  • 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 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)
  • On Mac 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)
  • Several -W warning flags were turned off for compilation in maintainer mode if MySQL was configured with -DWITH_INNODB_MEMCACHED=1. (Bug #13898319)
  • 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 nonmulti-byte algorithm for skipping leading spaces in multi-byte strings could cause a server exit. (Bug #12368495)
  • 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)
  • For the utf8_bin collation, ORDER BY LOWER(col_name) could produce incorrect ordering. (Bug #69005, Bug #16691598)
  • Several issues identified by the Coverity static analysis tool were fixed. Thanks to Honza Horak for the patch. (Bug #70830, Bug #17760511)
  • On Windows, the --local-service server option did not work, and was not displayed in the --help message. (Bug #69637, Bug #17049656)
  • 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 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 implementers of third-party plugins. (Bug #70628, Bug #17702677)
  • 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)
  • Complex updates of Performance Schema tables involving joins or subqueries failed to update every row. (Bug #70025, Bug #17309657)
  • 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)
  • COUNT(DISTINCT) sometimes produced an incorrect result when the last read row contained a NULL value. (Bug #68749, Bug #16539979, Bug #71028, Bug #17867117)
  • 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)
  • In 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 semi-join. (A workaround is to disable semi-join using SET optimizer_switch='semijoin=off';) (Bug #70608, Bug #17600176)
  • 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)
  • Some scripts displayed out-of-date information regarding where to report bugs. (Bug #68742, Bug #16530527)
  • Some files in the Performance Schema file_instances table were not being removed because the file-removal operation was not instrumented. (Bug #69782, Bug #17209750)
  • 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)
  • 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)
  • 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)

New in MySQL 5.6.15 (Dec 3, 2013)

  • Packaging Notes:
  • Previously, MySQL Server distributions included the MySQL Reference Manual in Info format (the Docs/mysql.info file). Because the license for the manual restricts redistribution, its inclusion in Community packages caused problems for downstream redistributors, such as those who create Linux distributions. Community distributions of MySQL Server no longer include the mysql.info file, to make the repackaging and redistribution process easier (for example, the source tarball and its checksum can be used directly). This change applies to all source and binary Community packaging formats. Commercial (Enterprise) distributions are unchanged. 
For those who wish to continue using the MySQL Reference Manual in Info format, we have made it available at http://dev.mysql.com/doc/.
  • Functionality Added or Changed:
  • Incompatible Change: Several statement instruments in the setup_instruments table are used by the Performance Schema during the early stages of statement classification before the exact statement type is known.
  • 
In addition, statistics for abstract instruments are no longer collected in the following tables, because no such instrument is ever used as the final classification for a statement: 
events_statements_summary_by_thread_by_event_name
  • events_statements_summary_by_account_by_event_name
  • events_statements_summary_by_user_by_event_name
  • events_statements_summary_by_host_by_event_name
  • events_statements_summary_global_by_event_name
  • 
Applications that refer to the old instrument names must be updated with the new names. For more information about the use of abstract instruments in statement classification, see Performance Schema Statement Event Tables. (Bug #16750433, Bug #17271055)
  • The Performance Schema now instruments the read/write lock Delegate::lock, which is used for the following classes: 
Trans_delegate
  • Binlog_storage_delegate
  • Binlog_transmit_delegate
  • Binlog_relay_IO_delegate
  • 
A different instrument name is used for each subclass, to have distinct statistics for distinct uses. The instruments are visible in the schema.setup_instruments table and have these names: 
wait/synch/rwlock/sql/Trans_delegate::lock
  • wait/synch/rwlock/sql/Binlog_storage_delegate::lock
  • wait/synch/rwlock/sql/Binlog_transmit_delegate::lock
  • wait/synch/rwlock/sql/Binlog_relay_IO_delegate::lock
  • 
(Bug #17590161, Bug #70577)
  • A new CMake option, WITH_ASAN, permits enabling address sanitization for compilers that support it. (Bug #17435338)
  • The hash function used for metadata locking was modified to reduce overhead. (Bug #68487, Bug #16396598)
  • Bugs Fixed:
  • InnoDB: A regression introduced by the fix for Bug#17371537 resulted a memory leak for memcached insert operations. (Bug #17738935)
  • InnoDB: The trx->error_key_num field was not initialized in the error injection code found in storage/innobase/handler/handler0alter.cc. The error_key_num field is usually 0 but can be a non zero value if the memory buffer of a DDL transaction object is reused. (Bug #17624926)
  • InnoDB: Fault-tolerant code found in the log apply code for InnoDB ALTER TABLE ... IN PLACE could result in data corruption. (Bug #17625063, Bug #17512497)
  • InnoDB: Databases names beginning with a digit would cause a full-text search (FTS) parser error. (Bug #17607956)
References: See also Bug #17161372.
  • InnoDB: An ALTER TABLE ... CHANGE [COLUMN] operation would result in an rbt_empty(index_cache->words) assertion. (Bug #17536995)
  • InnoDB: Running SHOW ENGINE INNODB STATUS on one connection thread and killing that thread by running a KILL CONNECTION statement from a different connection thread would result in a severe error. (Bug #17474166)
  • InnoDB: An excessive amount of memory would be consumed when querying INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE. The problem would occur for very large full-text search indexes. (Bug #17483582, Bug #70329)
  • InnoDB: CHECK TABLE would ignore the QUICK option. (Bug #17513737)
  • InnoDB: The information_schema.innodb_metrics index_merge counter was not incremented in btr0btr.cc. This patch also introduces new counters (index_page_reorg_attempts, index_page_reorg_successful and index_page_discards) and renames the index_merges counter to “index_page_merge_attempts” to distinguish it from the index_page_merge_successful counter. (Bug #17409657, Bug #70241)
  • InnoDB: Setting the O_DIRECT flag on a file on tmpfs on some operating systems would result in an error printed to the error log. Creating multiple temporary tables on tmpfs would cause the error to be printed repeatedly. The error message has been changed to a warning that is only printed once when running CREATE TABLE multiple times. (Bug #17441867)
  • InnoDB: In debug builds, test case failures would occur due to ibuf_contract_ext performing merges and dict_stats_update returning evicted pages back into the buffer pool while ibuf_change_buffering_debug is enabled. (Bug #17446090)
  • InnoDB: InnoDB would fail to return an error when attempting to run a query after discarding the tablespace. (Bug #17431533)
  • InnoDB: A severe error would occur after discarding a tablespace. (Bug #17430207)
  • InnoDB: During a TRUNCATE TABLE operation, InnoDB: Trying to TRUNCATE a missing index of table ... warnings would be printed to the error log. These warnings should not be printed when the index is a full-text search (FTS) index. (Bug #17402002, Bug #70226)
References: See also Bug #12429565.
  • InnoDB: Full-text index creation on a large table would fail due to insufficient temporary table space and result in a misleading “incorrect key file” error. (Bug #17339606)
  • InnoDB: The InnoDB mecached plugin would update a record before inserting to the binlog, which would cause slave server replication to stop. The insert should occur before the update. (Bug #17358875)
  • InnoDB: During parallel full-text search (FTS) index creation, a scanner thread reads in documents and passes them to the tokenizer. The tokenizer frees documents from memory when tokenization is complete. When tokenizing documents with a large amount of text, the tokenizer thread would not keep pace with the scanner thread. As a result, memory would not be freed fast enough and the “tokenization pending list” would grow in size. (Bug #17384979)
  • InnoDB: A full-text search (FTS) BOOLEAN MODE query with an invalid character in the query string could result in a memory access violation failure. (Bug #17350055)
  • InnoDB: trx_create and trx_free would be called for every memcached get request. (Bug #17371537, Bug #70172)
  • InnoDB: The hardcoded size for the srv_max_n_threads variable was insufficient. The variable setting is now configured based on the maximum number of connection threads and InnoDB background threads. (Bug #16884077)
  • InnoDB: In btr_validate_level there are checks to ensure that all B-tree pages are marked when allocated. The checks would fail on the change buffer because the allocation of change buffer pages is handled differently than other B-tree pages. (Bug #16884217)
  • InnoDB: When the change buffer is enabled, InnoDB would fail to write a transaction log record when merging a record from the insert buffer to a secondary index page if the insert was performed as an “update-in-place”. (Bug #16752251, Bug #69122)
  • InnoDB: A SELECT COUNT (*) query would run very slowly when run concurrently with a LOAD DATA operation. (Bug #16764240, Bug #69141)
  • InnoDB: An existing full-text index would become invalid after running ALTER TABLE ADD FULLTEXT due to an unsynchronized full-text cache. (Bug #16662990, Bug #17373659)
  • InnoDB: Due to a regression in MySQL 5.6, creating or dropping tables with innodb_force_recovery set to 3 (SRV_FORCE_NO_TRX_UNDO) would fail. Additionally, this bug fix includes a code modification that sets InnoDB to read-only when innodb_force_recovery is set to a value greater than 3 (SRV_FORCE_NO_TRX_UNDO). (Bug #16631778, Bug #69892)
  • InnoDB: An InnoDB memcached configuration error message contained an incorrect file name. The error message stated, Please create config table containers in database innodb_memcache by running innodb_config.sql. error 31. The correct file name is innodb_memcached_config.sql. Also, the “error 31” portion of the error message has been translated to its text equivalent, which is “Table not found”. (Bug #16498810, Bug #68684)
  • InnoDB: In mutex_spin_wait(), the sync_array_reserve_cell function could fail to find an empty slot on systems with sync wait arrays that are small in size, resulting in an error. (Bug #16245498)
  • InnoDB: When index_read_map is called for an exact search and fails to return a record due to non-matching search criteria, the cursor would be positioned on the next record after the searched key. A subsequent call to index_next would return the next record instead of returning the previous non-matching row, thereby skipping a record. (Bug #14621190, Bug #15965874, Bug #17314241, Bug #70038, Bug #17413093, Bug #12860669, Bug #60220)
  • InnoDB: Full-text search (FTS) index savepoint information would not be set resulting in a severe error when attempting to rollback to the savepoint. (Bug #14639605, Bug #17456092)
  • InnoDB: Converting a table with a large number of columns from MyISAM to InnoDB would cause an assertion due to insufficient log buffer space. Instead of asserting, InnoDB now attempts to increase log buffer size automatically if the redo log size is too large. (Bug #11758196, Bug #50366)
  • Partitioning: The storage engine was set incorrectly during a rebuild of a partition; the table storage engine was ignored and the default storage engine used instead. Thus, in MySQL 5.1, it was possible for REBUILD PARTITION to change the partition storage engine from InnoDB to MyISAM, and for the reverse (rebuilding partitions of MyISAM tables causing the partitions to use InnoDB) to occurin MySQL 5.5 and later. Now, when rebuilding partitions, the storage engine actually used by the table is checked and used by the handler for the rebuild operation, so that the partition storage engine is not inadvertently changed. (Bug #17559867)
  • Partitioning: After disabling the parent table's indexes with ALTER TABLE ... DISABLE KEYS, rebuilding any of its partitions enabled the indexes on those partitions, leading MyISAM to fail with an error when the optimizer tried to use one of the affected indexes. 
Now in such cases, we check for disabled indexes on the table before rebuilding any of its partitions. If the indexes have been disabled, then we disable them on the partition following the rebuild. (Bug #16051817)
  • Replication: A replication master did not handle correctly the disabling of the semisync plugin on the master and the slave, with a subsequent stopping of the slave. (Bug #17460821, Bug #70349)
  • Replication: The final argument in the SET clause of a LOAD DATA ... SET statement was repeated in the binary log. (Bug #17429677, Bug #70277)
  • Replication: When an error encountered by the dump thread while reading events from the active binary log file was a temporary error, so that the dump thread tried to read the event, it was possible for the dump thread to seek the wrong position, which could cause one or more events to be resent. To prevent this, the thread's position is obtained after each correct read of an event. 
In addition, with this fix, only binary logs that are not closed normally are marked as possibly being corrupted. 
Finally, two warnings are added; these are now returned when a dump thread encounters a temporary error. (Bug #17402313)
  • Replication: When stopping the I/O thread, it was possible with a very large transaction (equivalent to a binary log size greater than 100MB) that the thread did not receive the transaction to the end. When reconnecting with MASTER_AUTO_POSITION=1 it then tried to fetch changes from the next transaction, which could lead to loss of the incomplete transaction and its data. (Bug #17280176, Bug #69943)
  • Replication: Setting rpl_semi_sync_master_enabled while the master was waiting for a reply from the slave could in some cases cause the master to fail. (Bug #17327454, Bug #70045)
  • Replication: Trying to set CHANGE MASTER TO ... MASTER_AUTO_POSITION = 0 failed with error 1777 (ER_AUTO_POSITION_REQUIRES_GTID_MODE_ON). (Bug #17277744)
  • Replication: The value of LAST_INSERT_ID() was not correctly replicated when filtering rules were used on the slave. (Bug #17234370, Bug #69861)
  • Replication: An internal function used for storing GTID values could sometimes try to handle them as strings of the wrong length. (Bug #17032712, Bug #69618)
  • Replication: During row-based replication with binlog_row_image set to MINIMAL, updating only some columns of a table having 9 or more columns caused mysqlbinlog to fail when it was used with the --verbose option. (Bug #16960133)
  • Replication: Issuing a GRANT statement with invalid parameters caused the master to write LOST_EVENTS events into its binary logs, causing replication to stop. Now such cases, if one or more grants or revocations of privileges are successful, an incident is written to the log; otherwise, only a warning is logged. (Bug #16629195, Bug #68892)
  • libmysqlclient version 18 files were removed from MySQL-shared-compat RPM packages to avoid a conflict between the MySQL-shared and MySQL-shared-compat RPM packages. (Bug #17749617)
  • Enabling Index Merge optimizer switches and setting a small sort_buffer_size value could lead to a server exit. (Bug #17617945)
  • Semi-join materialization strategy was not used for VARCHAR columns longer than 512 bytes, resulting in use of a less-efficient strategy and worse query performance. (The limit in characters rather than bytes depends on the column character set; 170 characters for utf8, for example.) (Bug #17566396)
  • Some license and documentation files were missing from Windows MSI packages. (Bug #17584523)
  • Selecting from the Performance Schema session_connect_attrs table under high load could cause a server exit. (Bug #17542370)
  • Compilation failures under Visual Studio 2012 were corrected. (Bug #17430236)
  • The CLIENT_CONNECT_WITH_DB flag was improperly handled in the C client library. This could lead to a malformed packet sent to the server. (Bug #17351732)
  • An assertion was raised if SET PASSWORD was used for an account that has been manually deleted from the mysql.user table but still present in memory. (Bug #17359329)
  • The mysql_options() C API function could leak memory if called more than once with the MYSQL_SET_CLIENT_IP option. (Bug #17297012)
  • The CONV() function could call abs(INT_MIN), which is undefined, and cause a server exit. (Bug #17296644)
  • An error array in the SSL code was missing a comma, leading to implicit concatenation of adjacent messages and a resulting off-by-one error in the relationship between error numbers and messages. (Bug #17294150)
  • The filesort implementation sometimes failed to allocate enough buffer space, leading to a server exit. (Bug #17326567)
  • GRANT without an IDENTIFIED BY clause resulted in an error even for existing users. (Bug #16938568)
  • GROUP_CONCAT() with an invalid separator could cause a server exit. (Bug #16870783)
  • An internal InnoDB string routine could write past the end of a buffer. (Bug #16765410)
  • GIS intersection-related code was missing a return value check, leading to a loop in nondebug builds and a raised assertion in debug builds. (Bug #16659166)
  • Using the binary client/server protocol, the second execution of a prepared statement for a query with parameters in the LIMIT clause raised an assertion. (Bug #16346241)
  • For upgrades using the Windows MSI package installer, the upgrade dialog message was missing the “from” version. (Bug #16053094)
  • Very long database names in queries could cause the server to exit. (Bug #15912213, Bug #16900358)
  • Standalone Windows MSI packages did not have the ALLUSERS property set. They now set ALLUSERS=1. For earlier MSI packages in this MySQL series, a workaround is to use the following command: 
C:\> msiexec /i msi_installer_name ALLUSERS=1
  • 
(Bug #14647206)
  • Recursion by functions called as arguments to XPath expressions was not handled correctly, sometimes causing such expressions to fail. (Bug #14040071)
  • For an ALTER TABLE statement that renamed or changed the default value of a BINARY column, the alteration was done using a table copy and not in place. (Bug #67141, Bug #14735373, Bug #69580, Bug #17024290)
  • Some possible cases of memory use after being freed were fixed. Thanks to Jan Staněk for the patch. (Bug #68918, Bug #16725945)
  • In debug builds, static initialization code could call DBUG functions before the DBUG subsystem was initialized. (Bug #69653, Bug #17063675)
  • With the thread pool plugin enabled, the the PROCESSLIST_USER and PROCESSLIST_HOST columns of the Performance Schema threads table were always NULL for client sessions. Also, for the main thread, those columns were not NULL but set to a user account. 
Note
As part of the bug fix implementation, Performance Schema instrumentation for the thread pool plugin was changed to use thread_pool, not sql. 

(Bug #70028, Bug #17310065, Bug #17049691)
  • COUNT(DISTINCT) should not count NULL values, but they were counted when the optimizer used Loose Index Scan. (Bug #69841, Bug #17222452)
  • For queries of the form UPDATE ... WHERE unique_key ORDER BY ... LIMIT ..., incorrect rows could be updated. Unique keys permit multiple NULL values, but the optimizer did not always consider all of them. (Bug #68656, Bug #16482467)
  • If asked to upgrade a server that was running without InnoDB enabled, mysql_upgrade issued complaints about InnoDB tables not existing (tables that will not exist unless InnoDB is available). (Bug #70152, Bug #17361912)
  • In some cases, range conditions over indexes defined on column prefixes returned incomplete result sets. (For example, SELECT ... WHERE 'abcdef1' < col_name AND col_name < 'abcdef9', where the index on col_name indexed only the first 6 characters.) (Bug #70341, Bug #17458273)
  • Performance Schema instrumentation overhead was reduced for frequent connect/disconnect operations. (Bug #70018, Bug #17310878)
  • Setting host_cache_size at startup had no effect. (Bug #70552, Bug #17576516)
  • InnoDB full-text searches failed to find records within transactions that included savepoints. (Bug #70333, Bug #17458835)
  • Some INSERT INTO ... SELECT ... FROM statements were slow unless the tmp_table_size and max_heap_table_size system variables were set large enough to permit the temporary table used for query processing to be stored in the MEMORY storage engine. (Bug #69368, Bug #16894092)
  • Incorrect reference counting in the range optimizer module resulted in potential for missing or duplicate rows in the query result set. (Bug #70236, Bug #17405466)
  • Host names in grant tables are stored in lowercase, but mysql_install_db could fail to observe this convention, leading to accounts that could not be dropped with DROP USER. (Bug #62255, Bug #12917164, Bug #62254, Bug #12917151)
  • The server uses the ethernet hardware address for UUID generation, but made assumptions about the names of ethernet devices rather than querying the system for their names. Thanks to Honza Horak for the patch. (Bug #63055, Bug #13548252)
  • Several issues identified by the Coverity static analysis tool were fixed. Thanks to Jan Staněk and Honza Horak for the patches. (Bug #70591, Bug #17590095)
  • Missing va_end() calls were added to logging and UCS2 code. Thanks to Jan Staněk for the patch. (Bug #68896, Bug #16725769)
  • MySQL did not compile on Mac OS X 10.9 (Mavericks). (Bug #70542, Bug #17647863)
  • Killing a query that is performing a filesort operation resulted in an ER_SERVER_SHUTDOWN (Server shutdown in progess) error. (Bug #18256, Bug #11745656)

New in MySQL 5.6.13 (Jul 31, 2013)

  • Functionality Added or Changed:
  • Important Change; Replication: By default, when promoting integers from a smaller type on the master to a larger type on the slave (for example, from a SMALLINT column on the master to a BIGINT column on the slave), the promoted values are treated as though they are signed. Now in such cases it is possible to modify or override this behavior using one or both of ALL_SIGNED, ALL_UNSIGNED in the set of values specified for the slave_type_conversions server system variable. For more information, see Row-based replication: attribute promotion and demotion, as well as the description of the variable. (Bug #15831300)
  • Previously, program options could be specified in full or as any unambiguous prefix. For example, the --compress option could be given to mysqldump as --compr, but not as --comp because the latter is ambiguous. Option prefixes now are deprecated. They can cause problems when new options are implemented for programs. A prefix that is currently unambiguous might become ambiguous in the future. If an unambiguous prefix is given, a warning now occurs to provide feedback. The C API libmysqlclient shared-library .so files now have version 18.1.0 (up from version 18.0.0 used in MySQL 5.5). (Bug #16809055)
  • In batch mode, mysql formatted result status messages such as “"Query OK, 1 row affected"” but did not print them. Now these messages are not formatted. (Bug #69486, Bug #16971432)
  • Bugs Fixed:
  • Performance; Important Change; InnoDB: InnoDB would fail to open a tablespace that has multiple data files. This removes the known limitation that was in MySQL Server 5.6.12. (Bug #17033706, Bug #69623)
  • Performance; InnoDB: A code regression introduced in MySQL 5.6 negatively impacted DROP TABLE and ALTER TABLE performance. This could cause a performance drop between MySQL Server 5.5.x and 5.6.x. (Bug #16864741, Bug #69316)
  • Performance; InnoDB: When innodb_thread_concurrency is set to a non-zero value, there was a possibility that all innodb_concurrency_tickets would be released after each row was read, resulting in a concurrency check after each read. This could impact performance of all queries. One symptom could be higher system CPU usage. We strongly recommend that you upgrade to MySQL Server 5.6.13 if you use this setting. This could cause a performance drop between MySQL Server 5.5.x and 5.6.x. (Bug #68869, Bug #16622478)
  • Incompatible Change: It is possible for a column DEFAULT value to be valid for the sql_mode value at table-creation time but invalid for the sql_mode value when rows are inserted or updated.
  • MySQL Cluster: CREATE LOGFILE GROUP failed with a syntax error when INITIAL_SIZE, UNDO_BUFFER_SIZE, or both options were specified. (Bug #13116514)
  • InnoDB: The server would crash during a memcached set operation. The failure was due to a padded length value for a utf8 char column. During a memcached update operation, a field from an old tuple would be copied with a data length that was less than the padded utf8 char column value. This fix ensures that old tuples are not copied. Instead, a new tuple is created each time. (Bug #16875543)
  • InnoDB: When CHECK TABLE found a secondary index that contained the wrong number of entries, it would report an error but not mark the index as corrupt. CHECK TABLE now marks the index as corrupt when this error is encountered, but only the index is marked as corrupt, not the table. As a result, only the index becomes unusable until it is dropped and rebuilt. The table is unaffected. (Bug #16914007)
  • InnoDB: InnoDB would attempt to gather statistics on partially created indexes. (Bug #16907783)
  • InnoDB: A full-text search using the IN BOOLEAN MODE modifier would result in an assertion failure. (Bug #16927092)
  • InnoDB: The two INFORMATION_SCHEMA tables for the InnoDB buffer pool could show an invalid page type for read-fixed blocks. This fix will show the unknown page type for blocks that are I/O-fixed for reading. (Bug #16859867)
  • InnoDB: During an insert buffer merge, InnoDB would invoke lock_rec_restore_from_page_infimum() on a potentially invalid record pointer. (Bug #16806366)
  • InnoDB: The innodb_rwlock_x_spin_waits item in the INFORMATION_SCHEMA.INNODB_METRICS table would show the same value as the innodb_rwlock_x_os_waits item. (Bug #16798175)
  • InnoDB: A memory leak would occur when inserting or replacing a row in a full-text search index on a table with more than 96 columns. (Bug #16809167)
  • InnoDB: In debug builds, an assertion could occur in OPT_CHECK_ORDER_BY when using binary directly in a search string, as binary may include NULL bytes and other non-meaningful characters. This fix will remove non-meaningful characters before the search is run. (Bug #16766016)
  • InnoDB: The page_zip_validate() consistency check would fail after compressing a page, in page_zip_compress(). This problem was caused by page_zip_decompress(), which would fail to set heap_no correctly when a record contained no user data bytes. A record with no user data bytes occurs when, for example, a primary key is an empty string and all secondary index fields are NULL or an empty string. (Bug #16736929)
  • InnoDB: A race condition would occur between ALTER TABLE ... ADD KEY and INSERT statements, resulting in an “Unable to Purge a Record” error. (Bug #16628233)
  • InnoDB: A full-text search that returns large result sets would consume an excessive amount of memory due to use of a red-black tree for holding full-text search results. This fix reduces and imposes a limit on memory consumption. If the limit is exceeded, a message is returned indicating that the full-text search query exceeds the maximum allowed memory. (Bug #16625973)
  • InnoDB: Restarting InnoDB in read-only mode and running a workload would occasionally return a global_segment < os_aio_n_segments assertion. (Bug #16362046)
  • InnoDB: When the InnoDB shutdown mode (innodb_fast_shutdown) is set to 2 and the master thread enters the flush loop, the thread would not be able to exit under some circumstances. This could lead to a shutdown hang. (Bug #16411457)
  • InnoDB: While printing a UTF-8 table name, InnoDB would truncate the table name, resulting in an incomplete buffer and subsequent Valgrind error. This bug fix also addresses an incorrect debugging error message. (Bug #16066351)
  • InnoDB: Attempting to create a table while in innodb_read_only mode would result in the following error: ERROR 1015 (HY000): Can't lock file (errno: 165 - Table is read only). (Bug #15963619)
  • InnoDB: Due to a resource related bug, creating numerous tables that have a simple a full-text search index would cause excessive memory usage. This fix adds a global configuration parameter to limit the total memory size that full-text search indexes can use. If the global memory limit is reached by an index operation, a force sync is triggered. (Bug #14834698, Bug #16817453)
  • InnoDB: In the error log, a full-text search index would be reported missing from the data dictionary during a TRUNCATE TABLE operation. After restarting mysqld, the following InnoDB error would be reported: “InnoDB: Error: trying to load index idx13 for table test/g1 but the index tree has been freed..” (Bug #12429565)
  • InnoDB: Creating a table with a comment or default textual value containing an apostrophe that is escaped with a backslash would sometimes cause the InnoDB storage engine to omit foreign key definitions. (Bug #61656, Bug #12762377)
  • InnoDB: Setting foreign_key_checks=0 and running ALTER TABLE to change the character set of foreign key columns for a database with multiple tables with foreign key constraints would leave the database in an inconsistent state. Subsequent ALTER TABLE operations (using the COPY algorithm) with foreign_key_checks=1 would fail due to the detected inconsistency. Reversion of the partially executed ALTER TABLE operation would also fail, resulting in the loss of the table being altered. When running the same ALTER TABLE operation with a RENAME clause, the inconsistency would not be detected but if the ALTER TABLE operation failed for some other reason, reversion of the partially executed ALTER TABLE would fail with the same result. The bug fix temporarily disables foreign_key_checks while the previous table definition is restored. (Bug #65701, Bug #14227431)
  • InnoDB: Successive deletes in descending key order would lead to under-filled InnoDB index pages. When an InnoDB index page is under-filled, it is merged with the left or right sibling node. The check performed to determine if a sibling node is available for merging was not functioning correctly. (Bug #68501, Bug #16417635)
  • InnoDB: The pthread_mutex, commit_threads_m, which was initialized but never used, has been removed from the code base. (Bug #60225, Bug #11829813)
  • InnoDB: When running an InnoDB full-text search in boolean mode, prefixing an asterisk (*) to a search string ('*string') would result in an error whereas for MyISAM, a prefixed asterisk would be ignored. To ensure compatibility between InnoDB and MyISAM, InnoDB now handles a prefixed asterisk in the same way as MyISAM. (Bug #68948, Bug #16660607)
  • InnoDB: The row_check_index_for_mysql method, which checks for NULL fields during an index scan or CHECK TABLE operation, would iterate unnecessarily. Thanks to Po-Chun Chang for the patch to correct this issue. (Bug #69377, Bug #16896647)
  • Partitioning: When upgrading to MySQL 5.5.31 or higher, a message is written into the output of mysql_upgrade when encountering a partitioned table for which the ALGORITHM option is required to maintain binary compatibility with the original; the message includes the ALTER TABLE statement required to make the change. For such a table having a sufficiently large number of partitions, the message was truncated with an error before the complete ALTER TABLE statement could be written. (Bug #16589511)
  • Partitioning: When a range specified in the WHERE condition of a query against a table partitioned by RANGE entirely within that of one of the partitions, the next partition was also checked for rows although it should have been pruned away.
  • Partitioning: When dropping a partitioned table, the table's .par file was deleted first, before the table definition or data. This meant that, if the server failed during the drop operation, the table could be left in an inconsistent state in which it could neither be accessed nor dropped.Replication: The condition leading to the issue fixed in Bug #16579083 continued to raise an error even though the condition itself no longer cause the issue to occur. (Bug #16931177, Bug #69369)
  • References: See also Bug #16271657, Bug #16491597, Bug #68251, Bug #68569.
  • Replication: When rpl_semi_sync_master_timeout was set to an extremely large value, semi-synchronous replication became very slow, especially when many sessions were working in parallel. It was discovered that the code to calculate this timeout was inside the wait loop itself, with the result that an increase in the value of rpl_semi_sync_master_timeout caused repeated iterations. This fix improves the method used to calculate wakeup times, and moves it outside of the wait loop, so that it is executed one time only. (Bug #16878043, Bug #69341)
  • Replication: It was possible to cause a deadlock after issuing FLUSH TABLES WITH READ LOCK by issuing STOP SLAVE in a new connection to the slave, then issuing SHOW SLAVE STATUS using the original connection. The fix for this includes the addition of the rpl_stop_slave_timeout system variable, to control the time in seconds to wait for slave to stop after issuing STOP SLAVE before returning a warning. (Bug #16856735)
  • Replication: Some expressions employing variables were not handled correctly by LOAD DATA. (Bug #16753869)
  • Replication: In some circumstances, the message in the Last_Error column from the output of SHOW SLAVE STATUS referred to GTID_NEXT_LIST although this variable is not currently implemented (the name is reserved for possible future use). Now in such cases the error message no longer refers to this variable. (Bug #16742886, Bug #69096)
  • Replication: The error displayed by SHOW SLAVE STATUS when a worker thread fails to apply an event contained no event coordinate information. The GTID for the event's group was also not shown. Now in such cases, the text shown for Last_SQL_Error is prefixed with the (physical) master binary log coordinates, as well as the value of gtid_next when this has been set. (Bug #16594095)
  • Replication: Linker errors occurred if the header file log_event.h was included in an application containing multiple source files, because the file rpl_tblmap.cc was included in log_event.h. This fix moves the inclusion of rpl_tblmap.cc into the source files that use log_event.h. (Bug #16607258)
  • Replication: The warning issued when specifying MASTER_USER or MASTER_PASSWORD with CHANGE MASTER TO was unclear for a number of reasons, and has been changed to read, Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see 'START SLAVE Syntax' in the MySQL Manual for more information. (Bug #16460123, Bug #16461303, Bug #68602, Bug #68599)
  • Replication: After a transaction was skipped due to its GTID already having been logged, all remaining executed transactions were incorrectly skipped until gtid_next was pointed to a different GTID. To avoid this incorrect behavior, all transactions—even those that have been skipped—are marked as undefined when they are commited or rolled back, so that an error is thrown whenever a second transaction is executed following the same SET @@session.gtid_next statement. (Bug #16223835)
  • Replication: After the client thread on a slave performed a FLUSH TABLES WITH READ LOCK and was followed by some updates on the master, the slave hung when executing SHOW SLAVE STATUS. (Bug #68460, Bug #16387720)
  • For debug builds, improper use of SAFE_MUTEX within dbug.c caused different code areas to have different ideas about size and contents of a mutex. This could result in out-of-bounds memory writes. (Bug #16945343)
  • Sql_condition::set_subclass_origin() could perform an out-of-bounds read. (Bug #16969091)
  • Initialization of keycache_* variables (see Multiple Key Caches) during server startup could write to incorrect memory. (Bug #16945503)
  • Reads from message buffers for closed connections could occur. (Bug #17003702)
  • The server could exit while using a cursor to fetch rows from a UNION query. (Bug #16983143)
  • The range optimizer incorrectly assumed that any geometry function on a spatial index returned rows in ROWID order, which could result in incorrect query results. (Bug #16960800)
  • The server did excessive locking on the LOCK_active_mi and active_mi->rli->data_lock mutexes for any SHOW STATUS LIKE 'pattern' statement, even when the pattern did not match status variables that use those mutexes (Slave_heartbeat_period, Slave_last_heartbeat, Slave_received_heartbeats, Slave_retried_transactions, Slave_running). Now attempts to show those variables do not lock those mutexes. This might result is slightly stale data, but better performance. (Bug #16904035)
  • Full-text phrase search in InnoDB tables could read incorrect memory. (Bug #16885178)
  • It was not possible to keep several major versions of MySQL in the same yum repository. (Bug #16878042)
  • The Performance Schema could spawn a thread using incorrect instrumentation information. (Bug #16939689)
  • INSERT ... ON DUPLICATE KEY UPDATE could cause a server exit if a column with no default value was set to DEFAULT. (Bug #16756402)
  • The code base was modified to account for new warning checks introduced by gcc 4.8. (Bug #16729109)
  • Compiling failed with -DMY_ATOMIC_MODE_RWLOCKS=1 or on platforms on which MySQL did not support lockless atomic operations (such as ARM). (Bug #16736461)
  • In a prepared statement or stored routine, if the HAVING clause of a subquery referenced some column of the GROUP BY of the parent query, the server could exit. (Bug #16739050)
  • The read-only open_files_limit system variable did not show maximum number of open files the mysqld process could have, but instead the number that was requested after adjusting the --open-files-limit command-line option. (Bug #16657588)
  • Some rows for a session could be missing sporadically from the Performance Schema session_connect_attrs table while the session was executing a workload. (Bug #16576980)
  • The server could make the wrong decision about whether an account password was expired. (Bug #16604641)
  • Upgrading from community SLES RPM packages to commercial packages for the same MySQL version failed with conflict errors. (Bug #16545296)
  • A full-text search syntax error failed to print to standard output. (Bug #16429688, Bug #16765397)
  • Unlike MyISAM, InnoDB does not support boolean full-text searches on nonindexed columns, but this restriction was not enforced, resulting in queries that returned incorrect results. (Bug #16434374)
  • If the optimizer was using a loose index scan, the server could exit while attempting to create a temporary table. (Bug #16436567)
  • Incorrect results or a server exit could be caused by a reference to an aggregated expression inside a nested subquery, where the aggregated expression was evaluated in a query block more than two levels outer to the reference. (Bug #16436383)
  • In debug builds, failure in the range optimizer for an ER_LOCK_DEADLOCK or ER_LOCK_WAIT_TIMEOUT error could go undetected and cause an assertion to be raised when a response was sent to the client. In release builds, this problem manifested as clients receiving an OK for a statement that had failed. (Bug #16366994, Bug #16247110)
  • An assertion could be raised when creating a index on a prefix of a TINYBLOB column in an InnoDB column. (Bug #16368875)
  • A server exit could occur for queries of the form SELECT (SELECT 1 FROM t1) IN (SELECT a FROM t1) when attempting to evaluate the constant left-hand argument to the IN subquery predicate. (Bug #16369522)
  • No warning was generated if a duplicate index existed after dropping a column associated with a multiple-column index. (Bug #16315351)
  • SELECT DISTINCT with WITH ROLLUP could result in a Duplicate entry 'NULL' for key '' error. (Bug #16314835)
  • The server could exit in do_copy_not_null() due to an improper NULL-value check. (Bug #16316564)
  • Transforming some subqueries that select temporal or BIGINT types or to a semijoin caused a server exit on the second execution of prepared statements or stored programs. (Bug #16319671)
  • The usual failed-login attempt accounting was not applied to failed COM_CHANGE_USER commands. (Bug #16241992)
  • A user variable referenced during execution of a prepared statement is set to memory that is freed at the end of execution. A second execution of the statement could result in Valgrind warnings when accessing this memory. (Bug #16119355)
  • Misoptimization of left expressions in prepared statements could cause a server exit. (Bug #16095534)
  • The optimizer trace could print ranges for key parts that were not usable for range access. (Bug #14615536)
  • When running a query on INFORMATION_SCHEMA.INNODB_BUFFER_PAGE that requested table_name and index_name values, query results would include index pages without table_name or index_name values. (Bug #14529666)
  • Several COM_xxx commands in the client-server protocol did not have length checks for incoming network packets, which could result in various problems for malformed input. (Bug #14525642)
  • Passwords in statements were not obfuscated before being written to the audit log. (Bug #14536456)
  • With the thread pool plugin in use, normal connection termination caused the Aborted_clients status variable to be incremented. (Bug #14081240)
  • On Windows, command-line options of the form --opt_name="opt_value" worked but --opt_name='opt_value' did not.
  • On all platforms, for Performance Schema options of the form --performance_schema_instrument="instrument=value", invalid instrument names now are rejected. (Bug #13955232)
  • MySQL Installer, if run in custom install or change mode, offered installation options that had no effect. (Bug #12928601)
  • Incorrect results could be returned from queries that used several aggr_func(DISTINCT) functions (where aggr_func() is an aggregate function such as COUNT()) when these referred to different columns of the same composite key. (Bug #12328597)
  • If an UPDATE containing a subquery caused a deadlock inside InnoDB, the deadlock was not properly handled by the SQL layer. The SQL layer then tried to unlock the row after InnoDB rolled back the transaction, raising an assertion inside InnoDB. (Bug #69127, Bug #16757869)
  • Boolean plugin system variables did not behave well on machines where char is unsigned; some code attempted to assign a negative value to these. (Bug #59905, Bug #11864205)
  • In the absence of SQL_CALC_FOUND_ROWS in the preceding query, FOUND_ROWS() should return the number of rows in the result set, but this did not always happen if the query contained ORDER BY. (Bug #69271, Bug #16827872)
  • Unoptimized versions of the xxxkorr() macros in my_global.h were used on 64-bit x86 processors. (Bug #61179, Bug #12565703)
  • sql-common/client_plugin.c contained a nonportable use of a va_list parameter. (Bug #62769, Bug #13252623)
  • mysqldump assumed the existence of the general_log and slow_log tables in the mysql database. It failed if invoked to dump tables from an older server where these tables do not exist. (Bug #65670, Bug #14236170)
  • Full-text search on InnoDB tables failed on searches for words containing apostrophes. (Bug #69216, Bug #16801781)
  • Full-text search on InnoDB tables failed on searches for literal phrases combined with + or - operators. (Bug #68720, Bug #16516193)
  • Optimizations that used extended secondary keys (see Use of Index Extensions) worked only for InnoDB, even for storage engines with the requisite underlying capabilities. (Bug #68469, Bug #16391678)
  • With big_tables enabled, queries that used COUNT(DISTINCT) on a simple join with a constant equality condition on a non-duplicate key returned incorrect results. (Bug #52582, Bug #11760197)
  • mysql_install_db incorrectly tried to create the mysql.innodb_table_stats and mysql.innodb_index_stats tables if InnoDB was not available. (Bug #68438, Bug #16369955)
  • If one session had any metadata lock on a table, another session attempting CREATE TABLE [IF NOT EXISTS] for the same table would hang. This occurred due to an attempt in the second session to acquire an exclusive metadata lock on the table before checking whether the table already existed. An exclusive metadata lock is not compatible with any other metadata locks, so the session hung for the lock timeout period if another session had the table locked. Now the server attempts to acquire a shared metadata lock on the table first to check whether it exists, then upgrade to an exclusive lock if it does not. If the table does exist, an error occurs for CREATE TABLE and a warning for CREATE TABLE IF NOT EXISTS. (Bug #63144, Bug #13418638)
  • Attempts to build from a source RPM package could fail because the build process attempted to refer to a pb2user that might not exist. (Bug #64641, Bug #13865797, Bug #69339, Bug #16874980)
  • A typo in cmake/dtrace.cmake prevented DTrace support from being enabled by -DENABLE_DTRACE-on. (Bug #60743, Bug #12325449)
  • When an internal buffer was too small for the workload, the Performance Schema could spend a lot of time in an internal spin loop attempting to allocate a memory buffer, and fail. (Bug #69382, Bug #16945618)
  • Some LEFT JOIN queries with GROUP BY could return incorrect results. (Bug #68897, Bug #16620047)
  • For queries with ORDER BY ... LIMIT, the optimizer could choose a nonordering index for table access. (Bug #69410, Bug #16916596)
  • When selecting a union of an empty result set (created with WHERE 1=0 or WHERE FALSE) with a derived table, incorrect filtering was applied to the derived table. (Bug #69471, Bug #16961803)
  • Comparison of a DATETIME value and a string did not work correctly for the utf8_unicode_ci collation. (Bug #68795, Bug #16567381)

New in MySQL 5.6.12 (Jun 5, 2013)

  • Functionality Added or Changed:
  • mysql_upgrade now verifies that the server version matches the version against which it was compiled, and exits if there is a mismatch. In addiion, a --version-check option permits specifying whether to enable version checking (the default), or disable checking if given as --skip-version-checking. (Bug #16500013)
  • Bugs Fixed:
  • Incompatible Change: When used for an existing MySQL account, the GRANT statement could produce unexpected reults if it included an IDENTIFIED WITH clause that named an authentication plug differing from the plugin named in the corresponding mysql.user table row. 
Because IDENTIFIED WITH is intended for GRANT statements that create a new user, it is now prohibited if the named account already exists. (Bug #16083276)
  • Important Change; Replication: When the server was running with --binlog-ignore-db and SELECT DATABASE() returned NULL (that is, there was no currently selected database), statements using fully qualified table names in dbname.tblname format were not written to the binary log. This was because the lack of a currently selected database in such cases was treated as a match for any possible ignore option rather than for no such option; this meant that these statements were always ignored. 
Now, if there is no current database, a statement using fully qualified table names is always written to the binary log. (Bug #11829838, Bug #60188)
  • InnoDB; Partitioning: Joins involving partitioned InnoDB tables having one or more BLOB columns were not always handled correctly. The BLOB column or columns were not required to be join columns, or otherwise to be named or referenced in the statement containing the join, for this issue to occur. (Bug #16367691)
  • InnoDB: In debug builds, an online ALTER TABLE operation that performed a full table copy would raise an assertion. The assertion was due to a race condition that would occur during BLOB retrieval, when applying the table modification log to any log block except for the very last one. This fix modifies row_log_table_apply_convert_mrec() to ensure that an index B-tree lock is acquired to protect the access to log->blobs and the BLOB page. (Bug #16774118)
  • InnoDB: When the function trx_rollback_or_clean_recovered() rolls back or cleans up transactions during a crash recovery, it removes the trx objects from the trx_sys list without freeing up the memory used by those objects. To prevent a memory leak, this fix adds trx_free_for_background() calls to trx_rollback_resurrected(), the function that removes the trx objects. (Bug #16754776)
  • InnoDB: A missing comma in SHOW STATUS output would break MySQL Enterprise Monitor parsing. (Bug #16723686)
  • InnoDB: After a clean shutdown, InnoDB does not check .ibd file headers at startup. As a result, in a crash recovery scenario, InnoDB could load a corrupted tablespace file. This fix implements consistency and status checks to avoid loading corrupted files. (Bug #16720368)
  • InnoDB: A memory leak would occur in dict_check_tablespaces_and_store_max_id() when space_id is equal to zero. (Bug #16737332)
  • InnoDB: When ADD PRIMARY KEY columns are reordered in an ALTER TABLE statement (for example: ALTER TABLE t1 ADD PRIMARY KEY(a,b), CHANGE a a INT AFTER b), the log apply for UPDATE operations would fail to find rows. (Bug #16586355)
  • InnoDB: DML operations on compressed temporary tables would result in a Valgrind error in the buffer manager stack. (Bug #16593331)
  • InnoDB: This fix addresses a race condition that would occur between the rollback of a recovered transaction and creation of a secondary index in a locked operation. The race condition would corrupt the secondary index. (Bug #16593427)
  • InnoDB: For ALTER TABLE operations on InnoDB tables that required a table-copying operation, other transactions on the table might fail during the copy. However, if such a transaction issued a partial rollback, the rollback was treated as a full rollback. (Bug #16544143)
  • InnoDB: Under certain circumstances, LRU flushing would take a long time possibly affecting all flushing activity and causing a shutdown timeout. (Bug #16500209)
  • InnoDB: The recv_writer thread would only start after all redo log scans finished. In the case of multiple redo log scans, accumulated redo records would be applied after each scan and before processing the next scan. The absence of the recv_writer thread to help with flushing would slow recovery or result in a server startup timeout. This fix ensures that the recv_writer thread starts before the first scan batch is processed. (Bug #16501172)
  • InnoDB: This fix replaces the IB_ULONGLONG_MAX constant with LSN_MAX where the code refers to log sequence numbers, or with TRX_ID_MAX where trx->no is initialized to an undefined value. This change does not alter the value of the constant. (Bug #16458660)
  • InnoDB: This fix corrects the text for InnoDB error 6025, which stated, “InnoDB: read can't be opened in ./ib_logfile0 mode.”. The corrected message states, “InnoDB: ./ib_logfile0 can't be opened in read mode.” The variable and mode in the message construct were transposed. (Bug #16434398)
  • InnoDB: The page_zip_available function would count some fields twice. (Bug #16463505)
  • InnoDB: This fix removes most calls to OS_THREAD_SLEEP from InnoDB. (Bug #16472953)
  • InnoDB: Concurrently inserting into a full-text table would cause some inserts to fail. Duplicate values would be generated for full-text search document IDs when performing inserts into a hidden full-text search document ID column. (Bug #16469399)
  • InnoDB: FLUSH TABLES FOR EXPORT would sleep too often while flushing pages from buffer pools. (Bug #16471701)
  • InnoDB: In cases where threads are forced to do single page flushing, fsync() would be triggered for all data files. This fix allows for synchronous single page flushing. (Bug #16477781)
  • InnoDB: In debug builds, an insert would fail with an invalid assertion: sync_thread_levels_g(array, level - 1, TRUE). (Bug #16409715)
  • InnoDB: Multiple concurrent calls to dict_update_statistics() would result in unnecessary server load. (Bug #16400412)
  • InnoDB: On 64-bit Windows builds, INNODB_BUFFER_POOL_SIZE would not accept an allocation of more than 32GB. This limitation was due to a bug that truncated the internal value for the InnoDB buffer pool size to 32 bits on 64-bit Windows builds. (Bug #16391722)
  • InnoDB: Crash recovery would fail with a !recv_no_log_write assertion when reading a page. (Bug #16405422)
  • InnoDB: Creating a foreign key constraint using the ALTER TABLE INPLACE algorithm requires foreign_key_checks to be set to 0 (SET foreign_key_checks = 0;). As a result, an appropriate duplicate ID check would not be performed. (Bug #16413976)
  • InnoDB: RENAME TABLE would result in a hang due to a MySQL mutex acquisition deadlock. (Bug #16305265)
  • InnoDB: DROP DATABASE failed if the database contained an InnoDB table that had a data file in an external data directory. The external data file had an “InnoDB Symbolic Link” file type (.isl) that was not recognized by MySQL. This fix adds .isl as a known InnoDB file type. (Bug #16338667)
  • InnoDB: When tables are linked by foreign key constraints, loading one table would open other linked tables recursively. When numerous tables are linked by foreign key constraints, this would sometimes lead to a thread stack overflow causing the server to exit. Tables linked by foreign key constraints are now loaded iteratively. Cascade operations, which were also performed in a recursive manner, are now performed iteratively using an explicit stack. (Bug #16244691)
  • InnoDB: When calling the lock_rec_block_validate() function after releasing the kernel mutex, there is a chance the lock might be invalid and result in a Valgrind error due to an invalid read on lock->index. This fix copies the lock->index when the kernel mutex is being held and passes the lock->index to lock_rec_block_validate(). (Bug #16268289)
  • InnoDB: Under testing, a FLUSH TABLE operation resulted in a timeout due to a missing acknowledgement that the purge thread had stopped. (Bug #16277387)
  • InnoDB: For a compressed table, the “page reorganize” function would ignore the innodb_log_compressed_pages option and always log the entire compressed page, which increased the size of the redo log. The “page reorganize” function now adheres to the innodb_log_compressed_pages option and does not log compressed page images to the redo log when innodb_log_compressed_pages is set to “OFF”. (Bug #16267120)
  • InnoDB: After disabling foreign key checks with SET foreign_key_checks=0 and performing a DROP INDEX, the table was no longer accessible after restarting the server. This fix allows the table with missing foreign key indexes to be accessed when SET foreign_key_checks=0. When the table is accessible, the user must recreate the missing indexes to fulfill the foreign key constraints. (Bug #16208542)
  • InnoDB: When a transaction is in READ COMMITTED isolation level, gap locks are still taken in the secondary index when a row is inserted. This occurs when the secondary index is scanned for duplicates. The function row_ins_scan_sec_index_for_duplicate() always calls the function row_ins_set_shared_rec_lock() with LOCK_ORDINARY irrespective of the transaction isolation level. This fix modifies the row_ins_scan_sec_index_for_duplicate() function to call row_ins_set_shared_rec_lock() with LOCK_ORDINARY or LOCK_REC_NOT_GAP, based on the transaction isolation level. (Bug #16133801)
  • InnoDB: Starting mysqld with --innodb_log_buffer_size=50GB failed to allocate memory and returned NULL. For non-debug builds there was no check in place and a segmentation fault occurred. This fix adds a log message stating that memory failed to be allocated, and adds an assertion. (Bug #16069598)
  • InnoDB: When UNIV_DEBUG is enabled in debug builds, buf_validate() is often called which sometimes results in false alarms in tests on semaphore wait timeout. This fix increases counter values to reduce false alarms. (Bug #16068056)
  • InnoDB: While processing read-write workloads, InnoDB would scan more pages than are required for flushing, unnecessarily consuming CPU resource. (Bug #16037180)
  • InnoDB: The explain_filename function, which provides information about a partition by parsing the file name, would return an error when attempting to parse a file name with no partition information. (Bug #16051728)
  • InnoDB: Stopping the server, removing a database table (d1.t1) .frm file from the data directory, restarting the server, and dropping the database (d1), would cause an assertion. (Bug #16043216)
  • InnoDB: An active FLUSH TABLE FOR EXPORT thread would cause a hang during shutdown. The fix ensures that trx_is_interrupted() is checked during ibuf_merge. (Bug #15953255)
  • InnoDB: A multi-row INSERT ... ON DUPLICATE KEY UPDATE insert failure, caused by a duplicate key error, would result in duplicate auto-increment values. (Bug #14483484)
  • Replication: Point-in-time recovery could fail when trying to restore a single database from a binary log in row-based format using mysqlbinlog with the --database option. (Bug #16698172)
  • Replication: Issuing a FLUSH TABLES statement on a GTID-enabled master caused replication to fail. It was found that this misbehavior was introduced by the fix for Bug #16062608, which disallowed statements that perform an implicit commit but whose changes are not logged when gtid_next is set to any value other than AUTOMATIC. The changes made in that fix have been reverted, and such statements are (again) allowed without regard to the value of this variable. (Bug #16715809, Bug #69045)
  • Replication: A crash-on-commit error caused InnoDB to lose the previous transaction following execution of a RESET MASTER statement. This occurred because the prepare phase caused a flush to disk, while the commit phase did not perform a corresponding flush within InnoDB. 
To fix this problem, RESET MASTER now causes storage engine logs to be flushed on commit. (Bug #16666456, Bug #68932)
  • Replication: When used with the options --dump-slave --include-master-host-port, mysqldump printed the port number within quotation marks, as if it were a string value rather than an integer. (Bug #16615117)
  • Replication: When processing an Update_rows_log_event or Delete_rows_log_event from the binary log, the before image is hashed and stored in a hash table. Following this, the original table is scanned for the desired records; subsequent processing hashes each record fetched from the original table and performs a lookup for it in the hash table. However, columns read from the image that had originally been set to NULL could instead contain random or “garbage” data, causing the lookup (and thus replication) to fail with an error such as Could not execute Update_rows event on table.... (Bug #16621923)
References: See also Bug #11766865. This bug was introduced by Bug #16566658.
  • Replication: Due to time resolution issues on some systems, the time to be taken by the dump thread for a reply from the slave could be calculated to be less than zero, leading to Semi-sync master wait for reply fail to get wait time errors. Since this condition does not have a negative impact on replication, errors caused by these conditions have been reduced to warnings. (Bug #16579028)
  • Replication: When one or more GTID log events but no previous GTIDs log events were found in the binary log, the resulting error was mishandled and led to a failure of the server. (This is an extremely rare condition that should never occur under normal circumstances, and likely indicates that the binary log file has somehow been corrupted.) Now in such cases, an appropriate error is issued, and is handled correctly. (Bug #16502579, Bug #68638)
  • Replication: Running the server with both the --log-slave-updates and --replicate-wild-ignore-table options in some cases caused updates to user variables not to be logged. (Bug #16541422)
  • Replication: When using mysqlbinlog and the mysql client to roll forward two or more binary logs on a server having GTIDs enabled, the gtid_next variable was not properly reset when switching from the first to the second binary log, causing processing to halt with an error at that point. (Bug #16532543)
  • Replication: The mysqlbinlog options --include-gtids, --exclude-gtids, and --skip-gtids did not work correctly when trying to process multiple files. (Bug #16517775)
  • Replication: When the size of an execution event exceeded the maximum set for the buffer (slave_pending_jobs_size_max), row-based replication could hang with Waiting for slave workers to free pending events. (Bug #16439245, Bug #68462)
  • Replication: Extra binary log rotations were performed due to concurrent attempts at rotation when the binary log became full, which were allowed to succeed. This could lead to the unnecessary creation of many small binary log files. (Bug #16443676, Bug #68575)
  • Replication: Attempting to execute START SLAVE after importing new slave_master_info and slave_relay_log_info tables failed with an empty error message. Now an appropriate error and message are issued in such cases. (Bug #16475866, Bug #68605)
  • Replication: Restarting the server after the slave_relay_log_info table had been emptied caused mysqld to fail while trying to return an error. (Bug #16460978, Bug #68604)
  • Replication: Following disconnection from the master, the slave could under certain conditions report erroneously on reconnection that it had received a packet that was larger than slave_max_allowed_packet, causing replication to fail. (Bug #16438800, Bug #68490)
  • Replication: An SQL thread error during MTS slave recovery caused the slave to fail. (Bug #16407467, Bug #68506)
  • Replication: When using the options --read-from-remote-server --stop-never --base64-output=decode-rows --verbose, mysqlbinlog failed to reset the counter used to store the current position within the file when the binary log on the server was rotated. (Bug #16316123, Bug #68347)
  • Replication: When using mysqldump to back up a database created with MySQL 5.6.4 or an earlier version, setting --set-gtid-purged=AUTO caused the backup to fail, because pre-5.6.5 versions of MySQL did not support GTIDs, and it could not be determined if GTIDs were enabled for the database. This fix makes sure mysqldump does not attempt to output a SET @@global.gtid_purged statement when backing up any pre-5.6.5 databases. (Bug #16303363, Bug #68314)
  • Replication: Deadlocks could sometimes occur on group commits with a high number of concurrent updates, as well as when one client held a lock from a commit while another client imposed a lock while rotating the binary log. (Bug #16271657, Bug #16491597, Bug #68251, Bug #68569)
  • Replication: When semisynchronous replication was enabled, the automatic dropping on the master of an event created using ON COMPLETION NOT PRESERVE caused the master to fail. (Bug #15948818, Bug #67276)
  • Replication: Setting a SET column to NULL inside a stored procedure caused replication to fail. (Bug #14593883, Bug #66637)
  • Replication: The binary log contents got corrupted sometimes, because the function MYSQL_BIN_LOG::write_cache always thought it had reached the end-of-cache when the function my_b_fill() reported a '0,' while that could also mean an error had occurred. This fix makes sure that whenever my_b_fill() returns a '0,' an error check is performed on info->error. (Bug #14324766, Bug #60173)
  • Replication: PURGE BINARY LOGS by design does not remove binary log files that are in use or active, but did not provide any notice when this occurred. Now, when log files are not removed under such conditions, a warning is issued; this warning includes information about the file or files were not removed when the statement was issued. (Bug #13727933)
  • Replication: When replicating to a BLACKHOLE table using the binary logging format, updates and deletes cannot be applied and so are skipped. Now a warning is generated for this whenever it occurs. 
Removing a server RPM package did not shut down the existing server if it was running. (Bug #16798868)
  • Overhead for setting PROCESSLIST_STATE values in the Performance Schema THREADS table has been reduced. (Bug #16633515)
  • The Windows authentication plugin failed to free a context buffer for each connection. (Bug #16591288)
  • The DBUG_PRINT() macro unnecessarily evaluated arguments when debugging was not enabled. (Bug #16556597)
  • When index condition pushdown was used on a descending range scan and the first range interval did not contain any qualifying records, the result of the range scan could be empty even if other range intervals contained qualifying records. (Bug #16483273)
  • The server could attempt a filesort operation for a zero-size sort length, causing it to exit. (Bug #16503160)
  • my_load_defaults() was modified to accommodate some problems under compilation with gcc 4.7.2 that could cause a client crash during option processing. (Bug #16497125)
  • Opening a cursor on a SELECT within a stored procedure could cause a segmentation fault. (Bug #16499751)
References: This bug is a regression of Bug #14740889.
  • SET PASSWORD treated user@'%' and user@'' as referring to the same mysql.user table row. (Bug #16488043)
  • Geometry methods that worked with WKB data performed insufficient input data validation, which could cause Valgrind errors or a server exit. (Bug #16510712, Bug #12772601)
  • Some INFORMATION_SCHEMA queries that used ORDER BY did not use a filesort optimization as they did in MySQL 5.5. (Bug #16423536)
  • Performance Schema parameter autosizing at startup did not take into account later autosizing changes to other startup parameters on which the Performance Schema parameters depended. (Bug #16430532)
  • The WKB reader for spatial operations could fail and cause a server exit. (Bug #16451878)
  • Optimizer heuristics inappropriately preferred range access over ref access in cases when the ref access referred to a column of a table earlier in the join seqence. (Bug #16437940)
  • Manually-created accounts (using INSERT) with a malformed password effectively had no password. (Bug #16414396)
  • Several scripts in the sql-bench directory that were supposed to be executable did not have the executable access bit set. (Bug #16395606)
  • For debug builds, DBUG_EXPLAIN resulted in a buffer overflow when the debug system variable value was more than 255 characters. (Bug #16402143)
  • Within an XA transaction in ACTIVE state, statements causing an implicit commit could result in metadata locks being released too early. (Bug #16362832)
  • Installing Debian packages on Ubuntu 12.10 succeeded using dpkg, but not with Software Center 5.4.1.4. (Bug #16387513)
  • For debug builds, with an XA transaction in IDLE or PREPARED status, execution of a query with the query cache enabled could cause a server exit. (Bug #16388996)
  • thread_pool_high_priority_connection could not be set at server startup. (Bug #16310373)
  • Re-execution of a stored procedure could cause a server exit in Item_field::fix_outer_field. (Bug #16317443)
  • A GROUP_CONCAT() invocation containing subquery having an outer reference caused the server to exit. (Bug #16347343)
  • With secure_auth enabled, a user with a password that used the pre-4.1 (old) hashing could not update it to use the 4.1 (new) hashing. (Bug #16304018)
  • For debug builds, GROUP_CONCAT(... ORDER BY) within an ORDER BY clause could cause a server exit. (Bug #16347426)
  • The validate_password plugin did not always enforce appropriate constraints against assigning empty passwords. (Bug #16346443)
  • For debug builds, the server could exit for queries involving a nested subquery, a subquery tranformed into a semi-join and using a view. (Bug #16317076)
  • The range optimizer could set up incorrect ranges for queries that used XOR operations. (Bug #16272562)
  • mysql_secure_installation could not connect to the server if the account used had an expired password. It invoked mysql noninteractively, resulting in that program failing to connect. Now mysql supports a --connect-expired-password option that indicates to the server that it can handle sandbox mode for expired-password accounts even if invoked noninteractively, and mysql_secure_installation invokes mysql with this option. (Bug #16248315)
  • If loose index scan was used on a query that used MIN(), a segmentation fault could occur. (Bug #16222245)
  • If multiple statements were sent in a single request, the audit log plugin logged only the last one. Now it logs each statement separately. (Bug #16169063)
  • For debug builds, an assertion was incorrectly raised for queries executed using eq_ref access and filesort. (Bug #16164885)
  • An outer join between a regular table and a derived table that is implicitly groups could cause a server exit. (Bug #16177639)
  • A prepared statement that used GROUP_CONCAT() and an ORDER BY clause that named multiple columns could cause the server to exit. (Bug #16075310)
  • Creating a FEDERATED table without specifying a connection string caused a server exit. (Bug #16048546)
  • ORDER BY MATCH ... AGAINST could cause a server exit. (Bug #16073689)
  • Client programs from MySQL 5.6.4 and up could confuse older servers during the connection process by using newer protocol features not understood by older servers. (Bug #15965409)
  • When a partition is missing, code in ha_innodb.cc would retry 10 times and sleep for a microsecond each time while holding LOCK_open. The retry logic for partitioned tables was introduced as a fix for Bug#33349 but did not include a test case to validate it. This fix removes the retry logic for partitioned tables. If the problem reported in Bug#33349 reappears, a different solution will be explored. (Bug #15973904)
  • The mysql.server script exited with an error if the status command was executed with multiple servers running. (Bug #15852074)
  • Use of the VALUES() function in the VALUES() clause of an INSERT statement could result in Valgrind warnings or an unstable server, possibly leading to a server exit. (Bug #14789787)
  • In some cases, REVOKE could fail to revoke the GRANT OPTION privilege. (Bug #14799187)
  • The mysql client allocated but did not free a string after reading each line in interactive mode, resulting in a memory leak. (Bug #14685362)
  • Killing a connection while it was in the process of disconnecting could lead to an assertion being raised, Valgrind warnings, and general unstability. (Bug #14560522)
  • INSERT ... ON DUPLICATE KEY UPDATE on a view could cause a server exit. (Bug #14261010)
  • Grouping by an outer BLOB column in a subquery caused a server exit. (Bug #13966809, Bug #14700180)
  • The server could exit due to improper handling of the error from an invalid comparison. (Bug #13009341)
  • The CMake check for unsigned time_t failed on all platforms. (Bug #11766815)
  • mysqladmin debug causes the server to write debug information to the error log. On systems that supported mallinfo(), the memory-status part of this output was incorrect in 64-bit environments when mysqld consumed more than 4GB memory.
  • On 64-bit Mac OS X systems, CMake used x86 rather than x86_64 when determining the machine type. (Bug #58462, Bug #11765489)
  • The mysql client incorrectly used latin1 for certain comparisons even if started with a multibyte default character set, resulting in a client crash. (Bug #68107, Bug #16182919)
  • The url columns in the mysql datatbase help tables were too short to hold some of the URLs in the help content. These columns are now created as type TEXT to accommodate longer URLs. (Bug #61520, Bug #12671635)
  • mysqld --help and mysqld --verbose --help performed unnecessary logging. (Bug #68578, Bug #16442113)
  • InnoDB does not support full-text parser plugins, but failed to report an error if they were specified. Now an ER_INNODB_NO_FT_USES_PARSER error is returned. (Bug #62004, Bug #12843070)
  • If Loose Index Scan was used to evaluate a query that compared an integer column to an integer specified as a quoted string (for example, col_name = '1'), the query could return incorrect results. (Bug #68473, Bug #16394084)
  • IF() function evaluations could produce different results when executed in a prepared versus nonprepared statement. (Bug #45370, Bug #11753852)
  • If a function such as AES_DECRYPT() that requires SSL support failed, the error could affect later calls to functions that require SSL support. (Bug #68340, Bug #16315767)
  • In a MySQL server newer than MySQL 5.5 using a nonupgraded mysql.user table (for which mysql_upgrade had not been run), statements to set passwords caused a server exit due to a faulty check for the password_expired column. (Bug #68385, Bug #16339767)
  • It is now possible to suppress installation of the mysql-test directory after compiling MySQL from source by invoking CMake with the INSTALL_MYSQLTESTDIR option explicitly set to empty: 
cmake . -DINSTALL_MYSQLTESTDIR=
Previously, attempts to do this resulted in an error. (Bug #58615, Bug #11765629)
  • When only counting events but not timing them, Performance Schema would report MIN_TIMER_WAIT values as a large number instead of 0. (Bug #68768, Bug #16552425)
  • Using range access with an index prefix could produce incorrect results. (Bug #68750, Bug #16540042)
  • For debug builds, metadata locking for CREATE TABLE ... SELECT could raise an assertion. (Bug #68695, Bug #16503173)
  • A new CMake option, WITH_EDITLINE, is provided to indicate whether to use the bundled or system libedit/editline library. The permitted values are bundled (the default) and system. 
WITH_EDITLINE replaces WITH_LIBEDIT, which has been removed. (Bug #68558, Bug #16430208)
  • When specified in an option file, the plugin-dir client option was ignored. (Bug #68800, Bug #16680313)
  • Indexes on derived tables that were used during the first invocation of a stored procedure were not used in subsequent invocations. (Bug #68350, Bug #16346367)
  • For DELETE and UPDATE statements, EXPLAIN displayed NULL in the ref column for some cases where const is more appropriate. (Bug #68299, Bug #16296268)
  • The optimizer could choose a poor execution plan for queries with ORDER BY ... LIMIT. (Bug #69013, Bug #16697792)
  • FOUND_ROWS() could return an incorrect value if the preceding query used filesort. (Bug #69119, Bug #16760474)
References: This bug is a regression of Bug #68458.

New in MySQL 5.6.11 (Apr 18, 2013)

  • Functionality Added or Changed:
  • Replication: The functions GTID_SUBTRACT() and GTID_SUBSET() were formerly available in libmysqld only when it was built with replication support. Now these functions are always available when using this library, regardless of how it was built.
  • MySQL no longer uses the default OpenSSL compression. (Bug #16235681)
  • There is now a distinct error code (ER_MUST_CHANGE_PASSWORD_LOGIN) for the error sent by the server to a client authenticating with an expired password. (Bug #16102943)
  • mysql_config_editor now supports --port and --socket options for specifying TCP/IP port number and Unix socket file name. (Bug #15851247)
  • mysqlcheck has a new --skip-database option. The option value is the name of a database (case sensitive) for which checks should be skipped. 
mysql_upgrade uses this option to upgrade the system tables in the mysql database before tables in other databases: It upgrade the mysql database, then all databases except the mysql database. This avoids problems that can occur if user tables are upgraded before the system tables. (Bug #14697538)
  • The only supported value for the innodb_mirrored_log_groups system variable is 1, so this variable is now deprecated. Setting it to 1 at startup results in a warning. Setting it to a value other than 1 at startup results in an error and the server exits. This variable will be removed in a future release.
  • Bugs Fixed:
  • Performance; InnoDB: Switching the MySQL table used by the InnoDB memcached interface (using the @@ notation), was made more efficient, by reading cached information about the cache policy to use for each table. This optimization lets you frequently switch between tables during a session that uses the memcached interface, without incurring I/O overhead from examining table metadata each time. (Bug #16206654)
  • Performance; InnoDB: Performance was improved for operations on tables with many rows that were deleted but not yet purged. The speedup applies mainly to workloads that perform bulk deletes, or updates to the primary key columns, and where the system is busy enough to experience purge lag. (Bug #16138582, Bug #68069)
  • Performance; InnoDB: The DROP TABLE statement for a table using compression could be slower than necessary, causing a stall for several seconds. MySQL was unnecessarily decompressing pages in the buffer pool related to the table as part of the DROP operation. (Bug #16067973)
  • Performance; InnoDB: The I/O routines used when the AIO subsystem were made more efficient, to merge consecutive I/O requests into a single operation. This fix solves a performance issue introduced during the 5.6 development cycle. (Bug #16043841, Bug #67973)
  • Incompatible Change; Partitioning: Changes in the KEY partitioning hashing functions used with numeric, date and time, ENUM, and SET columns in MySQL 5.5 makes tables using partitioning or subpartitioning by KEY on any of the affected column types and created on a MySQL 5.5 or later server incompatible with a MySQL 5.1 server. This is because the partition IDs as calculated by a MySQL 5.5 or later server almost certainly differ from those calculated by a MySQL 5.1 server for the same table definition and data as a result of the changes in these functions. 
The principal changes in the KEY partitioning implementation in MySQL 5.5 resulting in this issue were as follows: 1. The hash function used for numeric and date and time columns changed from binary to character-based. 2. The base used for hashing of ENUM and SET columns changed from latin1 ci characters to binary. 
The fix involves adding the capability in MySQL 5.5 and later to choose which type of hashing to use for KEY partitioning, which is implemented with a new ALGORITHM extension to the PARTITION BY KEY option for CREATE TABLE and ALTER TABLE. Specifying PARTITION BY KEY ALGORITHM=1 ([columns]) causes the server to use the hashing functions as implemented in MySQL 5.1; using ALGORITHM=2 causes the server to use the hashing functions from MySQL 5.5 and later. ALGORITHM=2 is the default.
  • Important Change; Replication: Executing a statement that performs an implicit commit but whose changes are not logged when gtid_next is set to any value other than AUTOMATIC is not permitted.
  • Important Change; Replication: The version number reported by mysqlbinlog --version has been increased to 3.4. (Bug #15894381, Bug #67643)
  • Important Note; Replication: It was possible to replicate from a table to a same-named view using statement-based logging, while using row-based logging instead led to a failure on the slave. Now the target object type is checked prior to performing any DML, and an error is given if the target on the slave is not actually a table. This is true regardless of the binary logging format in use. (Bug #11752707, Bug #43975)
  • InnoDB: When ADD PRIMARY KEY columns are reordered in an ALTER TABLE statement (for example: ALTER TABLE t1 ADD PRIMARY KEY(a,b), CHANGE a a INT AFTER b), the log apply for UPDATE operations would fail to find rows. (Bug #16586355)
  • InnoDB: ALTER TABLE operations on InnoDB tables that added a PRIMARY KEY using a column prefix could produce an incorrect result. (Bug #16544336)
  • InnoDB: For ALTER TABLE operations on InnoDB tables that required a table-copying operation, other transactions on the table might fail during the copy. However, if such a transaction issued a partial rollback, the rollback was treated as a full rollback. (Bug #16544143)
  • InnoDB: When parsing a delimited search string such as “abc-def” in a full-text search, InnoDB now uses the same word delimiters as MyISAM. (Bug #16419661)
  • InnoDB: This fix improves code readability by addressing naming inconsistencies for InnoDB PERFORMANCE_SCHEMA key declarations. (Bug #16414044)
  • InnoDB: This fix disables a condition for extra splitting of clustered index leaf pages, on compressed tables. Extra page splitting was only done to reserve space for future updates, so that future page splits could be avoided. (Bug #16401801)
  • InnoDB: For InnoDB tables, if a PRIMARY KEY on a VARCHAR column (or prefix) was empty, index page compression could fail. (Bug #16400920)
  • InnoDB: Status values in the INNODB_FT_CONFIG table would not update. The INNODB_FT_CONFIG is intended for internal configuration and should not be used for statistical information purposes. To avoid confusion, column values that are intended for internal use have been removed from the INNODB_FT_CONFIG table. This fix also removes the INNODB_FT_INSERTED table and other internal full text search-related tables that were unintentionally exposed. (Bug #16409494)
  • InnoDB: With innodb_api_enable_mdl=OFF, an ALTER TABLE operation on an InnoDB table that required a table copy could cause a server exit. (Bug #16287411)
  • InnoDB: Improper testing of compatibility between the referencing and referenced during ALTER TABLE ... ADD FOREIGN key could cause a server exit. (Bug #16330036)
  • InnoDB: Rollback did not include changes made to temporary tables by read-only transactions. (Bug #16310467)
  • InnoDB: The InnoDB page-splitting algorithm could recurse excessivly. (Bug #16345265)
  • InnoDB: For debug builds, InnoDB status exporting was subject to a race condition that could cause a server exit. (Bug #16292043)
  • InnoDB: When using ALTER TABLE to set an AUTO_INCREMENT column value to a user-specified value, InnoDB would set the AUTO_INCREMENT value to the user-specified value even when the AUTO_INCREMENT value is greater than the user-specified value. This fix ensures that the AUTO_INCREMENT value is set to the maximum of the user-specified value and MAX(auto_increment_column)+1, which is the expected behaviour. (Bug #16310273)
  • InnoDB: Importing a tablespace with the configuration file present would not import the data file. This problem would occur when all pages are not flushed from the buffer pool after a table is altered using the copy and rename approach. This fix ensures that all pages are flushed from the buffer pool when a table is altered using the copy and rename approach. (Bug #16318052)
  • InnoDB: RENAME TABLE would result in a hang due to a MySQL mutex acquisition deadlock. (Bug #16305265)
  • InnoDB: Internal read operations could be misclassified as synchronous when they were actually asynchronous. When the I/O requests returned sooner than expected, threads could be scheduled inefficiently. This issue mainly affected read-ahead requests, and thus had relatively little impact on I/O performed by user queries. (Bug #16249505, Bug #68197)
  • InnoDB: The lock_validate function, which is only present in debug builds, acquired and released mutexes to avoid hogging them. This behavior introduced a window wherein changes to the hash table could occur while code traversed the same set of data. This fix updates lock_validate logic to collect all records for which locks must be validated, releases mutexes, and runs a loop to validate record locks. (Bug #16235056)
  • InnoDB: ALTER TABLE functions would perform a check to see if InnoDB is in read-only mode (srv_read_only_mode=true). If InnoDB was in read-only mode, the check would return a successful status and do nothing else. This fix replaces srv_read_only_mode check conditions with debug assertions. (Bug #16227539)
  • InnoDB: An improper call to abort() by InnoDB could result in a server exit. (Bug #16263506)
  • InnoDB: When the InnoDB buffer pool is almost filled with 4KB compressed pages, inserting into 16KB compact tables would cause 8KB pages_free to increase, which could potentially slow or stall inserts. (Bug #16223169)
  • InnoDB: An assertion failure would occur in heap->magic_n == MEM_BLOCK_MAGIC_N due to a race condition that appeared when row_merge_read_clustered_index() returned an error. (Bug #16275237)
  • InnoDB: This fix removes an unnecessary debug assertion related to page_hash locks which only affects debug builds. The debug assertion is no longer valid and should have been removed when hash_lock array was introduced in MySQL 5.6. (Bug #16263167)
  • InnoDB: The InnoDB memcached plugin could encounter a serious error under a heavy load, such as produced by benchmark runs. (Bug #16182660, Bug #68096)
  • InnoDB: If the MySQL server halted at a precise moment when a purge operation was being applied from the change buffer, the operation could be incorrectly performed again during the next restart. A workaround was to set the configuration option innodb_change_buffering=changes, to turn off change buffering for purge operations. (Bug #16183892, Bug #14636528)
  • InnoDB: When InnoDB locking code was revised, a call to register lock waits was inadvertently removed. This fix adds the call back to the InnoDB locking code. (Bug #16208201)
  • InnoDB: A direct call to the trx_start_if_not_started_xa_low() function would cause a debug assertion. (Bug #16178995)
  • InnoDB: In the case of LOCK WAIT for an insert in a foreign key table, InnoDB could report a false dictionary-changed error and cause the insert to fail rather than being retried. (Bug #16174255)
  • InnoDB: In some cases, deadlock detection did not work, resulting in sessions hanging waiting for a lock-wait timeout. (Bug #16169638)
  • InnoDB: An in-place ALTER TABLE on an InnoDB table could fail to delete the statistics for the old primary key from the mysql.innodb_index_stats table. (Bug #16170451)
  • InnoDB: This fix updates InnoDB code in ha_innodb.cc and handler0alter.cc to use TABLE::key_info instead of both TABLE::key_info and TABLE_SHARE::key_info. (Bug #16215361)
  • InnoDB: Arithmetic underflow during page compression for CREATE TABLE on an InnoDB table could cause a server exit. (Bug #16089381)
  • InnoDB: For debug builds, online ALTER TABLE operations for InnoDB tables could cause a server exit during table rebuilding. (Bug #16063835)
  • InnoDB: In some cases, the InnoDB purge coordinator did not use all available purge threads, resulting in suboptimal purge activity. (Bug #16037372)
  • InnoDB: On systems that cannot handle unaligned memory access, depending on the stack frame alignment, a SIGBUS error could occur during startup. This issue was observed on Solaris 64-bit systems. (Bug #16021177)
  • InnoDB: ALTER TABLE for InnoDB tables was not fully atomic. (Bug #15989081)
  • InnoDB: When innodb_mirrored_log_groups was set to a value other than the default 1, the MySQL server encountered a serious error during startup while loading the InnoDB memcached plugin. In earlier releases, the server would refuse to start (but not display an error) when this setting was changed. This fix cleans up the error handling for unsupported values of this configuration option. (Bug #15907954, Bug #67670)
  • InnoDB: An error at the filesystem level, such as too many open files, could cause an unhandled error during an ALTER TABLE operation. The error could be accompanied by Valgrind warnings, and by this assertion message: 
Assertion `! is_set()' failed.
  • InnoDB: The INNODB_SYNC_ARRAY_SIZE variable was incorrectly allowed to be configured at runtime. As documented, INNODB_SYNC_ARRAY_SIZE must be configured when the MySQL instance is starting up, and cannot be changed afterward. This fix changes INNODB_SYNC_ARRAY_SIZE to a non-dynamic variable, as intended. (Bug #14629979)
  • InnoDB: The server could exit during an attempt by InnoDB to reorganize or compress a compressed secondary index page. (Bug #14606334)
  • InnoDB: A RENAME TABLE statement could stall for several minutes before timing out. This issue could occurred for a table using compression, with change buffering enabled. (Bug #14556349)
  • InnoDB: A DML operation performed while a RENAME TABLE operation waits for pending I/O operations on the tablespace to complete would result in a deadlock. (Bug #14556349)
  • InnoDB: If the server was started with the skip-innodb option, or InnoDB otherwise failed to start, query any of these Information Schema tables would cause a severe error
  • InnoDB: Online DDL had a restriction that prevented renaming a column and adding a foreign key involving that column in a single ALTER TABLE statement. Now, this combination of operations is allowed in a single statement. (Bug #14105491)
  • InnoDB: When printing out long semaphore wait diagnostics, sync_array_cell_print() ran into a segmentation violation (SEGV) caused by a race condition. This fix addresses the race condition by allowing the cell to be freed while it is being printed. (Bug #13997024)
  • InnoDB: The value of the innodb_version variable was not updated consistently for all server releases for the InnoDB Plugin in MySQL 5.1, and the integrated InnoDB component in MySQL 5.5, 5.6, and higher. Since InnoDB and MySQL Server development cycles are fully integrated and synchronized, now the value returned by the innodb_version variable is the same as for the version variable. (Bug #13463493, Bug #63435)
  • InnoDB: Killing a query caused an InnoDB assertion failure when the same table (cursor) instance was used again. This is the result of a regression error introduced by the fix for Bug#14704286. The fix introduced a check to handle kill signals for long running queries but the cursor was not restored to the proper state. (Bug #68051, Bug #16088883)
  • InnoDB: On startup, InnoDB reported a message on 64-bit Linux and 64-bit Windows systems stating that the CPU does not support crc32 instructions. On Windows, InnoDB does not use crc32 instructions even if supported by the CPU. This fix revises the wording of the message and implements a check for availability of crc32 instructions. (Bug #68035, Bug #16075806)
  • InnoDB: The length of internally generated foreign key names was not checked. If internally generated foreign key names were over the 64 character limit, this resulted in invalid DDL from SHOW CREATE TABLE. This fix checks the length of internally generated foreign key names and reports an error message if the limit is exceeded. (Bug #44541, Bug #11753153)
  • InnoDB: This fix removes left-over prototype code for srv_parse_log_group_home_dirs, and related header comments. (Bug #68133, Bug #16198764)
  • InnoDB: Attempting to replace the default InnoDB FTS stopword list by creating an InnoDB table with the same structure as INFORMATION_SCHEMA.innodb_ft_default_stopword would result in an error. SHOW CREATE TABLE revealed that the new InnoDB table was created with CHARSET=utf8. The InnoDB FTS stopword table validity check only supported latin1. This fix extends the validity check for all supported character sets. (Bug #68450, Bug #16373868)
  • Partitioning: ALGORITHM = INPLACE, which was disallowed in MySQL 5.6.10 for DDL statements operating on partitioned tables, can once again be used with such statements. (Bug #16216513)
References: See also Bug #14760210.
  • Partitioning: A query on a table partitioned by range and using TO_DAYS() as a partitioing function always included the first partition of the table when pruning. This happened regardless of the range employed in the BETWEEN clause of such a query. (Bug #15843818, Bug #49754)
  • Partitioning: Execution of ALTER TABLE ... DROP PARTITION against a view caused the server to crash, rather than fail with an error as expected. (Bug #14653504)
  • Partitioning: A query result was not sorted if both DISTINCT and ORDER BY were used and the underlying table was partitioned. (Bug #14058167)
  • Partitioning: Inserting any number of rows into an ARCHIVE table that used more than 1000 partitions and then attempting to drop the table caused the MySQL Server to fail. (Bug #13819630, Bug #64580)
  • Replication: When using GTIDs and binary log auto-positioning, the master had to scan all binary logs whenever the slave reconnected (due to reasons such as I/O thread failure or a change of master) before it could send any events to slave. Now, the master starts from the oldest binary log that contains any GTID not found on the slave. (Bug #16340322, Bug #68386)
  • Replication: When the server version of the master was greater than or equal to 10, replication to a slave having a lower server version failed. (Bug #16237051, Bug #68187)
  • Replication: When replicating to a MySQL 5.6 master to an older slave, Error 1193 (ER_UNKNOWN_SYSTEM_VARIABLE) was logged with a message such as Unknown system variable 'SERVER_UUID' on master, maybe it is a *VERY OLD MASTER*. This message has been improved to include more information, similar to this one: Unknown system variable 'SERVER_UUID' on master. A probable cause is that the variable is not supported on the master (version: 5.5.31), even though it is on the slave (version: 5.6.11). (Bug #16216404, Bug #68164)
  • Replication: A zero-length name for a user variable (such as @``) was incorrectly considered to be a sign of data or network corruption when reading from the binary log. (Bug #16200555, Bug #68135)
  • Replication: When MTS is on and transactions are being applied, the slave coordinator would hang when encountering a checksum error on a transaction event. This was due to a deadlock situation in which the coordinator assumed a normal stop while a worker waited for the coordinator to dispatch more events. For debug builds, the problem appeared as an assertion failure, which was due to the coordinator not setting thd->is_error() when encountering an error. (Bug #16210351)
  • Replication: mysqlbinlog can connect to a remote server and read its binary logs. In MySQL 5.6 and later, this tool can also wait for the server to generate and send additional events, in practice behaving like a slave connecting to a master. In cases where the server sent a heartbeat, mysqlbinlog was unable to handle it properly. As a consequence, mysqlbinlog failed at this point, without reading any more events from the server. To fix this problem, mysqlbinlog now ignores any binary log events of type HEARTBEAT_LOG_EVENT that it receives. (Bug #16104206)
  • Replication: STOP SLAVE could cause a deadlock when issued concurrently with a statement such as SHOW STATUS that retrieved the values for one or more of the status variables Slave_retried_transactions, Slave_heartbeat_period, Slave_received_heartbeats, Slave_last_heartbeat, or Slave_running. (Bug #16088188, Bug #67545)
References: See also Bug #16088114.
  • Replication: Using the --replicate-* options (see Replication Slave Options and Variables) could in some cases lead to a memory leak on the slave. (Bug #16056813, Bug #67983)
  • Replication: Backtick (`) characters were not always handled correctly in internally generated SQL statements, which could sometimes lead to errors on the slave. (Bug #16084594, Bug #68045)
References: This bug is a regression of Bug #14548159, Bug #66550.
  • Replication: The session-level value for gtid_next was incorrectly reset on the slave for all rollbacks, which meant that GTIDs could be lost for multi-statement transactions, causing the slave to stop with an ER_GTID_NEXT_TYPE_UNDEFINED_GROUP error. Now this is done only when a complete transaction is being rolled back, or when autocommit is enabled. (Bug #16084206)
  • Replication: In order to provision or to restore a server using GTIDs, it is possible to set gtid_purged to a given GTID set listing the transactions that were imported. This operation requires that the global gtid_executed and gtid_purged server system variables are empty. (This is done in order to avoid the possibility of overriding server-generated GTIDs.) 
The error message GTID_PURGED can only be set when GTID_EXECUTED is empty that was raised when this requirement was not met could be confusing or misleading because it did not specify the scope of the affected variables. To prevent this from happening, error messages that refer to variables relating to GTIDs now specify the scope of any such variables when they do so. (Bug #16084426, Bug #68038)
  • Replication: In certain cases, the dump thread could send a heartbeat out of synchronisation with format description events. One of the effects of this issue what that, after provisioning a new server from a backup data directory and setting --gtid-mode=ON and enabling autopositioning (see CHANGE MASTER TO Syntax), replication failed to start, with the error Read invalid event from master.... The same problem could also cause GTID-based replication to fail due to skipped events following a unplanned shutdown of the master. (Bug #16051857)
  • Replication: In some cases, when the slave could not recognize the server version of the master, this could cause the slave to fail. (Bug #16056365)
  • Replication: Table IDs used in replication were defined as type ulong on the master and uint on the slave. In addition, the maximum value for table IDs in binary log events is 6 bytes (281474976710655).
  • Replication: Internal objects used for relay log information were only partially deleted before freeing their memory. (Bug #14677824)
  • Replication: It was possible in certain cases—immediately after detecting an EOF in the dump thread read event loop, and before deciding whether to change to a new binary log file—for new events to be written to the binary log before this decision was made. If log rotation occurred at this time, any events that occurred following EOF detection were dropped, resulting in loss of data. Now in such cases, steps are taken to make sure that all events are processed before allowing the log rotation to take place. (Bug #13545447, Bug #67929)
References: See also Bug #16016886.
  • Replication: If the disk becomes full while writing to the binary log, the server hangs until space is freed up manually. It was possible after this was done for the MySQL server to fail, due to an internal status value being set when not needed. Now in such cases, rather than trying to set this status, a warning is written in the error log instead. (Bug #11753923, Bug #45449)
  • Microsoft Windows: In Shared Memory mode, the MySQL Server could crash when receiving requests from multiple threads. (Bug #13934876)
  • Failure to handle a full-text search wildcard properly could cause the server to exit. (Bug #16446108)
  • InnoDB now reports row and table locks to the thread pool plugin. Deadlocks within a thread group could occur otherwise. (Bug #16448639)
  • SHOW ENGINE PERFORMANCE_SCHEMA STATUS could report incorrect memory-allocation values when the correct values exceeded 4GB. (Bug #16414644)
  • Performance Schema statement tokenization overhead was reduced. (Bug #16382260)
  • A long database name in a GRANT statement could cause the server to exit. (Bug #16372927)
  • On Linux, a race condition involving epoll() could cause the thread pool plugin to miss events. This was most likely on systems with greater than 16 cores. (Bug #16367483)
  • The server could exit if a prepared statement attempted to create a table using the name of an existing view while an SQL handler was opened. (Bug #16385711)
  • For debug builds, checking of password constraints could raise an assertion for statements that updated passwords. (Bug #16289303)
  • The BUILD-CMAKE file in MySQL distributions was updated with the correct URL for CMake information. (Bug #16328024)
  • A Valgrind failure could occur if a CREATE USER statement was logged to the general query log and the old_passwords system variable was set to 2. (Bug #16300620)
  • The optimizer's attempt to remove redundant subquery clauses raised an assertion when executing a prepared statement with a subquery in the ON clause of a join in a subquery. (Bug #16318585)
References: This bug is a regression of Bug #15875919.
  • Very small join_buffer_size values could cause an assertion to be raised. (Bug #16328373)
  • Some aggregate queries attempted to allocate excessive memory. (Bug #16343992)
  • Incorrect results were returned if a query contained a subquery in an IN clause which contained an XOR operation in the WHERE clause. (Bug #16311231)
  • For debug builds, an assertion could be raised if a statement failed with autocommit enabled just before an XA START statement was issued. (Bug #16341673)
  • Conversion of numeric values to BIT could yield unexpected results. (Bug #16271540)
  • Certain legal HAVING clauses were rejected as invalid. (Bug #16221433)
  • Fixed warnings when compiling with XCode 4.6. Fixed warnings when compiling when the _XOPEN_SOURCE or isoctal macro was already defined in the environment. (Bug #16265300, Bug #60911, Bug #12407384)
  • Queries using range predicates that were evaluated using the LooseScan semi-join strategy could return duplicate rows. (Bug #16221623)
  • For upgrade operations, RPM packages produced unnecessary errors about being unable to access .err files. (Bug #16235828)
  • In the range optimizer, an index merge failure could cause a server exit. (Bug #16241773)
  • A full-text query using Boolean mode could return zero results in some cases where the search term was a quoted phrase.
  • For debug builds, the server could exit due to incorrect calculation of applicable indexes for a join that involved const tables. (Bug #16165832)
  • A bug in range optimization sometimes led to incorrect condition calculation for index merge union. This could lead to missing rows. (Bug #16164031, Bug #68194, Bug #16229746)
  • The Performance Schema could return incorrect values for the PROCESSLIST_INFO column of the threads table. (Bug #16215165)
  • Invocation of the range optimizer for a NULL select caused the server to exit. (Bug #16192219)
  • mysql_config --libs displayed incorrect output. (Bug #16200717)
  • For a CREATE TABLE (... col_name TIMESTAMP DEFAULT CURRENT_TIMESTAMP ...) ... SELECT statement for which the SELECT did not provide a value for the TIMESTAMP column, that column was set to '0000-00-00 00:00:00', not the current timestamp. (Bug #16163936)
  • yaSSL did not perform proper padding checks, but instead examined only the last byte of plaintext and used it to determine how many bytes to remove. (Bug #16218104)
  • Using GROUP BY WITH ROLLUP in a prepared statement could cause the server to exit. (Bug #16163596)
  • If, in a SELECT, the HAVING clause contained a function call which itself contained an alias to a selected expression, the server could sometimes exit. (Bug #16165981)
  • Setting the slave_rows_search_algorithms system variable to an inappropriate value could cause the server to exit. (Bug #16074161)
  • Directory name manipulation could result in stack overflow on Mac OS X and Windows. (Bug #16066243)
  • With statement-based binary logging, dropping a TEMPORARY InnoDB table could cause a segmentation fault. (Bug #16076275)
  • For debug builds, if the server was started with binary logging disabled, executing SHOW RELAYLOG EVENTS from within a stored procedure raised an assertion. (Bug #16043173)
  • The query parser leaked memory for some syntax errors. (Bug #16040022)
  • With the thread pool plugin enabled, large numbers of connections could lead to a Valgrind panic or failure of clients to be able to connect. (Bug #16088658, Bug #16196591)
  • The server executed EXPLAIN FORMAT=JSON for some malformed queries improperly. (Bug #16078557)
  • Performance Schema instrumentation was missing for slave worker threads. (Bug #16083949)
  • The initial test database contained a dummy.bak file that prevented DROP DATABASE from working. This file is no longer included. Also, a db.opt file is now included that contains these lines: 
default-character-set=latin1
  • default-collation=latin1_swedish_ci
(Bug #16062056)
  • Setting a system variable to DEFAULT could cause the server to exit. (Bug #16044655)
  • SET PASSWORD and GRANT ... IDENTIFIED BY have no effect on the password of a user who is authenticated using an authentication plugin that accesses passwords stored externally to the mysql.user table. But attempts to change the password of such a user produced no warning, leading to the impression that the password had been changed when it was not. Now MySQL issues an ER_SET_PASSWORD_AUTH_PLUGIN warning to indicate that the attempt was ignored. (Bug #16072004)
  • For debug builds, creating an InnoDB table in strict SQL mode that violated the maximum key length limit caused the server to exit. (Bug #16035659)
  • Issuing a PREPARE statement using certain combinations of stored functions and user variables caused the server to exit. (Bug #16056537)
  • Joins of exactly 32 tables and containing a HAVING clause returned an empty result. (Bug #15972635)
  • A mysys library string-formatting routine could mishandle width specifiers. (Bug #15960005)
  • The --character-set-server option could set connection character set system variables to values such as ucs2 that are not permitted. (Bug #15985752)
  • During shutdown, the server could attempt to lock an uninitialized mutex. (Bug #16016493)
  • The --default-authentication-plugin option permitted invalid plugin values, and did not always set the old_passwords system variable to a value appropriate for the named plugin. (Bug #16014394)
  • Under some circumstances, mysql --secure-auth permitted passwords to be sent to the server using the old (pre-4.1) hashing format. (Bug #15977433)
  • With index condition pushdown enabled, queries for which the pushed-down condition contained no columns in the used index could be slow. (Bug #15896009)
  • Table creation operations added entries to the Performance Schema file_instances table, but these were not always removed for table drop operations. (Bug #15927620)
  • In special cases, the optimizer did not consider indexes that were applicable to query processing, resulting in potentially suboptimal execution and incorrect EXPLAIN output. (Bug #15849135, Bug #16094171)
  • A query with an EXISTS/IN/ALL/ANY subquery with an ORDER BY clause ordering by an outer column of type BLOB that is not in the select list caused an assertion to fire. (Bug #15875919)
References: See also Bug #14728142.
  • Creating an InnoDB table with a FULLTEXT index could encounter a serious error if the table name contained nonalphanumeric characters. (Bug #14835178, Bug #16036699)
  • Enabling the query cache during high client contention could cause the server to exit. (Bug #14727815)
  • The server sometimes failed to respect MAX_CONNECTIONS_PER_HOUR limits on user connections. (Bug #14627287)
  • The optimizer could return incorrect results after transforming an IN subquery with aggregate functions to an EXISTS subquery. (Bug #14586710)
  • When a client program loses the connection to the MySQL server or if the server begins a shutdown after the client has executed mysql_stmt_prepare(), the next mysql_stmt_prepare() returns an error (as expected) but subsequent mysql_stmt_execute() calls crash the client. (Bug #14553380)
  • Previously, if multiple --login-path options were given, mysql_config_editor ignored all but the last one. Now multiple --login-path options result in an error. (Bug #14551712)
  • SET PASSWORD for anonymous users did not work correctly. (Bug #14561102)
  • SHOW COLUMNS on a view defined as a UNION of Geometry columns could cause the server to exit. (Bug #14362617)
  • The sha256_password_private_key_path and sha256_password_public_key_path system variables indicate key files for the sha256_password authentication plugin, but the server failed to properly check whether the key files were valid. Now in the event that either key file is invalid, the server logs an error and exits. (Bug #14360513)
  • SET var_name = VALUES(col_name) could cause the server to exit. This syntax is now prohibited because in SET context there is no column name and the statement returns ER_BAD_FIELD_ERROR. (Bug #14211565)
  • The COM_CHANGE_USER command in the client/server protocol did not properly use the character set number in the command packet, leading to incorrect character set conversion of other values in the packet. (Bug #14163155)
  • Invoking the FORMAT() function with a locale and a very large number could cause the server to exit. (Bug #14040155)
  • yaSSL rejected some valid server SSL certificates. (Bug #13777928)
  • Certain plugin-related conditions can make a user account unusable.
  • Passing an unknown time zone specification to CONVERT_TZ() resulted in a memory leak. (Bug #12347040)
  • The obsolete linuxthreads.txt and glibc-2.2.5.patch files in the Docs directory of MySQL distributions have been removed. (Bug #11766326)
  • mysql_install_db did not escape '_' in the host name for statements written to the grant tables. (Bug #11746817)
  • mysqld_safe used the nonportable -e test construct. (Bug #67976, Bug #16046140)
  • An out-of-memory condition could occur while handling an out-of-memory error, leading to recursion in error handling. (Bug #49514, Bug #11757464)
  • The optimizer used loose index scan for some queries for which this access method is inapplicable. (Bug #42785, Bug #11751794)
  • If a dump file contained a view with one character set and collation defined on a view with a different character set and collation, attempts to restore the dump file failed with an “illegal mix of collations” error. (Bug #65382, Bug #14117025)
  • The REPLACE() function produced incorrect results when a user variable was supplied as an argument and the operation was performed on multiple rows. (Bug #49271, Bug #11757250)
  • UNION type conversion could incorrectly turn unsigned values into signed values. (Bug #49003, Bug #11757005)
  • UNION ALL on BLOB columns could produce incorrect results. (Bug #50136, Bug #11758009)
  • View access in low memory conditions could raise a debugging assertion. (Bug #39307, Bug #11749556)
  • Queries with many values in a IN() clause were slow due to inclusion of debugging code in non-debugging builds. (Bug #68046, Bug #16078212)
References: See also Bug #58731, Bug #11765737.
  • Setting max_connections to a value less than the current number of open connections caused the server to exit. (Bug #44100, Bug #11752803)
  • Some table I/O performed by the server when calling a storage engine were missing from the statistics collected by the Performance Schema. (Bug #68180, Bug #16222630)
  • For debug builds, some queries with SELECT ... FROM DUAL nested subqueries raised an assertion. (Bug #60305, Bug #11827369)
  • Nonspatial indexes only support exact-match lookups for spatial columns, but the optimizer incorrectly used range access in some cases, leading to incorrect results. (Bug #67889, Bug #15993693)
  • If mysql is built with the bundled libedit library, the library is built as static code, to avoid linking to a different dynamic version at runtime. Dynamic linking could result in use of a different, incompatible version and a segmentation fault. (Bug #68231, Bug #16296509)
  • The --log-slow-admin-statements and --log-slow-slave-statements command options now are exposed at runtime as the log_slow_admin_statements and log_slow_slave_statements system variables. Their values can be examined using SHOW VARIABLES. The variables are dynamic, so their values can can be set at runtime. (The options were actually replaced by the system variables, but as system variables can be set at server startup, no option functionality is lost.) (Bug #59860, Bug #11766693)
  • For arguments with fractional seconds greater than six decimals, SEC_TO_TIME() truncated, rather than rounding as it should have. (Bug #68061, Bug #16093024)
  • MySQL failed to build if configured with WITH_LIBWRAP enabled. (Bug #67018, Bug #16342793)
  • If the server was started without a --datadir option, SHOW VARIABLES could show an empty value for the datadir system variable. (Bug #60995, Bug #12546953)
  • Configuring with -DWITH_SSL=/path/to/openssl resulted in link errors due to selection of the incorrect libcrypto. (Bug #68277, Bug #16284051)
  • ALTER TABLE tbl_name ADD COLUMN col_name TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP inserted 0000-00-00 00:00:00 rather than the current timestamp if the alteration was done in place rather than by making a table copy. (Bug #68040, Bug #16076089)
  • If the server was started with --skip-grant-tables, ALTER USER ... PASSWORD EXPIRE caused the server to exit. (Bug #68300, Bug #16295905)
  • CMake did not check whether the system zlib had certain functions required for MySQL, resulting in build errors. Now it checks and falls back to the bundled zlib if the functions are missing. (Bug #65856, Bug #14300733)
  • mysql_install_db did not work in Solaris 10 sparse root zones. (Bug #68117, Bug #16197860)
  • For EXPLAIN DELETE and EXPLAIN UPDATE the possible_keys column listed all indexes, not just the applicable indexes. (Bug #67830, Bug #15972078)
  • The Perl version of mysql_install_db mishandled some error messages. (Bug #68118, Bug #16197542)
  • Handling of SQL_CALC_FOUND_ROWS in combination with ORDER BY and LIMIT could lead to incorrect results for FOUND_ROWS(). (Bug #68458, Bug #16383173)
  • Adding an ORDER BY clause following an IN subquery could cause duplicate rows to be returned. (Bug #68330, Bug #16308085)
  • If INET6_NTOA() or INET6_ATON() returned NULL for a row in a result set, following rows also returned NULL. (Bug #68454, Bug #16373973)
  • A statement with an aggregated, nongrouped outer query and an aggregated, nongrouped subquery in the SELECT list could return incorrect results. (Bug #68372, Bug #16325175)
  • With explicit_defaults_for_timestamp enabled, inserting NULL into a TIMESTAMP NOT NULL column now produces an error (as it already did for other NOT NULL data types), instead of inserting the current timestamp. (Bug #68472, Bug #16394472)

New in MySQL 5.5.30 (Feb 1, 2013)

  • Functionality Added or Changed:
  • InnoDB: The innodb_print_all_deadlocks configuration option from MySQL 5.6 was backported to MySQL 5.5. This option records each deadlock condition in the MySQL error log, allowing easier troubleshooting if frequent deadlocks point to application coding issues. (Bug #14515889)
  • In RPM packages built for Unbreakable Linux Network, libmysqld.so now has a version number. (Bug #15972480)
  • Bugs Fixed:
  • InnoDB; Performance: Some data structures related to undo logging could be initialized unnecessarily during a query, although they were only needed under specific conditions. (Bug #14676084)
  • InnoDB; Performance: Optimized read operations for compressed tables by skipping redundant tests. The check for whether any related changes needed to be merged from the insert buffer was being called more often than necessary. (Bug #14329288, Bug #65886)
  • InnoDB; Performance: Immediately after a table was created, queries against it would not use loose index scans. The issue went away following an ALTER TABLE on the table. The fix improves the accuracy of the index statistics gathered when the table is first created, and prevents the query plan from being changed by the ALTER TABLE statement. (Bug #14200010)
  • InnoDB; Partitioning: Previously, when attempting to optimize one or more partitions of a partitioned table that used a storage engine that does not support partition-level OPTIMIZE, such as InnoDB, MySQL reported Table does not support optimize, doing recreate + analyze instead, then re-created the entire table, but did not actually analyze it. Now in such cases, the warning message is, Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. In addition, the entire table is analyzed after first being rebuilt. (Bug #11751825)
  • InnoDB: On systems that cannot handle unaligned memory access, depending on the stack frame alignment, a SIGBUS error could occur during startup. This issue was observed on Solaris 64-bit systems. (Bug #16021177)
  • InnoDB: The status variable Innodb_buffer_pool_read_ahead_evicted could show an inaccurate value, higher than expected, because some pages in the buffer pool were incorrectly considered as being brought in by read-ahead requests. (Bug #15859402, Bug #67476)
  • InnoDB: Creating an index on a CHAR column could fail for a table with a character set with varying length, such as UTF-8, if the table was created with the ROW_FORMAT=REDUNDANT clause. (Bug #15874001)
  • InnoDB: The server could halt with an assertion error while creating an index: InnoDB: Assertion failure in thread thread_num in file row0merge.cc line 465
  • InnoDB: If the server crashed at a precise moment during an ALTER TABLE operation that rebuilt the clustered index for an InnoDB table, the original table could be inaccessible afterward. An example of such an operation is ALTER TABLE ... ADD PRIMARY KEY The fix preserves the original table if the server halts during this operation. You might still need to rename the .ibd file manually to restore the original table contents: in MySQL 5.6 and higher, rename from #sql-ib$new_table_id.ibd to table_name.ibd within the database directory; prior to MySQL 5.6, the temporary file to rename is table_name#1 or #2. (Bug #14669848)
  • InnoDB: An error at the filesystem level, such as too many open files, could cause an unhandled error during an ALTER TABLE operation.
  • InnoDB: A RENAME TABLE statement could stall for several minutes before timing out. This issue could occurred for a table using compression, with change buffering enabled. (Bug #14556349)
  • InnoDB: During shutdown, with the innodb_purge_threads configuration option set greater than 1, the server could halt prematurely with this error: mysqld got signal 11
  • InnoDB: If the value of innodb_force_recovery was less than 6, opening a corrupted table might loop forever if a corrupted page was read when calculating statistics for the table. Information about the corrupted page was written repeatedly to the error log, possibly causing a disk space issue. The fix causes the server to halt after a fixed number of failed attempts to read the page. To troubleshoot such a corruption issue, set innodb_force_recovery=6 and restart. (Bug #14147491, Bug #65469)
  • InnoDB: The value of the innodb_version variable was not updated consistently for all server releases for the InnoDB Plugin in MySQL 5.1, and the integrated InnoDB component in MySQL 5.5, 5.6, and higher. Since InnoDB and MySQL Server development cycles are fully integrated and synchronized, now the value returned by the innodb_version variable is the same as for the version variable. (Bug #13463493, Bug #63435)
  • Partitioning: Concurrent ALTER TABLE ... REBUILD PARTITION operations could interfere with one another, even when not running against the same table, because they both used global memory for storage. Now each partition rebuild operation stores intermediate data in memory that is local to that process. (Bug #14589559, Bug #66645)
  • Partitioning: Inserting any number of rows into an ARCHIVE table that used more than 1000 partitions and then attempting to drop the table caused the MySQL Server to fail. (Bug #13819630, Bug #64580)
  • Replication: After dropping a column from the slave's version of a table, then altering the same column of this table on the master (so that a type conversion would have been required had the column not been droppped on the slave), inserts into this table caused replication to fail. (Bug #15888454)
  • Replication: When a binary log is replayed on a server (for example, by executing a command like mysqlbinlog binlog.000001 | mysql), it sets a pseudo-slave mode on the client connection used, so that the server can read binlog and apply binary log events correctly. However, the pseudo-slave mode was not disabled after the binary log dump was read, which caused unexpected filtering rules to be applied to SQL statements subsequently executed on the same connection. (Bug #15891524)
  • Replication: When using statement-based replication, and where the master and the slave used table schemas having different AUTO_INCREMENT columns, inserts generating AUTO_INCREMENT values logged for a given table on the master could be applied to the wrong table on the slave. (Bug #12669186)
  • Replication: Repeated execution of CHANGE MASTER TO statements using invalid MASTER_LOG_POS values could lead to errors and possibly a crash on the slave. Now in such cases, the statement fails with a clear error message. (Bug #11764602, Bug #57454)
  • Replication: If the disk becomes full while writing to the binary log, the server hangs until space is freed up manually. It was possible after this was done for the MySQL server to fail, due to an internal status value being set when not needed. Now in such cases, rather than trying to set this status, a warning is written in the error log instead. (Bug #11753923, Bug #45449)
  • Microsoft Windows: Dynamic file names (with colons) are no longer allowed. Static file names using the Alternate Data Stream (ADS) NTFS functionality of Microsoft Windows may continue to be used. (Bug #11761752)
  • Directory name manipulation could result in stack overflow on Mac OS X and Windows. (Bug #16066243)
  • Joins of exactly 32 tables and containing a HAVING clause returned an empty result. (Bug #15972635)
  • A buffer-handling problem in yaSSL was fixed. (Bug #15965288)
  • A mysys library string-formatting routine could mishandle width specifiers. (Bug #15960005)
  • In certain cases, UpdateXML() could return NULL incorrectly. (Bug #15948580)
References: See also Bug #13007062.
  • Metadata locking and table definition cache routines did not always check length of names passed to them. (Bug #15954872)
  • XA START had a race condition that could cause a server crash. (Bug #14729757)
  • Enabling the query cache during high client contention could cause the server to exit. (Bug #14727815)
  • There was a performance regression for queries using SELECT ... INTO user variables and a WHERE condition on one or more of the variables in the INTO list. (Bug #14664077)
References: This bug was introduced by Bug #12408412.
  • The server sometimes failed to respect MAX_CONNECTIONS_PER_HOUR limits on user connections. (Bug #14627287)
  • Output generated with mysqldump --routines could produce syntax errors when reloaded. (Bug #14463669)
  • With the thread pool plugin installed, a workload consisting of concurrent KILL statements and ping queries caused the server to exit. (Bug #14458232, Bug #14458002)
  • CHECK TABLE and REPAIR TABLE could crash if a MyISAM table had a corrupt key (.MYI) file. Now the server produces an error. (Bug #13556107, Bug #13556000)
  • Passing an unknown time zone specification to CONVERT_TZ() resulted in a memory leak. (Bug #12347040)
  • For dumps of the mysql database, mysqldump skipped the event table unless the --events option was given. To skip this table if that is desired, use the --ignore-table option instead (Bug #55587, Bug #11762933)
  • For MEMORY tables with HASH indexes, DELETE sometimes failed to delete all applicable rows. (Bug #51763, Bug #11759445)
  • The mysql client could mishandle the delimiter command if it occurred on a line during which mysql was looking for the end of a quoted string. (Bug #64135, Bug #13639125)
  • mysqld_safe used the nonportable -e test construct. (Bug #67976, Bug #16046140)
  • Configuring the server with performance_schema_events_waits_history_size=0 and performance_schema_events_waits_history_long_size=0 could cause a Performance Schema segmentation fault. (Bug #68008, Bug #16060864)
  • DECIMAL multiplication operations could produce significant inaccuracy. (Bug #45860, Bug #11754279)
  • For subqueries executing using a filesort, the optimizer could produce an incorrect result containing wrong rows. (Bug #66845, Bug #14636211)
References: See also Bug #12667154.
  • UNION type conversion could incorrectly turn unsigned values into signed values. (Bug #49003, Bug #11757005)
  • During the startup process, mysqld could incorrectly remove the PID file of an already running mysqld. (Bug #23790, Bug #11746142)

New in MySQL 5.5.29 (Dec 28, 2012)

  • Functionality Added or Changed:
  • The SHOW AUTHORS and SHOW CONTRIBUTORS statements are now deprecated in MySQL 5.5 and have been removed in MySQL 5.6.
  • Bugs Fixed:
  • Performance: InnoDB: The timing values for low-level InnoDB read operations were adjusted for better performance with fast storage devices, such as SSD. This enhancement primarily affects read operations for BLOB columns in compressed tables. (Bug #13702112, Bug #64258)
  • Important Change: InnoDB: A DML statement using the index merge access method could lock many rows from the table, even when those rows were not part of the final result set. This fix reduces the excessive locking by releasing the locks of unmatched rows. This optimization affects only transactions with isolation level equal to or less strict than READ COMMITTED; it does not apply to transactions using REPEATABLE READ or SERIALIZABLE isolation level. (Bug #14226171)
  • InnoDB: An online DDL operation for an InnoDB table incorrectly reported an empty value ('') instead of the correct key value when it reported a duplicate key error for a unique index using an index prefix. (Bug #14729221)
  • InnoDB: If a CREATE TABLE statement failed due to a disk full error, some memory allocated during the operation was not freed properly. (Bug #14708715)
  • InnoDB: With the innodb_file_per_table setting enabled, a DROP TABLE operation could cause a crash, due to a race condition that depended on the timing of pending I/O requests. (Bug #14594600, Bug #66718)
  • InnoDB: If the server crashed at the specific point when a change buffer entry was being merged into a buffer pool page, the transaction log and the change buffer were left in an inconsistent state. After a restart, MySQL could crash after reading the corresponding secondary index page. The problem was more likely to occur in MySQL 5.5 or later, where the original insert buffering mechanism was generalized to cover other operations. (Bug #14636528, Bug #66819, Bug #58571, Bug #61104, Bug #65443)
  • InnoDB: Inserting data of varying record lengths into an InnoDB table that used compression could cause the server to halt with an error. (Bug #14554000, Bug #13523839, Bug #63815, Bug #12845774, Bug #61456, Bug #12595091, Bug #61208)
  • InnoDB: If a table was defined with an index key length very close to the upper length limit of 3072, a query against that table could cause a serious error. (Bug #14500557, Bug #66413)
  • InnoDB: When an auto-increment column used a FLOAT or DOUBLE data type, if the auto-increment value became very large (larger than the maximum unsigned long long value), subsequent inserts could fail or cause the server to halt. (Bug #14145950, Bug #55071)
  • InnoDB: If a transaction was started with a consistent snapshot, then new indexes were added to the table while the transaction was in progress, a subsequent UPDATE statement could incorrectly encounter the error:
  • HA_ERR_TABLE_DEF_CHANGED: insufficient history for indexThis issue could cause an assertion error in debug builds. (Bug #14036214)
  • InnoDB: The error message was improved for the case where an UPDATE failed because the row included several BLOB values greater than 768 bytes each, causing the size of a row to exceed half the page size. The old message, was misleading; it suggested using BLOBs, when the 768-byte prefix for each BLOB column was the cause of the limit error:
  • Error Code 1118: Row size too large. The maximum row size for the used table
  • type, not counting BLOBs, is 8126. You have to change some columns to TEXT or
  • BLOBsA workaround for the problem was to create the table with the ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED clause, which is now suggested in the message. (Bug #13453036, Bug #63507)
  • InnoDB: In rare circumstances, MySQL could apply InnoDB undo records out of order during a ROLLBACK of an operation that modified a BLOB column. This issue could cause an assertion error in debug builds:
  • !bpage->file_page_was_freed (Bug #13249921)
  • Replication: Updates writing user variables whose values were never set on a slave while using --replicate-ignore-table could cause the slave to fail. (Bug #14597605)
  • References: This bug was introduced by Bug #14275000.
  • Replication: Backtick (`) characters were not always handled correctly in internally generated SQL statements, which could sometimes lead to errors on the slave. (Bug #14548159)
  • Replication: Following an insert into a nontransactional table that failed due to insufficient disk space, the server did not properly clean up all pending events, leading to an assert or possibly to other errors. (Bug #11750014)
  • Very long database names in queries could cause the server to exit. (Bug #15912213)
  • Within a stored procedure, executing a multiple-table DELETE statement that used a very long table alias could cause the server to exit. (Bug #15954896)
  • Very long table aliases in queries could cause the server to exit. (Bug #15948123)
  • Attempting to create an auto-increment column in an InnoDB table with a NULL type attribute could cause a serious error. (Bug #14758479)
  • A DELETE statement for an InnoDB table could write incorrect transaction metadata into a record, causing the server to halt with an error. To work around this issue, reduce the specified length of the primary key to less than 1K bytes. (Bug #14731482)
  • Repeated execution of a query containing a subquery that used MAX() could result in increasing memory consumption. (Bug #14683676)
  • USE dbname could fail with Unknown database when dbname contained multiple backtick (`) characters. (Bug #14645196)
  • The configure.pl script that converts GNU configure options to CMake equivalents generated erroneous output for the --with-client-ldflags and --with-mysqld-ldflags options. It now ignores those options. (Bug #14593123)
  • SHOW PROFILE could be used to cause excessive server memory consumption. (Bug #14629232)
  • The thread cache implementation worked in LIFO rather than FIFO fashion and could result in a thread being denied service (although this was a remote possibility). (Bug #14621627)
  • Within a stored program, memory allocated to hold condition information was not released until program exit, leading to excessive memory use. (Bug #14640599)
  • Improper memory cleanup could cause the server to exit. (Bug #14536113)
  • Granting or revoking the PROXY privilege caused the server to exit if the server was started with --skip-name-resolve. (Bug #14211140)
  • CREATE USER and DROP USER could fail to flush the privileges, requiring FLUSH PRIVILEGES to be used explicitly. (Bug #13864642)
  • Access to INFORMATION_SCHEMA tables through a view could leak memory. (Bug #13734987)
  • A memory leak could occur for queries containing a subquery that used GROUP BY on an outer column. (Bug #13724099)
  • On Microsoft Windows with CMake 2.6, the build process would not stop if the create_initial_db step failed. (Bug #13713525)
  • The test in mysqld_safe for the presence of the --plugin_dir option and assignment of a default value to it were performed before the actual argument parsing took place. (Bug #13548161)
  • CHECK TABLE and REPAIR TABLE could crash if a MyISAM table had a corrupt key (.MYI) file. Now the server produces an error. (Bug #13556441)
  • Improper memory cleanup could cause the server to exit. (Bug #13340270)
  • A memory leak occurred due to failure to clean up after QUICK_INDEX_MERGE_SELECT/Unique. (Bug #12694872, Bug #14542543)
  • The number of connection errors from a given host as counted by the server was periodically reset, with the result that max_connect_errors was never reached and invalid hosts were never blocked from trying to connect. (Bug #11753779)
  • References: See also Bug #38247, Bug #43006, Bug #45584, Bug #45606.
  • During optimization, ZEROFILL values may be converted to string constants. However, CASE expressions did not handle switching data types after the planning stage, leading to CASE finding a null pointer instead of its argument. (Bug #57135, Bug #11764313)
  • In debug builds, an InnoDB assertion was overly aggressive about prohibiting an open range. (Bug #66513, Bug #14547952)
  • On Windows, the Perl version of mysql_install_db created system tables in the mysql database that were not populated properly. (Bug #65584, Bug #14181049)
  • mysqld_safe ignored the value of the UMASK environment variable, leading to behavior different from mysqld with respect to the access mode of created files. Now mysqld_safe (and mysqld_multi) attempt to approximate the same behavior as mysqld. (Bug #57406, Bug #11764559)
  • LAST_INSERT_ID(expr) did not work for expr values greater than the largest signed BIGINT value. (Bug #20964, Bug #11745891)

New in MySQL 5.6.9 RC (Dec 14, 2012)

  • Functionality Added or Changed:
  • Incompatible Change: Replication: A number of variable and other names relating to GTID-based replication have been changed, with a view to making these names more appropriate and meaningful. The old names are no longer supported.
  • The features so renamed are shown in the following list:
  • The --disable-gtid-unsafe-statements server option has been renamed --enforce-gtid-consistency; the disable_gtid_unsafe_statements system variable has been renamed enforce_gtid_consistency.
  • The gtid_done server system variable has been renamed gtid_executed.
  • The gtid_lost server system variable has been renamed gtid_purged; in addition, this variable is no longer read-only.
  • The SQL_THREAD_WAIT_AFTER_GTIDS() function has been renamed WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS().
  • For more information, see Section 16.1.3, “Replication with Global Transaction Identifiers”, and Section 16.1.4.5, “Global Transaction ID Options and Variables”. (Bug #14775984)
  • mysqld now writes dates to the error log in ISO (YYYY-MM-DD hh:mm:ss) format. It also includes its process ID following the date. Thanks to Davi Arnaut for the patch. (Bug #56240, Bug #11763523)
  • Windows Vista, Windows Server 2008, and newer support native symlinking using the mklink command. This makes the MySQL Server implementation of database symbolic links using .sym files redundant, so that mechanism is now deprecated and will be removed in a future MySQL release. See Section 8.11.3.1.3, “Using Symbolic Links for Databases on Windows”.
  • Bugs Fixed:
  • Performance: InnoDB: The timing values for low-level InnoDB read operations were adjusted for better performance with fast storage devices, such as SSD. This enhancement primarily affects read operations for BLOB columns in compressed tables. (Bug #13702112, Bug #64258)
  • Incompatible Change: The THREAD_ID column in Performance Schema tables was widened from INT to BIGINT to accommodate 64-bit values.
  • If you upgrade to this release of MySQL from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate this change to the performance_schema database. (Bug #14664453)
  • Incompatible Change: Connection ID (thread ID) values greater than 32 bits can occur on some systems (such as busy or long-running 64-bit systems), causing these problems:
  • Connection IDs written to the general query log and slow query log were incorrect. This was true for logging to both files and tables.
  • The CONNECTION_ID() function could return a value with a data type too small for values larger than 32 bits.
  • The mysql_thread_id() and mysql_kill() C API functions did not handle ID values larger than 32 bits. This could result in killing the wrong thread; for example, if you invoked mysql_kill(mysql_thread_id()).
  • Connection IDs now are permitted to be 64-bit values when the server supports them (when built with 64-bit data types), which has these effects:
  • Connection IDs are logged correctly to the general query log and slow query log.Note
  • This change involves a modification to the log tables, so after upgrading to this release, you must run mysql_upgrade and restart the server.
  • CONNECTION_ID() returns a data type appropriate for values larger than 32 bits.
  • mysql_thread_id() is unchanged; the client/server protocal has only 4 bytes for the ID value. This function returns an incorrect (truncated) value for connection IDs larger than 32 bits and should be avoided.
  • mysql_kill() still cannot handle values larger than 32 bits, but to guard against killing the wrong thread now returns an error in these cases:
  • If given an ID larger than 32 bits, mysql_kill() returns a CR_INVALID_CONN_HANDLE error.
  • After the server's internal thread ID counter reaches a value larger than 32 bits, it returns an ER_DATA_OUT_OF_RANGE error for any mysql_kill() invocation and mysql_kill() fails.
  • To avoid problems with mysql_thread_id() and mysql_kill(), do not use them. To get the connection ID, execute a SELECT CONNECTION_ID() query and retrieve the result. To kill a thread, execute a KILL statement.
  • (Bug #19806, Bug #11745768, Bug #65715, Bug #14236124, Bug #44728, Bug #11753308)
  • Important Change: InnoDB: A DML statement using the index merge access method could lock many rows from the table, even when those rows were not part of the final result set. This fix reduces the excessive locking by releasing the locks of unmatched rows. This optimization affects only transactions with isolation level equal to or less strict than READ COMMITTED; it does not apply to transactions using REPEATABLE READ or SERIALIZABLE isolation level. (Bug #14226171)
  • Important Change: Replication: Because running the server with GTIDs enabled prevented changes to nontransactional tables, programs such as mysql_upgrade and mysql_install_db were unable to operate on system tables that used the MyISAM storage engine and therefore could not function correctly. Now, when running with --enforce-gtid-consistency (required whenever --gtid-mode=ON), the server allows single statements on nontransactional tables. (Bug #14722659)
  • Important Change: Replication: Formerly, the value of the Seconds_Behind_Master column in the output of SHOW SLAVE STATUS was always set to NULL whenever the SQL thread or the I/O thread was stopped. Now, this column is set to NULL only if the SQL thread is not running, or if the I/O thread is not running following a check to determine whether or not the SQL thread has processed all of the relay log. (If the SQL thread has finished processing and the I/O thread is running, Seconds_Behind_Master is 0.) (Bug #12946333)
  • Partitioning: InnoDB: Previously, when attempting to optimize one or more partitions of a partitioned table that used a storage engine that does not support partition-level OPTIMIZE, such as InnoDB, MySQL reported Table does not support optimize, doing recreate + analyze instead, then re-created the entire table, but did not actually analyze it. Now in such cases, the warning message is, Table does not support optimize on partitions. All partitions will be rebuilt and analyzed. In addition, the entire table is analyzed after first being rebuilt. (Bug #11751825)
  • InnoDB: If the server crashed while rows were inserted into a table with a FULLTEXT index but before the transaction was committed, an error could occur during the next startup:
  • InnoDB: Assertion failure in thread thread_num in file dict0dict.cc line 1019
  • (Bug #14826779)
  • InnoDB: The server could halt with an error when accessing an InnoDB table containing a FULLTEXT index through the HANDLER statement. (Bug #14788710)
  • InnoDB: The server could halt with an error when two kinds of operations happened simultaneously:
  • A ROLLBACK of an inserted row that contained off-page columns.
  • An online online DDL operation involving a table of ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED (that is, using the Barracuda file format) that rebuilt the table. For example, ADD/DROP COLUMN, ADD PRIMARY KEY, change ROW_FORMAT.
  • (Bug #14842014)
  • InnoDB: The server could halt with an assertion error for an ANALYZE TABLE operation, depending on the structure of the table and its indexes:
  • InnoDB: Assertion failure in thread thread_num in file dict0dict.ic line 447InnoDB: Failing assertion: pos < table->n_def
  • (Bug #14755452)
  • InnoDB: A timeout error could occur on Windows systems when doing ALTER TABLE statements with the DISCARD TABLESPACE or IMPORT TABLESPACE clauses, due to a temporary tablespace file remaining in the file system. (Bug #14776799)
  • InnoDB: An online DDL operation for an InnoDB table incorrectly reported an empty value ('') instead of the correct key value when it reported a duplicate key error for a unique index using an index prefix. (Bug #14729221)
  • InnoDB: InnoDB tables with FULLTEXT indexes could allocate memory for thread handles that was never released, possibly leading to resource issues on Windows systems. (Bug #14759163)
  • InnoDB: During an online DDL operation that copies the table, the secondary index of the table could become corrupted. (Bug #14753701)
  • InnoDB: If the server crashed after an online DDL CREATE INDEX operation, an error could occur while rolling back incomplete transactions on the next startup:
  • InnoDB: error in sec index entry del undo in...InnoDB: Assertion failure in thread thread_num in file row0umod.cc line 559
  • (Bug #14707452)
  • InnoDB: If the server crashed at a precise moment during an ALTER TABLE operation that rebuilt the clustered index for an InnoDB table, the original table could be inaccessible afterward. An example of such an operation is ALTER TABLE ... ADD PRIMARY KEY The fix preserves the original table if the server halts during this operation. You might still need to rename the .ibd file manually to restore the original table contents: in MySQL 5.6 and higher, rename from #sql-ib$new_table_id.ibd to table_name.ibd within the database directory; prior to MySQL 5.6, the temporary file to rename is table_name#1 or #2. (Bug #14669848)
  • InnoDB: This fix improves the error handling when an ALTER TABLE operation adds a column beyond the maximum number allowed for an InnoDB table. It also raises the maximum number of columns for an InnoDB table from 1000 to 1020. (Bug #14705287)
  • InnoDB: During an online DDL operation that rebuilt the table, a CHECK TABLE statement could report a count mismatch for all secondary indexes. (Bug #14606472)
  • InnoDB: If an ALTER TABLE statement failed while attempting to create a FULLTEXT index for an InnoDB table, the server could halt with an assertion error while dropping the incomplete index. (Bug #14504174)
  • InnoDB: During shutdown, with the innodb_purge_threads configuration option set greater than 1, the server could halt prematurely with this error:
  • mysqld got signal 11
  • A workaround was to increase innodb_log_file_size and set innodb_purge_threads=1. The fix was backported to MySQL 5.5 and 5.1, although those versions do not have the innodb_purge_threads configuration option so the error was unlikely to occur. (Bug #14234028)
  • InnoDB: The server could halt with an error under some combinations of concurrent operations:
  • InnoDB: unknown error code 20
  • This issue originated during the 5.6 development cycle. It affected only transactions using the READ COMMITTED andREAD UNCOMMITTED isolation levels. (Bug #13641662, Bug #12424846)
  • Replication: If a table to be replicated had a FULLTEXT index, this index was not ruled out when selecting the type of scan to be used in finding the next row, even though it cannot be used to find the correct one. The row applier subsequently tried unsuccessfully to employ an index scan, causing replication to fail. Now in such cases, indexes which do not provide for sequential access (such as FULLTEXT) are not considered when determining whether to use a table, index, or hash scan for this purpose. (Bug #14843764)
  • Replication: When using the GTID-aware master-slave protocol, the slave I/O thread used the wrong position. When using GTIDs, the position is not normally used, but as a special case, the position was used in addition to the GTID when the slave reconnected to the same master (even though this was not necessary). This problem is fixed by making the GTID-aware master-slave protocol not use positions at all any longer. (Bug #14828028)
  • Replication: Given a stored routine R in which the GTID_SUBTRACT() function was invoked: Once GTID_SUBTRACT() returned NULL when called inside R, it continued to return NULL every time it was called within R, for the remainder of the client session. (Bug #14838575)
  • Replication: MySQL Enterprise Backup, mysqldump, and mysqlhotcopy could not be used with a GTID-enabled MySQL Server, because they were unable to restore the server's GTID state and so could not restore from any point in the binary log other than the very beginning.
  • As part of the fix for this problem, the gtid_purged system variable (formerly named gtid_lost) is no longer read-only; now it is possible to add GTIDs to it when gtid_executed (formerly gtid_done) is empty. (Bug #14787808)
  • Replication: Restarting replication after the first binary log file was purged resulted in the error Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.' This led GTID-based replication to fail. (Bug #14756691)
  • mysql_install_db failed to honor the --user option. (Bug #15866735)
  • Creating an InnoDB table with a FULLTEXT index could encounter a serious error if the table name contained non-alphanumeric characters. (Bug #14835178)
  • Invalid memory reads could occur for queries that selected from a zero-length table name. (Bug #14780820)
  • With LOCK TABLES in effect, CREATE TABLE IF NOT EXISTS ... LIKE could raise an assertion. (Bug #14788976)
  • The automatic key generation part of derived table handling did not handle properly columns specified as part of the VALUES() clause and caused an assertion to be raised. (Bug #14786324)
  • Attempting to read a utf16 file with LOAD DATA INFILE raised an assertion. (Bug #14786470)
  • init_io_cache() used memset() to clear a mutex but passed the wrong mutex size. (Bug #14838882)
  • The optimizer could raise an assertion when evaluating a range test against an IS NOT NULL condition. (Bug #14843705)
  • An assertion could be raised executing INSERT, UPDATE, or DELETE after implicitly starting a READ ONLY transaction in LOCK TABLES mode. (Bug #14788540)
  • Attempting to create an auto-increment column in an InnoDB table with a NULL type attribute could cause a serious error. (Bug #14758479)
  • An assertion was raised if ALTER TABLE was used to rename a column to same name as an existing column while also reordering the renamed column using AFTER or FIRST. (Bug #14756089)
  • An assertion could be raised if semi-join materialization was used to evaluate a NOT IN subquery. (Bug #14751858)
  • For some continuation handler nestings, continuation could occur at the wrong location. (Bug #14724836)
  • SHOW PROCESSLIST output was not sorted in Id order. (Bug #14771006)
  • For some SELECT statements, EXPLAIN could cause the server to exit. (Bug #14761894)
  • A memory leak occurred for attempts to use ALTER TABLE to set a default value for a tiny, medium, or long BLOB or TEXT column. (Bug #14756206)
  • Installation using Solaris packages ran mysql_install_db during upgrade operations (this should occur only for new installations). (Bug #14747671)
  • For UPDATE statements, EXPLAIN showed the total key length in the key_len column rather than the length of the used key parts. (Bug #14682438)
  • Starting the server with --bind-address and then setting host_cache_size to 0 could result in the server stopping for certain kinds of client connections. (Bug #14689561)
  • With index condition pushdown enabled, the optimizer could produce incorrect results for derived tables. (Bug #14640176)
  • The optimizer could incorrectly use a nonspatial index to optimize spatial operations, causing an assertion to be raised. (Bug #14600994)
  • mysql_config_editor produced no error message for write errors to the configuration file. (Bug #14545989)
  • Query rewriting to scrub passwords for logging was done even if none of the associated logs were enabled. Also, CREATE SERVER and ALTER SERVER are now rewritten as necessary. (Bug #14073554)
  • CHECK TABLE and REPAIR TABLE could crash if a MyISAM table had a corrupt key (.MYI) file. Now the server produces an error. (Bug #13556441)
  • CHECK TABLE and REPAIR TABLE could crash if a MyISAM table had a corrupt key (.MYI) file. Now the server produces an error. (Bug #13556107, Bug #13556000)
  • For dumps of the mysql database, mysqldump skipped the event table unless the --events option was given. To skip this table if that is desired, use the --ignore-table option instead (Bug #55587, Bug #11762933)
  • mysqld_safe ignored the value of the UMASK environment variable, leading to behavior different from mysqld with respect to the access mode of created files. Now mysqld_safe (and mysqld_multi) attempt to approximate the same behavior as mysqld. (Bug #57406, Bug #11764559)
  • On Mac OS X, reinitializing the query cache could cause the server to exit. Thanks to Davi Arnaut for the patch. (Bug #67156, Bug #14741880)
  • For MEMORY tables with HASH indexes, DELETE sometimes failed to delete all applicable rows. (Bug #51763, Bug #11759445)
  • The server failed to use the query cache for queries in which a database or table name contained special characters and the table storage engine was InnoDB. (Bug #64821, Bug #13919851)
  • On Mac OS X, KILL could sometimes be unreliable. (Bug #37780, Bug #11748945)
  • LAST_INSERT_ID(expr) did not work for expr values greater than the largest signed BIGINT value. (Bug #20964, Bug #11745891)

New in MySQL 5.5.28 (Sep 29, 2012)

  • Audit Log Plugin Notes:
  • MySQL Enterprise Edition subscriptions now include MySQL Enterprise Audit, implemented using a server plugin named audit_log. MySQL Enterprise Audit uses the open MySQL Audit API to enable standard, policy-based monitoring and logging of connection and query activity executed on specific MySQL servers. Designed to meet the Oracle audit specification, MySQL Enterprise Audit provides an out of box, easy to use auditing and compliance solution for applications that are governed by both internal and external regulatory guidelines. 
When installed, the audit_log plugin enables MySQL Server to produce a log file containing an audit record of server activity. The log contents include when clients connect and disconnect, and what actions they perform while connected, such as which databases and tables they access. 
For more information, see Section 6.3.10, “MySQL Enterprise Audit”.
  • Functionality Added or Changed:
  • The internal interface of the Thread Pool plugin has changed. Old versions of the plugin will work with current versions of the server, but versions of the server older than 5.5.28 will not work with current versions of the plugin.
  • Bugs Fixed:
  • InnoDB: Certain information_schema tables originally introduced in MySQL 5.6 are now also available in MySQL 5.5 and MySQL 5.1: INNODB_BUFFER_PAGE, INNODB_BUFFER_PAGE_LRU, and INNODB_BUFFER_POOL_STATS. (Bug #13113026)
  • InnoDB: When a SELECT ... FOR UPDATE, UPDATE, or other SQL statement scanned rows in an InnoDB table using a < or

New in MySQL 5.5.24 (May 10, 2012)

  • Functionality Added or Changed:
  • Important Change: Replication: INSERT ON DUPLICATE KEY UPDATE is now marked as unsafe for statement-based replication if the target table has more than one primary or unique key. For more information, see Section 16.1.2.3, “Determination of Safe and Unsafe Statements in Binary Logging”.
  • Bugs Fixed:
  • Security Fix: Bug #64884 was fixed.
  • InnoDB: Replication: When binary log statements were replayed on the slave, the Com_insert, Com_update, and Com_delete counters were incremented by BEGIN statements initiating transactions affecting InnoDB tables but not by COMMIT statements ending such transactions. This affected these statements whether they were replicated or they were run using mysqlbinlog. (Bug #12662190)
  • If the --bind-address option was given a host name value and the host name resolved to more than one IP address, the server failed to start. For example, with --bind-address=localhost, if localhost resolved to both 127.0.0.1 and ::1, startup failed. Now the server prefers the IPv4 address in such cases. (Bug #61713, Bug #12762885)
  • mysql_store_result() and mysql_use_result() are not for use with prepared statements and are not intended to be called following mysql_stmt_execute(), but failed to return an error when invoked that way in libmysqld. (Bug #62136, Bug #13738989)

New in MySQL 5.5.19 (Dec 9, 2011)

  • Functionality Added or Changed:
  • Performance of metadata locking operations on Windows XP systems was improved by instituting a cache for metadata lock objects. This permits the server to avoid expensive operations for creation and destruction of synchronization objects on XP. A new system variable, metadata_locks_cache_size, permits control over the size of the cache. The default size is 1024. (Bug #12695572)
  • Replication: Previously, replication slaves could connect to the master server through master accounts that use nonnative authentication, except Windows native authentication. This is now also true for Windows native authentication.
  • Bugs Fixed:
  • InnoDB Storage Engine: An incorrect deadlock could occur on a server doing a substantial amount of change buffering for DML operations, particularly DELETE statements. (Bug #13340047)
  • Rounding DBL_MAX returned DBL_MAX, not 'inf'. (Bug #13261955)
  • mysql_upgrade did not upgrade the system tables or create the mysql_upgrade_info file when run with the --write-binlog or --skip-write-binlog option. (Bug #60223, Bug #11827359)
  • If a plugin was uninstalled, thread local variables for plugin variables of string type with wth PLUGIN_VAR_MEMALLOC flag were not freed. (Bug #56652, Bug #11763882)
  • Deadlock could occur when these four things happened at the same time: 1) An old dump thread was waiting for the binary log to grow. 2) The slave server that replicates from the old dump thread tried to reconnect. During reconnection, the new dump thread tried to kill the old dump thread. 3) A KILL statement tried to kill the old dump thread. 4) An INSERT statement caused a binary log rotation. (Bug #56299, Bug #11763573)

New in MySQL 5.5.15 (Jul 28, 2011)

  • Functionality Added or Changed:
  • The undocumented --all option for perror is deprecated and will be removed in MySQL 5.6.
  • Bugs Fixed:
  • InnoDB Storage Engine: A failed CREATE INDEX operation for an InnoDB table could result in some memory being allocated and not freed. This memory leak could affect tables created with the ROW_FORMAT=DYNAMIC and ROW_FORMAT=COMPRESSED settings. (Bug #12699505)
  • Partitioning: Auto-increment columns of partitioned tables were checked even when they were not being written to. In debug builds, this could lead to a crash of the server. (Bug #11765667, Bug #58655)
  • Partitioning: The UNIX_TIMESTAMP() function was not treated as a monotonic function for purposes of partition pruning. (Bug #11746819, Bug #28928)
  • Replication: If a LOAD DATA INFILE statement—replicated using statement-based replication—featured a SET clause, the name-value pairs were regenerated using a method (Item::print()) intended primarily for generating output for statements such as EXPLAIN EXTENDED, and which cannot be relied on to return valid SQL. This could in certain cases lead to a crash on the slave.
  • To fix this problem, we now name each value in its original, user-supplied form, and use that to create LOAD DATA INFILE statements for statement-based replication. (Bug #11902767, Bug #60580)
  • See also Bug #34283, Bug #11752526, Bug #43746.
  • Previously, an inappropriate error message was produced if a multiple-table update for an InnoDB table with a clustered primary key would update a table through multiple aliases, and perform an update that may physically move the row in at least one of these aliases. Now the error message is: Primary key/partition key update is not allowed since the table is updated both as 'tbl_name1' and 'tbl_name2' (Bug #11882110)
  • See also Bug #11764529.
  • ALTER TABLE {MODIFY|CHANGE} ... FIRST did nothing except rename columns if the old and new versions of the table had exactly the same structure with respect to column data types. As a result, the mapping of column name to column data was incorrect. The same thing happened for ALTER TABLE DROP COLUMN, ADD COLUMN statements intended to produce a new version of table with exactly the same structure as the old version. (Bug #61493, Bug #12652385)
  • Incorrect handling of metadata locking for FLUSH TABLES WITH READ LOCK for statements requiring prelocking caused two problems:
  • Execution of any data-changing statement that required prelocking (that is, involved a stored function or trigger) as part of transaction slowed down somewhat all subsequent statements in the transaction. Performance in a transaction that periodically involved such statements gradually degraded over time.
  • Execution of any data-changing statement that required prelocking as part of transaction prevented a concurrent FLUSH TABLES WITH READ LOCK from proceeding until the end of transaction rather than at the end of the particular statement.
  • (Bug #61401, Bug #12641342)
  • The fractional part of the “Queries per second” value in MySQL status output could be displayed incorrectly. (Bug #61205, Bug #12565712)
  • LOAD DATA INFILE incorrectly parsed relative data file path names that ascended more than three levels in the file system and as a consequence was unable to find the file. (Bug #60987, Bug #12403662)
  • For MyISAM tables, attempts to insert incorrect data into an indexed GEOMETRY column could result in table corruption. (Bug #57323, Bug #11764487)
  • In debug builds, Field_new_decimal::store_value() was subject to buffer overflows. (Bug #55436, Bug #11762799)
  • A race condition between loading a stored routine using the name qualified by the database name and dropping that database resulted in a spurious error message: The table mysql.proc is missing, corrupt, or contains bad data (Bug #47870, Bug #11756013)

New in MySQL 5.5.8 (Dec 16, 2010)

  • News Facts:
  • Underscoring its commitment to deliver new innovations to MySQL users, Oracle today announced the general availability of MySQL 5.5.
  • MySQL 5.5 delivers significant enhancements enabling users to improve the performance and scalability of web applications across multiple operating environments, including Windows, Linux, Oracle Solaris, and Mac OS X.
  • The MySQL 5.5 Community Edition, which is licensed under the GNU General Public License (GPL), and is available for free download, includes InnoDB as the default storage engine.
  • This release benefitted from substantial user community participation and feedback on the MySQL 5.5 Release Candidate, helping to provide a more broadly tested product.
  • For more details, join the MySQL Technology Update webcast on Dec. 15th at 10:00am US, Pacific Time.
  • Enhances Capabilities for Web Applications:
  • The 5.5 release of MySQL provides the customization capabilities and scalability that MySQL DBAs and developers need to more efficiently build, maintain and scale web applications.
  • With the MySQL 5.5 release users benefit from:
  • Improved performance and scalability: MySQL Database and InnoDB storage engine have been enhanced to provide optimum performance and scalability when running on the latest multi-CPU and multi-core hardware and operating systems. In addition, with release 5.5, InnoDB is now the default storage engine for the MySQL Database, delivering ACID transactions, referential integrity and crash recovery.
  • Higher availability: New semi-synchronous replication and Replication Heart Beat improve failover speed and reliability.
  • Improved usability: Improved index and table partitioning, SIGNAL/RESIGNAL support and enhanced diagnostics, including a new PERFORMANCE_SCHEMA, improve the manageability of MySQL 5.5.
  • MySQL 5.5 Delivers Major Performance Gains:
  • In recent benchmarks, the MySQL 5.5 release candidate delivered significant performance improvements compared to MySQL 5.1. Results included:
  • On Windows: Up to 1,500 percent performance gains for Read/Write operations and up to 500 percent gain for Read Only.(1)
  • On Linux: Up to 360 percent performance gain in Read/Write operations and up to 200 percent improvement in Read Only.(2)

New in MySQL 5.1.52 (Nov 2, 2010)

  • InnoDB Storage Engine: InnoDB incorrectly reported an error when a cascading foreign key constraint deleted more than 250 rows. (Bug#57255)
  • InnoDB Storage Engine: A SELECT ... FOR UPDATE statement affecting a range of rows in an InnoDB table could cause a crash in the debug version of the server. (Bug#56716)
  • InnoDB Storage Engine: Improved the performance of UPDATE operations on InnoDB tables, when only non-indexed columns are changed. (Bug#56340)
  • InnoDB Storage Engine: The server could crash on shutdown, if started with --innodb-use-system-malloc=0. (Bug#55627)
  • InnoDB Storage Engine: Setting the PACK_KEYS=0 table option for an InnoDB table prevented new indexes from being added to the table. (Bug#54606)
  • InnoDB Storage Engine: Changed the locking mechanism for the InnoDB data dictionary during ROLLBACK operations, to improve concurrency for REPLACE statements. (Bug#54538)
  • InnoDB Storage Engine: InnoDB transactions could be incorrectly committed during recovery, rather than rolled back, if the server crashed and was restarted after performing ALTER TABLE...ADD PRIMARY KEY on an InnoDB table, or some other operation that involves copying the entire table. (Bug#53756)
  • Partitioning: Replication: Attempting to execute LOAD DATA on a partitioned MyISAM table while using statement-based logging mode caused the master to hang or crash. (Bug#51851)
  • Partitioning: Multi-table UPDATE statements involving a partitioned MyISAM table could cause this table to become corrupted. Not all tables affected by the UPDATE needed to be partitioned for this issue to be observed. (Bug#55458)
  • Partitioning: EXPLAIN PARTITIONS returned bad estimates for range queries on partitioned MyISAM tables. In addition, values in the rows column of EXPLAIN PARTITIONS output did not take partition pruning into account. (Bug#53806, Bug#46754)
  • Replication: Backticks used to enclose idenitfiers for savepoints were not preserved in the binary log, which could lead to replication failure when the identifier, stripped of backticks, could be misinterpreted, causing a syntax or other error.
  • This could cause problems with MySQL application programs making use of generated savepoint IDs. If, for instance, java.sql.Connection.setSavepoint() is called without any parameters, Connector/J automatically generates a savepoint identifier consisting of a string of hexadecimal digits 0-F encased in backtick (`) characters. If such an ID took the form `NeN` (where N represents a string of the decimal digits 0-9, and e is a literal uppercase or lowercase “E” character). Removing the backticks when writing the identifier into the binary log left behind a substring which the slave MySQL server tried to interpret as a floating point number, rather than as an identifier. The resulting syntax error caused loss of replication. (Bug#55961)
  • See also Bug#55962.
  • If a query specified a DATE or DATETIME value in a format different from 'YYYY-MM-DD HH:MM:SS', a greater-than-or-equal (>=) condition matched only greater-than values in an indexed TIMESTAMP column. (Bug#55779)
  • If there was an active SELECT statement, an error arising during trigger execution could cause a server crash. (Bug#55421)
  • With an UPDATE IGNORE statement including a subquery that was evaluated using a temporary table, an error transferring the data from the temporary was ignored, causing an assertion to be raised. (Bug#54543)
  • Row subqueries producing no rows were not handled as UNKNOWN values in row comparison expressions. (Bug#54190)
  • The max_length metadata value of MEDIUMBLOB types was reported as 1 byte greater than the correct value. (Bug#53296)
  • In some cases, when the left part of a NOT IN subquery predicate was a row and contained NULL values, the query result was incorrect. (Bug#51070)
  • For some queries, the optimizer produced incorrect results using the Index Merge access method with InnoDB tables. (Bug#50402)
  • EXPLAIN produced an incorrect rows value for queries evaluated using an index scan and that included LIMIT, GROUP BY, and ORDER BY on a computed column. (Bug#50394)
  • mysql_store_result() and mysql_use_result() are not for use with prepared statements and are not intended to be called following mysql_stmt_execute(), but failed to return an error when invoked that way. (Bug#47485)
  • A malformed packet sent by the server when the query cache was in use resulted in lost-connection errors. (Bug#42503)
  • CREATE TABLE failed if a column referred to in an index definition and foreign key definition was in different lettercases in the two definitions. (Bug#39932)

New in MySQL 5.1.51 (Oct 7, 2010)

  • InnoDB Notes:
  • InnoDB Plugin has been upgraded to version 1.0.12. This version is considered of General Availability (GA) quality.
  • In this release, the InnoDB Plugin is included in source and binary distributions, except RHEL3, RHEL4, SuSE 9 (x86, x86_64, ia64), and generic Linux RPM packages. It also does not work for FreeBSD 6 and HP-UX or for Linux on generic ia64.
  • Bugs fixed:
  • Security Fix: During evaluation of arguments to extreme-value functions (such as LEAST() and GREATEST()), type errors did not propagate properly, causing the server to crash. (Bug#55826)
  • Security Fix: The server could crash after materializing a derived table that required a temporary table for grouping. (Bug#55568)
  • Security Fix: A user-variable assignment expression that is evaluated in a logical expression context can be precalculated in a temporary table for GROUP BY. However, when the expression value is used after creation of the temporary table, it was re-evaluated, not read from the table and a server crash resulted. (Bug#55564)
  • Security Fix: Pre-evaluation of LIKE predicates during view preparation could cause a server crash. (Bug#54568)
  • Security Fix: GROUP_CONCAT() and WITH ROLLUP together could cause a server crash. (Bug#54476)
  • Security Fix: Queries could cause a server crash if the GREATEST() or LEAST() function had a mixed list of numeric and LONGBLOB arguments, and the result of such a function was processed using an intermediate temporary table. (Bug#54461)
  • Security Fix: Queries with nested joins could cause an infinite loop in the server when used from stored procedures and prepared statements. (Bug#53544)
  • Security Fix: The PolyFromWKB() function could crash the server when improper WKB data was passed to the function. (Bug#51875)
  • Incompatible Change: Replication: As of MySQL 5.5.6, handling of CREATE TABLE IF NOT EXISTS ... SELECT statements has been changed for the case that the destination table already exists:
  • Previously, for CREATE TABLE IF NOT EXISTS ... SELECT, MySQL produced a warning that the table exists, but inserted the rows and wrote the statement to the binary log anyway. By contrast, CREATE TABLE ... SELECT (without IF NOT EXISTS) failed with an error, but MySQL inserted no rows and did not write the statement to the binary log.
  • MySQL now handles both statements the same way when the destination table exists, in that neither statement inserts rows or is written to the binary log. The difference between them is that MySQL produces a warning when IF NOT EXISTS is present and an error when it is not.
  • This change in handling of IF NOT EXISTS results in an incompatibility for statement-based replication from a MySQL 5.1 master with the original behavior and a MySQL 5.5 slave with the new behavior. Suppose that CREATE TABLE IF NOT EXISTS ... SELECT is executed on the master and the destination table exists. The result is that rows are inserted on the master but not on the slave. (Row-based replication does not have this problem.)
  • To address this issue, statement-based binary logging for CREATE TABLE IF NOT EXISTS ... SELECT is changed in MySQL 5.1 as of 5.1.51:
  • If the destination table does not exist, there is no change: The statement is logged as is.
  • If the destination table does exist, the statement is logged as the equivalent pair of CREATE TABLE IF NOT EXISTS and INSERT ... SELECT statements. (If the SELECT in the original statement is preceded by IGNORE or REPLACE, the INSERT becomes INSERT IGNORE or REPLACE, respectively.)
  • This change provides forward compatibility for statement-based replication from MySQL 5.1 to 5.5 because when the destination table exists, the rows will be inserted on both the master and slave. To take advantage of this compatibility measure, the 5.1 server must be at least 5.1.51 and the 5.5 server must be at least 5.5.6.
  • To upgrade an existing 5.1-to-5.5 replication scenario, upgrade the master first to 5.1.51 or higher. Note that this differs from the usual replication upgrade advice of upgrading the slave first.
  • A workaround for applications that wish to achieve the original effect (rows inserted regardless of whether the destination table exists) is to use CREATE TABLE IF NOT EXISTS and INSERT ... SELECT statements rather than CREATE TABLE IF NOT EXISTS ... SELECT statements.
  • Along with the change just described, the following related change was made: Previously, if an existing view was named as the destination table for CREATE TABLE IF NOT EXISTS ... SELECT, rows were inserted into the underlying base table and the statement was written to the binary log. As of MySQL 5.1.51 and 5.5.6, nothing is inserted or logged. (Bug#47442, Bug#47132, Bug#48814, Bug#49494)
  • Incompatible Change: Previously, if you flushed the logs using FLUSH LOGS or mysqladmin flush-logs and mysqld was writing the error log to a file (for example, if it was started with the --log-error option), it renamed the current log file with the suffix -old, then created a new empty log file. This had the problem that a second log-flushing operation thus caused the original error log file to be lost unless you saved it under a different name. For example, you could use the following commands to save the file:
  • shell> mysqladmin flush-logsshell> mv host_name.err-old backup-directory
  • To avoid the preceding file-loss problem, renaming no longer occurs. The server merely closes and reopens the log file. To rename the file, you can do so manually before flushing. Then flushing the logs reopens a new file with the original file name. For example, you can rename the file and create a new one using the following commands:
  • shell> mv host_name.err host_name.err-oldshell> mysqladmin flush-logsshell> mv host_name.err-old backup-directory
  • (Bug#29751)
  • Partitioning: When the storage engine used to create a partitioned table was disabled, attempting to drop the table caused the server to crash. (Bug#46086)
  • If a view was named as the destination table for CREATE TABLE ... SELECT, the server produced a warning whether or not IF NOT EXISTS was used. Now it produces a warning only when IF NOT EXISTS is used, and an error otherwise. (Bug#55777)
  • After the fix for Bug#39653, the shortest available secondary index was used for full table scans. The primary clustered key was used only if no secondary index could be used. However, when the chosen secondary index includes all columns of the table being scanned, it is better to use the primary index because the amount of data to scan is the same but the primary index is clustered. This is now taken into account. (Bug#55656)
  • The server was not checking for errors generated during the execution of Item::val_xxx() methods when copying data to a group, order, or distinct temp table's row. (Bug#55580)
  • ORDER BY clauses that included user variable expressions could cause a debug assertion to be raised. (Bug#55565)
  • Queries involving predicates of the form const NOT BETWEEN not_indexed_column AND indexed_column could return incorrect data due to incorrect handling by the range optimizer. (Bug#54802)
  • MIN() or MAX() with a subquery argument could raise a debug assertion for debug builds or return incorrect data for nondebug builds. (Bug#54465)
  • INFORMATION_SCHEMA plugins with no deinit() method resulted in a memory leak. (Bug#54253)
  • After ALTER TABLE was used on a temporary transactional table locked by LOCK TABLES, any later attempts to execute LOCK TABLES or UNLOCK TABLES caused a server crash. (Bug#54117)
  • INSERT IGNORE INTO ... SELECT statements could cause a debug assertion to be raised. (Bug#54106)
  • The fix for Bug#30234 caused the server to reject the DELETE tbl_name.* ... Access compatibility syntax for multiple-table DELETE statements. (Bug#53034)
  • Enumeration plugin variables were subject to a type casting error, causing inconsistent results between different platforms. (Bug#42144)
  • A PKG install on Solaris put some files in incorrect locations. (Bug#31058)

New in MySQL 5.1.45 (Mar 24, 2010)

  • This release includes InnoDB Plugin 1.0.6. This version is considered of Release Candidate (RC) quality.
  • In this release, the InnoDB Plugin is included in source and binary distributions, except RHEL3, RHEL4, SuSE 9 (x86, x86_64, ia64), and generic Linux RPM packages. It also does not work for FreeBSD 6 and HP-UX or for Linux on generic ia64.
  • Functionality added or changed:
  • mysqltest has a new --max-connections option to set a higher number of maximum allowed server connections than the default 128. This option can also be passed via mysql-test-run.pl. (Bug#51135)
  • mysql-test-run.pl has a new --portbase option and a corresponding MTR_PORT_BASE environment variable for setting the port range, as an alternative to the existing --build-thread option. (Bug#50182)
  • mysql-test-run.pl has a new --gprof option that runs the server through the gprof profiler, much the same way the currently supported --gcov option runs it through gcov. (Bug#49345)
  • mysqltest has a new lowercase_result command that converts the output of the next statement to lowercase. This is useful for test cases where the lettercase may vary between platforms. (Bug#48863)
  • mysqltest has a new remove_files_wildcard command that removes files matching a pattern from a directory. (Bug#39774)
  • Bugs fixed:
  • Partitioning: Attempting to drop a partitioned table from one connection while waiting for the completion of an ALTER TABLE that had been issued from a different connection, and that changed the storage engine used by the table, could cause the server to crash. (Bug#42438)
  • Replication: Adding an index to a table on the master caused the slave to stop logging slow queries to the slow query log. (Bug#50620)
  • Replication: Queries which were written to the slow query log on the master were not written to the slow query log on the slave. (Bug#23300). See also Bug#48632.
  • mysqld_multi failed due to a syntax error in the script. (Bug#51468)
  • Referring to a subquery result in a HAVING clause could produce incorrect results. (Bug#50995)
  • Use of filesort plus the join cache normally is preferred to a full index scan. But it was used even if the index is clustered, in which case, the clustered index scan can be faster. (Bug#50843)
  • For debug builds, SHOW BINARY LOGS caused an assertion to be raised if binary logging was not enabled. (Bug#50780)
  • Incorrect handling of BIT columns in temporary tables could lead to spurious duplicate-key errors. (Bug#50591)
  • Full-text queries that used the truncation operator (*) could enter an infinite loop. (Bug#50351)
  • mysqltest no longer lets you execute an SQL statement on a connection after doing a send command, unless you do a reap first. This was previously accepted but could produce unpredictable results. (Bug#49269)
  • For debug builds on Windows, warnings about incorrect use of debugging directives were written to the error log. The directives were rewritten to eliminate these messages. (Bug#49025)
  • Building MySQL on Fedora Core 12 64-bit failed, due to errors in comp_err. (Bug#48864)
  • An ARZ file missing from the database directory caused the server to crash. (Bug#48757)
  • Slow CALL statements were not always logged to the slow query log because execution time for multiple-statement stored procedures was assessed incorrectly. (Bug#47905)
  • Failure to open a view with a nonexistent DEFINER was improperly handled and the server would crash later attempting to lock the view. (Bug#47734)
  • If EXPLAIN encountered an error in the query, a memory leak occurred. (Bug#45989)
  • Grouping by a subquery in a query with a DISTINCT aggregate function led to incorrect and unordered grouping values. (Bug#45640)
  • Propagation of a large unsigned numeric constant in WHERE expressions could lead to incorrect results. This also affected EXPLAIN EXTENDED, which printed incorrect numeric constants in such transformed WHERE expressions. (Bug#45360)
  • Valgrind warnings about uninitialized variables in optimizer code were silenced. (Bug#45195)
  • flush_cache_records() did not correctly check for errors that should cause statement execution to stop, leading to a server crash. (Bug#39022)
  • When building MySQL when using a different target directory (for example using the VPATH environment variable), the build of the embedded readline component would fail. (Bug#35250)
  • INSERT INTO ... VALUES(DEFAULT) failed to insert the correct value for ENUM columns. For MyISAM tables, an empty value was inserted. For CSV tables, the table became corrupt. (Bug#33717)

New in MySQL 5.1.44 (Feb 20, 2010)

  • InnoDB Plugin Notes:
  • This release includes InnoDB Plugin 1.0.6. This version is considered of Release Candidate (RC) quality.
  • In this release, the InnoDB Plugin is included in source and binary distributions, except RHEL3, RHEL4, SuSE 9 (x86, x86_64, ia64), and generic Linux RPM packages. It also does not work for FreeBSD 6 and HP-UX or for Linux on generic ia64.
  • Functionality added or changed:
  • Replication: Introduced the --binlog-direct-non-transactional-updates server option. This option causes updates using the statement-based logging format to tables using non-transactional engines to be written directly to the binary log, rather than to the transaction cache.
  • Before using this option, be certain that you have no dependencies between transactional and non-transactional tables. A statement that both selects from an InnoDB table and inserts into a MyISAM table is an example of such a dependency. For more information, see Section 16.1.3.4, “Binary Log Options and Variables”. (Bug#46364)
  • Bugs fixed:
  • Partitioning: When an ALTER TABLE ... REORGANIZE PARTITION statement on an InnoDB table failed due to innodb_lock_wait_timeout expiring while waiting for a lock, InnoDB did not clean up any temporary files or tables which it had created. Attempting to reissue the ALTER TABLE statement following the timeout could lead to storage engine errors, or possibly a crash of the server. (Bug#47343)
  • Replication: In some cases, inserting into a table with many columns could cause the binary log to become corrupted. (Bug#50018)
  • Replication: When using row-based replication, setting a BIT or CHAR column of a MyISAM table to NULL, then trying to delete from the table, caused the slave to fail with the error Can't find record in table. (Bug#49481, Bug#49482)
  • Replication: When logging in row-based mode, DDL statements are actually logged as statements; however, statements that affected temporary tables and followed DDL statements failed to reset the binary log format to ROW, with the result that these statements were logged using the statement-based format. Now the state of binlog_format is restored after a DDL statement has been written to the binary log. (Bug#49132)
  • Replication: When using row-based logging, the statement CREATE TABLE t IF NOT EXIST ... SELECT was logged as CREATE TEMPORARY TABLE t IF NOT EXIST ... SELECT when t already existed as a temporary table. This was caused by the fact that the temporary table was opened and the results of the SELECT were inserted into it when a temporary table existed and had the same name.
  • Now, when this statement is executed, t is created as a base table, the results of the SELECT are inserted into it — even if there already exists a temporary table having the same name — and the statement is logged correctly. (Bug#47418)
  • Replication: Due to a change in the size of event representations in the binary log, when replicating from a MySQL 4.1 master to a slave running MySQL 5.0.60 or later, the START SLAVE UNTIL statement did not function correctly, stopping at the wrong position in the log. Now the slave detects that the master is using the older version of the binary log format, and corrects for the difference in event size, so that the slave stops in the correct position. (Bug#47142)
  • The SSL certificates in the test suite were about to expire. They have been updated with expiration dates in the year 2015. (Bug#50642)
  • The printstack function does not exist on Solaris 8 or earlier, which would lead to a compilation failure. (Bug#50409)
  • A user could see tables in INFORMATION_SCHEMA.TABLES without appropriate privileges for them. (Bug#50276)
  • Debug output for join structures was garbled. (Bug#50271)
  • The filesort sorting method applied to a CHAR(0) column could lead to a server crash. (Bug#49897)
  • sql_buffer_result had an effect on non-SELECT statements, contrary to the documentation. (Bug#49552)
  • In some cases a subquery need not be evaluated because it returns only aggregate values that can be calculated from table metadata. This sometimes was not handled by the enclosing subquery, resulting in a server crash. (Bug#49512)
  • The method for comparing INFORMATION_SCHEMA names and database names was nonoptimal and an improvement was made: When the database name length is already known, a length check is made first and content comparison skipped if the lengths are unequal. (Bug#49501)
  • The MD5() and SHA1() functions had excessive overhead for short strings. (Bug#49491)
  • Mixing full-text searches and row expressions caused a crash. (Bug#49445)
  • Creating or dropping a table with 1023 transactions active caused an assertion failure. (Bug#49238)
  • mysql-test-run.pl now recognizes the MTR_TESTCASE_TIMEOUT, MTR_SUITE_TIMEOUT, MTR_SHUTDOWN_TIMEOUT, and MTR_START_TIMEOUT environment variables. If they are set, their values are used to set the --testcase-timeout, --suite-timeout, --shutdown-timeout, and --start-timeout options, respectively. (Bug#49210)

New in MySQL 5.1.43 (Feb 5, 2010)

  • InnoDB Plugin Notes:
  • This release includes InnoDB Plugin 1.0.6. This version is considered of Release Candidate (RC) quality.
  • Functionality added or changed:
  • Partitioning: The UNIX_TIMESTAMP() function is now supported in partitioning expressions using TIMESTAMP columns.
  • All other expressions involving TIMESTAMP values are now rejected with an error when attempting to create a new partitioned table or to alter an existing partitioned table.
  • When accessing an existing partitioned table having a timezone-dependent partitioning function (where the table was using a previous version of MySQL), a warning rather than an error is issued. In such cases, you should fix the table. One way of doing this is to alter the table's partitioning expression so that it uses UNIX_TIMESTAMP(). (Bug#42849)
  • Bugs fixed:
  • Security Fix: For servers built with yaSSL, a preauthorization buffer overflow could cause memory corruption or a server crash. We thank Evgeny Legerov from Intevydis for providing us with a proof-of-concept script that allowed us to reproduce this bug. (Bug#50227, CVE-2009-4484)
  • Important Change: Replication: The RAND() function is now marked as unsafe for statement-based replication. Using this function now generates a warning when binlog_format=STATEMENT and causes the the format to switch to row-based logging when binlog_format=MIXED.
  • This change is being introduced because, when RAND() was logged in statement mode, the seed was also written to the binary log, so the replication slave generated the same sequence of random numbers as was generated on the master. While this could make replication work in some cases, the order of affected rows was still not guaranteed when this function was used in statements that could update multiple rows, such as UPDATE or INSERT ... SELECT; if the master and the slave retrieved rows in different order, they began to diverge. (Bug#49222)
  • Partitioning: When used on partitioned tables, the records_in_range handler call checked all partitions, rather than the unpruned partitions only. (Bug#48846) See also Bug#37252, Bug#47261.
  • Partitioning: A query that searched on a ucs2 column failed if the table was partitioned. (Bug#48737)
  • Replication: A LOAD DATA INFILE statement that loaded data into a table having a column name that must be escaped (such as `key` INT), caused replication to fail when logging in mixed or statement mode. In such cases, the master wrote the LOAD DATA event to the binary log without escaping the field names. (Bug#49473) See also Bug#47927.
  • Replication: Spatial data types cause row-based replication to crash. (Bug#48776)
  • Replication: A flaw in the implementation of the purging of binary logs could result in orphaned files being left behind in the following circumstances:
  • If the server failed or was killed while purging binary logs.
  • If the server failed or was killed after creating of a new binary log when the new log file was opened for the first time.
  • In addition, if the slave was not connected during the purge operation, it was possible for a log file that was in use to be removed; this could lead data loss and possible inconsistencies between the master and slave. (Bug#45292)
  • Replication: When using the STATEMENT or MIXED logging format, the statements LOAD DATA CONCURRENT LOCAL INFILE and LOAD DATA CONCURRENT INFILE were logged as LOAD DATA LOCAL INFILE and LOAD DATA LOCAL INFILE, respectively (in other words, the CONCURRENT keyword was omitted). As a result, when using replication with either of these logging modes, queries on the slaves were blocked by the replication SQL thread while trying to execute the affected statements. (Bug#34628)
  • Replication: Manually removing entries from the binary log index file on a replication master could cause the server to repeatedly send the same binary log file to slaves. (Bug#28421)
  • Cluster Replication: When expire_logs_days was set, the thread performing the purge of the log files could deadlock, causing all binary log operations to stop. (Bug#49536)
  • Within a stored routine, selecting the result of CONCAT_WS() with a routine parameter argument into a user variable could return incorrect results. (Bug#50096)
  • The IBMDB2I storage engine was missing from the i5os 64-bit distribution of MySQL 5.1.42. It is now included again. (Bug#50059)
  • EXPLAIN EXTENDED UNION ... ORDER BY caused a crash when the ORDER BY referred to a nonconstant or full-text function or a subquery. (Bug#49734)
  • The push_warning_printf() function was being called with an invalid error level MYSQL_ERROR::WARN_LEVEL_ERROR, causing an assertion failure. To fix the problem, MYSQL_ERROR::WARN_LEVEL_ERROR has been replaced by MYSQL_ERROR::WARN_LEVEL_WARN. (Bug#49638)
  • Some prepared statements could raise an assertion when re-executed. (Bug#49570)
  • A Valgrind error in make_cond_for_table_from_pred() was corrected. Thanks to Sergey Petrunya for the patch to fix this bug. (Bug#49506)
  • When compiling on Windows, an error in the CMake definitions for InnoDB would cause the engine to be built incorrectly. (Bug#49502)
  • Valgrind warnings for CHECKSUM TABLE were corrected. (Bug#49465)
  • Specifying an index algorithm (such as BTREE) for SPATIAL or FULLTEXT indexes caused a server crash. These index types do not support algorithm specification, and it is now disallowed to do so. (Bug#49250)
  • The optimizer sometimes incorrectly handled conditions of the form WHERE col_name='const1' AND col_name='const2'. (Bug#49199)
  • Execution of DECODE() and ENCODE() could be inefficient because multiple executions within a single statement reinitialized the random generator multiple times even with constant parameters. (Bug#49141)
  • MySQL 5.1 does not support 2-byte collation numbers, but did not check the number and crashed for out-of-range values. (Bug#49134)
  • With binary logging enabled, REVOKE ... ON {PROCEDURE|FUNCTION} FROM ... could cause a crash. (Bug#49119)
  • The LIKE operator did not work correctly when using an index for a ucs2 column. (Bug#49028)
  • check_key_in_view() was missing a DBUG_RETURN in one code branch, causing a crash in debug builds. (Bug#48995)
  • Several strmake() calls had an incorrect length argument (too large by one). (Bug#48983)
  • On Fedora 12, strmov() did not guarantee correct operation for overlapping source and destination buffer. Calls were fixed to use an overlap-safe version instead. (Bug#48866)
  • Incomplete reset of internal TABLE structures could cause a crash with eq_ref table access in subqueries. (Bug#48709)
  • Re-execution of a prepared statement could cause a server crash. (Bug#48508)
  • The error message for ER_UPDATE_INFO was subject to buffer overflow or truncation. (Bug#48500)
  • SHOW BINLOG EVENTS could fail with a error: Wrong offset or I/O error. (Bug#48357)
  • Valgrind warnings related to binary logging of LOAD DATA INFILE statements were corrected. (Bug#48340)
  • An aliasing violation in the C API could lead to a crash. (Bug#48284)
  • With one thread waiting for a lock on a table, if another thread dropped the table and created a new table with the same name and structure, the first thread would not notice that the table had been re-created and would try to used cached metadata that belonged to the old table but had been freed. (Bug#48157)
  • The InnoDB Monitor could fail to print diagnostic information after a long lock wait. (Bug#47814)
  • Queries containing GROUP BY ... WITH ROLLUP that did not use indexes could return incorrect results. (Bug#47650)
  • If an invocation of a stored procedure failed in the table-open stage, subsequent invocations that did not fail in that stage could cause a crash. (Bug#47649)
  • On Solaris, no stack trace was printed to the error log after a crash. (Bug#47391)
  • The first execution of STOP SLAVE UNTIL stopped too early. (Bug#47210)
  • When the mysql client was invoked with the --vertical option, it ignored the --skip-column-names option. (Bug#47147)
  • It was possible for init_available_charsets() not to initialize correctly. (Bug#45058)
  • Comparison with NULL values sometimes did not produce a correct result. (Bug#42760)
  • Crash recovery did not work for InnoDB temporary tables. (Bug#41609)
  • The mysql_upgrade command would create three additional fields to the mysql.proc table (character_set_client, collation_connection, and db_collation), but did not populate the fields with correct values. This would lead to error messages reported during stored procedure execution. (Bug#41569)
  • When compressed MyISAM files were opened, they were always memory mapped, sometimes causing memory-swapping problems. To deal with this, a new system variable, myisam_mmap_size, was added to limit the amount of memory used for memory mapping of MyISAM files. (Bug#37408)
  • A race condition on the privilege hash tables allowed one thread to try to delete elements that had already been deleted by another thread. A consequence was that SET PASSWORD or FLUSH PRIVILEGES could cause a crash. (Bug#35589, Bug#35591)
  • ALTER TABLE with both DROP COLUMN and ADD COLUMN clauses could crash or lock up the server. (Bug#31145)

New in MySQL 5.1.42 (Jan 4, 2010)

  • Bugs fixed:
  • Performance: When the query cache is fragmented, the size of the free block lists in the memory bins grows, which causes query cache invalidation to become slow. There is now a 50ms timeout for a SELECT statement waiting for the query cache lock. If the timeout expires, the statement executes without using the query cache. (Bug#39253)
  • Important Change: Replication: The following functions have been marked unsafe for statement-based replication: GET_LOCK(), IS_FREE_LOCK(), IS_USED_LOCK(), MASTER_POS_WAIT(), RELEASE_LOCK(), SLEEP(), SYSDATE(), VERSION()
  • None of the functions just listed are guaranteed to replicate correctly when using the statement-based format, because they can produce different results on the master and the slave. The use of any of these functions while binlog_format is set to STATEMENT is logged with the warning, Statement is not safe to log in statement format. When binlog_format is set to MIXED, the binary logging format is automatically switched to the row-based format whenever one of these functions is used. (Bug#47995)
  • Partitioning: In some cases, it was not possible to add a new column to a table that had subpartitions. (Bug#48276)
  • Partitioning: SELECT COUNT(*) from a partitioned table failed when using the ONLY_FULL_GROUP_BY SQL mode. (Bug#46923) This regression was introduced by Bug#45807.
  • Partitioning: SUBPARTITION BY KEY failed with DEFAULT CHARSET=utf8. (Bug#45904)
  • Replication: When using row-based logging, TRUNCATE TABLE was written to the binary log even if the affected table was temporary, causing replication to fail. (Bug#48350)
  • Replication: Replicating TEXT or VARCHAR columns declared as NULL on the master but NOT NULL on the slave caused the slave to crash. (Bug#43789) See also Bug#38850, Bug#43783, Bug#43785, Bug#47741, Bug#48091.
  • Replication: When using row-based format, replication failed with the error Could not execute Write_rows event on table ...; Field '...' doesn't have a default value when an INSERT was made on the master without specifying a value for a column having no default, even if strict server SQL mode was not in use and the statement would otherwise have succeeded on the master. Now the SQL mode is checked, and the statement is replicated unless strict mode is in effect. For more information, see Section 5.1.8, “Server SQL Modes”. (Bug#38173)
  • The result of comparison between nullable BIGINT and INT columns was inconsistent. (Bug#49517)
  • Incorrect cache initialization prevented storage of converted constant values and could produce incorrect comparison results. (Bug#49489)
  • Comparisons involving YEAR values could produce incorrect results. (Bug#49480)
  • InnoDB did not reset table AUTO_INCREMENT values to the last used values after a server restart. (Bug#49032)
  • If a query involving a table was terminated with KILL, a subsequent SHOW CREATE TABLE for that table caused a server crash. (Bug#48985)
  • Privileges for stored routines were ignored for mixed-case routine names. (Bug#48872)
  • Building MySQL on Fedora Core 12 64-bit would due to errors in comp_err. (Bug#48864)
  • Concurrent ALTER TABLE operations on an InnoDB table could raise an assertion. (Bug#48782)
  • During query execution, ranges could be merged incorrectly for OR operations and return an incorrect result. (Bug#48665)
  • The InnoDB Table Monitor reported the FLOAT and DOUBLE data types incorrectly. (Bug#48526)
  • With row-based binary logging, the server crashed for statements of the form CREATE TABLE IF NOT EXISTS existing_view LIKE temporary_table. This occurred because the server handled the existing view as a table when logging the statement. (Bug#48506)
  • DISTINCT was ignored for queries with GROUP BY WITH ROLLUP and only const tables. (Bug#48475)
  • Loose index scan was inappropriately chosen for some WHERE conditions. (Bug#48472)
  • If the InnoDB tablespace was configured with too small a value, the server could crash and corrupt the tablespace. (Bug#48469)
  • Parts of the range optimizer could be initialized incorrectly, resulting in Valgrind errors. (Bug#48459)
  • A bad typecast could cause query execution to allocate large amounts of memory. (Bug#48458)
  • On Windows, InnoDB could not be built as a statically linked library. (Bug#48317)
  • mysql_secure_installation did not work on Solaris. (Bug#48086)
  • When running mysql_secure_installation, the command would fail if the root password contained multiple spaces, , # or quote characters. (Bug#48031)
  • MATCH IN BOOLEAN MODE searches could return too many results inside a subquery. (Bug#47930)
  • Using REPLACE to update a previously inserted negative value in an AUTO_INCREMENT coumn in an InnoDB table caused the table auto-increment value to be updated to 2147483647. (Bug#47720)
  • If a session held a global read lock acquired with FLUSH TABLES WITH READ LOCK, a lock for one table acquired with LOCK TABLES, and issued an INSERT DELAYED statement for another table, deadlock could occur. (Bug#47682)
  • The mysql client status command displayed an incorrect value for the server character set. (Bug#47671)
  • Connecting to a 4.1.x server from a 5.1.x or higher mysql client resulted in a memory-free error when disconnecting. (Bug#47655)
  • Assignment of a system variable sharing the same base name as a declared stored program variable in the same context could lead to a crash. (Bug#47627)
  • The innodb_file_format_check system variable could not be set at runtime to DEFAULT or to the value of a user-defined variable. (Bug#47167)
  • After a binary upgrade to MySQL 5.1 from a MySQL 5.0 installation that contains ARCHIVE tables, accessing those tables caused the server to crash, even if you had run mysql_upgrade or CHECK TABLE ... FOR UPGRADE. To work around this problem, use mysqldump to dump all ARCHIVE tables before upgrading, and reload them into MySQL 5.1 after upgrading. The same problem occurs for binary downgrades from MySQL 5.1 to 5.0. (Bug#47012)
  • The IGNORE clause on a DELETE statement masked an SQL statement error that occurred during trigger processing. (Bug#46425)
  • On 64-bit systems, --skip-innodb did not skip InnoDB startup. (Bug#46043)
  • Valgrind errors for InnoDB Plugin were corrected. (Bug#45992, Bug#46656)
  • The return value was not checked for some my_hash_insert() calls. (Bug#45613)
  • Truncation of DECIMAL values could lead to assertion failures; for example, when deducing the type of a table column from a literal DECIMAL value. (Bug#45261)
  • For YEAR(2) values, MIN(), MAX(), and comparisons could yield incorrect results. (Bug#43668)
  • The server could crash when attempting to access a non-conformant mysql.proc system table. For example, the server could crash when invoking stored procedure-related statements after an upgrade from MySQL 5.0 to 5.1 without running mysql_upgrade. (Bug#41726)
  • Use of InnoDB monitoring (SHOW ENGINE INNODB STATUS or one of the InnoDB Monitor tables) could cause a server crash due to invalid access to a shared variable in a concurrent environment. This is a further fix for a regression introduced in MySQL 5.1.38 to the original fix in MySQL 5.1.31. (Bug#38883)
  • When running mysql_secure_installation on Windows, the command would fail to load a required module, Term::ReadKey, which was required for correct operation. (Bug#35106)
  • If the --log-bin server option was set to a directory name with a trailing component separator character, the basename of the binary log files was empty so that the created files were named .000001 and .index. The same thing occurred with the --log-bin-index, --relay-log, and --relay-log-index options. Now the server reports and error and exits. (Bug#34739)
  • If a comparison involved a constant value that required type conversion, the converted value might not be cached, resulting in repeated conversion and poorer performance. (Bug#34384)
  • Using the SHOW ENGINE INNODB STATUS statement when using partitions in InnoDB tables caused Invalid (old?) table or database name errors to be logged. (Bug#32430)
  • On some Windows systems, InnoDB could report Operating system error number 995 in a file operation due to transient driver or hardware problems. InnoDB now retries the operation and adds Retry attempt is made to the error message. (Bug#3139)

New in MySQL 5.1.41 (Nov 23, 2009)

  • Functionality added or changed:
  • The InnoDB buffer pool is divided into two sublists: A new sublist containing blocks that are heavily used by queries, and an old sublist containing less-used blocks and from which candidates for eviction are taken. In the default operation of the buffer pool, a block when read in is loaded at the midpoint and then moved immediately to the head of the new sublist as soon as an access occurs. In the case of a table scan (such as performed for a mysqldump operation), each block read by the scan ends up moving to the head of the new sublist because multiple rows are accessed from each block. This occurs even for a one-time scan, where the blocks are not otherwise used by other queries. Blocks may also be loaded by the read-ahead background thread and then moved to the head of the new sublist by a single access. These effects can be disadvantageous because they push blocks that are in heavy use by other queries out of the new sublist to the old sublist where they become subject to eviction.
  • For InnoDB Plugin, two new status variables have been added to SHOW STATUS output. Innodb_buffer_pool_read_ahead and Innodb_buffer_pool_read_ahead_evicted indicate the number of pages read in by the InnoDB read-ahead background thread, and the number of such pages evicted without ever being accessed, respectively. Also, the status variables Innodb_buffer_pool_read_ahead_rnd and Innodb_buffer_pool_read_ahead_seq status variables have been removed. The built-in version of InnoDB is not affected by these changes. (Bug#42885)
  • InnoDB Plugin has been upgraded to version 1.0.5. This version is considered of Release Candidate (RC) quality.
  • The server now supports a Debug Sync facility for thread synchronization during testing and debugging. To compile in this facility, configure MySQL with the --enable-debug-sync option. The debug_sync system variable provides the user interface Debug Sync. mysqld and mysql-test-run.pl support a --debug-sync-timeout option to enable the facility and set the default synchronization point timeout.
  • Bugs fixed:
  • Important Change: Security Fix: Additional corrections were made for the symlink-related privilege problem originally addressed in MySQL 5.1.24. The original fix did not correctly handle the data directory path name if it contained symlinked directories in its path, and the check was made only at table-creation time, not at table-opening time later. (Bug#32167, CVE-2008-2079)
  • Security Fix: MySQL clients linked against OpenSSL did not check server certificates presented by a server linked against yaSSL. (Bug#47320)
  • Partitioning: An ALTER TABLE ... ADD PARTITION statement that caused open_files_limit to be exceeded led to a crash of the MySQL server. (Bug#46922)
  • Partitioning: The cardinality of indexes on partitioned tables was calculated using the first partition in the table, which could result in suboptimal query execution plans being chosen. Now the partition having the most records is used instead, which should result in better use of indexes and thus improved performance of queries against partitioned tables in many if not most cases. (Bug#44059)
  • SUM() artificially increased the precision of a DECIMAL argument, which was truncated when a temporary table was created to hold the results. (Bug#48370)
  • If an outer query was invalid, a subquery might not even be set up. EXPLAIN EXTENDED did not expect this and caused a crash by trying to dereference improperly set up information. (Bug#48295)
  • A query containing a view using temporary tables and multiple tables in the FROM clause and PROCEDURE ANALYSE() caused a server crash. As a result of this bug fix, PROCEDURE ANALYSE() is legal only in a top-level SELECT. (Bug#48293)
  • Error handling was missing for SELECT statements containing subqueries in the WHERE clause and that assigned a SELECT result to a user variable. The server could crash as a result. (Bug#48291)
  • An assertion could fail if the optimizer used a SPATIAL index. (Bug#48258, Bug#47019)
  • Memory-allocation failures were handled incorrectly in the InnoDB os_mem_alloc_large() function. (Bug#48237)
  • WHERE clauses with outer_value_list NOT IN subquery were handled incorrectly if the outer value list contained multiple items at least one of which could be NULL. (Bug#48177)
  • A combination of GROUP BY WITH ROLLUP, DISTINCT and the const join type in a query caused a server crash when the optimizer chose to employ a temporary table to resolve DISTINCT. (Bug#48131)
  • In some cases, using a null microsecond part in a WHERE condition (for example, WHERE date_time_field = condition matching only the greatest value in an indexed column, the result was empty if an index range scan was employed. (Bug#47925)
  • mysys/mf_keycache.c requires threading, but no test was made for thread support. (Bug#47923)
  • For debug builds, an assertion could fail during the next statement executed for a temporary table after a multiple-table UPDATE involving that table and modified an AUTO_INCREMENT column with a user-supplied value. (Bug#47919)
  • The mysys/mf_strip.c file, which defines the strip_sp has been removed from the MySQL source. The function was no longer in use within the main build, and the supplied function was causing symbol errors on Windows builds. (Bug#47857)
  • The Windows build for MySQL would compile the split.c and debug.c files unnecessarily, causing additional symbols to be included in mysqld. (Bug#47850)
  • When building storage engines on Windows it was not possible to specify additional libraries within the CMake file required for the build. An ${engine}_LIBS macro has been added to the files to support these additional storage-engine specific libraries. (Bug#47797)
  • When building a pluggable storage engine on Windows, the engine name could be based on the directory name where the engine was located, rather than the configured storage engine name. (Bug#47795)
  • During cleanup of a stored procedure's internal structures, the flag to ignore the errors for INSERT IGNORE or UPDATE IGNORE was not cleaned up, which could result in a server crash. (Bug#47788)
  • If the first argument to GeomFromWKB() function was a geometry value, the function just returned its value. However, it failed to preserve the argument's null_value flag, which caused an unexpected NULL value to be returned to the caller, resulting in a server crash. (Bug#47780)
  • InnoDB could crash when updating spatial values. (Bug#47777)
  • On WIndows, when an idle named pipe connection was forcibly closed with a KILL statement or because the server was being shut down, the thread that was closing the connection would hang infinitely. (Bug#47571, Bug#31621)
  • A function call could end without throwing an error or setting the return value. For example, this could happen when an error occurred while calculating the return value. This is fixed by setting the value to NULL when an error occurs during evaluation of an expression. (Bug#47412)
  • A simple SELECT with implicit grouping could return many rows rather than a single row if the query was ordered by the aggregated column in the select list. (Bug#47280)
  • An assertion could be raised for CREATE TABLE if there was a pending INSERT DELAYED or REPLACE DELAYED for the same table. (Bug#47274)
  • InnoDB raised errors in some cases in a manner not compatible with SIGNAL and RESIGNAL. (Bug#47233)
  • If an InnoDB table was created with the AUTO_INCREMENT table option to specify an initial auto-increment value, and an index was added in a separate operation later, the auto-increment value was lost (subsequent inserts began at 1 rather than the specified value). (Bug#47125)
  • Incorrect handling of predicates involving NULL by the range optimizer could lead to to an infinite loop during query execution. (Bug#47123)
  • Repair by sort or parallel repair of MyISAM tables could fail to fail over to repair with key cache. (Bug#47073)
  • InnoDB Plugin did not compile on some Solaris systems. (Bug#47058)
  • On WIndows, when a failed I/O operation occurred with return code of ERROR_WORKING_SET_QUOTA, InnoDB intentionally crashed the server. Now InnoDB sleeps for 100ms and retries the failed operation. (Bug#47055)
  • InnoDB now ignores negative values supplied by a user for an AUTO_INCREMENT column when calculating the next value to store in the data dictionary. Setting AUTO_INCREMENT columns to negative values is undefined behavior and this change should bring the behavior of InnoDB closer to what users expect. (Bug#46965)
  • When MySQL crashed (or a snapshot was taken that simulates a crash), it was possible that internal XA transactions (used to synchronize the binary log and InnoDB) could be left in a PREPARED state, whereas they should be rolled back. This occurred when the server_id value changed before the restart, because that value was used to construct XID values. Now the restriction is relaxed that the server_id value be consistent for XID values to be considered valid. The rollback phase should then be able to clean up all pending XA transactions. (Bug#46944)
  • InnoDB Plugin did not compile using gcc 4.1 on PPC systems. (Bug#46718)
  • If InnoDB Plugin reached its limit on the number of concurrent transactions (1023), it wrote a descriptive message to the error log but returned a misleading error message to the client, or an assertion failure occurred. (Bug#46672)
  • Concurrent INSERT INTO ... SELECT statements for an InnoDB table could cause an AUTO_INCREMENT assertion failure. (Bug#46650)
  • If a transaction was rolled back inside InnoDB due to a deadlock or lock wait timeout, and a statement in the transaction had an IGNORE clause, the server could crash at the end of the statement or on shutdown. (Bug#46539)
  • Trailing spaces were not ignored for user-defined collations that mapped spaces to a character other than 0x20. (Bug#46448)
  • The GPL and commercial license headers had different sizes, so that error log, backtrace, core dump, and cluster trace file line numbers could be off by one if they were not checked against the version of the source used for the build. (For example, checking a GPL build backtrace against commercial sources.) (Bug#46216)
  • InnoDB did not disallow creation of an index with the name GEN_CLUST_INDEX, which is used internally. (Bug#46000)
  • During the build of the Red Hat IA64 MySQL server RPM, the system library link order was incorrect. This made the resulting Red Hat IA64 RPM depend on "libc.so.6.1(GLIBC_PRIVATE)(64bit)", thus preventing installation of the package. (Bug#45706)
  • The caseinfo member of the CHARSET_INFO structure was not initialized for user-defined Unicode collations, leading to a server crash. (Bug#45645)
  • With InnoDB Plugin, renaming a table column and then creating an index on the renamed column caused a server crash to to the .frm file and the InnoDB data directory going out of sync. Now InnoDB Plugin 1.0.5 returns an error instead: ERROR 1034 (HY000): Incorrect key file for table 'tbl_name'; try to repair it. To work around the problem, create another table with the same structure and copy the original table to it. (Bug#44571)
  • An InnoDB error message incorrectly referred to the nonexistent innodb_max_files_open variable rather than to innodb_open_files. (Bug#44338)
  • For ALTER TABLE, renaming a DATETIME or TIMESTAMP column unnecessarily caused a table copy operation. (Bug#43508)
  • The weekday names for the Romanian lc_time_names locale 'ro_RO' were incorrect. Thanks to Andrei Boros for the patch to fix this bug. (Bug#43207)
  • XA START could cause an assertion failure or server crash when it is called after a unilateral rollback issued by the Resource Manager (both in a regular transaction and after an XA transaction). (Bug#43171)
  • The FORCE INDEX FOR ORDER BY index hint was ignored when join buffering was used. (Bug#43029)
  • Incorrect handling of range predicates combined with OR operators could yield incorrect results. (Bug#42846)
  • Failure to treat BIT values as unsigned could lead to unpredictable results. (Bug#42803)
  • For the embedded server on Windows, InnoDB crashed when innodb_file_per_table was enabled and a table name was in full path format. (Bug#42383)
  • Some queries with nested outer joins could lead to crashes or incorrect results because an internal data structure was handled improperly. (Bug#42116)
  • In a replication scenario with innodb_locks_unsafe_for_binlog enabled on the slave, where rows were changed only on the slave (not through replication), in some rare cases, many messages of the following form were written to the slave error log: InnoDB: Error: unlock row could not find a 4 mode lock on the record. (Bug#41756)
  • With a nonstandard InnoDB page size, some error messages became inaccurate. (Bug#41490)
  • Simultaneous ANALYZE TABLE operations for an InnoDB tables could be subject to a race condition. (Bug#38996)
  • Previously, InnoDB performed REPLACE INTO T SELECT ... FROM S WHERE ... by setting shared next-key locks on rows from S. Now InnoDB selects rows from from S with shared locks or as a consistent read, as for INSERT ... SELECT. This reduces lock contention between sessions. (Bug#37232)
  • When an InnoDB tablespace filled up, an error was logged to the client, but not to the error log. Also, the error message was misleading and did not indicate the real source of the problem. (Bug#31183)
  • In mysql, using Control-C to kill the current query resulted in a ERROR 1053 (08S01): Server shutdown in progress" message if the query was waiting for a lock. (Bug#28141)

New in MySQL 5.1.40 (Oct 22, 2009)

  • Bugs fixed:
  • Incompatible Change: In binary installations of MySQL, the supplied binary-configure script would start and configure MySQL, even when request help on the command with the --help command-line option. The --help, if provided, will no longer start and install the server. (Bug#30954)
  • Partitioning: When reorganizing partitions, not all affected subpartitions were removed prior to renaming. One way in which the issue was visible was that attempting to reorganize two partitions into a single partition having the same name as one of the original partitions could lead to a crash of the server. (Bug#47029)
  • Partitioning: An online or fast ALTER TABLE of a partitioned table could leave behind temporary files in the database directory. (Bug#46483)
  • Partitioning: When performing an INSERT ... SELECT into a partitioned table, read_buffer_size bytes of memory were allocated for every partition in the target table, resulting in consumption of large amounts of memory when the table had many partitions (more than 100). This fix changes the method used to estimate the buffer size required for each partition and limits the total buffer size to a maximum of approximately 10 times read_buffer_size. (Bug#45840)
  • Partitioning: Inserting negative values into an AUTO_INCREMENT column of a partitioned table could lead to apparently unrelated errors or a crash of the server. (Bug#45823)
  • Partitioning: Unnecessary calls were made in the server code for performing bulk inserts on partitions for which no inserts needed to be made. (Bug#35845)
  • Replication: Performing ALTER TABLE ... DISABLE KEYS on a slave table caused row-based replication to fail. (Bug#47312)
  • Replication: BEGIN statements were not included in the output of mysqlbinlog. (Bug#46998)
  • Replication: When using row-based replication, importing a dump made with mysqldump and replicating a row with an AUTO_INCREMENT column set to 0, with NO_AUTO_VALUE_ON_ZERO active on the master, the row was inserted successfully on the master; however any setting for NO_AUTO_VALUE_ON_ZERO was ignored on the slave. When the AUTO_INCREMENT column was incremented, this caused replication to fail on the slave due to a duplicate key error. In some cases it could also cause the slave to crash. (Bug#45999)
  • Replication: Concurrent transactions that inserted rows into a table with an AUTO_INCREMENT column could break statement-based or mixed-format replication error 1062 Duplicate entry '...' for key 'PRIMARY' on the slave. This was especially likely to happen when one of the transactions activated a trigger that inserted rows into the table with the AUTO_INCREMENT column, although other conditions could also cause the issue to manifest. (Bug#45677)
  • Replication: By default, all statements executed by the mysql_upgrade program on the master are written to the binary log, then replicated to the slave. In some cases, this can result in problems; for example, it attempted to alter log tables on replicated databases (this failed due to logging being enabled).
  • As part of this fix, a new mysql_upgrade option --write-binlog is added. Its inverse, --skip-write-binlog, can be used to disable binary logging while the upgrade is in progress. (Bug#43579)
  • Replication: On the master, if a binary log event is larger than max_allowed_packet, the error message ER_MASTER_FATAL_ERROR_READING_BINLOG is sent to a slave when it requests a dump from the master, thus leading the I/O thread to stop. On a slave, the I/O thread stops when receiving a packet larger than max_allowed_packet.
  • In both cases, however, there was no Last_IO_Error reported, which made it difficult to determine why the slave had stopped in such cases. Now, Last_IO_Error is reported when max_allowed_packet is exceeded, and provides the reason for which the slave I/O thread stopped. (Bug#42914)
  • API: The fix for Bug#24507 could lead in some cases to client application failures due to a race condition. Now the server waits for the “dummy” thread to return before exiting, thus making sure that only one thread can initialize the POSIX threads library. (Bug#42850)
  • The pthread_cond_wait() implementations for Windows could deadlock in some rare circumstances. (Bug#47768)
  • On Mac OS X or Windows, sending a SIGHUP signal to the server or an asynchronous flush (triggered by flush_time) caused the server to crash. (Bug#47525)
  • Debug builds could not be compiled with the Sun Studio compiler. (Bug#47474)
  • A multiple-table UPDATE involving a natural join and a mergeable view raised an assertion. (Bug#47150)
  • Solaris binary packages now are compiled with -g0 rather than -g. (Bug#47137)
  • EXPLAIN caused a server crash for certain valid queries. (Bug#47106)
  • The configure option --without-server did not work. (Bug#46980)
  • Failed multiple-table DELETE statements could raise an assertion. (Bug#46958)
  • When creating a new instance on Windows using mysqld-nt and the --install parameter, the value of the service would be set incorrectly, resulting in a failure to start the configured service. (Bug#46917)
  • The server crashed when re-using outer column references in correlated subqueries when the enclosing query used a temp table. (Bug#46791)
  • Assertion failure could result from repeated execution of a stored procedure containing an incorrect query with a subselect. (Bug#46629)
  • The server ignored the setting of sync_frm for CREATE TABLE ... LIKE. (Bug#46591)
  • An attempt to create a table with the same name as an existing view could cause a server crash. (Bug#46384)
  • A parser problem prevented properly stripping backquotes from an argument to a user-defined function (UDF). If the UDF was in an ORDER BY clause, its name would not be properly resolved against an alias with the same name in the select list. (Bug#46259)
  • Dropping an InnoDB table that used an unknown collation (created on a different server, for example) caused a server crash. (Bug#46256)
  • Certain SELECT statements containing DISTINCT, GROUP BY, and HAVING clauses could hang in an infinite loop. (Bug#46159)
  • InnoDB did not disallow creation of an index with the name GEN_CLUST_INDEX, which is used internally. (Bug#46000)
  • CREATE TEMPORARY TABLE failed for InnoDB tables on systems with case-insensitive file systems when lower_case_table_names = 2 and the pathname of the temporary file directory contained uppercase characters. (Bug#45638)
  • Appending values to an ENUM or SET definition is a metadata change for which ALTER TABLE need not rebuild the table, but it was being rebuilt anyway. (Bug#45567)
  • The socket system variable was unavailable on Windows. (Bug#45498)
  • When re-installing MySQL on Windows on a server that has a data directory from a previous MySQL installation, the installer would fail to identify the existence of the installation and the password configured for the root user. (Bug#45200)
  • Client flags were incorrectly initialized for the embedded server, causing several tests in the jp test suite to fail. (Bug#45159)
  • InnoDB did not always disallow creating tables containing columns with names that match the names of internal columns, such as DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR, and DB_MIX_ID. (Bug#44369)
  • SELECT ... WHERE ... IN (NULL, ...) was executed using a full table scan, even if the same query without the NULL used an efficient range scan. (Bug#44139)
  • InnoDB use of SELECT MAX(autoinc_column) could cause a crash when MySQL data dictionaries went out of sync. (Bug#44030)
  • LOAD DATA INFILE statements were written to the binary log in such a way that parsing problems could occur when re-executing the statement from the log. (Bug#43746)
  • Selecting from the process list in the embedded server caused a crash. (Bug#43733)
  • Attempts to enable large_pages with a shared memory segment larger than 4GB caused a server crash. (Bug#43606)
  • A test for stack growth failed on some platforms, leading to server crashes. (Bug#42213)
  • MySQL server used the wrong lock type (always TL_READ instead of TL_READ_NO_INSERT when appropriate) for tables used in subqueries of UPDATE statements. This led in some cases to replication failure because statements were written in the wrong order to the binary log. (Bug#42108)
  • The mysql-stress-test.pl test script was missing from the noinstall packages on Windows. (Bug#41546)
  • Privileges for SHOW CREATE VIEW were not being checked correctly. (Bug#35996)
  • Different invocations of CHECKSUM TABLE could return different results for a table containing columns with spatial data types. (Bug#35570)
  • myisamchk performed parameter value casting at startup that generated unnecessary warning messages. (Bug#33785)
  • When building MySQL on Windows from source, the WITH_BERKELEY_STORAGE_ENGINE option would fail to configure BDB support correctly. (Bug#27693)

New in MySQL 5.1.37 (Aug 3, 2009)

  • Functionality added or changed:
  • Important Change: Replication: RESET MASTER and RESET SLAVE now reset the values shown for Last_IO_Error, Last_IO_Errno, Last_SQL_Error, and Last_SQL_Errno in the output of SHOW SLAVE STATUS. (Bug#44270)
  • Bugs fixed:
  • Partitioning: Security Fix: Accessing a table having user-defined partitioning when the server SQL mode included ONLY_FULL_GROUP_BY caused the MySQL server to crash.
  • Important Change: Replication: When using STATEMENT or MIXED binary logging format, a statement that changes both non-transactional and transactional tables must be written to the binary log whenever there are changes to non-transactional tables. This means that the statement goes into the binary log even when the changes to the transactional tables fail. In particular, in the event of a failure such statement is annotated with the error number and wrapped inside a pair of BEGIN and ROLLBACK statements. On the slave, while applying the statement, it is expected that the same failure and the rollback prevent the transactional changes from persisting. However, statements that fail due to concurrency issues such as deadlocks and timeouts are logged in the same way, causing the slave to stop since the statements are applied sequentially by the SQL thread. To address this issue, we ignore concurrency failures on the slave. Specifically, the following failures are now ignored: ER_LOCK_WAIT_TIMEOUT, ER_LOCK_DEADLOCK, and ER_XA_RBDEADLOCK. (Bug#44581)
  • Partitioning: Truncating a partitioned MyISAM table did not reset the AUTO_INCREMENT value. (Bug#35111)
  • Replication: The SHOW SLAVE STATUS connection thread competed with the slave SQL thread for use of the error message buffer. As a result, the connection thread sometimes received incomplete messages. This issue was uncovered with valgrind when message strings were passed without NULL terminators, causing the error Conditional jump or move depends on uninitialised value(s).
  • Replication: Large transactions and statements could corrupt the binary log if the size of the cache (as set by max_binlog_cache_size) was not large enough to store the changes. Now, for transactions that do not fit into the cache, the statement is not logged, and the statement generates an error instead. For non-transactional changes that do not fit into the cache, the statement is also not logged — an incident event is logged after committing or rolling back any pending transaction, and the statement then raises an error. Note: If a failure occurs before the incident event is written the binary log, the slave does not stop, and the master does not report any errors.
  • Replication: The --database option for mysqlbinlog was ignored when using the row-based logging format. (Bug#42941)
  • Replication: Shutting down the server while executing FLUSH LOGS, CHANGE MASTER TO, or STOP SLAVE could sometimes cause mysqld to crash. (Bug#38240)
  • Replication: When reading a binary log that was in use by a master or that had not been properly closed (possibly due to a crash), the following message was printed: Warning: this binlog was not closed properly. Most probably mysqld crashed writing it. This message did not take into account the possibility that the file was merely in use by the master, which caused some users concern who were not aware that this could happen. To make this clear, the original message has been replaced with Warning: this binlog is either is use or was not closed properly. (Bug#34687)
  • The server crashed if evaluation of GROUP_CONCAT(... ORDER BY) required allocation of a sort buffer but allocation failed. (Bug#46080)
  • When creating tables using the IBMDB2I storage engine with the ibmdb2i_create_index_option option set to 1, creating an IBMDB2I table with a primary key should produce an additional index that uses EBCDIC hexadecimal sorting, but this index was not created. (Bug#45983)
  • With InnoDB tables, MySQL used a less-selective secondary index to avoid a filesort even if a prefix of the primary key was much more selective. The fix for this problem might cause other queries to run more slowly. (Bug#45828)
  • The server crashed for attempts to use REPLACE or INSERT ... ON DUPLICATE KEY UPDATE with a view defined using a join. (Bug#45806)
  • Some collations were causing IBMDB2I to report inaccurate key range estimations to the optimizer for LIKE clauses that select substrings. This can be seen by running EXPLAIN. This problem primarily affects multi-byte and unicode character sets. (Bug#45803)
  • Invalid memory reads and writes were generated when altering merge and base tables.
  • Inserting data into a table using the macce character set with the IBMDB2I storage engine would fail. (Bug#45793)
  • There was a race condition when changing innodb_commit_concurrency at runtime to the value DEFAULT. (Bug#45749)
  • Performing an empty XA transaction caused the server to crash for the next XA transaction. (Bug#45548)
  • For replication of a stored procedure that uses the gbk character set, the result on the master and slave differed. (Bug#45485)
  • SHOW CREATE TRIGGER requires the TRIGGER privilege but was not checking privileges. (Bug#45412)
  • An assertion failure could occur if InnoDB tried to unlock a record when the clustered index record was unknown. (Bug#45357)
  • Bug#19027 caused --enable-plugin_name (for example, --enable-innodb) not to work. (Bug#45336)
  • If autocommit was enabled, InnoDB did not roll back DELETE or UPDATE statements if the statement was killed. (Bug#45309)
  • Use of DECIMAL constants with more than 65 digits in CREATE TABLE ... SELECT statements led to spurious errors or assertion failures. (Bug#45262)
  • The mysql client could misinterpret some character sequences as commands under some circumstances. (Bug#45236)
  • Use of CONVERT() with an empty SET value could cause an assertion failure. (Bug#45168)
  • InnoDB recovery could hang due to redo logging of doublewrite buffer pages. (Bug#45097)
  • when reading binary data, the concatenation function for geometry data collections did not rigorously check for available data, leading to invalid reads and server crashes. (Bug#44684)
  • If an error occurred during the creation of a table (for example, the table already existed) having an AUTO_INCREMENT column and a BEFORE trigger that used the INSERT ... SELECT construct, an internal flag was not reset properly. This led to a crash the next time that the table was opened again. (Bug#44653) (Bug#44156)
  • configure.in contained references to literal instances of nm and libc, rather than to variables parameterized for the proper values on the current platform. (Bug#42721)
  • configure.in did not properly check for the pthread_setschedprio() function. (Bug#42599)
  • A workaround for a Sun Studio bug was instituted. (Bug#41710)
  • Valgrind warnings that occurred for SHOW TABLE STATUS with InnoDB tables were silenced. (Bug#38479)
  • In the mysql client, if the server connection was lost during repeated status commands, the client would fail to detect this and command output would be inconsistent. (Bug#37274)
  • When invoked to start multiple server instances, mysqld_multi sometimes would fail to start them all due to not changing location into the base directory for each instance. (Bug#36654)
  • Renaming a column that appeared in a foreign key definition did not update the foreign key definition with the new column name. (Bug#21704)

New in MySQL 5.1.36 (Jul 30, 2009)

  • Functionality added or changed:
  • Important Change: Replication: Previously, incident log events were represented as comments in the output from mysqlbinlog, making them effectively silent when playing back the binlog. (An incident log event represents an incident that could cause the contents of the database to change without that event being recorded in the binary log.) To use this functionality currently requires hand editing of the dump file and handling of each case on an individual basis by a database administrator before applying the output to a server. (Bug#44442)
  • mysql_upgrade now displays a message indicating the connection parameters it uses when invoking mysqlcheck. (Bug#44638)
  • The time zone tables for Windows available at http://dev.mysql.com/downloads/timezones.html have been updated. (Bug#39923)
  • The mysqltest program now has a move_file from_file to_file command for renaming files. This should be used in test cases rather than invoking an external command that might be platform specific. (Bug#39542)
  • Bugs fixed:
  • Performance: The InnoDB adaptive hash latch is released (if held) for serveral potentially long-running operations. This improves throughput for other queries if the current query is removing a temporary table, changing a temporary table from memory to disk, using CREATE TABLE ... SELECT, or performing a MyISAM repair on a table used within a transaction. (Bug#32149)
  • Security Fix: Four potential format string vulnerabilities were fixed (discovered by the Veracode code analysis). (Bug#44166)
  • Incompatible Change: The server can load plugins under the control of startup options. For example, many storage engines can be built in pluggable form and loaded when the server starts. In the following descriptions, plugin_name stands for a plugin name such as innodb.
  • Important Change: Replication: BEGIN, COMMIT, and ROLLBACK statements are no longer affected by --replicate-do-db or --replicate-ignore-db rules. (Bug#43263)
  • Partitioning: Queries using DISTINCT on multiple columns or GROUP BY on multiple columns did not return correct results with partitioned tables. (Bug#44821)
  • Replication: When using row-based logging, the length of an event for which the field metadata exceeded 255 bytes in size was incorrectly calculated. This could lead to corruption of the binary log, or cause the server to hang. (Bug#42749)
  • Replication: The warning Statement is not safe to log in statement format, issued in situations when it cannot be determined that a statement or other database event can be written reliably to the binary log using the statement-based format, has been changed to Statement may not be safe to log in statement format. (Bug#42415)
  • Replication: The Query_log_event used by replication to transfer a query to the slave has been refactored. Query_log_event also stores and sends the error code resulting from the execution since it, in some cases, is necessary to execute the statement on the slave as well, which should result in the same error code. The Query_log_event constructor previously worked out for itself the error code using a complex routine, the result of which was often set aside within the constructor itself. This was also involved with at least 2 known bugs relating to invalid errors, and taken as a clear sign that the constructor was not well-designed and needed to be re-written. (Bug#41948)
  • Replication: When stopping and restarting the slave while it was replicating temporary tables, the slave server could crash or raise an assertion failure. This was due to the fact that, although temporary tables were saved between slave thread restarts, the reference to the thread being used (table->in_use) was not being properly updated when restarting, continuing to reference the old thread instead of the new one. This issue affected statement-based replication only. (Bug#41725)
  • The combination of MIN() or MAX() in the select list with WHERE and GROUP BY clauses could lead to incorrect results. (Bug#45386)
  • Running a SELECT query over an IBMDB2I table using the cp1250 character set would produce an error
  • Use of ROUND() on a LONGTEXT or LONGBLOB column of a derived table could cause a server crash. (Bug#45152)
  • DROP USER could fail to drop all privileges for an account if the PAD_CHAR_TO_FULL_LENGTH SQL mode was enabled. (Bug#45100)
  • GROUP BY on a constant (single-row) InnoDB table joined to other tables caused a server crash. (Bug#44886)
  • ALTER TABLE on a view crashed the server. (Bug#44860)
  • When using partitioning with the IBMDB2I storage engine, the engine could report that a valid character set was not supported. (Bug#44856)
  • Running queries on tables with the IBMDB2I storage engine using the utf8 character would fail when using the 64-bit version of MySQL. (Bug#44811)
  • Index Merge followed by a filesort could result in a server crash if sort_buffer_size was not large enough for all sort keys. (Bug#44810)
  • UNCOMPRESSED_LENGTH() returned a garbage result when passed a string shorter than 5 bytes. Now UNCOMPRESSED_LENGTH() returns NULL and generates a warning. (Bug#44796)
  • Several Valgrind warnings were silenced. (Bug#44774, Bug#44792)
  • Selecting RAND(N) function where N is a column of a constant table (table with a single row) failed with a SIGFPE signal. (Bug#44768)
  • The PASSWORD() and OLD_PASSWORD() functions could read memory outside of an internal buffer when used with BLOB arguments. (Bug#44767)
  • Conversion of a string to a different character set could use the same buffer for input and output, leading to incorrect results or warnings. (Bug#44743, Bug#44766)
  • mysqld_safe could fail to find the logger program. (Bug#44736)
  • Code that optimized a read-only XA transaction failed to reset the XID once the transaction was no longer active. (Bug#44672)
  • A Valgrind warning related to transaction processing was silenced. (Bug#44664)
  • When creating tables using the IBMDB2I storage engine, the RCDFMT (record format) that would be applied to the corresponding files within the IBM i would be set according to the table name. During whole table operations, the name could get modified to a value inconsistent with the table name. In addition, the record format would be inconsistent compared to the file content. The IBMDB2I storage engine now adds an explicit RCDFMT clause to the CREATE TABLE statement passed down to the DB2 storage engine layer. (Bug#44610)
  • innochecksum could incorrectly determine the input file name from the arguments. (Bug#44484)
  • Incorrect time was reported at the end of mysqldump output. (Bug#44424)
  • Caching of GROUP BY expressions could lead to mismatches between compile-time and runtime calculations and cause a server crash. (Bug#44399)
  • Lettercase conversion in multibyte cp932 or sjis character sequences could produce incorrect results. (Bug#44352)
  • InnoDB was missing DB_ROLL_PTR information in Table Monitor COLUMNS output. (Bug#44320)
  • Assertion failure could occur for duplicate-key errors in INSERT INTO ... SELECT statements. (Bug#44306)
  • Trying to use an unsupported character set on an IBMDB2I table would produce DB2 error 2501 or 2511. The error has been updated to produce Error 2504 (Character set is unsupported). (Bug#44232)
  • On 64-bit Windows systems, myisamchk did not handle key_buffer_size values larger than 4GB. (Bug#43940)
  • For user-defined utf8 collations, attempts to store values too long for a column could cause a server crash. (Bug#43827)
  • Invalidation of query cache entries due to table modifications could cause threads to hang inside the query cache with state “freeing items”. (Bug#43758)
  • EXPLAIN EXTENDED could crash for UNION queries in which the last SELECT was not parenthesized and included an ORDER BY clause. (Bug#43612)
  • Multiple-table updates for InnoDB tables could produce unexpected results. (Bug#43580)
  • For DELETE statements with ORDER BY var, where var was a global system variable with a NULL value, the server could crash. (Bug#42778)
  • Builds linked against OpenSSL had a memory leak in association with use of X509 certificates. (Bug#42158)
  • There was a race condition when changing innodb_commit_concurrency at runtime from zero to nonzero or from nonzero to zero. Now this variable cannot be changed at runtime from zero to nonzero or vice versa. The value can still be changed from one nonzero value to another. (Bug#42101)
  • SELECT ... INTO @var could produce values different from SELECT ... without the INTO clause. (Bug#42009)
  • mysql_zap did not work on Mac OS X. (Bug#41883)
  • A crash occurred due to a race condition between the merge table and table_cache evictions.
  • Shared-memory connections did not work in Vista if mysqld was started from the command line. (Bug#41190)
  • For views created with a column list clause, column aliases were not substituted when selecting through the view using a HAVING clause. (Bug#40825)
  • A multiple-table DELETE involving a table self-join could cause a server crash. (Bug#39918)
  • Creating an InnoDB table with a comment containing a '#' character caused foreign key constraints to be omitted. (Bug#39793)
  • ALTER TABLE neglected to preserve ROW_FORMAT information from the original table, which could cause subsequent ALTER TABLE and OPTIMIZE TABLE statements to lose the row format for InnoDB tables. (Bug#39200)
  • The mysql option --ignore-spaces was nonfunctional. (Bug#39101)
  • If a query was such as to produce the error 1054 Unknown column '...' in 'field list', using EXPLAIN EXTENDED with the query could cause a server crash. (Bug#37362)
  • In the mysql client, using a default character set of binary caused internal commands such as DELIMITER to become case sensitive. (Bug#37268)
  • mysqldump --tab dumped triggers to stdout rather than to the .sql file for the corresponding table. (Bug#34861)
  • If the MYSQL_HISTFILE environment variable was set to /dev/null, the mysql client overwrote the /dev/null device file as a normal file. (Bug#34224)
  • mysqld_safe mishandled certain parameters if they contained spaces. (Bug#33685)
  • mysqladmin kill did not work for thread IDs larger than 32 bits. (Bug#32457)
  • Several client programs failed to interpret --skip-password as “send no password.” (Bug#28479)
  • Output from mysql --html did not encode the , or & characters. (Bug#27884)
  • mysql_convert_table_format did not prevent converting tables to MEMORY or BLACKHOLE tables, which could result in data loss. (Bug#27149)

New in MySQL 5.1.34 (Apr 23, 2009)

  • Replication: Important Note: Binary logging with --binlog_format=ROW failed when a change to be logged included more than 251 columns. This issue was not known to occur with mixed-format or statement-based logging. (Bug#42977)
  • Replication: Assigning an invalid directory for the --slave-load-tmpdir caused the replication slave to crash. (Bug#42861)
  • Replication: The mysql.procs_priv system table was not replicated. (Bug#42217)
  • Replication: An INSERT DELAYED into a TIMESTAMP column issued concurrently with a an insert on the same column not using DELAYED, but applied after the other insert, was logged using the same timestamp as generated by the other (non-DELAYED) insert. (Bug#41719)
  • Replication: The MIXED binary logging format did not switch to row-based mode for statements containing the LOAD_FILE() function. (Bug#39701)
  • Replication: When the server SQL mode included IGNORE_SPACE, statement-based replication of LOAD DATA INFILE ... INTO tbl_name failed because the statement was read incorrectly from the binary log; a trailing space was omitted, causing the statement to fail with a syntax error when run on the slave. (Bug#22504)
  • An attempt by a user who did not have the SUPER privilege to kill a system thread could cause a server crash. (Bug#43748)
  • On Windows, incorrectly specified link dependencies in CMakeLists.txt resulted in link errors for mysql_embedded, mysqltest_embedded, and mysql_client_test_embedded. (Bug#43715)
  • mysql crashed if a request for the current database name returned an empty result, such as after the client has executed a preceding SET sql_select_limit=0 statement. (Bug#43254)
  • If the value of the version_comment system variable was too long, the mysql client displayed a truncated startup message. (Bug#43153)
  • Queries of the following form returned an empty result:
  • SELECT ... WHERE ... (col=col AND col=col) OR ... (false expression)
  • The strings/CHARSET_INFO.txt file was not included in source distributions. (Bug#42937)
  • A dangling pointer in mysys/my_error.c could lead to client crashes. (Bug#42675)
  • Passing an unknown time zone specification to CONVERT_TZ() resulted in a memory leak. (Bug#42502)
  • With more than two arguments, LEAST(), GREATEST(), and CASE could unnecessarily return Illegal mix of collations errors. (Bug#41627)
  • The mysql client could misinterpret its input if a line was longer than an internal buffer. (Bug#41486)
  • In the help command output displayed by mysql, the description for the c (clear) command was misleading. (Bug#41268)
  • The load_defaults(), my_search_option_files() and my_print_default_files() functions in the C client library were subject to a race condition in multi-threaded operation. (Bug#40552)
  • If --basedir was specified, mysqld_safe did not use it when attempting to locate my_print_defaults. (Bug#39326)
  • When MySQL was configured with the --with-max-indexes=128 option, mysqld crashed. (Bug#36751)
  • Setting the join_buffer_size variable to its minimum value produced spurious warnings. (Bug#36446)
  • The use of NAME_CONST() can result in a problem for CREATE TABLE ... SELECT statements when the source column expressions refer to local variables. Converting these references to NAME_CONST() expressions can result in column names that are different on the master and slave servers, or names that are too long to be legal column identifiers. A workaround is to supply aliases for columns that refer to local variables. Now a warning is issued in such cases that indicate possible problems. (Bug#35383)
  • An attempt to check or repair an ARCHIVE table that had been subjected to a server crash returned a 144 internal error. The data appeared to be irrecoverable. (Bug#32880)
  • The Time column for SHOW PROCESSLIST output and the value of the TIME column of the INFORMATION_SCHEMA.PROCESSLIST table now can have negative values. Previously, the column was unsigned and negative values were displayed incorrectly as large positive values. Negative values can occur if a thread alters the time into the future with SET TIMESTAMP = value or the thread is executing on a slave and processing events from a master that has its clock set ahead of the slave. (Bug#22047)
  • Restoring a mysqldump dump file containing FEDERATED tables failed because the file contained the data for the table. Now only the table definition is dumped (because the data is located elsewhere). (Bug#21360)

New in MySQL 6.0.10 Alpha (Mar 26, 2009)

  • Functionality added or changed:
  • Important Change: Replication: RESET MASTER and RESET SLAVE now reset the values shown for Last_IO_Error, Last_IO_Errno, Last_SQL_Error, and Last_SQL_Errno in the output of SHOW SLAVE STATUS. (Bug#34654)
  • Replication: A new global server variable sync_relay_log is introduced for use on replication slaves. Setting this variable to a nonzero integer value N causes the slave to synchonize the relay log to disk after every N events. Setting its value to 0 allows the operation system to handle syncronization of the file. The action of this variable, when enabled, is analogous to how the sync_binlog variable works with regard to binary logs on a replication master.
  • This variable can also be set in my.cnf, or by using the server option --sync-relay-log.
  • For more information, see Section 16.1.3.3, “Replication Slave Options and Variables”. (Bug#31665, Bug#35542, Bug#40337)
  • Replication: In circular replication, it was sometimes possible for an event to propagate such that it would be reapplied on all servers. This could occur when the originating server was removed from the replication circle and so could no longer act as the terminator of its own events, as normally happens in circular replication.
  • In order to prevent this from occurring, a new IGNORE_SERVER_IDS option is introduced for the CHANGE MASTER TO statement. This option takes a list of replication server IDs; events having a server ID which appears in this list are ignored and not applied. For more information, see Section 12.6.2.1, “CHANGE MASTER TO Syntax”. (Bug#25998)
  • See also Bug#27808.
  • The libedit library was upgraded to version 2.11. (Bug#42433)
  • A new status variable, Queries, indicates the number of statements executed by the server. This includes statements executed within stored programs, unlike the Questions variable which includes only statements sent to the server by clients. (Bug#41131)
  • Columns that provide a catalog value in INFORMATION_SCHEMA tables (for example, TABLES.TABLE_CATALOG) now have a value of def rather than NULL. (Bug#35427)
  • mysql-test-run.pl now supports --client-bindir and --client-libdir options for specifying the directory where client binaries and libraries are located. (Bug#34995)
  • Bugs fixed:
  • Security Fix: Using an XPath expression employing a scalar expression as a FilterExpr with ExtractValue() or UpdateXML() caused the server to crash. Such expressions now cause an error instead. (Bug#42495)
  • Incompatible Change: The fix for Bug#33699 introduced a change to the UPDATE statement such that assigning NULL to a NOT NULL column caused an error even when strict SQL mode was not enabled. The original behavior before was that such assignments caused an error only in strict SQL mode, and otherwise set the column to the the implicit default value for the column data type and generated a warning. (For information about implicit default values, see Section 10.1.4, “Data Type Default Values”.)
  • The change caused compatibility problems for applications that relied on the original behavior. It also caused replication problems between servers that had the original behavior and those that did not, for applications that assigned NULL to NOT NULL columns in UPDATE statements without strict SQL mode enabled. This change has been reverted so that UPDATE again had the original behavior. Problems can still occur if you replicate between servers that have the modified UPDATE behavior and those that do not. (Bug#39265)
  • Important Change: Replication: If a trigger was defined on an InnoDB table and this trigger updated a non-transactional table, changes performed on the InnoDB table were replicated and were visible on the slave before they were committed on the master, and were not rolled back on the slave after a successful rollback of those changes on the master.
  • As a result of the fix for this issue, the semantics of mixing non-transactional and transactional tables in a transaction in the first statement of a transaction have changed. Previously, if the first statement in a transaction contained non-transactional changes, the statement was written directly to the binary log. Now, any statement appearing after a BEGIN (or immediately following a COMMIT if AUTOCOMMIT = 0) is always considered part of the transaction and cached. This means that non-transactional changes do not propagate to the slave until the transaction is committed and thus written to the binary log.
  • See Section 16.3.1.25, “Replication and Transactions”, for more information about this change in behavior. (Bug#40116)
  • Important Change: Replication: MyISAM transactions replicated to a transactional slave left the slave in an unstable condition. This was due to the fact that, when replicating from a non-transactional storage engine to a transactional engine with AUTOCOMMIT turned off, no BEGIN and COMMIT statements were written to the binary log; thus, on the slave, a never-ending transaction was started.
  • The fix for this issue includes enforcing AUTOCOMMIT mode on the slave by replicating all AUTOCOMMIT=1 statements from the master. (Bug#29288)
  • Partitioning: A comparison with an invalid DATE value in a query against a partitioned table could lead to a crash of the MySQL server.Note
  • Invalid DATE and DATETIME values referenced in the WHERE clause of a query on a partitioned table are treated as NULL. See Section 17.4, “Partition Pruning”, for more information.
  • (Bug#40972)
  • Partitioning: A query that timed out when run against a partitioned table failed silently, without providing any warnings or errors, rather than returning Lock wait timeout exceeded. (Bug#40515)
  • Partitioning: ALTER TABLE ... REORGANIZE PARTITION could crash the server when the number of partitions was not changed. (Bug#40389)
  • See also Bug#41945.
  • Partitioning: ALTER TABLE ... ADD PARTITION and ALTER TABLE ... DROP PARTITION could cause the MySQL server to crash. This was only known to occur on Windows platforms where MySQL had been built with the EXTRA_DEBUG option. (Bug#38784)
  • Partitioning: SHOW TABLE STATUS could show a nonzero value for the Mean record length of a partitioned InnoDB table, even if the table contained no rows. (Bug#36312)
  • Partitioning: Several error messages relating to partitioned tables were incorrect or missing. (Bug#36001)
  • Partitioning: Unnecessary calls were made in the server code for performing bulk inserts on partitions for which no inserts needed to be made. (Bug#35845)
  • See also Bug#35843.
  • Partitioning: For partitioned tables with more than ten partitions, a full table scan was used in some cases when only a subset of the partitions were needed. (Bug#33730)
  • Replication: On Windows, RESET MASTER failed in the event of a missing binlog file rather than issuing a warning and completing the rest of the statement. (Bug#42150, Bug#42288)
  • Replication: Per-table AUTO_INCREMENT option values were not replicated correctly for InnoDB tables. (Bug#41986)
  • Replication: Some log_event types did not skip the post-header when reading. (Bug#41961)
  • Replication: Attempting to read a binary log containing an Incident_log_event having an invalid incident number could cause the debug server to crash. (Bug#40482)
  • Replication: When CHANGE MASTER TO ... SET MASTER_HEARTBEAT_PERIOD ... failed, no error code was set. (Bug#40459)
  • Replication: When using row-based replication, an update of a primary key that was rolled back on the master due to a duplicate key error was not rolled back on the slave. (Bug#40221)
  • Replication: When rotating relay log files, the slave deletes relay log files and then edits the relay log index file. Formerly, if the slave shut down unexpectedly between these two events, the relay log index file could then reference relay logs that no longer existed. Depending on the circumstances, this could when restarting the slave cause either a race condition or the failure of replication. (Bug#38826, Bug#39325)
  • Replication: START SLAVE UNTIL did not work correctly with --replicate-same-server-id enabled; when started with this option, the slave did not perform events recorded in the relay log and that originated from a different master.
  • Log rotation events are automatically generated and written when rotating the binary log or relay log. Such events for relay logs are usually ignored by the slave SQL thread because they have the same server ID as that of the slave. However, when --replicate-same-server-id was enabled, the rotation event for the relay log was treated as if it originated on the master, because the log's name and position were incorrectly updated. This caused the MASTER_POS_WAIT() function always to return NULL and thus to fail. (Bug#38734, Bug#38934)
  • Replication: A slave compiled using --with-libevent and run with --thread-handling=pool-of-threads could sometimes crash. (Bug#36929)
  • Replication: TRUNCATE statements failed to replicate when statement-based binary logging mode was not available. The issue was observed when using InnoDB with the transaction isolation level set to READ UNCOMMITTED (thus forcing InnoDB not to allow statement-based logging). However, the same behavior could be reproduced using any transactional storage engine supporting only row-based logging, regardless of the isolation level. This was due to two separate problems: 1. An error was printed by InnoDB for TRUNCATE when using statement-based logging mode where the transaction isolation level was set to READ COMMITTED or READ UNCOMMITTED, because InnoDB permits statement-based replication for DML statements. However, TRUNCATE is not transactional; since it is the equivalent of DROP TABLE followed by CREATE TABLE, it is actually DDL, and should therefore be allowed to be replicated as a statement. 2.TRUNCATE was not logged in mixed mode because of the error just described; however, this error was not reported to the client.
  • As a result of this fix, TRUNCATE is now treated as DDL for purposes of binary logging and replication; that is, it is always logged as a statement and so no longer causes an error when replicated using a transactional storage engine such as InnoDB. (Bug#36763)
  • See also Bug#42643.
  • Replication: mysqlbinlog replay of CREATE TEMPORARY TABLE ... LIKE statements and of TRUNCATE statements used on temporary tables failed with Error 1146 (Table ... doesn't exist). (Bug#35583)
  • Replication: mysqlbinlog sometimes failed when trying to create temporary files; this was because it ignored the specified temp file directory and tried to use the system /tmp directory instead. (Bug#35546)
  • See also Bug#35543.
  • Replication: In statement mode, mysqlbinlog failed to issue a SET @@autommit statement when the autocommit mode was changed. (Bug#34541)
  • Replication: LOAD DATA INFILE statements did not replicate correctly from a master running MySQL 4.1 to a slave running MySQL 5.1 or later. (Bug#31240)
  • Replication: The statements DROP PROCEDURE IF EXISTS and DROP FUNCTION IF EXISTS were not written to the binary log if the procedure or function to be dropped did not exist. (Bug#13684)
  • See also Bug#25705.
  • The optimizer could underestimate the memory required for column descriptors during join processing and cause memory corruption or a server crash. (Bug#42744)
  • A '%' character in SQL statements could cause the server to crash. (Bug#42634)
  • For the batched-key access method, numbers of records were being specified rather than numbers of ranges. (Bug#42593)
  • Certain queries could result in Valgrind warnings in the optimizer. (Bug#42534)
  • An optimization introduced for Bug#37553 required an explicit cast to be added for some uses of TIMEDIFF() because automatic casting could produce incorrect results. (It was necessary to use TIME(TIMEDIFF(...)).) (Bug#42525)
  • On the IBM i5 platform, the MySQL configuration process caused the system version of pthread_setschedprio() to be used. This function returns SIGILL on i5 because it is not supported, causing the server to crash. Now the my_pthread_setprio() function in the mysys library is used instead. (Bug#42524)
  • The SSL certficates included with MySQL distributions were regenerated because the previous ones had expired. (Bug#42366)
  • User variables within triggers could cause a crash if the mysql_change_user() C API function was invoked. (Bug#42188)
  • Parsing of the optional microsecond component of DATETIME values did not fail gracefully when that component width was larger than the allowed six places. (Bug#42146)
  • Dependent subqueries such as the following caused a memory leak proportional to the number of outer rows:
  • SELECT COUNT(*) FROM t1, t2 WHERE t2.b IN (SELECT DISTINCT t2.b FROM t2 WHERE t2.b = t1.a);
  • (Bug#42037)
  • Queries executed using a join buffer could return incorrect results. (Bug#42020)
  • Some queries using NAME_CONST(.. COLLATE ...) led to a server crash due to a failed type cast. (Bug#42014)
  • The MAP file was not included in Windows distribution, but is needed by the InnoDB plugin. MAP file generation has again been enabled. (Bug#42001)
  • The optimizer underestimated the number of field descriptors for the join buffer in some cases. (Bug#41919)
  • Internal misconfiguration of the hash table used for the join buffer could cause a server crash. (Bug#41894)
  • String reallocation could cause memory overruns. (Bug#41868)
  • Queries executed using semi-join materialization could cause a crash if the outer query has a HAVING clause. (Bug#41842)
  • A Valgrind warning in open_tables() was corrected. (Bug#41759)
  • A Valgrind warning in setup_wild() was corrected. (Bug#41729)
  • For Falcon tables, concurrent execution of a statement which in the general case should acquire a TL_READ_NO_INSERT lock on the table (for example multiple-table update, DML with subqueries, or statements involving new foreign key checks) and a statement that modifies the table might lead to warnings in the error log or even to deadlocks. (Bug#41688, Bug#42069)
  • Setting innodb_locks_unsafe_for_binlog should be equivalent to setting the transaction isolation level to READ COMMITTED. However, if both of those things were done, non-matching semi-consistently read rows were not unlocked when they should have been. (Bug#41671)
  • resolve_stack_dump was unable to resolve the stack trace format produced by mysqld in MySQL 5.1 and up (see Section 21.5.1.5, “Using a Stack Trace”). (Bug#41612)
  • In example option files provided in MySQL distributions, the thread_stack value was increased from 64K to 128K. (Bug#41577)
  • REPAIR TABLE crashed for compressed MyISAM tables. (Bug#41574)
  • The optimizer could ignore an error and rollback request during a filesort, causing an assertion failure. (Bug#41543)
  • DATE_FORMAT() could cause a server crash for year-zero dates. (Bug#41470)
  • BACKUP DATABASE and RESTORE did not reset the message list displayed by SHOW WARNINGS. (Bug#41468, Bug#41359)
  • SET PASSWORD caused a server crash if the account name was given as CURRENT_USER(). (Bug#41456)
  • When substituting system constant functions with a constant result, the server was not expecting NULL function return values and could crash. (Bug#41437)
  • The mysql-test/include/UnicodeData.txt file, if present, was not included in MySQL distributions. (Bug#41436)
  • For a TIMESTAMP NOT NULL DEFAULT ... column, storing NULL as the return value from some functions caused a “cannot be NULL” error. NULL returns now correctly cause the column default value to be stored. (Bug#41370)
  • Queries such as SELECT ... CASE AVG(...) WHEN ... that used aggregate functions in a CASE expression crashed the server. (Bug#41363)
  • INSERT INTO .. SELECT ... FROM and CREATE TABLE ... SELECT ... FROM a TEMPORARY table could inadvertently change the locking type of the temporary table from a write lock to a read lock, causing statement failure. (Bug#41348)
  • On Windows, the server could not be started with the --thread-handling=pool-of-threads option. (Bug#41218)
  • For a query that is executed using a range access method over an index that matches the ordering and there is an ORDER BY clause, EXPLAIN showed Using MRR even though Multi-Range Read access was not used. (Bug#41136)
  • The server cannot execute INSERT DELAYED statements when statement-based binary logging is enabled, but the error message displayed only the table name, not the entire statement. (Bug#41121)
  • FULLTEXT indexes did not work for Unicode columns that used a custom UCA collation. (Bug#41084)
  • The INFORMATION_SCHEMA.SCHEMA_PRIVILEGES table was limited to 7680 rows. (Bug#41079)
  • In debug builds, obsolete debug code could be used to crash the server. (Bug#41041)
  • When a storage engine plugin failed to initialize before allocating a slot number, it would acidentally unplug the engine in slot 0. (Bug#41013)
  • Some queries that used a “range checked for each record” scan could return incorrect results. (Bug#40974)
  • For BACKUP DATABASE, errors from the commit blocker were not logged. (Bug#40970)
  • Certain SELECT queries could fail with a Duplicate entry error. (Bug#40953)
  • For debug servers, OPTIMIZE TABLE on a compressed table caused a server crash. (Bug#40949)
  • The Windows installer displayed incorrect product names in some images. (Bug#40845)
  • The CSV engine did not parse 'X' characters when they occurred in unquoted fields. (Bug#40814)
  • Comparison of empty strings for the latin2_czech_cs character set could hang. (Bug#40805)
  • IF(..., CAST(longtext_val AS UNSIGNED), signed_val) as an argument to an aggregate function could cause an assertion failure. (Bug#40761)
  • Changing innodb_thread_concurrency at runtime could cause errors. (Bug#40760)
  • On Windows, starting the server with an invalid value for innodb_flush_method caused a crash. (Bug#40757)
  • When archive tables were joined on their primary keys, a query returned no result if the optimizer chose to use this index. (Bug#40677)
  • MySQL 5.1 crashed with index merge algorithm and merge tables.
  • A query in the MyISAM merge table caused a crash if the index merge algorithm was being used. (Bug#40675)
  • SELECT statements could be blocked by INSERT DELAYED statements that were waiting for a lock, even with low_priority_updates enabled. (Bug#40536)
  • If a RESTORE operation was in progress on a master server, slaves were not prohibited from starting replication of the master. (Bug#40434)
  • TRUNCATE TABLE for an InnoDB table did not flush cached queries for the table. (Bug#40386)
  • For InnoDB tables that used ROW_FORMAT=REDUNDANT, storage size of NULL columns could be determined incorrectly. (Bug#40369)
  • “Backup completed” was logged for non-successful BACKUP DATABASE operations. “Restore completed” was logged for non-successful RESTORE operations. (Bug#40305)
  • The query cache stored only partial query results if a statement failed while the results were being sent to the client. This could cause other clients to hang when trying to read the cached result. Now if a statement fails, the result is not cached. (Bug#40264)
  • The ':' character was incorrectly disallowed in table names. (Bug#40104)
  • For an InnoDB table, DROP TABLE or ALTER TABLE ... DISCARD TABLESPACE could take a long time or cause a server crash. (Bug#39939)
  • Threads were set to the Table lock state in such a way that use of this state by other threads to check for a lock wait was subject to a race condition. (Bug#39897)
  • When a MEMORY table became full, the error generated was returned to the client but was not written to the error log. (Bug#39886)
  • For a server started with the --temp-pool option on Windows, temporary file creation could fail. This option now is ignored except on Linux systems, which was its original intended scope. (Bug#39750)
  • The implementation of the backup_wait_timeout system variable was machine dependent and did not work correctly on big-endian machines. (Bug#39749, Bug#40808)
  • ALTER TABLE on a table with FULLTEXT index that used a pluggable FULLTEXT parser could cause debug servers to crash. (Bug#39746)
  • The server crashed if an integer field in a CSV file did not have delimiting quotes. (Bug#39616)
  • InnoDB could hang trying to open an adaptive hash index. (Bug#39483)
  • Queries with that end with ... WHERE condition ORDER BY index_columns LIMIT N could produce rows that did not match the WHERE clause for certain kinds of conditions and table data distributions. (Bug#39447)
  • The internal buffering logic for BACKUP DATABASE had a problem that could lead to corrupt backup images. (Bug#39375)
  • A bad pointer dereference caused BACKUP DATABASE to crash. (Bug#39361)
  • INFORMATION_SCHEMA access optimizations did not work properly in some cases. (Bug#39270)
  • Cardinality for merge tables kept approaching zero in myrg_attach_children() because m_info->rec_per_key_part was initialized to 0 only when the function was first called. (Bug#39185)
  • The expression ROW(...) IN (SELECT ... FROM DUAL) always returned TRUE. (Bug#39069)
  • SELECT * FROM INFORMATION_SCHEMA.ROUTINES could fail if there was no default database. (Bug#38916)
  • InnoDB could fail to generate AUTO_INCREMENT values after an UPDATE statement for the table. (Bug#38839)
  • The greedy optimizer could cause a server crash due to improper handling of nested outer joins. (Bug#38795)
  • Use of COUNT(DISTINCT) prevented NULL testing in the HAVING clause. (Bug#38637)
  • Building MySQL on FreeBSD would result in a failure during the gen_lex_hash phase of the build. (Bug#38364)
  • A mix of TRUNCATE TABLE with LOCK TABLES and UNLOCK TABLES for an InnoDB could cause a server crash. (Bug#38231)
  • The ExtractValue() function did not work correctly with XML documents containing a DOCTYPE declaration. (Bug#38227)
  • The innodb_stats_on_metadata system variable was not displayed by SHOW VARIABLES and was not settable at runtime. (Bug#38189)
  • Enabling the sync_frm system variable had no effect on the handling of .frm files for views. (Bug#38145)
  • Use of spatial data types in prepared statements could cause memory leaks or server crashes. (Bug#37956, Bug#37671)
  • An error in a debugging check caused crashes in debug servers. (Bug#37936)
  • An initialization procedure for materialized subquery execution was not called due to an early optimization of MIN()/MAX() queries. (Bug#37896)
  • The presence of a /* ... */ comment preceding a query could cause InnoDB to use unnecessary gap locks. (Bug#37885)
  • An assertion failure could occur when trying to execute a query with a subquery such that one of the subquery's tables was accessed using the DS-MRR access method. (Bug#37842)
  • For comparison of NULL to a subquery result inside IS NULL, the comparison could evaluate to NULL rather than to TRUE or FALSE. This occurred for expressions such as:
  • SELECT ... WHERE NULL IN (SELECT ...) IS NULL
  • (Bug#37822)
  • Setting myisam_repair_threads greater than 1 caused a server crash for table repair or alteration operations for MyISAM tables with multiple FULLTEXT indexes. (Bug#37756)
  • Primary keys were treated as part of a covering index even if only a prefix of a key column was used. (Bug#37742)
  • The MONTHNAME() and DAYNAME() functions returned a binary string, so that using LOWER() or UPPER() had no effect. Now MONTHNAME() and DAYNAME() return a value in character_set_connection character set. (Bug#37575)
  • The internal-use-only filename character set was visible in the output of some SHOW statements and in the contents of the COLLATION_CHARACTER_SET_APPLICABILITY table of INFORMATION_SCHEMA. (Bug#37554)
  • Certain boolean-mode FULLTEXT searches that used the truncation operator did not return matching records and calculated relevance incorrectly. (Bug#37245)
  • For an InnoDB table with a FOREIGN KEY constraint, TRUNCATE TABLE may be performed using row by row deletion. If an error occurred during this deletion, the table would be only partially emptied. Now if an error occurs, the truncation operation is rolled back and the table is left unchanged. (Bug#37016)
  • Subquery materialization produced incorrect results when comparing different types. (Bug#36752)
  • An argument to the MATCH() function that was an alias for an expression other than a column name caused a server crash. (Bug#36737)
  • Previously, statements inside a stored program did not clear the warning list. For example, warnings or errors generated by statements within a trigger or stored function would be accumulated and added to the message list for the statement that activated the trigger or invoked the function, “polluting” the output of SHOW WARNINGS or SHOW ERRORS for the outer statement. Normally, messages for a statement that can generate messages replace messages from the previous such statement. The effect was that a statement could have a different effect on the message list depending on whether it executed inside or outside of a stored program.
  • Now within a stored program, successive statements that can generate messages update the message list and replace messages from the previous such statement. Only messages from the last of these statements is copied to the message list for the outer statement. (Bug#36649)
  • myisampack --join did not create the destination table .frm file. (Bug#36573)
  • When parsing or formatting interval values of DAY_MICROSECOND type, fractional seconds were not handled correctly when more-significant fields were implied or omitted. (Bug#36466)
  • comp_err sometimes crashed due to improper mutex use. (Bug#36428)
  • The mysql client sometimes improperly interpreted string escape sequences in non-string contexts. (Bug#36391)
  • The query cache stored packets containing the server status of the time when the cached statement was run. This might lead to an incorrect transaction status on the client side if a statement was cached during a transaction and later served outside a transaction context (or vice versa). (Bug#36326)
  • Some error numbers were incorrect. (Bug#36062)
  • For upgrades to MySQL 5.1 or higher, mysql_upgrade did not re-encode database or table names that contained non-alphanumeric characters. (They would still appear after the upgrade with the #mysql50# prefix described in Section 8.2.3, “Mapping of Identifiers to File Names”.) To correct this problem, it was necessary to run mysqlcheck --all-databases --check-upgrade --fix-db-names --fix-table-names manually. mysql_upgrade now runs that command automatically after performing the initial upgrade. (Bug#35934)
  • SHOW CREATE TABLE did not display a printable value for the default value of BIT columns. (Bug#35796)
  • The max_length metadata value was calculated incorrectly for the FORMAT() function, which could cause incorrect result set metadata to be sent to clients. (Bug#35558)
  • InnoDB could fail to generate AUTO_INCREMENT values if rows previously had been inserted containing literal values for the AUTO_INCREMENT column. (Bug#35498, Bug#36411, Bug#39830)
  • Result set metadata for columns retrieved from INFORMATION_SCHEMA tables did not have the db or org_table members of the MYSQL_FIELD structure set. (Bug#35428)
  • If the system time was adjusted backward during query execution, the apparent execution time could be negative. But in some cases these queries would be written to the slow query log, with the negative execution time written as a large unsigned number. Now statements with apparent negative execution time are not written to the slow query log. (Bug#35396)
  • The CREATE_OPTIONS column for INFORMATION_SCHEMA.TABLES did not display the KEY_BLOCK_SIZE option. (Bug#35275)
  • On Windows, the _PC macro in my_global.h was causing problems for modern compilers. It has been removed because it is no longer used. (Bug#34309)
  • For DROP FUNCTION with names that were qualified with a database name, the database name was handled in case-sensitive fashion even with lower_case_table_names set to 1. (Bug#33813)
  • The mysql client incorrectly parsed statements containing the word “delimiter” in mid-statement. (Bug#33812)
  • See also Bug#38158.
  • Three conditions were discovered that could cause an upgrade from MySQL 5.0 to 5.1 to fail: 1) Triggers associated with a table that had a #mysql50# prefix in the name could cause assertion failure. 2) ALTER DATABASE ... UPGRADE DATA DIRECTORY NAME failed for databases that had a #mysql50# prefix if there were triggers in the database. 3) mysqlcheck --fix-table-name didn't use UTF8 as the default character set, resulting in parsing errors for tables with non-latin symbols in their names and trigger definitions. (Bug#33094, Bug#41385)
  • libmysqld was not built with all character sets. (Bug#32831)
  • Queries with dependent subqueries were slow. (Bug#32665)
  • For mysqld_multi, using the --mysqld=mysqld_safe option caused the --defaults-file and --defaults-extra-file options to behave the same way. (Bug#32136)
  • Attempts to open a valid MERGE table sometimes resulted in a ER_WRONG_MRG_TABLE error. This happened after failure to open an invalid MERGE table had also generated an ER_WRONG_MRG_TABLE error. (Bug#32047)
  • Queries executed using join buffering of BIT columns could produce incorrect results. (Bug#31399)
  • ALTER TABLE CONVERT TO CHARACTER SET did not convert TINYTEXT or MEDIUMTEXT columns to a longer text type if necessary when converting the column to a different character set. (Bug#31291)
  • Server variables could not be set to their current values on Linux platforms. (These fixes are in addition to those made in MySQL 6.0.5 and 6.0.9.) (Bug#31177)

New in MySQL 5.1.32 (Mar 6, 2009)

  • Important Change: Replication: RESET MASTER and RESET SLAVE now reset the values shown for Last_IO_Error, Last_IO_Errno, Last_SQL_Error, and Last_SQL_Errno in the output of SHOW SLAVE STATUS.
  • The libedit library was upgraded to version 2.11.
  • Security Fix: Using an XPath expression employing a scalar expression as a FilterExpr with ExtractValue() or UpdateXML() caused the server to crash. Such expressions now cause an error instead.
  • Many more enhancements.

New in MySQL 5.1.31 (Feb 5, 2009)

  • Functionality added or changed:
  • A new status variable, Queries, indicates the number of statements executed by the server. This includes statements executed within stored programs, unlike the Questions variable which includes only statements sent to the server by clients. (Bug#41131)
  • Performance of SELECT * retrievals from INFORMATION_SCHEMA.COLUMNS was improved slightly. (Bug#38918)
  • Previously, index hints did not work for FULLTEXT searches. Now they work as follows:
  • For natural language mode searches, index hints are silently ignored. For example, IGNORE INDEX(i) is ignored with no warning and the index is still used.
  • For boolean mode searches, index hints with FOR ORDER BY or FOR GROUP BY are silently ignored. Index hints with FOR JOIN or no FOR modifier are honored. In contrast to how hints apply for non-FULLTEXT searches, the hint is used for all phases of query execution (finding rows and retrieval, grouping, and ordering). This is true even if the hint is given for a non-FULLTEXT index. (Bug#38842)
  • Bugs fixed:
  • Important Change: Replication: If a trigger was defined on an InnoDB table and this trigger updated a non-transactional table, changes performed on the InnoDB table were replicated and were visible on the slave before they were committed on the master, and were not rolled back on the slave after a successful rollback of those changes on the master.
  • As a result of the fix for this issue, the semantics of mixing non-transactional and transactional tables in a transaction in the first statement of a transaction have changed. Previously, if the first statement in a transaction contained non-transactional changes, the statement was written directly to the binary log. Now, any statement appearing after a BEGIN (or immediately following a COMMIT if AUTOCOMMIT = 0) is always considered part of the transaction and cached. This means that non-transactional changes do not propagate to the slave until the transaction is committed and thus written to the binary log.
  • See Section 16.3.1.23, “Replication and Transactions”, for more information about this change in behavior. (Bug#40116)
  • Partitioning: Replication: Changing the transaction isolation level while replicating partitioned InnoDB tables could cause statement-based logging to fail. (Bug#39084)
  • Partitioning: A comparison with an invalid DATE value in a query against a partitioned table could lead to a crash of the MySQL server.
  • Invalid DATE and DATETIME values referenced in the WHERE clause of a query on a partitioned table are treated as NULL. See Section 18.4, “Partition Pruning”, for more information.
  • Partitioning: This bug was introduced in MySQL 5.1.29. (Bug#40954)
  • This regression was introduced by Bug#30573, Bug#33257, Bug#33555.
  • Partitioning: With READ COMMITTED transaction isolation level, InnoDB uses a semi-consistent read that releases non-matching rows after MySQL has evaluated the WHERE clause. However, this was not happening if the table used partitions. (Bug#40595)
  • Partitioning: A query that timed out when run against a partitioned table failed silently, without providing any warnings or errors, rather than returning Lock wait timeout exceeded. (Bug#40515)
  • Partitioning: ALTER TABLE ... REORGANIZE PARTITION could crash the server when the number of partitions was not changed. (Bug#40389)
  • Partitioning: For a partitioned table having an AUTO_INCREMENT column: If the first statement following a start of the server or a FLUSH TABLES statement was an UPDATE statement, the AUTO_INCREMENT column was not incremented correctly. (Bug#40176)
  • Partitioning: The server attempted to execute the statements ALTER TABLE ... ANALYZE PARTITION, ALTER TABLE ... CHECK PARTITION, ALTER TABLE ... OPTIMIZE PARTITION, and ALTER TABLE ... REORGANIZE PARTITION on tables that were not partitioned. (Bug#39434)
  • Partitioning: The value of the CREATE_COLUMNS column in INFORMATION_SCHEMA.TABLES was not partitioned for partitioned tables. (Bug#38909)
  • Partitioning: When executing an ORDER BY query on a partitioned InnoDB table using an index that was not in the partition expression, the results were sorted on a per-partition basis rather than for the table as a whole. (Bug#37721)
  • Partitioning: Dropping or creating an index on a partitioned table managed by the InnoDB Plugin locked the table. (Bug#37453)
  • Partitioning: Partitioned table checking sometimes returned a warning with an error code of 0, making proper response to errors impossible. The fix also renders the error message subject to translation in non-English deployments. (Bug#36768)
  • Partitioning: SHOW TABLE STATUS could show a nonzero value for the Mean record length of a partitioned InnoDB table, even if the table contained no rows. (Bug#36312)
  • Partitioning: When SHOW CREATE TABLE was used on a partitioned table, all of the table's PARTITION and SUBPARTITION clauses were output on a single line, making it difficult to read or parse. (Bug#14326)
  • Replication: Per-table AUTO_INCREMENT option values were not replicated correctly for InnoDB tables. (Bug#41986)
  • Replication: Some log_event types did not skip the post-header when reading. (Bug#41961)
  • Replication: Attempting to read a binary log containing an Incident_log_event having an invalid incident number could cause the debug server to crash. (Bug#40482)
  • Replication: When using row-based replication, an update of a primary key that was rolled back on the master due to a duplicate key error was not rolled back on the slave. (Bug#40221)
  • Replication: When rotating relay log files, the slave deletes relay log files and then edits the relay log index file. Formerly, if the slave shut down unexpectedly between these two events, the relay log index file could then reference relay logs that no longer existed. Depending on the circumstances, this could when restarting the slave cause either a race condition or the failure of replication. (Bug#38826, Bug#39325)
  • Replication: With row-based replication, UPDATE and DELETE statements using LIMIT and a table's primary key could produce different results on the master and slave. (Bug#38230)
  • resolve_stack_dump was unable to resolve the stack trace format produced by mysqld in MySQL 5.1 and up (see Section 22.5.1.5, “Using a Stack Trace”). (Bug#41612)
  • In example option files provided in MySQL distributions, the thread_stack value was increased from 64K to 128K. (Bug#41577)
  • The optimizer could ignore an error and rollback request during a filesort, causing an assertion failure. (Bug#41543)
  • DATE_FORMAT() could cause a server crash for year-zero dates. (Bug#41470)
  • SET PASSWORD caused a server crash if the account name was given as CURRENT_USER(). (Bug#41456)
  • When a repair operation was carried out on a CSV table, the debug server crashed. (Bug#41441)
  • When substituting system constant functions with a constant result, the server was not expecting NULL function return values and could crash. (Bug#41437)
  • Queries such as SELECT ... CASE AVG(...) WHEN ... that used aggregate functions in a CASE expression crashed the server. (Bug#41363)
  • INSERT INTO .. SELECT ... FROM and CREATE TABLE ... SELECT ... FROM a TEMPORARY table could inadvertently change the locking type of the temporary table from a write lock to a read lock, causing statement failure. (Bug#41348)
  • The INFORMATION_SCHEMA.SCHEMA_PRIVILEGES table was limited to 7680 rows. (Bug#41079)
  • Some queries that used a “range checked for each record” scan could return incorrect results. (Bug#40974)
  • Certain SELECT queries could fail with a Duplicate entry error. (Bug#40953)
  • For debug servers, OPTIMIZE TABLE on a compressed table caused a server crash. (Bug#40949)
  • Accessing user variables within triggers could cause a server crash. (Bug#40770)
  • IF(..., CAST(longtext_val AS UNSIGNED), signed_val) as an argument to an aggregate function could cause an assertion failure. (Bug#40761)
  • For single-table UPDATE statements, an assertion failure resulted from a runtime error in a stored function (such as a recursive function call or an attempt to update the same table as in the UPDATE statement). (Bug#40745)
  • TRUNCATE TABLE for an InnoDB table did not flush cached queries for the table. (Bug#40386)
  • Prepared statements allowed invalid dates to be inserted when the ALLOW_INVALID_DATES SQL mode was not enabled. (Bug#40365)
  • mc.exe is no longer needed to compile MySQL on Windows. This makes it possible to build MySQL from source using Visual Studio Express 2008. (Bug#40280)
  • The ':' character was incorrectly disallowed in table names. (Bug#40104)
  • Support for the revision field in .frm files has been removed. This addresses the downgrading problem introduced by the fix for Bug#17823. (Bug#40021)
  • Retrieval speed from the following INFORMATION_SCHEMA tables was improved by shortening the VARIABLE_VALUE column to 1024 characters: GLOBAL_VARIABLES, SESSION_VARIABLES, GLOBAL_STATUS, and SESSION_STATUS.
  • As a result of this change, any variable value longer than 1024 characters will be truncated with a warning. This affects only the init_connect system variable. (Bug#39955)
  • If the operating system is configured to return leap seconds from OS time calls or if the MySQL server uses a time zone definition that has leap seconds, functions such as NOW() could return a value having a time part that ends with :59:60 or :59:61. If such values are inserted into a table, they would be dumped as is by mysqldump but considered invalid when reloaded, leading to backup/restore problems.
  • Now leap second values are returned with a time part that ends with :59:59. This means that a function such as NOW() can return the same value for two or three consecutive seconds during the leap second. It remains true that literal temporal values having a time part that ends with :59:60 or :59:61 are considered invalid.
  • For additional details about leap-second handling, see Section 9.7.2, “Time Zone Leap Second Support”. (Bug#39920)
  • The server could crash during a sort-order optimization of a dependent subquery. (Bug#39844)
  • For a server started with the --temp-pool option on Windows, temporary file creation could fail. This option now is ignored except on Linux systems, which was its original intended scope. (Bug#39750)
  • ALTER TABLE on a table with FULLTEXT index that used a pluggable FULLTEXT parser could cause debug servers to crash. (Bug#39746)
  • With the ONLY_FULL_GROUP_BY SQL mode enabled, the check for non-aggregated columns in queries with aggregate functions, but without a GROUP BY clause was treating all the parts of the query as if they were in the select list. This is fixed by ignoring the non-aggregated columns in the WHERE clause. (Bug#39656)
  • The server crashed if an integer field in a CSV file did not have delimiting quotes. (Bug#39616)
  • The do_abi_check program run during the build process depends on mysql_version.h but that file was not created first, resulting in build failure. (Bug#39571)
  • CHECK TABLE failed for MyISAM INFORMATION_SCHEMA tables. (Bug#39541)
  • On 64-bit Windows systems, the server accepted key_buffer_size values larger than 4GB, but allocated less. (For example, specifying a value of 5GB resulted in 1GB being allocated.) (Bug#39494)
  • Use of the PACK_KEYS or MAX_ROWS table option in ALTER TABLE should have triggered table reconstruction but did not. (Bug#39372)
  • The server returned a column type of VARBINARY rather than DATE as the result from the COALESCE(), IFNULL(), IF(), GREATEST(), or LEAST() functions or CASE expression if the result was obtained using filesort in an anonymous temporary table during the query execution. (Bug#39283)
  • A server built using yaSSL for SSL support would crash if configured to use an RSA key and a client sent a cipher list containing a non-RSA key as acceptable. (Bug#39178)
  • When built with Valgrind, the server failed to access tables created with the DATA DIRECTORY or INDEX DIRECTORY table option. (Bug#39102)
  • With binary logging enabled CREATE VIEW was subject to possible buffer overwrite and a server crash. (Bug#39040)
  • The fast mutex implementation was subject to excessive lock contention. (Bug#38941)
  • Use of InnoDB monitoring (SHOW ENGINE INNODB STATUS or one of the InnoDB Monitor tables) could cause a server crash due to invalid access to a shared variable in a concurrent environment. (Bug#38883)
  • If delayed insert failed to upgrade the lock, it did not free the temporary memory storage used to keep newly constructed BLOB values in memory, resulting in a memory leak. (Bug#38693)
  • On Windows, a five-second delay occurred at shutdown of applications that used the embedded server. (Bug#38522)
  • On Solaris, a scheduling policy applied to the main server process could be unintentionally overwritten in client-servicing threads. (Bug#38477)
  • Building MySQL on FreeBSD would result in a failure during the gen_lex_hash phase of the build. (Bug#38364)
  • On Windows, the embedded server would crash in mysql_library_init() if the language file was missing. (Bug#38293)
  • The ExtractValue() function did not work correctly with XML documents containing a DOCTYPE declaration. (Bug#38227)
  • Queries with a HAVING clause could return a spurious row. (Bug#38072)
  • The Event Scheduler no longer logs “started in thread” or “executed” successfully messages to the error log. (Bug#38066)
  • Use of spatial data types in prepared statements could cause memory leaks or server crashes. (Bug#37956, Bug#37671)
  • An error in a debugging check caused crashes in debug servers. (Bug#37936)
  • A SELECT with a NULL NOT IN condition containing a complex subquery from the same table as in the outer select caused an assertion failure. (Bug#37894)
  • Use of an uninitialized constant in EXPLAIN evaluation caused an assertion failure. (Bug#37870)
  • Primary keys were treated as part of a covering index even if only a prefix of a key column was used. (Bug#37742)
  • Renaming an ARCHIVE table to the same name with different lettercase and then selecting from it could cause a server crash. (Bug#37719)
  • The MONTHNAME() and DAYNAME() functions returned a binary string, so that using LOWER() or UPPER() had no effect. Now MONTHNAME() and DAYNAME() return a value in character_set_connection character set. (Bug#37575)
  • TIMEDIFF() was erroneously treated as always returning a positive result. Also, CAST() of TIME values to DECIMAL dropped the sign of negative values. (Bug#37553)
  • mysqlcheck used SHOW FULL TABLES to get the list of tables in a database. For some problems, such as an empty .frm file for a table, this would fail and mysqlcheck then would neglect to check other tables in the database. (Bug#37527)
  • Updating a view with a subquery in the CHECK option could cause an assertion failure. (Bug#37460)
  • Statements that displayed the value of system variables (for example, SHOW VARIABLES) expect variable values to be encoded in character_set_system. However, variables set from the command line such as basedir or datadir were encoded using character_set_filesystem and not converted correctly. (Bug#37339)
  • CREATE INDEX could crash with InnoDB plugin 1.0.1. (Bug#37284)
  • Certain boolean-mode FULLTEXT searches that used the truncation operator did not return matching records and calculated relevance incorrectly. (Bug#37245)
  • On a 32-bit server built without big tables support, the offset argument in a LIMIT clause might be truncated due to a 64-bit to 32-bit cast. (Bug#37075)
  • For an InnoDB table with a FOREIGN KEY constraint, TRUNCATE TABLE may be performed using row by row deletion. If an error occurred during this deletion, the table would be only partially emptied. Now if an error occurs, the truncation operation is rolled back and the table is left unchanged. (Bug#37016)
  • The code for the ut_usectime() function in InnoDB did not handle errors from the gettimeofday() system call. Now it retries gettimeofday() several times and updates the value of the Innodb_row_lock_time_max status variable only if ut_usectime() was successful. (Bug#36819)
  • Use of CONVERT() with GROUP BY to convert numeric values to CHAR could return truncated results. (Bug#36772)
  • The mysql client, when built with Visual Studio 2005, did not display Japanese characters. (Bug#36279)
  • A read past the end of the string could occur while parsing the value of the --innodb-data-file-path option. (Bug#36149)
  • Setting the slave_compressed_protocol system variable to DEFAULT failed in the embedded server. (Bug#35999)
  • SHOW CREATE TABLE did not display a printable value for the default value of BIT columns. (Bug#35796)
  • The columns that store character set and collation names in several INFORMATION_SCHEMA tables were lengthened because they were not long enough to store some possible values: SCHEMATA, TABLES, COLUMNS, CHARACTER_SETS, COLLATIONS, and COLLATION_CHARACTER_SET_APPLICABILITY. (Bug#35789)
  • The max_length metadata value was calculated incorrectly for the FORMAT() function, which could cause incorrect result set metadata to be sent to clients. (Bug#35558)
  • The CREATE_OPTIONS column for INFORMATION_SCHEMA.TABLES did not display the KEY_BLOCK_SIZE option. (Bug#35275)
  • Selecting from an INFORMATION_SCHEMA table into an incorrectly defined MERGE table caused an assertion failure. (Bug#35068)
  • perror on Windows did not know about Win32 system error codes. (Bug#34825)
  • EXPLAIN EXTENDED evaluation of aggregate functions that required a temporary table caused a server crash. (Bug#34773)
  • SHOW GLOBAL STATUS shows values that aggregate the session status values for all threads. This did not work correctly for the embedded server. (Bug#34517)
  • mysqldumpslow did not aggregate times. (Bug#34129)
  • mysql_config did not output -ldl (or equivalent) when needed for --libmysqld-libs, so its output could be insufficient to build applications that use the embedded server. (Bug#34025)
  • The mysql client incorrectly parsed statements containing the word “delimiter” in mid-statement.
  • This fix is different from the one applied for this bug in MySQL 5.1.26. (Bug#33812)
  • For a stored procedure containing a SELECT * ... RIGHT JOIN query, execution failed for the second call. (Bug#33811)
  • Previously, use of index hints with views (which do not have indexes) produced the error ERROR 1221 (HY000): Incorrect usage of USE/IGNORE INDEX and VIEW. Now this produces ERROR 1176 (HY000): Key '...' doesn't exist in table '...', the same error as for base tables without an appropriate index. (Bug#33461)
  • Three conditions were discovered that could cause an upgrade from MySQL 5.0 to 5.1 to fail: 1) Triggers associated with a table that had a #mysql50# prefix in the name could cause assertion failure. 2) ALTER DATABASE ... UPGRADE DATA DIRECTORY NAME failed for databases that had a #mysql50# prefix if there were triggers in the database. 3) mysqlcheck --fix-table-name didn't use UTF8 as the default character set, resulting in parsing errors for tables with non-latin symbols in their names and trigger definitions. (Bug#33094, Bug#41385)
  • Execution of a prepared statement that referred to a system variable caused a server crash. (Bug#32124)
  • Some division operations produced a result with incorrect precision. (Bug#31616)
  • Queries executed using join buffering of BIT columns could produce incorrect results. (Bug#31399)
  • ALTER TABLE CONVERT TO CHARACTER SET did not convert TINYTEXT or MEDIUMTEXT columns to a longer text type if necessary when converting the column to a different character set. (Bug#31291)
  • Server variables could not be set to their current values on Linux platforms. (Bug#31177)
  • Static storage engines and plugins that were disabled and dynamic plugins that were instaled but disabled were not listed in the INFORMATION_SCHEMA appropriate PLUGINS or ENGINES table. (Bug#29263)
  • Some SHOW statements and retrievals from the INFORMATION_SCHEMA TRIGGERS and EVENTS tables used a temporary table and incremented the Created_tmp_disk_tables status variable, due to the way that TEXT columns are handled. The TRIGGERS.SQL_MODE, TRIGGERS.DEFINER, and EVENTS.SQL_MODE columns now are VARCHAR to avoid this problem. (Bug#29153)
  • For several read only system variables that were viewable with SHOW VARIABLES, attempting to view them with SELECT @@var_name or set their values with SET resulted in an unknown system variable error. Now they can be viewed with SELECT @@var_name and attempting to set their values results in a message indicating that they are read only. (Bug#28234)
  • On Windows, Visual Studio does not take into account some x86 hardware limitations, which led to incorrect results converting large DOUBLE values to unsigned BIGINT values. (Bug#27483)
  • SSL support was not included in some “generic” RPM packages. (Bug#26760)
  • The Questions status variable is intended as a count of statements sent by clients to the server, but was also counting statements executed within stored routines. (Bug#24289)
  • Setting the session value of the max_allowed_packet or net_buffer_length system variable was allowed but had no effect. The session value of these variables is now read only. (Bug#22891)
  • A race condition between the mysqld.exe server and the Windows service manager could lead to inability to stop the server from the service manager. (Bug#20430)

New in MySQL 6.0.8 Alpha (Dec 16, 2008)

  • Functionality added or changed:
  • Incompatible Change: The tables for MySQL Backup logging have been renamed, and the logging capabilities now are more flexible, similar to the capabilities provided for the general query log and slow query log.
  • The names of the MySQL Backup log tables in the mysql database have been changed from online_backup and online_backup_progress to backup_history and backup_progress.
  • Logging now can be enabled or disabled, it is possible to log to tables or to files, and the names of the log files can be changed. For details, see Section 6.3.3.1, “MySQL Backup Log Control”.
  • A new statement, FLUSH BACKUP LOGS, closes and reopens the backup log files. A new option for mysql_refresh(), REFRESH_BACKUP_LOG, performs the same operation.
  • Important Change: The --skip-thread-priority option is now deprecated in MySQL 5.1 and is removed in MySQL 6.0 such that the server won't change the thread priorities by default. Giving threads different priorities might yield marginal improvements in some platforms (where it actually works), but it might instead cause significant degradation depending on the thread count and number of processors. Meddling with the thread priorities is a not a safe bet as it is very dependent on the behavior of the CPU scheduler and system where MySQL is being run. (Bug#35164, Bug#37536)
  • Important Change: The --log option now is deprecated and will be removed (along with the log system variable) in the future. Instead, use the --general_log option to enable the general query log and the --general_log_file=file_name option to set the general query log filename. The values of these options are available in the general_log and general_log_file system variables, which can be changed at runtime.
  • Similar changes were made for the --log-slow-queries option and log_slow_queries system variable. You should use the --slow_query_log and --slow_query_log_file=file_name options instead (and the slow_query_log and slow_query_log_file system variables).
  • The BUILD/compile-solaris-* scripts now compile MySQL with the mtmalloc library rather than malloc. (Bug#38727)
  • Binary distributions for Solaris, Linux, and Mac OS X now are built with support for the pool-of-threads value of thread_handling. (Bug#38636)
  • BACKUP DATABASE now performs an implicit commit, like RESTORE. (Bug#38261)
  • The deprecated --default-table-type server option has been removed. (Bug#34818)
  • On WIndows, use of POSIX I/O interfaces in mysys was replaced with Win32 API calls (CreateFile(), WriteFile(), and so forth) and the default maximum number of open files has been increased to 16384. The maximum can be increased further by using the --max-open-files=N option at server startup. (Bug#24509)
  • MySQL now supports an interface for semisynchronous replication: A commit performed on the master side blocks before returning to the session that performed the transaction until at least one slave acknowleges that it has received and logged the events for the transaction. Semisynchronous replication is implemented through an optional plugin component. See Section 16.2.9, “Semisynchronous Replication”
  • Most statements that previously caused an implicit commit before executing now also cause an implicit commit after executing. Also, the FLUSH statement and mysql_refresh() C API function now cause an implicit commit. See Section 12.4.3, “Statements That Cause an Implicit Commit”.
  • Bugs fixed:
  • Incompatible Change: CHECK TABLE ... FOR UPGRADE did not check for incompatible collation changes made in MySQL 5.0.48. (This also affects mysqlcheck and mysql_upgrade, which cause that statement to be executed.) (Bug#39585)
  • See also Bug#40984.
  • Incompatible Change: In connection with view creation, the server created arc directories inside database directories and maintained useless copies of .frm files there. Creation and renaming procedures of those copies as well as creation of arc directories has been discontinued.
  • This change does cause a problem when downgrading to older server versions which manifests itself under these circumstances:
  • 1. Create a view v_orig in MySQL 6.0.8 or higher.
  • 2. Rename the view to v_new and then back to v_orig.
  • 3. Downgrade to an older 6.0.x server and run mysql_upgrade.
  • 4. Try to rename v_orig to v_new again. This operation fails.
  • As a workaround to avoid this problem, use either of these approaches:
  • Dump your data using mysqldump before downgrading and reload the dump file after downgrading.
  • Instead of renaming a view after the downgrade, drop it and recreate it.
  • The downgrade problem introduced by the fix for this bug has been addressed as Bug#40021. (Bug#17823)
  • Important Change: Replication: The SUPER privilege is now required to change the session value of binlog_format as well as its global value. For more information about binlog_format, see Section 16.1.2, “Replication Formats”. (Bug#39106)
  • Partitioning: Replication: Replication to partitioned MyISAM tables could be slow with row-based binary logging. (Bug#35843)
  • Partitioning: A duplicate key error raised when inserting into a partitioned table used a different error code from that returned by such an error raised when inserting into a table that was not partitioned. (Bug#38719)
  • See also Bug#28842.
  • Partitioning: If an error occurred when evaluating a column of a partitioned table for the partitioning function, the row could be inserted anyway. (Bug#38083)
  • Partitioning: Using INSERT ... SELECT to insert records into a partitioned MyISAM table could fail if some partitions were empty and others are not. (Bug#38005)
  • Replication: Replication of BLACKHOLE tables did not work with row-based binary logging. (Bug#38360)
  • Replication: In some cases, a replication master sent a special event to a reconnecting slave to keep the slave's temporary tables, but they still had references to the “old” slave SQL thread and used them to access that thread's data. (Bug#38269)
  • Replication: Replication filtering rules were inappropiately applied when executing BINLOG pseudo-queries. One way in which this problem showed itself was that, when replaying a binary log with mysqlbinlog, RBR events were sometimes not executed if the --replicate-do-db option was specified. Now replication rules are applied only to those events executed by the slave SQL thread. (Bug#36099)
  • Replication: For a CREATE TABLE ... SELECT statement that creates a table in a database other than the current one, the table could be created in the wrong database on replication slaves if row-based binary logging is used. (Bug#34707)
  • Replication: A statement did not always commit or roll back correctly when the server was shut down; the error could be triggered by having a failing UPDATE or INSERT statement on a transactional table, causing an implicit rollback. (Bug#32709)
  • See also Bug#38262.
  • Compiling using --with-falcon on Mac OS X fails if you use CXX=gcc. You must specify that the g++ compiler should be used for C++ using CXX=g++. (Bug#41270)
  • Creating a table, or selecting from a table using the FALCON storage engine and with a double quote in the name would cause an assertion failure. (Bug#40158, Bug#39388)
  • Windows builds were missing the MySQL Backup log tables. (Bug#40126)
  • The indexes and record contents of a FALCON table could get out of synchronization during a lrge number of updates. Because FALCON returns data only if it matches both the index and record data the result sets returned could be invalid when comparing the results of an index and non-index based SELECT. (Bug#40112, Bug#40130)
  • The CHECK TABLE ... FOR UPGRADE statement did not check for incompatible collation changes made in MySQL 5.1.24. (This also affects mysqlcheck and mysql_upgrade, which cause that statement to be executed.)
  • Prior to this fix, a binary upgrade (performed without dumping tables with mysqldump before the upgrade and reloading the dump file after the upgrade) would corrupt tables. After the fix, CHECK TABLE ... FOR UPGRADE properly detects the problem and upgrades tables.
  • However, the fix is not backward compatible and can result in a downgrading problem under these circumstances:
  • 1. Perform a binary upgrade to a version of MySQL that includes the fix.
  • 2. Run CHECK TABLE ... FOR UPGRADE (or mysqlcheck or mysql_upgrade) to upgrade tables.
  • 3. Perform a binary downgrade to a version of MySQL that does not include the fix.
  • The solution is to dump tables with mysqldump before the downgrade and reload the dump file after the downgrade. Alternatively, drop and recreate affected indexes. (Bug#40053)
  • Non-ASCII error messages were corrupted. (Bug#39949)
  • The Threads_created status variable was not correctly incremented when the server was started with the --thread-handling=pool-of-threads option. (Bug#39916)
  • On Windows Vista, RESTORE did not correctly calculate the validity point from the backup stream. (Bug#39825)
  • When creating a table with the FALCON engine where the size of the key in the index was larger than supported (the error message did not signify the severity of the problem. The message and error has been updated. (Bug#39708)
  • The MySQL Backup backup_history log now contains a backup_file_path column. backup_file contains the basename and backup_file_path contains the directory of the image file pathname. (Bug#39690)
  • Some MySQL Backup-related memory-use warnings detected by Valgrind were corrected. (Bug#39598)
  • Creating a table with a comment of 62 characters or longer caused a server crash. (Bug#39591)
  • The Sun Studio compiler failed to build debug versions of the server due to use of features specific to gcc. (Bug#39451)
  • For a TIMESTAMP column in an InnoDB table, testing the column with multiple conditions in the WHERE clause caused a server crash. (Bug#39353)
  • For BACKUP DATABASE, the server could add a / character to the end of the backup path, even when the path ended with a filename rather than a directory name. (Bug#39189)
  • The server could crash when attempting to insert duplicate empty strings into a utf8 SET column. (Bug#39186)
  • References to local variables in stored procedures are replaced with NAME_CONST(name, value) when written to the binary log. However, an “illegal mix of collation” error might occur when executing the log contents if the value's collation differed from that of the variable. Now information about the variable collation is written as well. (Bug#39182)
  • BACKUP DATABASE failed on PowerMac platforms due to type casting problems. (Bug#39127)
  • MySQL Backup was not handling several errors. (Bug#39089)
  • Some warnings were being reported as errors. (Bug#39059)
  • Queries of the form SELECT ... REGEXP BINARY NULL could lead to a hung or crashed server. (Bug#39021)
  • Statements of the form INSERT ... SELECT .. ON DUPLICATE KEY UPDATE col_name = DEFAULT could result in a server crash. (Bug#39002)
  • Repeated CREATE TABLE ... SELECT statements, where the created table contained an AUTO_INCREMENT column, could lead to an assertion failure. (Bug#38821)
  • RESTORE crashed if a trigger and an event had the same name. (Bug#38810)
  • For deadlock between two transactions that required a timeout to resolve, all server tables became inaccessible for the duration of the deadlock. (Bug#38804)
  • When inserting a string into a duplicate-key error message, the server could improperly interpret the string, resulting in a crash. (Bug#38701)
  • A race condition between threads sometimes caused unallocated memory to be addressed. (Bug#38692)
  • A server crash resulted from concurrent execution of a multiple-table UPDATE that used a NATURAL or USING join together with FLUSH TABLES WITH READ LOCK or ALTER TABLE for the table being updated. (Bug#38691)
  • On ActiveState Perl, mysql-test-run.pl --start-and-exit started but did not exit. (Bug#38629)
  • A server crash resulted from execution of an UPDATE that used a derived table together with FLUSH TABLES. (Bug#38499)
  • Stored procedures involving substrings could crash the server on certain platforms due to invalid memory reads. (Bug#38469)
  • The binary log filename stored in the binlog_file column of the mysql.backup_history MySQL Backup table now is the file basename (the final component). Previously, the full pathname was stored, but this could be too long for the column width. (Bug#38462)
  • On Windows, starting the server with the --external-locking=1 option caused BACKUP DATABASE to fail. (Bug#38342)
  • Errors during server startup caused destruction of an uninitialized mutex and assertion failure. (Bug#37961)
  • The handlerton-to-plugin mapping implementation did not free handler plugin references when the plugin was uninstalled, resulting in a server crash after several install/uninstall cycles. Also, on Mac OS X, the server crashed when trying to access an EXAMPLE table after the EXAMPLE plugin was installed. (Bug#37958)
  • The server crashed if an argument to a stored procedure was a subquery that returned more than one row. (Bug#37949)
  • When analyzing the possible index use cases, the server was incorrectly reusing an internal structure, leading to a server crash. (Bug#37943)
  • Access checks were skipped for SHOW PROCEDURE STATUS and SHOW FUNCTION STATUS, which could lead to a server crash or insufficient access checks in subsequent statements. (Bug#37908)
  • Comparisons could hang for SET or ENUM columns that used latin2_czech_cs collation. (Bug#37854)
  • SHOW PROCESSLIST displayed “copy to tmp table” when no such copy was occurring. (Bug#37550)
  • The operator could return incorrect results when comparing NULL to DATE, TIME, or DATETIME values. (Bug#37526)
  • MySQL Backup was not consistently checking for BSTREAM_ERROR errors. (Bug#37522)
  • The combination of a subquery with a GROUP BY, an aggregate function calculated outside the subquery, and a GROUP BY on the outer SELECT could cause the server to crash. (Bug#37348)
  • Incorrect BLOB handling by RESTORE could result in a server crash. (Bug#37212)
  • The NO_BACKSLASH_ESCAPES SQL mode was ignored for LOAD DATA INFILE and SELECT INTO ... OUTFILE. The setting is taken into account now. (Bug#37114)
  • If thread-pooling was used and a connection attempt was denied on the grounds of exceeding the user limits, the number of active connections for that user was erroneously decreased twice. The difference between the actual number connections and the internal count could then cause debug builds of the server to raise an assertion. (Bug#36970)
  • Long error messages for RESTORE could be truncated. (Bug#36854)
  • In some cases, references to views were confused with references to anonymous tables and privilege checking was not performed. (Bug#36086)
  • For crash reports on Windows, symbol names in stack traces were not correctly resolved. (Bug#35987)
  • ALTER EVENT changed the PRESERVE attribute of an event even when PRESERVE was not specified in the statement. (Bug#35981)
  • Hostname values in SQL statements were not being checked for '@', which is illegal according to RFC952. (Bug#35924)
  • mysql_install_db failed on machines that had the hostname set to localhost. (Bug#35754)
  • Dynamic plugins failed to load on i5/OS. (Bug#35743)
  • With the PAD_CHAR_TO_FULL_LENGTH SQL mode enabled, a ucs2 CHAR column returned additional garbage after trailing space characters. (Bug#35720)
  • RESTORE did not set the validity_point_time, binlog_pos, and binlog_file fields of the backup_history log table row. (Bug#35240)
  • With binary logging enabled, CREATE TABLE ... SELECT failed if the source table was a log table. (Bug#34306)
  • If BACKUP DATABASE and RESTORE were done in a session with autocommit disabled, a later DROP TABLE or RESTORE in the same session failed. (Bug#34204)
  • The secure_file_priv system variable now applies to BACKUP DATABASE and RESTORE operations: If the value is nonempty, backup and restore operations can read and write files only in the given directory. (Bug#34171)
  • mysql_real_connect() did not check whether the MYSQL connection handler was already connected and connected again even if so. Now an CR_ALREADY_CONNECTED error occurs. (Bug#33831)
  • Shutting down the MySQL Server immediately following the execution of a BACKUP DATABASE statement caused the server to crash if the database to be backed up contained any Falcon tables. (Bug#33575)
  • The server crashed for BACKUP DATABASE if the backup progress tables in the mysql database were missing or created incorrectly. (Bug#33352)
  • CHECKSUM TABLE was not killable with KILL QUERY. (Bug#33146)
  • A trigger for an InnoDB table activating multiple times could lead to AUTO_INCREMENT gaps. (Bug#31612)
  • mysqldump could fail to dump views containing a large number of columns. (Bug#31434)
  • The server could improperly type user-defined variables used in the select list of a query. (Bug#26020)
  • For access to the INFORMATION_SCHEMA.VIEWS table, the server did not check the SHOW VIEW and SELECT provileges, leading to inconsistency between output from that table and the SHOW CREATE VIEW statement. (Bug#22763)
  • mysqld_safe would sometimes fail to remove the pid file for the old mysql process after a crash. As a result, the server would fail to start due to a false A mysqld process already exists... error. (Bug#11122)