MySQL (64-bit) 歷史版本列表 Page22

最新版本 MySQL 8.0.34.0 (64-bit)

MySQL (64-bit) 歷史版本列表

MySQL 64 位專為企業組織提供關鍵業務數據庫應用程序而設計。它為企業開發人員,數據庫管理員和 ISV 提供了一系列新的企業功能,以提高開發,部署和管理工業強度應用程序的效率.如果您需要 MySQL 數據庫的 GUI,可以下載 - NAVICAT(MySQL GUI)。它支持將 MySQL,MS SQL,MS Access,Excel,CSV,XML 或其他格式導入到 MySQL.MySQL... MySQL (64-bit) 軟體介紹


MySQL 5.5.44 (64-bit) 查看版本資訊

更新時間:2015-06-02
更新細節:

What's new in this version:

Bugs Fixed:
- InnoDB; Partitioning: The CREATE_TIME column of the INFORMATION_SCHEMA.TABLES table now shows the correct table creation time for partitioned InnoDB tables. The CREATE_TIME column of the INFORMATION_SCHEMA.PARTITIONS table now shows the correct partition creation time for a partition of partitioned InnoDB tables. The UPDATE_TIME column of the INFORMATION_SCHEMA.TABLES table now shows when a partitioned InnoDB table was last updated by an INSERT, DELETE, or UPDATE. The UPDATE_TIME column of the INFORMATION_SCHEMA.PARTITIONS table now shows when a partition of a partitioned InnoDB table was last updated
- InnoDB: An assertion was raised on shutdown due to XA PREPARE transactions holding explicit locks
- InnoDB: Removal of a foreign key object from the data dictionary cache during error handling caused the server to exit
- InnoDB: SHOW ENGINE INNODB STATUS output showed negative reservation and signal count values due to a counter overflow error
- InnoDB: Estimates that were too low for the size of merge chunks in the result sorting algorithm caused a server exit
- SHOW VARIABLES mutexes were being locked twice, resulting in a server exit
- A Provides rule in RPM .spec files misspelled “mysql-embedded” as “mysql-emdedded”
- Under certain conditions, the libedit command-line library could write outside an array boundary and cause a client program crash
- Host value matching for the grant tables could fail to use the most specific of values that contained wildcard characters
- A user with a name of event_scheduler could view the Event Scheduler process list without the PROCESS privilege
-SHOW GRANTS after connecting using a proxy user could display the password hash of the proxied user
- For a prepared statement with an ORDER BY that refers by column number to a GROUP_CONCAT() expression that has an outer reference, repeated statement execution could cause a server exit
- Loading corrupt spatial data into a MyISAM table could cause the server to exit during index building
- Certain queries for the INFORMATION_SCHEMA TABLES and COLUMNS tables could lead to excessive memory use when there were large numbers of empty InnoDB tables
- MySQL failed to compile using OpenSSL 0.9.8e

MySQL 5.6.24 (64-bit) 查看版本資訊

更新時間:2015-04-08
更新細節:

What's new in this version:

