MySQL 5.6.25
更新細節:
# 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: The strict_* forms of innodb_checksum_algorithm settings (strict_none, strict_innodb, and strict_crc32) caused the server to halt when a non-matching checksum was encountered, even though the non-matching checksum was valid. For example, with innodb_checksum_algorithm=strict_crc32, encountering a valid innodb checksum caused the server to halt. Instead of halting the server, a message is now printed to the error log and the page is accepted as valid if it matches an innodb, crc32 or none checksum.
- InnoDB: The memcached set command permitted a negative expire time value. Expire time is stored internally as an unsigned integer. A negative value would be converted to a large number and accepted. The maximum expire time value is now restricted to INT_MAX32 to prevent negative expire time values.
- 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: Failure to check the status of a cursor transaction read-only option before reusing the cursor transaction for a write operation resulted in a server exit during a memcached workload.
- InnoDB: MDL locks taken by memcached clients caused a MySQL Enterprise Backup FLUSH TABLES WITH READ LOCK operation to hang.
- InnoDB: Estimates that were too low for the size of merge chunks in the result sorting algorithm caused a server exit.
- InnoDB: For full-text searches, the optimizer could choose an index that does not produce correct relevancy rankings.
- Partitioning: When creating a partitioned table, partition-level DATA DIRECTORY or INDEX DIRECTORY option values that contained an excessive number of characters were handled incorrectly.
- 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.
- References: See also Bug #19856162, Bug #74451.
- Replication: When binary logging was enabled, using stored functions and triggers resulting in a long running procedure that inserted many records caused the memory use to increase rapidly. This was due to memory being allocated per variable. The fix ensures that in such a situation, memory is allocated once and the same memory is reused.
- Replication: If an error was encountered while adding a GTID to the received GTID set, the log lock was not being correctly released. This could cause a deadlock.
- Replication: A slave running MySQL 5.6.24 or earlier could not connect to a master running MySQL 5.7.6 and later that had gtid_mode=OFF_PERMISSIVE or gtid_mode=ON_PERMISSIVE. The fix ensures that a slave running MySQL 5.6.25 and later can connect to such a master as long as the slave's gtid_mode is compatible. In other words, a slave running MySQL 5.6.25 and later which has gtid_mode=OFF can connect to a master running MySQL 5.7.6 and later which has gtid_mode=OFF_PERMISSIVE, and a slave running MySQL 5.6.25 and later which has gtid_mode=ON can connect to a master running MySQL 5.7.6 and later which has gtid_mode=ON_PERMISSIVE. Other combinations are incompatible.
- Replication: If an error occurred when using a multi-threaded slave, issuing a CHANGE MASTER TO statement which resulted in an ER_MTS_CHANGE_MASTER_CANT_RUN_WITH_GAPS error, and then issuing RESET SLAVE, made it impossible to change master due to repeated ER_MTS_CHANGE_MASTER_CANT_RUN_WITH_GAPS errors. Running the debug version of mysqld caused an unexpected exit in this case. The fix ensures that the recovery process for multi-threaded slaves avoids this.
- Replication: When using semisynchronous replication performance was degrading when the number of threads increased beyond a certain threshold. To improve performance, now only the thread which is committing is responsible for deleting the active transaction node. All other operations do not touch this active transaction list.
- Replication: Using mysqlbinlog to process log events greater than 1.6GB failed with an out of memory error. This was caused by an internal error converting the length variable. The fix upgrades the length variable to avoid overflow in both encoding and decoding functions.
- Replication: When master_info_repository=TABLE the receiver thread stores received event information in a table. The memory used in the process of updating the table was not being freed correctly and this could lead to an out of memory error. The fix ensures that after an event is flushed to the relay log file by a receiver thread, the memory used is freed.
- For small values of the read_rnd_buffer_size system variable, internal caching of temporary results could fail and cause query execution failure.
- The normalize_statement() UDF used by MySQL Enterprise Firewall could cause a server exit for certain password-related statements.
- A failed FLUSH PRIVILEGES statement followed by statements to create or drop accounts could cause a server exit.
- std::stringstream code used by MySQL Enterprise Firewall could cause a server exit.
- SHOW VARIABLES mutexes were being locked twice, resulting in a server exit.
- ull2dec() was modified to avoid a problem with GCC 5 in optimized mode.
- Using GCC 5, debug builds failed due to compiler warnings.
- A Provides rule in RPM .spec files misspelled “mysql-embedded” as “mysql-emdedded”.
- The mysql_firewall_max_query_size system variable should be read only at runtime, but it was possible to modify it.
- MySQL Enterprise Firewall could leak memory in the unlikely event of failure to store information in an INFORMATION_SCHEMA table.
- Using a MySQL 5.6 version of mysqladmin to change the password for an account on a MySQL 5.7.6 installation resulted in an unusable account password.
- AddressSanitizer compilation errors were silenced.
- Under certain conditions, the libedit command-line library could write outside an array boundary and cause a client program crash.
- mysql_config_editor could exit abnormally while encrypting passwords.
- Host value matching for the grant tables could fail to use the most specific of values that contained wildcard characters.
- For MySQL distributions linked against yaSSL, a corrupt client key file could cause clients to exit.
- For join queries with a large number of tables, the server could exit converting the join to a semi-join.
- Deleting rows from mysql.user following by granting privileges to a new account could result in a server exit.
- Renaming the mysql.procs_priv table and executing SHOW GRANTS resulted in a server exit.
- Within a stored procedure, access to view columns after DDL or FLUSH TABLES statements in the procedure could cause a server exit.
- Execution of certain BINLOG statements while temporary tables were open by HANDLER statements could cause a server exit.
- 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.
- CMake configuration was adjusted to handle new warnings reported by Clang 3.5, using the -Wpointer-bool-conversion and -Wundefined-bool-conversion compiler options.
- Loading corrupt spatial data into a MyISAM table could cause the server to exit during index building.
- Specifying --general_log_file= (with an empty value) at server startup caused the server to fail and exit.
- CMake configuration was adjusted to handle warnings reported by Clang 3.3.
- Some MySQL Enterprise Firewall diagnostic messages were written outside the control of the log_error_verbosity system variable.
- The server rejected empty COM_SHUTDOWN packets.
- Inappropriate -Werror options could appear in mysql_config --cflags output.
- In the Performance Schema threads table, the PROCESSLIST_STATE and PROCESSLIST_INFO values did not change for the thread/sql/main main thread instrument as the thread state changed.
- 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.
- Queries that included a HAVING clause based on nondeterministic functions could produce incorrect results.
- For logging of prepared statements to the general query log, the Execute line was logged after statement execution, not before.
- MySQL failed to compile using OpenSSL 0.9.8e.
版本下載:MySQL 5.6.25
MySQL 5.5.44
更新細節:
# 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.5.44
MySQL 5.6.24
更新細節:
# 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.6.24
MySQL 5.5.43
更新細節:
# 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.5.43
ZSNES 1.51
MySQL 5.5.42
更新細節:
# 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.5.42
MySQL 5.6.23
更新細節:
# 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 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.
- 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.
- 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.
- 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.
- InnoDB: Error messages regarding a size limitation on BLOB or TEXT data inserted in a single transaction have been revised.
- InnoDB: DML operations on a table with full-text search indexes raised an invalid assertion.
- InnoDB: A multiple-table delete operation caused the server to halt.
- InnoDB: A FLUSH TABLES operation raised an assertion.
- 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.
- 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.
- 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.
- InnoDB: The integer column value was handled incorrectly for the memcached incr and decr commands.
- 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.
- 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.
- 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.
- 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.
- 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.
- On Ubuntu 14.10, MySQL install operations could fail to reload AppArmor.
- EXPLAIN within an XA transaction could raise an assertion.
- 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.
- 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.
- For failure to create a temporary table due to being out of file descriptors, the server exited rather than returning an error.
- 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.
- For UPDATE and DELETE statements, the server could exit after attempting to access an uninitialized data structure.
- Starting the server with start service or mysqld_safe could result in failure to use the correct plugin directory.
- 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.
- If my_write() encountered a disk-full condition, it could return an incorrect error value.
- InnoDB boolean full-text searches incorrectly handled + combined with parentheses; for example, +word1 +(>word2 <word3).
- MySQL failed to compile with GCC 4.9.1 in debug mode.
- For debug builds, the server could exit due to an optimizer failure to allocate enough memory for group references.
- The server no longer logs the following warnings because they are uninformative: Client failed to provide its character set. 'charset' will be used as client character set.
- 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.23
MySQL 5.6.22
更新細節:
# 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.6.22
MySQL 5.5.41
更新細節:
# 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.5.41
MySQL 5.6.21
更新細節:
* 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).
- 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.
- 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.6.21
MySQL 5.5.40
更新細節:
* 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.5.40
MySQL 5.6.20
更新細節:
* 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
- 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 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.
- 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.
- 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.
版本下載:MySQL 5.6.20
MySQL 5.5.39
更新細節:
* Functionality Added or Changed
- CMake support was updated to handle CMake version 3.
- The timed_mutexes system variable has no effect and is deprecated.
* Bugs Fixed
- InnoDB: Opening a parent table that has thousands of child tables could result in a long semaphore wait condition.
- 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: 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: 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.
- 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.
- 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().
- MyISAM temporary files could be used to mount a code-execution attack.
- 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.
- For a view defined on a UNION, the server could create an invalid view definition.
- Deadlock could occur if three threads simultaneously performed INSTALL PLUGIN, SHOW VARIABLES, and mysql_change_user().
- 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.
- File permissions and line endings of several test and configuration files were made more consistent to avoid warnings from package checkers.
版本下載:MySQL 5.5.39
MySQL 5.6.19
更新細節:
# Functionality Added or Changed
* The obsolete and unmaintained charset2html utility has been removed from MySQL distributions.
* 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.
* 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.
* InnoDB: Enabling the InnoDB Table Monitor would result in a ib_table->stat_initialized assertion failure.
* 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.
* 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.
* 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.
* 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.
* 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.
* Replication: The server did not always handle the auto.cnf file correctly in cases where this file's permissions were incorrect.
* 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.
* 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.
* The server could fail to properly reprepare triggers that referred to another table after that table was truncated.
* Certain INFORMATION_SCHEMA queries could cause a server exit.
* 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.
* Solaris-specific scripts were included in and installed by non-Solaris packages.
* Concurrent execution of a FLUSH TABLE operation and a stored program that used a cursor could cause a server exit.
* 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.
* 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.
* mysqldump could create table definitions in the dump file that resulted in Too many columns errors when reloading the dump file.
* 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().
* The optimizer trace could cause a server exit in cases where a subquery was transformed away.
* The Debug Sync facility could lose a signal, leading to a spurious ER_DEBUG_SYNC_TIMEOUT error.
* Compilation problems were fixed for errors reported by Clang and gcc when compiling in C++11 mode.
* CMake produced not-useful warnings about INTERFACE_LINK_LIBRARIES policy.
* LOAD DATA LOCAL INFILE could use all CPU if import errors occurred when there were no line delimiters.
* On Windows, REPAIR TABLE and OPTIMIZE TABLE failed for MyISAM tables with .MYD files larger than 4GB.
* 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;
* Updates could fail to update all applicable rows in cases where multiple key values were identical except for trailing spaces.
版本下載:MySQL 5.6.19
MySQL 5.5.38
更新細節:
# Bugs Fixed
* 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.
* 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.
* Certain INFORMATION_SCHEMA queries could cause a server exit.
* 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.
* Solaris-specific scripts were included in and installed by non-Solaris packages.
* EXPLAIN on a query with an EXISTS subquery containing a UNION could cause a server exit. Multiple executions of a prepared EXPLAIN on a UNION of subqueries could cause a server exit.
* Executing a correlated subquery on an ARCHIVE table which has an AUTO_INCREMENT column caused the server to hang.
* 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.
* 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.
* 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().
* CMake produced not-useful warnings about INTERFACE_LINK_LIBRARIES policy.
* LOAD DATA LOCAL INFILE could use all CPU if import errors occurred when there were no line delimiters.
* 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;
版本下載:MySQL 5.5.38