Bugs Fixed:
- InnoDB: A TRUNCATE TABLE operation on a temporary table raised an assertion. The temporary table object was incompletely constructed when reloaded from SYS_TABLES.
- InnoDB: A full-text phrase search returned an incorrect result. An empty string was handled incorrectly when tokenizing a newly inserted row.
- InnoDB: Optimizing a FULLTEXT index raised an assertion. The last optimized word of a FULLTEXT index is stored in the CONFIG table value column which is defined as CHAR(50). An assertion was raised when the last optimized word was greater than 50 characters in length. The CONFIG table value column is defined as CHAR(200) as of MySQL 5.6.24 and MySQL 5.7.6.
- If your innodb_ft_max_token_size setting is greater than 50, it is recommended that you recreate existing InnoDB FULLTEXT indexes after upgrading to MySQL 5.6.24 or MySQL 5.7.6 to avoid this issue. FULLTEXT indexes created after upgrading to MySQL 5.6.24 or MySQL 5.7.6 are unaffected.
- InnoDB: An InnoDB memcached extra_col_value[] array was freed without checking the allocated flag, causing a server exit.
- InnoDB: A DML operation performed while a flushing operation was in progress raised a memcached-related assertion.
- InnoDB: The memcached process_arithmetic_command raised an assertion. The wrong error code was returned for a nonexistent decr key.
- InnoDB: The expiration time (exptime) defined using the memcached set command was ignored. InnoDB memcached set the expiration time to an interval value instead of a system time value.
- InnoDB: An assertion was raised when the full-text search fts_savepoint_release() function released a named transaction savepoint and all subsequent savepoints. Only the initial savepoint should be released.
- InnoDB: A full-text search optimization operation raised an assertion.
- InnoDB: Due to a regression introduced in MySQL 5.6.20, mysqld stop did not stop the mysqld server process while the InnoDB memcached plugin was active.
- InnoDB: An ALTER TABLE ... RENAME failure on a table with a FULLTEXT index raised an assertion.
- InnoDB: A severe error occurred during the log apply phase of an online ALTER TABLE operation that was converting a table with a UTF-8 charset to ROW_FORMAT=REDUNDANT.
- InnoDB: When dummy tables are created, the autoinc_mutex member of the of the dict_table_t object was created unnecessarily. Similarly, the zip_pad.mutex object of dict_index_t object was created unnecessarily for dummy indexes. To avoid unnecessary mutex contention, autoinc_mutex and zip_pad.mutex objects are now allocated and initialized on the first lock attempt.
- InnoDB: An ALTER TABLE ... RENAME operation raised an invalid assertion. The assertion code used an incorrect transaction object.
- InnoDB: A memcached append operation on an INT column caused a segmentation fault. append operations on INT columns are not supported and are now blocked.
- Partitioning: A number of ALTER TABLE statements that attempted to add partitions, columns, or indexes to a partitioned table while a write lock was in effect for this table were not handled correctly.
- Partitioning: Executing an ALTER TABLE on a partitioned table on which a write lock was in effect could cause subsequent SQL statements on this table to fail.
- Replication: When replicating from a 5.7.6 or later server to a 5.6.23 or earlier server, if the older version applier thread encountered an Anonymous_gtid_log_event it caused an assert. The fix ensures that these new log events added in MySQL 5.7.6 and later do not cause this problem with 5.6.24 and later slaves. If gtid_mode is OFF and the applier thread encounters a Gtid_log_event, the applier thread aborts with an error. If gtid_mode is ON and the applier thread encounters a Anonymous_gtid_log_event, the applier thread aborts with an error.
- Replication: When the automatic_sp_privileges variable is set, the server automatically grants the EXECUTE and ALTER ROUTINE privileges to the creator of a stored routine, if the user does not already have these privileges. When a privileged user creates a procedure with DEFINER as a non privileged user on a master, the current user is considered to be a privileged user and the mysql.procs_priv table is not updated. When such a statement was replicated to slave, the non-privileged DEFINER was considered as the current user on the slave and privileges were being allocated. This caused a difference in the privileges that were being allocated on the master and the slave. The fix ensures that creater of the stored routine is added to the binary log, and the slave now checks first if the user exists before granting privileges. To maintain compatibility with previous versions, the DEFINER is used when the INVOKER is not available. As part of this fix, anonymous users can be used to replicate from master to slave.
- Replication: When using a slave configured to use a special character set such as UTF-16, UTF-32, or UCS-2, the receiver (I/O) thread failed to connect. The fix ensures that in such a situation, if a slave's character set is not supported then default to using the latin1 character set.
- Replication: When gtid_mode=ON and slave_net_timeout was set to a low value, the slave I/O thread could appear to hang. This was due to the slave heartbeat not being sent regularly enough when the dump thread found many events that could be skipped. The fix ensures that the heartbeat is sent correctly in such a situation.
- CMake failed to detect the OpenSSL version properly for recent versions of OpenSSL (the format of the version string changed).
- For execution of prepared statements, no check was made whether an audit log plugin returned an error, so statement success could erroneously be returned.
- Debian packages were missing some dependencies.
- Corrections were made for a number of code issues that resulted in compiler warnings about array bounds, possibly uninitialized variables, and variables being set but not used.
- Following execution of a GRANT ... WITH GRANT OPTION statement, execution of a prepared statement with a view could cause a server exit.
- NULL as an expression was not recognized as a literal for calculation of Performance Schema statement digests.
- A user with a name of event_scheduler could view the Event Scheduler process list without the PROCESS privilege.
- Trying to create a user after dropping columns from the mysql.user table could result in a server exit.
- Ordering by a GROUP_CONCAT() result could cause a server exit.
- A malformed mysql.proc table row could result in a server exit for DROP DATABASE of the database associated with the proc row.
- SHOW GRANTS after connecting using a proxy user could display the password hash of the proxied user.
- Large values of the transaction_prealloc_size system variable could cause the server to allocate excessive amounts of memory. The maximum value has been adjusted down to 128K. A similar change was made for transaction_alloc_block_size. Transactions can still allocate more than 128K if necessary; this change reduces the amount that can be preallocated, as well as the maximum size of the incremental allocation blocks.
- Certain queries on the INFORMATION_SCHEMA.INNODB_FT_CONFIG table could cause a server exit.
- A server exit could occur for queries that compared two rows using the <=> operator and the rows belonged to different character sets.
- Certain InnoDB errors caused stored function and trigger condition handlers to be ignored.
- The optimizer could raise an assertion due to incorrectly associating an incorrect field with a temporary table.
- Audit log filtering was not applied to connection events.
- With audit_log_connection_policy=ERRORS, successful COM_QUIT events were errroneously written to the audit log.
- The value of the Audit_log_events status variable did not equal the sum of the other audit log counters.
- The Audit_log_events_filtered status variable did not increment when audit log events were filtered.
- Many new features were added to the audit log plugin in MySQL 5.6.20, but the version number was not increased. The version has been bumped to 1.1.
- The server could exit due to an optimizer failure to allocate enough memory for resolving outer references.
- If the audit log file was found to be corrupt at server startup, an appropriate error message was not always written. Also, if the plugin is loaded, it will be initialized regardless of whether the log was corrupt, except in the case that renaming the log file fails.
- Creating a FEDERATED table with an AUTO_INCREMENT column using a LIKE clause results in a server exit.
- The group_concat_max_len system variable could be set to its maximum value at runtime, but not in an option file.
- A server warning error message referred to the obsolete table_cache system variable rather than to table_open_cache. Thanks to Daniël van Eeden for the patch to fix some of the instances.
- In the DIGEST_TEXT column of Performance Schema statement events tables, references to system variables of the form @@var_name were stored as @ @ var_name.
- If the WITH_SSL CMake option was specified with an incorrect path to the SSL installation or the path to an unsupported (too old) SSL installation, the option was implicitly changed to the bundled value and yaSSL was used instead. Now CMake exits with an error so the user knows that the option value must be changed.
- mysql_real_connect() could close a file descriptor twice if the server was not running.
- Notification of events for the general log were received by the audit log plugin only of the general query log was enabled. Now notifications are posted regardless of whether the general query log is enabled.

MySQL 5.5.43 (64-bit) 查看版本資訊

更新時間:2015-04-08
更新細節:

What's new in this version:

Functionality Added or Changed:
- CMake support was updated to handle CMake version 3.1.
- The server now includes its version number when it writes the initial “starting” message to the error log, to make it easier to tell which server instance error log output applies to. This value is the same as that available from the version system variable. Bugs Fixed:
- Replication: When using a slave configured to use a special character set such as UTF-16, UTF-32, or UCS-2, the receiver (I/O) thread failed to connect. The fix ensures that in such a situation, if a slave's character set is not supported then default to using the latin1 character set.
- Ordering by a GROUP_CONCAT() result could cause a server exit.
- A malformed mysql.proc table row could result in a server exit for DROP DATABASE of the database associated with the proc row.
- For a prepared statement with an ORDER BY that refers by column number to a GROUP_CONCAT() expression that has an outer reference, repeated statement execution could cause a server exit.
- Large values of the transaction_prealloc_size system variable could cause the server to allocate excessive amounts of memory. The maximum value has been adjusted down to 128K. A similar change was made for transaction_alloc_block_size. Transactions can still allocate more than 128K if necessary; this change reduces the amount that can be preallocated, as well as the maximum size of the incremental allocation blocks.
- A server exit could occur for queries that compared two rows using the <=> operator and the rows belonged to different character sets.
- Certain InnoDB errors caused stored function and trigger condition handlers to be ignored.
- The optimizer could raise an assertion due to incorrectly associating an incorrect field with a temporary table.
- The server could exit due to an optimizer failure to allocate enough memory for resolving outer references.
- Starting the server with start service or mysqld_safe could result in failure to use the correct plugin directory.
- Creating a FEDERATED table with an AUTO_INCREMENT column using a LIKE clause results in a server exit.

MySQL 5.6.23 (64-bit) 查看版本資訊

更新時間:2015-02-03
更新細節:

What's new in this version:

Security Notes:
- The linked OpenSSL library for the MySQL Commercial Server has been updated from version 1.0.1j to version 1.0.1k.
- 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. Support was added for the TLS 1.1 and TLS 1.2 protocols. (Bug #19820550)
- References: See also Bug #19921150
- 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

MySQL 5.5.42 (64-bit) 查看版本資訊

更新時間:2015-02-03
更新細節:

What's new in this version:

Functionality Added or Changed:
- Support for the SSL 2.0 and SSL 3.0 protocols has been disabled because they provide weak encryption. Support was added for the TLS 1.1 and TLS 1.2 protocols.
- yaSSL was upgraded to version 2.3.7.
- The valid date range of the SSL certificates in mysql-test/std_data has been extended to the year 2029. Bugs Fixed:
- InnoDB: A multiple-table delete operation caused the server to halt.
- Replication: If a DROP DATABASE statement failed on the master, mismatched tables could be left on the slave, breaking replication. This was caused by the DROP TABLE statement being binary logged if at least one table was deleted during the DROP DATABASE operation. The fix ensures that in such a situation the DROP TABLE statement is binary logged with the IF EXISTS option.
- Unlocking a temporary table after locking and truncating it could cause a server exit.
- The Enterprise Encryption plugin could mishandle string arguments.
- FLUSH TABLES on a FEDERATED table failed if the table had been idle longer than the wait_timeout time plus the TCP keepalive time.
- 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.
- MySQL failed to compile with GCC 4.9.1 in debug mode.
- A file created for an internal temporary table could cause problems if the file was orphaned for some reason and the file name was reused for later queries.

MySQL 5.6.22 (64-bit) 查看版本資訊

更新時間:2014-12-02
更新細節:

What's new in this version:

Compilation Notes:
- Noisy compiler warnings on FreeBSD 10 were silenced.
- 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.
- 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.
- Build support was modified to produce the same warnings for Clang as for gcc.
- 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. Security Notes:
- The linked OpenSSL library for the MySQL Commercial Server has been updated from version 1.0.1h to version 1.0.1j.
- This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. Functionality Added or Changed:
- Replication: The variable binlogging_impossible_mode has been renamed binlog_error_action. binlogging_impossible_mode is now deprecated.
- 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. 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.
- InnoDB: In debug builds, setting the innodb_limit_optimistic_insert_debug debug configuration option to 1 caused an infinite B-tree page split.
- InnoDB: The dict_set_corrupted() function attempted to update the clustered index of the SYS_INDEXES data dictionary table incorrectly.
- 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.
- InnoDB: The InnoDB data dictionary was not updated when a ALTER TABLE ... CHANGE COLUMN operation changed the case of the column name.
- 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.
- InnoDB: Attempting to shut down the server after starting the server with innodb_force_recovery=6 resulted in a hang.
- 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.
- 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.
- 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().
- 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.
- 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.
- 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).
- 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.
- 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.
- 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.".
- 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.
- 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.
- InnoDB table checksum calculation could yield an incorrect result if the value of the innodb_checksum_algorithm system variable was modified during the operation.
- GROUP BY on a CHAR(0) NOT NULL column could lead to a server exit.
- With the validate_password plugin activated and dictionary lookups enabled, passing a user-defined variable to PASSWORD() could cause a server exit.
- Debian packages were built using the complex set of character sets, not the all set of character sets.
- mysqldump failed to report a disk-full error if the dump destination was located on an NFS mount.
- InnoDB permitted a foreign key to be created which referenced a parent table for which the user did not have sufficient privileges.
- Copying InnoDB tables containing full-text columns from Windows to Linux caused a server exit on Linux during full-text index initialization.
- 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.
- In Solaris 11.2, dtrace -V output changed from Sun D to Oracle D, causing detection of DTrace availability to fail during MySQL configuration.
- 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.)
- 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.
- Compilation on Windows using Visual Studio 2013 resulted in “unresolved external symbol” errors.
- OLD_PASSWORD() is deprecated, but no warning was produced when it was invoked.
- 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.
- 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.
- LOCK TABLES sometimes acquired an insufficiently strong lock for implicitly locked tables.
- The ENABLED_LOCAL_INFILE CMake option incorrectly was enabled by default.
- Use of ODBC-format date literals could produce incorrect query results.
- mysql_install_db ignored option files in the default locations.
- mysql_setpermission failed to properly quote user names in SQL statements that it generated.

MySQL 5.5.41 (64-bit) 查看版本資訊

更新時間:2014-12-02
更新細節:

What's new in this version:

Functionality Added or Changed:
- 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. 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.
- InnoDB: In debug builds, setting the innodb_limit_optimistic_insert_debug debug configuration option to 1 caused an infinite B-tree page split.
- InnoDB: The dict_set_corrupted() function attempted to update the clustered index of the SYS_INDEXES data dictionary table incorrectly.
- InnoDB: A procedure, called from a function to perform an operation on a temporary table, caused the server to halt.
- InnoDB: A CREATE TABLE operation that failed with innodb_strict_mode=ON would succeed without printing a warning with innodb_strict_mode=OFF.
- 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().
- 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.
- 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.
- InnoDB permitted a foreign key to be created which referenced a parent table for which the user did not have sufficient privileges.
- On Windows, the replace utility did not work.
- On CentOS 6, specifying a relative path name for the --socket option caused MySQL startup script failure.
- 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.
- mysql_setpermission failed to properly quote user names in SQL statements that it generated.

MySQL 5.6.21 (64-bit) 查看版本資訊

更新時間:2014-09-25
更新細節:

What's new in this version:

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 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. 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.
- InnoDB: An ALTER TABLE ... ADD FOREIGN KEY operation could cause a serious error.
- InnoDB: In debug builds, an INSERT operation affecting compressed tables would raise a sync-related assertion.
- 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.
- InnoDB: Attempting to perform operations on a timed out key would cause the memcached daemon to crash and restart.
- 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.
- 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.
- InnoDB: During recovery, a segmentation fault would occur when marking a table as corrupt.
- 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.
- 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().
- InnoDB: An in-place ALTER TABLE operation on a table with a broken foreign key constraint could raise an assertion.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- With DTrace support enabled, certain other compilation options could cause the build to fail.
- yaSSL client code did not validate the encryption size or session ID length, which could cause the client to exit.
- yaSSL could fail preauthorization if the client supplied inaccurate buffer lengths.
- Competition between threads could lead to timeout failure trying to rotate the audit log file.
- LPAD() and RPAD() could cause a server exit if the pad string argument was not well formed.
- The optimizer could create a zero-length column for a temporary table, causing a server exit.
- MOD for very small decimal right-hand arguments could cause a server exit.
- 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.
- If the left-hand-side of an IN predicate was a scalar subquery but returned no row, the server could exit.
- The thread_concurrency system variable is deprecated, but no warning resulted from setting it at server startup.
- Sending a SIGQUIT or SIGINT signal to mysql could result in a glibc double free or corruption error.
- 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.
- LIKE matches failed for code points of HALF WIDTH KATAKANA in the sjis and cp932 character sets.
- On EL7, installation of MySQL from RPM packages could fail if postfix had previously been installed using yum. 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:
- ERROR 1644 (45000): Multiple accounts exist for user_name, host_name
- that differ only in Host lettercase; remove all except one of them
- 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.
- A simultaneous OPTIMIZE TABLE and online ALTER TABLE on the same InnoDB table could result in deadlock.
- 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.

MySQL 5.5.40 (64-bit) 查看版本資訊

更新時間:2014-09-24
更新細節:

What's new in this version:

Bugs Fixed:
- InnoDB: An ALTER TABLE ... ADD FOREIGN KEY operation could cause a serious error.
- 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.
- InnoDB: During recovery, a segmentation fault would occur when marking a table as corrupt.
- yaSSL client code did not validate the encryption size or session ID length, which could cause the client to exit.
- MySQL installation from RPM packages could fail if Postfix had been installed using yum.
- yaSSL could fail preauthorization if the client supplied inaccurate buffer lengths.
- Competition between threads could lead to timeout failure trying to rotate the audit log file.
- On Linux (OEL6), if Sun DTrace was installed, the MySQL build failed.
- LPAD() and RPAD() could cause a server exit if the pad string argument was not well formed.
- The optimizer could create a zero-length column for a temporary table, causing a server exit.
- MOD for very small decimal right-hand arguments could cause a server exit.
- 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.
- The thread_concurrency system variable is deprecated, but no warning resulted from setting it at server startup.
- Sending a SIGQUIT or SIGINT signal to mysql could result in a glibc double free or corruption error.
- LIKE matches failed for code points of HALF WIDTH KATAKANA in the sjis and cp932 character sets.
- On EL7, installation of MySQL from RPM packages could fail if postfix had previously been installed using yum.
- 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:
> ERROR 1644 (45000): Multiple accounts exist for user_name, host_name
> that differ only in Host lettercase; remove all except one of them
- 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.

MySQL 5.6.20 (64-bit) 查看版本資訊

更新時間:2014-08-01
更新細節:

What's new in this version:

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.
- 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.
- CMake support was updated to handle CMake version 3.
- 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.
- Support for LinuxThreads has been removed from the source code. LinuxThreads was superseded by NPTL in Linux 2.6.
- 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.
- 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. This is because, with GTIDs enabled on the server, issuing a DROP TABLE in the cases just described while having only one GTID associated with each statement (the SQL thread does this following SET gtid_next='uuid:number') causes problems when there are not enough GTIDs for assignment to all the resulting statements following the division of the original DROP TABLE.
- A DROP TABLE statement might be split due to the behavior of the statement with respect to the current transaction varying, depending on table characteristics, as follows:
- DROP TABLE of a regular (not temporary) table is committed immediately
- DROP TABLE of a temporary table using a transactional storage engine is committed with the current transaction (following COMMIT)
- DROP TABLE of a temporary table that uses a nontransactional storage engine is committed immediately
- 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. If GTIDs are enabled but the value of gtid_next is not AUTOMATIC, issuing a DROP TABLE statement that mixes any of the table types described previously causes the server to have an insufficient number of GTIDs to write with all of the resulting statements into the binary log. In addition, DROP TABLE IF EXISTS is always written in the binary log for all tables specified in the statement, even if some or all of the tables do not exist.
- Because temporary tables are handled differently by DROP TABLE depending on whether they use a transactional or nontransactional storage engine, any tables named by a DROP TEMPORARY TABLE statement that do not exist are assumed to be transactional. This means that, if a DROP TEMPORARY TABLE with two nontransactional temporary tables is issued on the master, it would writes only one DROP TABLE statement naming both tables. If one of the temporary tables no longer exists on the slave, then, when the SQL thread executes the statement, it tries to divide it into multiple statements due to it affecting a nontransactional (but existing) temporary table and a nonexistent transactional temporary table; this leads to problems because the SQL thread has only one GTID for the original DROP TABLE statement but must write two DROP TABLE statements in the binary log.
- In addition, when the slave dropped temporary tables after detecting that the master had restarted, it logged one DROP TABLE statement per pseudo-thread and per database, but combined temporary tables using transactional and nontransactional storage engines in a single DROP TABLE statement.
- Now, we throw an error in the client session if gtid_next is set to a uuid:number value and a DROP TABLE statement is issued mixing any of the table types described previously.
- In addition, we now group the nonexistent temporary tables and assume them to be transactional only if at least one transactional temporary table is dropped by the statement. If no transactional temporary tables are dropped, any nonexistent temporary tables are assumed to be nontransactional temporary tables.
- The slave now also handles dropping of temporary tables correctly in the event of the restart by the master.
- InnoDB: Opening a parent table that has thousands of child tables could result in a long semaphore wait condition.
- InnoDB: For single item full-text searches, deleted documents were included in inverse document frequency (IDF) calculations.
- 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.
- InnoDB: A DELETE operation on a table with full-text search indexes raised an assertion.
- 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.
- 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.
- 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.
- 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.
- InnoDB: The fix for Bug#16418661 added superfluous buf_flush_list() logic to InnoDB startup code.
- 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.
- InnoDB: Due to differences in memory ordering on different processor types, some mutex and read-write lock flags were not read consistently.
- 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.
- 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.
- 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.
- 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.
- Replication: Quotation marks were not always handled correctly by LOAD DATA INFILE when written into the binary log.
- 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.
- Replication: A group of threads involved in acquiring locks could deadlock when the following events occurred:
- Dump thread reconnects from slave; on master, a new dump thread tries to kill zombie dump threads; having acquired the thread's LOCK_thd_data, it is about to acquire LOCK_log.
- Application thread executing show binary logs, having acquired LOCK_log and about to acquire LOCK_index.
- Application thread executing PURGE BINARY LOGS; having acquired LOCK_index, it is about to acquire LOCK_thread_count.
- Application thread executing SHOW PROCESSLIST (or SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST), having acquired LOCK_thread_count and about to acquire the zombie dump thread's LOCK_thd_data.
- This leads to the 4 threads deadlocking in the same order which the threads have been listed here.
- This problem arises because there are ordering rules for LOCK_log and LOCK_index, as well as rules for ordering LOCK_thread_count and LOCK_thd_data, but there are no rules for ordering across these two sets of locks. This was because the internal mysqld_list_processes() function invoked by SHOW PROCESSLIST acquired LOCK_thread_count for the complete lifetime of the function as well as acquiring and releasing each thread's LOCK_thd_data. Now this function takes a copy of the threads from the global thread list and performs its traversal on these, and only after releasing LOCK_thread_count. During this traversal, removal from the global thread list is blocked using LOCK_thd_remove such that the copies that would otherwise be destroyed by the removal remain valid during traversal. The locking order following this fix is shown here:
- LOCK_thd_remove -> LOCK_thd_data -> LOCK_log -> LOCK_index -> LOCK_thread_count
- Replication: On Windows, mysqldump failed if the error log file was deleted (missing) from the active MySQL server.
- 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.
- 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.
- Enabling optimizer trace could cause a server exit for queries with a subquery in a HAVING clause.
- SHA and MD5 functions failed for operations using the internal filename character set and could cause a server exit.
- Large arguments passed to mysqldump could lead to buffer overflow and program exit.
- Compiler flags were not passed to DTrace, causing problems for 32-bit builds cross-compiled on 64-bit platforms.
- 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.
- 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.
- 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.
- mysqladmin password masked the old password given on the command line, but not the new password.
- 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().
- For full-text queries on InnoDB tables, attempts to access deleted document IDs could lead to a server exit.
- MyISAM temporary files could be used to mount a code-execution attack.
- For queries that selected from the Performance Schema events_statements_current table, adding an ORDER BY clause could produce incorrect results.
- 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.
- 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).
- Clients could determine based on connection error message content whether an account existed.
- An assertion could be raised when creating a index on a prefix of a TINYBLOB or GEOMETRY column in an InnoDB column.
- 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.
- Configuring with cmake -DWITHOUT_SERVER to build clients without the server failed for builds outside of the source tree.
- 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.
- Deadlock could occur if three threads simultaneously performed INSTALL PLUGIN, SHOW VARIABLES, and mysql_change_user().
- mysql_config_editor exited when given an empty argument to the --login-path option.
- MySQL did not compile with Bison 3. A workaround is to downgrade to Bison 2.
- 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.
- 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.
- Client auto-reconnect did not work for clients linked against libmysqlclient, even with MYSQL_OPT_RECONNECT enabled.
- Upgrades using RPM packages could change the ownership of an installation directory.
- Proxy users were unable to execute statements if the proxied user password had expired.
- 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)