MySQL 歷史版本列表
MySQL 是一個開源的 RDBMS(關係數據庫管理系統),它支持用 C,C ++,Java,Perl 和 PHP 等各種編程語言編寫的請求。由於其高速度和靈活性,MySQL 已成為主要用於開發各種形狀和大小的 Web 應用程序的最流行的數據庫系統之一。自 1995 年上市以來,這種非常受歡迎的開源數據庫管理系統已經應用於當今幾乎所有互聯網用戶的無數項目中。今天一些最受歡迎的 MySQL 用戶是 ... MySQL 軟體介紹MySQL (32-bit)MySQL (64-bit)MySQL WorkbenchMySQL Workbench (32-bit)MySQL Workbench (64-bit)
更新時間:2016-06-04
更新細節:
What's new in this version:
ACCOUNT MANAGEMENT NOTES:
- In MySQL 5.7.8, the maximum length of MySQL user names was increased from 16 to 32 characters, but some applicable contexts for this increase were overlooked. Additional changes in maximum user name length now have been applied.
- If you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate the changes to the mysql system database. A server from MySQL 5.7.13 or higher for which mysql_upgrade has not been run continues to permit a maximum of 77 characters in the system tables mentioned previously, and an ER_USER_COLUMN_OLD_LENGTH error will occur in those system table contexts where a user_name@host_name value from 78 to 93 characters long is given.
AUDIT LOG NOTES:
- The audit_log plugin that forms the basis for MySQL Enterprise Audit now supports fine-grained filtering of events. This enables a reduction in the number of log entries written to the audit log file, which increases overall performance due to fewer write operations during log recording. It also simplifies subsequent audit log processing in terms of readability and processing time.
- Fine-grained audit log filtering is rule based, implemented using tables that store filter definitions and a set of user-defined functions (UDFs) that enable filter manipulation. To simplify installing the tables and UDFs along with the audit_log plugin, an installation script is now provided. For more information, see Installing or Uninstalling MySQL Enterprise Audit, and Audit Log Filtering.
- By default, audit log filtering now logs no auditable events for any users. This differs from the pre-MySQL 5.7.13 legacy audit log, which logs all auditable events for all users. To produce log-everything behavior, see the installation instructions.
CONFIGURATION NOTES:
- On platforms for which systemd support is installed, systemd has the capability of managing multiple MySQL instances. For details, see Configuring Multiple MySQL Instances Using systemd. Consequently, mysqld_multi and mysqld_multi.server are not installed because they are unnecessary. (Bug #81093, Bug #23134620)
SECURITY NOTES:
- The linked OpenSSL library for the MySQL Commercial Server has been updated to version 1.0.1t. Issues fixed in the new version are described at http://www.openssl.org/news/vulnerabilities.html.
- This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #23229564)
- MySQL Server now includes an SQL interface for keyring key management, implemented as a set of user-defined functions (UDFs) that access the functions provided by the internal keyring service. For more information, see Keyring Key Management Functions. For information about the keyring service functions invoked by the UDFs, see The Keyring Service. For general keyring information, see The MySQL Keyring.
FUNCTIONALITY ADDED OR CHANGED:
- For better separation of output from multiple statements, mysqltest now flushes output sent to stdout when the output destination is not a file. Previously, flushing occurred only for file output. (Bug #21435906)
- support-files/MacOSX/ReadMe.txt is no longer included in MySQL distributions. (Bug #81038, Bug #23088916)
- The version of the tcmalloc library included in MySQL distributions was very old. It has been removed and is no longer included with MySQL. (Bug #80994, Bug #23068660)
- The my_make_scrambled_password() function in the C client library was restricted earlier in MySQL 5.7 (not exported to client programs). The function has once again been made visible to client programs. (Bug #80974, Bug #23061746)
- It is possible to use ALTER TABLE to change the default value of a column col_name, which may change the value of a generated column expression that refers to the column using DEFAULT(col_name). For this reason, ALTER TABLE operations that change the definition of a column now cause a table rebuild if any generated column expression uses DEFAULT(). (Bug #80299, Bug #22680839)
- This release adds an unquoting extraction operator ->>, sometimes also referred to as an inline path operator, for use with JSON documents stored in MySQL. The new operator is similar to the -> operator, but performs JSON unquoting of the value as well.
- The ->> operator can be used in SQL statements wherever JSON_UNQUOTE(JSON_EXTRACT()) would be allowed. This includes (but is not limited to) SELECT lists, WHERE and HAVING clauses, and ORDER BY and GROUP BY clauses.
- For more information, see Functions That Search JSON Values, and JSON Path Syntax. (Bug #78736, Bug #21980346)
BUGS FIXED:
- InnoDB: A rollback operation run concurrently with an operation involving a generated virtual column caused a server exit. (Bug #23313102)
- References: This issue is a regression of: Bug #21869656.
- InnoDB: Potential buffer overflow issues were corrected for the InnoDB memcached plugin. (Bug #23187607)
- InnoDB: An ALTER TABLE operation that added an AUTO_INCREMENT column on a table with virtual columns raised an assertion. (Bug #23052231)
- InnoDB: Statements executed in a transaction that was rolled back asynchronously by a higher priority transaction caused a deadlock error and subsequent replication failure. (Bug #23021168, Bug #80898)
- InnoDB: An ALTER TABLE operation that attempted to add a generated virtual column and a full-text index raised an assertion. (Bug #23014521)
- InnoDB: The full-text index cache was freed during a background index cache synchronization. (Bug #22996488)
- InnoDB: A full-text index operation raised an assertion. (Bug #22963169)
- InnoDB: Memory was allocated to I/O slots unnecessarily, causing an apparent memory leak. (Bug #22956469, Bug #80772)
- InnoDB: An ALTER TABLE operation raised an assertion when attempting to create a key containing a generated column. (Bug #22951879)
- InnoDB: A startup failure due to an invalid option resulted in a server exit after a subsequent restart. An error returned by the innobase_start_or_create_for_mysql function was not checked. (Bug #22939581, Bug #80761)
- InnoDB: An ALTER TABLE ... IMPORT TABLESPACE operation on file-per-table tablespace containing an encrypted table failed when run in a different session than the preceding ALTER TABLE ... DISCARD TABLESPACE operation. (Bug #22918999, Bug #80708)
- InnoDB: A FLUSH TABLES operation on a table with a discarded tablespace raised an assertion. (Bug #22899690, Bug #80669)
- InnoDB: A DML operation involving a table with a virtual column raised an assertion. (Bug #22899305)
- InnoDB: An invalid read at innobase_get_computed_value() raised a Valgrind error. (Bug #22898168, Bug #80667)
- InnoDB: Online DDL operations like ALTER TABLE ... ADD INDEX were not permitted for tables created with the ENCRYPTION attribute. (Bug #22897921)
- InnoDB: InnoDB memcached code assumed the nonexistence of the htonll() function on OS X, resulting in a build failure on OS X 10.10 and later. (Bug #22865112)
- InnoDB: Starting the server in read-only mode failed when encrypted tables were present. The call to fil_encryption_rotate() was not skipped when the server was started in read-only mode. (Bug #22723797)
- InnoDB: An R-tree purge operation raised an assertion. (Bug #22698076, Bug #80327)
- InnoDB: An INSERT operation on a table with a FULLTEXT index and FTS_DOC_ID column failed because the inserted FTS_DOC_ID value exceeded the permitted gap between consecutive FTS_DOC_ID values. To avoid this problem, the permitted gap between the largest used FTS_DOC_ID value and new FTS_DOC_ID value was raised from 10000 to 65535. (Bug #22679185)
- InnoDB: Validation code for transparent page compression incorrectly permitted innodb_strict_mode=OFF, which allowed the COMPRESSION attribute to be applied to a general tablespace. Page compression is only supported with file-per-table tablespaces. (Bug #22615096, Bug #80182)
- InnoDB: An memory order issue related to atomic operations caused assertion failures on ARM64 and POWER platforms. (Bug #22608616)
- InnoDB: DROP TABLESPACE returned an error if the remote general tablespace data file was missing. (Bug #22232892, Bug #79330)
- InnoDB: An ALTER TABLE operation that changed table row format from COMPACT to COMPRESSED raised an assertion. A function involved in the operation passed incorrect page size information. (Bug #22046353)
- InnoDB: With innodb_autoinc_lock_mode=0, multiple threads waiting for a table-level lock caused an unexpected deadlock. (Bug #21983865, Bug #78761)
- InnoDB: A race condition in trx_kill_blocking() raised an assertion. (Bug #21508537)
- InnoDB: An OPTIMIZE TABLE operation on a table with a full-text index raised an assertion. (Bug #21378944)
- InnoDB: A buffer pool load operation resulted in a “Cannot allocate 0 bytes” error. (Bug #21371070)
- InnoDB: A FLUSH TABLES ... FOR EXPORT operation appeared to stall. A loop in the ibuf_contract_in_background function failed to exit. (Bug #21133329, Bug #77011)
- InnoDB: A full-text query raised an assertion. Under certain circumstances, DDL operations such as ALTER TABLE ... RENAME caused full-text auxiliary tables to be removed on server restart. (Bug #13651665)
- Replication: With gtid_mode=ON, executing an empty query before setting gtid_next made the latter action fail. It was because only statements that do not change the data can be executed before one can successfully change gtid_next, and an empty query was not considered one of those “safe” statements. This fix allows the setting of gtid_next after an empty query. (Bug #22811150)
- Replication: Slaves running MySQL 5.7 could not connect to a MySQL 5.5 master due to an error retrieving the server_uuid, which is not part of MySQL 5.5. This was caused by changes in the method of retrieving the server_uuid. (Bug #22748612)
- References: This issue is a regression of: Bug #21455603.
- Replication: Setting certain semisynchronous-replication configurations on the master server when semisynchronous replication was not enabled on it might cause the server to exit. This fix prevents the unexpected exits to occur in the situation. (Bug #22602324)
- Replication: The variable explicit_defaults_ts was not initialized during the construction of a Query_event object. That caused Valgrind warnings for dependency on an uninitialized variable. This fix makes sure the variable is initialized. (Bug #22110916, Bug #78999)
- References: This issue is a regression of: Bug #18885916, Bug #72794.
- Replication: In the next_event() function, which is called by a slave's SQL thread to read the next even from the relay log, the SQL thread did not release the relaylog.log_lock it acquired when it ran into an error (for example, due to a closed relay log), causing all other threads waiting to acquire a lock on the relay log to hang. With this fix, the lock is released before the SQL thread leaves the function under the situation. (Bug #21697821)
- References: See also: Bug #20492319.
- Replication: A partially failed statement was not correctly consuming an auto-generated or specified GTID when binary logging was disabled. The fix ensures that a partially failed DROP TABLE, a partially failed DROP USER or a partially failed DROP VIEW consume respectively the relevant GTID and save it into @@GLOBAL.GTID_EXECUTED and mysql.gtid_executed table when binary logging is disabled. (Bug #21686749)
- Replication: An intermittent ASan error was being reported on the rpl.rpl_checksum_cache test. The error reported was related to the binary log sender doing a heap-use-after-free on a given memory address. (Bug #78995, Bug #22109863)
- Replication: mysqldump has been updated to make it compatible with multi-source replication. Now when replication channels other than the default channel are found, mysqldump --dump-slave outputs a CHANGE MASTER TO statement for each replication channel. (Bug #78467, Bug #21855705)
- Replication: If a multi-threaded replication slave running with relay_log_recovery=1 stopped unexpectedly, during restart the relay log recovery process could fail. This was due to transaction inconsistencies not being filled, see Handling an Unexpected Halt of a Replication Slave. Prior to this fix, to recover from this situation required manually setting relay_log_recovery=0, starting the slave with START SLAVE UNTIL SQL_AFTER_MTS_GAPS to fix any transaction inconsistencies and then restarting the slave with relay_log_recovery=1. This process has now been automated, enabling relay log recovery of a multi-threaded slave upon restart automatically. (Bug #77496, Bug #21507981)
- Fedora builds now are configured using -DMYSQL_MAINTAINER_MODE=0 to silence GCC 6 warnings. (Bug #23274249)
- Allocation of a large number (2^20) of Performance Schema index statistic objects could cause a server exit. (Bug #23188107)
- If the keyring_okv plugin configuration directory was missing, attempts to rotate the InnoDB master key could cause a server exit. (Bug #23149683)
- INSERT with ON DUPLICATE KEY UPDATE and REPLACE on a table with a foreign key constraint defined failed with an incorrect “duplicate entry” error rather than a foreign key constraint violation error. (Bug #23135731)
- References: This issue is a regression of: Bug #78853, Bug #22037930.
- Contention in Performance Schema mutex instrumentation creation and destruction has been reduced, such that mutexes for which instruments are frequently created and destroyed are maintained in separate pages from those for which instruments are rarely created and destroyed. (Bug #22965826)
- With certain build options, an uninitialized variable in get_key_scans_params() could produce a compilation error. (Bug #22916059)
- Adding new tokens to the parser caused query digest values to change. (Bug #22906606)
- For debug builds, CONCAT_WS() could raise an assertion if there was nothing to append. (Bug #22888420)
- Fixed Valgrind warnings for failed LEAST() evaluations. (Bug #22883278)
- INET_NTOA() could cause a server exit when producing an error message. (Bug #22881810)
- References: This issue is a regression of: Bug #22042027.
- The my_write() call could cause a server exit if it attempted to check the current connection and the connection had been killed. (Bug #22867809)
- References: This issue is a regression of: Bug #21688407.
- Invoking Enterprise Encryption functions in multiple threads simultaneously could cause a server exit. (Bug #22839278)
- Setting log_syslog_tag to NULL could cause a server exit. (Bug #22834781)
- References: This issue is a regression of: Bug #22180046.
- If the expression for an indexed generated column contained an AND or OR operator, the optimizer could choose that index too often and create execution plans that produced incorrect results. (Bug #22810883)
- CREATE TABLE statements in mysqlpump output could be missing KEY clauses and would not load. (Bug #22726732)
- Attempting to use Enterprise Encryption functions after creating and dropping them could cause a server exit. (Bug #22669012)
- Setting sort_buffer_size to a very large value could cause some operations to fail and result in a server exit. (Bug #22594514)
- For an InnoDB table containing generated columns, using the table in a join could result in a server exit due to improper error checking. (Bug #22561845)
- REPLACE on a table with an indexed generated column could cause a server exit if the index prefix length was calculated incorrectly. (Bug #22445211)
- An UPDATE operation affecting a generated virtual BLOB column could cause a server exit. (Bug #22444212)
- SHOW CREATE TABLE for a table containing a generated column could cause a server exit or produce an Illegal mix of collations error. (Bug #22392268)
- On a slave server, replication of an UPDATE statement that updated an indexed BLOB virtual generated column of an InnoDB table could cause a server exit. (Bug #22241015)
- An assertion could be raised when a deadlock occurred due to a SELECT ... GROUP BY ... FOR UPDATE query executed using a Loose Index Scan. (Bug #22187476)
- mysqlpump could exit due to improper handling of error conditions in a dump thread. (Bug #22017120)
- Several potential buffer overflow issues were corrected. (Bug #21977380, Bug #23187436, Bug #23202778, Bug #23195370, Bug #23202699)
- If the CA certificate as given to the --ssl-ca option had an invalid path, yaSSL returned an error message different from OpenSSL. Now both return SSL connection error: SSL_CTX_set_default_verify_paths failed. (Bug #21920657)
- Installing MySQL from a yum or zypper repository resulted in /var/log/mysqld.log being created with incorrect user and group permissions. (Bug #21879694, Bug #78512)
- With show_compatibility_56=OFF, SHOW VARIABLES and SHOW STATUS statements having a WHERE clause did not work. (Bug #21783883)
- The audit_log plugin failed to abort the current operation when told to do so by a plugin handler for a MYSQL_AUDIT_PARSE_PREPARSE event. (Bug #21457956)
- Memory leaks reported by Valgrind for mysqlpump were fixed. (Bug #21237667)
- Some string functions returned one or a combination of their parameters as their result. If one of the parameters had a non-ASCII character set, the result string had the same character set, resulting in incorrect behavior when an ASCII string was expected. (Bug #18740222)
- On Fedora 24, upgrades using a Community MySQL Server RPM failed to replace an installed MariaDB Galera server due to a change in the MariaDB package. (Bug #81390, Bug #23273818)
- The mysql_read_defaults_options() function was missing a break statement, causing any option value for the --ssl-cipher option also to be applied to the --tls-version option, with unpredictable results. (Bug #81139, Bug #23129821)
- A DELETE from joined tables using a derived table in the WHERE clause failed if one of the joined tables was used in the derived table. (Bug #81014, Bug #23074801)
- Compiling of clients that used the MySQL C API could fail if they used an obsolete path to mysql.h or and did not set the include path. This was due to use of #include notation rather than #include "file_name" in internal MySQL header files, which have been adjusted. (Bug #80935, Bug #23047194)
- MySQL did not compile under Solaris 12 using Sun Studio. To correct this, instances of __attribute__ were changed to MY_ATTRIBUTE. (Bug #80748, Bug #22932576)
- The service_mysql_keyring.h and services.h header files misspelled mysql_keyring_service_st as mysql_keyring_file_service_st. (Bug #80688, Bug #22908232)
- The fix for Bug #79194 did not cover the eq_ref access method, with the result that left joins could return incorrect results.
- This bug fix has a very small negative performance effect such that it fails to cache an eq_ref-accessed row that is on the inner side of an outer join. Regular inner joins are not affected.
- References: This issue is a regression of: Bug #79194, Bug #22176604.
- The sanity() macro in strings/decimal.c produced Valgrind warnings due to reading uninitialized buffer contents. (Bug #80461, Bug #22782203, Bug #22839915)
- Starting the server with --initialize failed if the keyring_file_data system variable was also set at startup. To handle this, with --initialize the server no longer skips registration of plugins loaded with the --early-plugin-load option. (Bug #80451, Bug #22777039)
- Loading the Rewriter query rewrite plugin when there was no query_rewrite database resulted in Valgrind warnings. (Bug #80333, Bug #22710312)
- The optimizer transformed EXISTS (SELECT * ...) constructs to EXISTS (SELECT 1 ...) before all columns in the inner subquery had been resolved, which could result in rejection of valid queries that included a HAVING clause without GROUP BY in the subquery. (Bug #80231, Bug #22655856)
- For a server compiled with -DWITH_PERFSCHEMA_STORAGE_ENGINE=0, a memory leak could occur for buffered log messages used during server startup. (Bug #80089, Bug #22578574)
- A query could return incorrect results under these conditions: A column with a default value contained NULL; SELECT DISTINCT or a GROUP BY clause was used and the column containing the NULL value was part of the select list; an InnoDB temporary table was used during query processing. (Bug #79591, Bug #22343910)
- A null pointer dereference of a parser structure could occur during stored procedure name validation. (Bug #79396, Bug #22286421)
- Database initialization failed during installation using Ubuntu 15.10 packages. (Bug #79377, Bug #22252900)
- mysql_upgrade failed to widen the User and Proxied_user columns in the mysql.proxies_priv system table from 16 to 32 characters. (Bug #78254, Bug #21762656)
- Failure of UNINSTALL PLUGIN could lead to inaccurate or confusing errors for subsequent INSTALL PLUGIN operations. (Bug #74977, Bug #20085672)
- mysqld_multi displayed misleading error messages when it was unable to execute my_print_defaults. (Bug #74636, Bug #19920049)
- Previously, upgrading the server using an RPM package (including installation using yum) required upgrading the client package to the same MySQL version, which may be undesirable for some installations. This rule has been relaxed so that upgrading to a General Availability (GA) server version requires only that some GA client version be installed, which is less likely to require a client upgrade. (Bug #72230, Bug #18518216)
- mysqldump failed silently with no error message when it encountered an error while executing FLUSH LOGS. (Bug #71783, Bug #18284273)
更新時間:2016-06-04
更新細節:
What's new in this version:
ACCOUNT MANAGEMENT NOTES:
- In MySQL 5.7.8, the maximum length of MySQL user names was increased from 16 to 32 characters, but some applicable contexts for this increase were overlooked. Additional changes in maximum user name length now have been applied.
- If you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate the changes to the mysql system database. A server from MySQL 5.7.13 or higher for which mysql_upgrade has not been run continues to permit a maximum of 77 characters in the system tables mentioned previously, and an ER_USER_COLUMN_OLD_LENGTH error will occur in those system table contexts where a user_name@host_name value from 78 to 93 characters long is given.
AUDIT LOG NOTES:
- The audit_log plugin that forms the basis for MySQL Enterprise Audit now supports fine-grained filtering of events. This enables a reduction in the number of log entries written to the audit log file, which increases overall performance due to fewer write operations during log recording. It also simplifies subsequent audit log processing in terms of readability and processing time.
- Fine-grained audit log filtering is rule based, implemented using tables that store filter definitions and a set of user-defined functions (UDFs) that enable filter manipulation. To simplify installing the tables and UDFs along with the audit_log plugin, an installation script is now provided. For more information, see Installing or Uninstalling MySQL Enterprise Audit, and Audit Log Filtering.
- By default, audit log filtering now logs no auditable events for any users. This differs from the pre-MySQL 5.7.13 legacy audit log, which logs all auditable events for all users. To produce log-everything behavior, see the installation instructions.
CONFIGURATION NOTES:
- On platforms for which systemd support is installed, systemd has the capability of managing multiple MySQL instances. For details, see Configuring Multiple MySQL Instances Using systemd. Consequently, mysqld_multi and mysqld_multi.server are not installed because they are unnecessary. (Bug #81093, Bug #23134620)
SECURITY NOTES:
- The linked OpenSSL library for the MySQL Commercial Server has been updated to version 1.0.1t. Issues fixed in the new version are described at http://www.openssl.org/news/vulnerabilities.html.
- This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #23229564)
- MySQL Server now includes an SQL interface for keyring key management, implemented as a set of user-defined functions (UDFs) that access the functions provided by the internal keyring service. For more information, see Keyring Key Management Functions. For information about the keyring service functions invoked by the UDFs, see The Keyring Service. For general keyring information, see The MySQL Keyring.
FUNCTIONALITY ADDED OR CHANGED:
- For better separation of output from multiple statements, mysqltest now flushes output sent to stdout when the output destination is not a file. Previously, flushing occurred only for file output. (Bug #21435906)
- support-files/MacOSX/ReadMe.txt is no longer included in MySQL distributions. (Bug #81038, Bug #23088916)
- The version of the tcmalloc library included in MySQL distributions was very old. It has been removed and is no longer included with MySQL. (Bug #80994, Bug #23068660)
- The my_make_scrambled_password() function in the C client library was restricted earlier in MySQL 5.7 (not exported to client programs). The function has once again been made visible to client programs. (Bug #80974, Bug #23061746)
- It is possible to use ALTER TABLE to change the default value of a column col_name, which may change the value of a generated column expression that refers to the column using DEFAULT(col_name). For this reason, ALTER TABLE operations that change the definition of a column now cause a table rebuild if any generated column expression uses DEFAULT(). (Bug #80299, Bug #22680839)
- This release adds an unquoting extraction operator ->>, sometimes also referred to as an inline path operator, for use with JSON documents stored in MySQL. The new operator is similar to the -> operator, but performs JSON unquoting of the value as well.
- The ->> operator can be used in SQL statements wherever JSON_UNQUOTE(JSON_EXTRACT()) would be allowed. This includes (but is not limited to) SELECT lists, WHERE and HAVING clauses, and ORDER BY and GROUP BY clauses.
- For more information, see Functions That Search JSON Values, and JSON Path Syntax. (Bug #78736, Bug #21980346)
BUGS FIXED:
- InnoDB: A rollback operation run concurrently with an operation involving a generated virtual column caused a server exit. (Bug #23313102)
- References: This issue is a regression of: Bug #21869656.
- InnoDB: Potential buffer overflow issues were corrected for the InnoDB memcached plugin. (Bug #23187607)
- InnoDB: An ALTER TABLE operation that added an AUTO_INCREMENT column on a table with virtual columns raised an assertion. (Bug #23052231)
- InnoDB: Statements executed in a transaction that was rolled back asynchronously by a higher priority transaction caused a deadlock error and subsequent replication failure. (Bug #23021168, Bug #80898)
- InnoDB: An ALTER TABLE operation that attempted to add a generated virtual column and a full-text index raised an assertion. (Bug #23014521)
- InnoDB: The full-text index cache was freed during a background index cache synchronization. (Bug #22996488)
- InnoDB: A full-text index operation raised an assertion. (Bug #22963169)
- InnoDB: Memory was allocated to I/O slots unnecessarily, causing an apparent memory leak. (Bug #22956469, Bug #80772)
- InnoDB: An ALTER TABLE operation raised an assertion when attempting to create a key containing a generated column. (Bug #22951879)
- InnoDB: A startup failure due to an invalid option resulted in a server exit after a subsequent restart. An error returned by the innobase_start_or_create_for_mysql function was not checked. (Bug #22939581, Bug #80761)
- InnoDB: An ALTER TABLE ... IMPORT TABLESPACE operation on file-per-table tablespace containing an encrypted table failed when run in a different session than the preceding ALTER TABLE ... DISCARD TABLESPACE operation. (Bug #22918999, Bug #80708)
- InnoDB: A FLUSH TABLES operation on a table with a discarded tablespace raised an assertion. (Bug #22899690, Bug #80669)
- InnoDB: A DML operation involving a table with a virtual column raised an assertion. (Bug #22899305)
- InnoDB: An invalid read at innobase_get_computed_value() raised a Valgrind error. (Bug #22898168, Bug #80667)
- InnoDB: Online DDL operations like ALTER TABLE ... ADD INDEX were not permitted for tables created with the ENCRYPTION attribute. (Bug #22897921)
- InnoDB: InnoDB memcached code assumed the nonexistence of the htonll() function on OS X, resulting in a build failure on OS X 10.10 and later. (Bug #22865112)
- InnoDB: Starting the server in read-only mode failed when encrypted tables were present. The call to fil_encryption_rotate() was not skipped when the server was started in read-only mode. (Bug #22723797)
- InnoDB: An R-tree purge operation raised an assertion. (Bug #22698076, Bug #80327)
- InnoDB: An INSERT operation on a table with a FULLTEXT index and FTS_DOC_ID column failed because the inserted FTS_DOC_ID value exceeded the permitted gap between consecutive FTS_DOC_ID values. To avoid this problem, the permitted gap between the largest used FTS_DOC_ID value and new FTS_DOC_ID value was raised from 10000 to 65535. (Bug #22679185)
- InnoDB: Validation code for transparent page compression incorrectly permitted innodb_strict_mode=OFF, which allowed the COMPRESSION attribute to be applied to a general tablespace. Page compression is only supported with file-per-table tablespaces. (Bug #22615096, Bug #80182)
- InnoDB: An memory order issue related to atomic operations caused assertion failures on ARM64 and POWER platforms. (Bug #22608616)
- InnoDB: DROP TABLESPACE returned an error if the remote general tablespace data file was missing. (Bug #22232892, Bug #79330)
- InnoDB: An ALTER TABLE operation that changed table row format from COMPACT to COMPRESSED raised an assertion. A function involved in the operation passed incorrect page size information. (Bug #22046353)
- InnoDB: With innodb_autoinc_lock_mode=0, multiple threads waiting for a table-level lock caused an unexpected deadlock. (Bug #21983865, Bug #78761)
- InnoDB: A race condition in trx_kill_blocking() raised an assertion. (Bug #21508537)
- InnoDB: An OPTIMIZE TABLE operation on a table with a full-text index raised an assertion. (Bug #21378944)
- InnoDB: A buffer pool load operation resulted in a “Cannot allocate 0 bytes” error. (Bug #21371070)
- InnoDB: A FLUSH TABLES ... FOR EXPORT operation appeared to stall. A loop in the ibuf_contract_in_background function failed to exit. (Bug #21133329, Bug #77011)
- InnoDB: A full-text query raised an assertion. Under certain circumstances, DDL operations such as ALTER TABLE ... RENAME caused full-text auxiliary tables to be removed on server restart. (Bug #13651665)
- Replication: With gtid_mode=ON, executing an empty query before setting gtid_next made the latter action fail. It was because only statements that do not change the data can be executed before one can successfully change gtid_next, and an empty query was not considered one of those “safe” statements. This fix allows the setting of gtid_next after an empty query. (Bug #22811150)
- Replication: Slaves running MySQL 5.7 could not connect to a MySQL 5.5 master due to an error retrieving the server_uuid, which is not part of MySQL 5.5. This was caused by changes in the method of retrieving the server_uuid. (Bug #22748612)
- References: This issue is a regression of: Bug #21455603.
- Replication: Setting certain semisynchronous-replication configurations on the master server when semisynchronous replication was not enabled on it might cause the server to exit. This fix prevents the unexpected exits to occur in the situation. (Bug #22602324)
- Replication: The variable explicit_defaults_ts was not initialized during the construction of a Query_event object. That caused Valgrind warnings for dependency on an uninitialized variable. This fix makes sure the variable is initialized. (Bug #22110916, Bug #78999)
- References: This issue is a regression of: Bug #18885916, Bug #72794.
- Replication: In the next_event() function, which is called by a slave's SQL thread to read the next even from the relay log, the SQL thread did not release the relaylog.log_lock it acquired when it ran into an error (for example, due to a closed relay log), causing all other threads waiting to acquire a lock on the relay log to hang. With this fix, the lock is released before the SQL thread leaves the function under the situation. (Bug #21697821)
- References: See also: Bug #20492319.
- Replication: A partially failed statement was not correctly consuming an auto-generated or specified GTID when binary logging was disabled. The fix ensures that a partially failed DROP TABLE, a partially failed DROP USER or a partially failed DROP VIEW consume respectively the relevant GTID and save it into @@GLOBAL.GTID_EXECUTED and mysql.gtid_executed table when binary logging is disabled. (Bug #21686749)
- Replication: An intermittent ASan error was being reported on the rpl.rpl_checksum_cache test. The error reported was related to the binary log sender doing a heap-use-after-free on a given memory address. (Bug #78995, Bug #22109863)
- Replication: mysqldump has been updated to make it compatible with multi-source replication. Now when replication channels other than the default channel are found, mysqldump --dump-slave outputs a CHANGE MASTER TO statement for each replication channel. (Bug #78467, Bug #21855705)
- Replication: If a multi-threaded replication slave running with relay_log_recovery=1 stopped unexpectedly, during restart the relay log recovery process could fail. This was due to transaction inconsistencies not being filled, see Handling an Unexpected Halt of a Replication Slave. Prior to this fix, to recover from this situation required manually setting relay_log_recovery=0, starting the slave with START SLAVE UNTIL SQL_AFTER_MTS_GAPS to fix any transaction inconsistencies and then restarting the slave with relay_log_recovery=1. This process has now been automated, enabling relay log recovery of a multi-threaded slave upon restart automatically. (Bug #77496, Bug #21507981)
- Fedora builds now are configured using -DMYSQL_MAINTAINER_MODE=0 to silence GCC 6 warnings. (Bug #23274249)
- Allocation of a large number (2^20) of Performance Schema index statistic objects could cause a server exit. (Bug #23188107)
- If the keyring_okv plugin configuration directory was missing, attempts to rotate the InnoDB master key could cause a server exit. (Bug #23149683)
- INSERT with ON DUPLICATE KEY UPDATE and REPLACE on a table with a foreign key constraint defined failed with an incorrect “duplicate entry” error rather than a foreign key constraint violation error. (Bug #23135731)
- References: This issue is a regression of: Bug #78853, Bug #22037930.
- Contention in Performance Schema mutex instrumentation creation and destruction has been reduced, such that mutexes for which instruments are frequently created and destroyed are maintained in separate pages from those for which instruments are rarely created and destroyed. (Bug #22965826)
- With certain build options, an uninitialized variable in get_key_scans_params() could produce a compilation error. (Bug #22916059)
- Adding new tokens to the parser caused query digest values to change. (Bug #22906606)
- For debug builds, CONCAT_WS() could raise an assertion if there was nothing to append. (Bug #22888420)
- Fixed Valgrind warnings for failed LEAST() evaluations. (Bug #22883278)
- INET_NTOA() could cause a server exit when producing an error message. (Bug #22881810)
- References: This issue is a regression of: Bug #22042027.
- The my_write() call could cause a server exit if it attempted to check the current connection and the connection had been killed. (Bug #22867809)
- References: This issue is a regression of: Bug #21688407.
- Invoking Enterprise Encryption functions in multiple threads simultaneously could cause a server exit. (Bug #22839278)
- Setting log_syslog_tag to NULL could cause a server exit. (Bug #22834781)
- References: This issue is a regression of: Bug #22180046.
- If the expression for an indexed generated column contained an AND or OR operator, the optimizer could choose that index too often and create execution plans that produced incorrect results. (Bug #22810883)
- CREATE TABLE statements in mysqlpump output could be missing KEY clauses and would not load. (Bug #22726732)
- Attempting to use Enterprise Encryption functions after creating and dropping them could cause a server exit. (Bug #22669012)
- Setting sort_buffer_size to a very large value could cause some operations to fail and result in a server exit. (Bug #22594514)
- For an InnoDB table containing generated columns, using the table in a join could result in a server exit due to improper error checking. (Bug #22561845)
- REPLACE on a table with an indexed generated column could cause a server exit if the index prefix length was calculated incorrectly. (Bug #22445211)
- An UPDATE operation affecting a generated virtual BLOB column could cause a server exit. (Bug #22444212)
- SHOW CREATE TABLE for a table containing a generated column could cause a server exit or produce an Illegal mix of collations error. (Bug #22392268)
- On a slave server, replication of an UPDATE statement that updated an indexed BLOB virtual generated column of an InnoDB table could cause a server exit. (Bug #22241015)
- An assertion could be raised when a deadlock occurred due to a SELECT ... GROUP BY ... FOR UPDATE query executed using a Loose Index Scan. (Bug #22187476)
- mysqlpump could exit due to improper handling of error conditions in a dump thread. (Bug #22017120)
- Several potential buffer overflow issues were corrected. (Bug #21977380, Bug #23187436, Bug #23202778, Bug #23195370, Bug #23202699)
- If the CA certificate as given to the --ssl-ca option had an invalid path, yaSSL returned an error message different from OpenSSL. Now both return SSL connection error: SSL_CTX_set_default_verify_paths failed. (Bug #21920657)
- Installing MySQL from a yum or zypper repository resulted in /var/log/mysqld.log being created with incorrect user and group permissions. (Bug #21879694, Bug #78512)
- With show_compatibility_56=OFF, SHOW VARIABLES and SHOW STATUS statements having a WHERE clause did not work. (Bug #21783883)
- The audit_log plugin failed to abort the current operation when told to do so by a plugin handler for a MYSQL_AUDIT_PARSE_PREPARSE event. (Bug #21457956)
- Memory leaks reported by Valgrind for mysqlpump were fixed. (Bug #21237667)
- Some string functions returned one or a combination of their parameters as their result. If one of the parameters had a non-ASCII character set, the result string had the same character set, resulting in incorrect behavior when an ASCII string was expected. (Bug #18740222)
- On Fedora 24, upgrades using a Community MySQL Server RPM failed to replace an installed MariaDB Galera server due to a change in the MariaDB package. (Bug #81390, Bug #23273818)
- The mysql_read_defaults_options() function was missing a break statement, causing any option value for the --ssl-cipher option also to be applied to the --tls-version option, with unpredictable results. (Bug #81139, Bug #23129821)
- A DELETE from joined tables using a derived table in the WHERE clause failed if one of the joined tables was used in the derived table. (Bug #81014, Bug #23074801)
- Compiling of clients that used the MySQL C API could fail if they used an obsolete path to mysql.h or and did not set the include path. This was due to use of #include notation rather than #include "file_name" in internal MySQL header files, which have been adjusted. (Bug #80935, Bug #23047194)
- MySQL did not compile under Solaris 12 using Sun Studio. To correct this, instances of __attribute__ were changed to MY_ATTRIBUTE. (Bug #80748, Bug #22932576)
- The service_mysql_keyring.h and services.h header files misspelled mysql_keyring_service_st as mysql_keyring_file_service_st. (Bug #80688, Bug #22908232)
- The fix for Bug #79194 did not cover the eq_ref access method, with the result that left joins could return incorrect results.
- This bug fix has a very small negative performance effect such that it fails to cache an eq_ref-accessed row that is on the inner side of an outer join. Regular inner joins are not affected.
- References: This issue is a regression of: Bug #79194, Bug #22176604.
- The sanity() macro in strings/decimal.c produced Valgrind warnings due to reading uninitialized buffer contents. (Bug #80461, Bug #22782203, Bug #22839915)
- Starting the server with --initialize failed if the keyring_file_data system variable was also set at startup. To handle this, with --initialize the server no longer skips registration of plugins loaded with the --early-plugin-load option. (Bug #80451, Bug #22777039)
- Loading the Rewriter query rewrite plugin when there was no query_rewrite database resulted in Valgrind warnings. (Bug #80333, Bug #22710312)
- The optimizer transformed EXISTS (SELECT * ...) constructs to EXISTS (SELECT 1 ...) before all columns in the inner subquery had been resolved, which could result in rejection of valid queries that included a HAVING clause without GROUP BY in the subquery. (Bug #80231, Bug #22655856)
- For a server compiled with -DWITH_PERFSCHEMA_STORAGE_ENGINE=0, a memory leak could occur for buffered log messages used during server startup. (Bug #80089, Bug #22578574)
- A query could return incorrect results under these conditions: A column with a default value contained NULL; SELECT DISTINCT or a GROUP BY clause was used and the column containing the NULL value was part of the select list; an InnoDB temporary table was used during query processing. (Bug #79591, Bug #22343910)
- A null pointer dereference of a parser structure could occur during stored procedure name validation. (Bug #79396, Bug #22286421)
- Database initialization failed during installation using Ubuntu 15.10 packages. (Bug #79377, Bug #22252900)
- mysql_upgrade failed to widen the User and Proxied_user columns in the mysql.proxies_priv system table from 16 to 32 characters. (Bug #78254, Bug #21762656)
- Failure of UNINSTALL PLUGIN could lead to inaccurate or confusing errors for subsequent INSTALL PLUGIN operations. (Bug #74977, Bug #20085672)
- mysqld_multi displayed misleading error messages when it was unable to execute my_print_defaults. (Bug #74636, Bug #19920049)
- Previously, upgrading the server using an RPM package (including installation using yum) required upgrading the client package to the same MySQL version, which may be undesirable for some installations. This rule has been relaxed so that upgrading to a General Availability (GA) server version requires only that some GA client version be installed, which is less likely to require a client upgrade. (Bug #72230, Bug #18518216)
- mysqldump failed silently with no error message when it encountered an error while executing FLUSH LOGS. (Bug #71783, Bug #18284273)
更新時間:2016-04-13
更新細節:
更新時間:2016-04-13
更新細節:
更新時間:2016-04-12
更新細節:
What's new in this version:
Configuration Notes:
- Incompatible Change: To load a keyring plugin, the --early-plugin-load option is used. Previously, the default --early-plugin-load option value was the name of the keyring_file plugin library file. Now the default value is empty.
Important
- InnoDB tablespace encryption requires the keyring_file plugin to be loaded prior to InnoDB initialization, so this change of default --early-plugin-load value introduces an incompatibility for upgrades from 5.7.11 to 5.7.12 or higher. Administrators who have encrypted InnoDB tablespaces must take explicit action to ensure continued loading of the keyring_file plugin: Start the server with an --early-plugin-load option that names the plugin library file. For example, on platforms where the plugin library file suffix is .so, use these lines in the server my.cnf file: [mysqld] early-plugin-load=keyring_file.so
- On other platforms, adjust the file name suffix as necessary. For more information, see The MySQL Keyring.
Security Notes:
- InnoDB: The InnoDB tablespace encryption feature, which provides at-rest data encryption for InnoDB tables, now supports Oracle Key Vault for encryption key management. Oracle Key Vault support relies on the keyring_okv plugin which is available in MySQL Enterprise Edition. A secure and robust encryption key management solution such as OKV is critical for security and for compliance with various security standards. For more information, see InnoDB Tablespace Encryption.
- The linked OpenSSL library for the MySQL Commercial Server has been updated to version 1.0.1s. Issues fixed in the new version are described at http://www.openssl.org/news/vulnerabilities.html.
- This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #22685885, Bug #22923458)
- MySQL Enterprise Edition now includes a keyring_okv plugin that uses Oracle Key Vault for keyring backend storage. For more information, see The MySQL Keyring.
Functionality Added or Changed:
- For queries with many OR conditions, the optimizer now is more memory-efficient and less likely to exceed the memory limit imposed by the range_optimizer_max_mem_size system variable. In addition, the default value for that variable has been raised from 1536000 to 8388608. (Bug #79450, Bug #22283790)
Bugs Fixed:
- InnoDB; Partitioning: INSERT and SELECT statements against a partitioned InnoDB table having generated columns were not always handled correctly. (Bug #22444530)
- References: See also Bug #21776494, Bug #21824564, Bug #21864838.
- InnoDB: An error was returned on startup when a replication slave attempted to access an encrypted table. The server UUID used to compose the master key name was not persisted to the tablespace data file, resulting in the use of an incorrect master key. (Bug #22912582)
- InnoDB: In debug builds, an unnecessary buf_block_align() call could cause a latching order violation. A DML operation resulted in a page mismatch assertion due to the same buf_block_align() call. (Bug #22709463, Bug #21321238)
- InnoDB: An ALTER TABLE ... ADD COLUMN operation on a table with virtual columns raised an assertion. (Bug #22650296)
- InnoDB: An unnecessary comparison in tablespace encryption code caused compiler warnings. (Bug #22645816)
- InnoDB: INNODB_SYS_TABLESPACES could report incorrect ALLOCATED_SIZE and FILE_SIZE values for a general tablespace created outside of the data directory. The i_s_dict_fill_sys_tablespaces() function generated an incorrect remote file path. (Bug #22590095, Bug #80070)
- InnoDB: In debug builds, an update operation on a table with virtual columns raised an assertion. (Bug #22572997)
- InnoDB: Modifications were made to InnoDB code to handle warnings when compiling with Microsoft Visual Studio 2015. (Bug #22542547, Bug #79964)
- InnoDB: Running REPLACE operations on multiple connections resulted in a hang. (Bug #22530768, Bug #79185)
- InnoDB: Tabespace encryption-related operations resulted in a hang on FreeBSD. (Bug #22520464, Bug #79901)
- InnoDB: MySQL stalled when syncing the InnoDB full-text index cache. (Bug #22516559, Bug #16510576, Bug #73816)
- InnoDB: A CREATE TABLE ... DATA DIRECTORY operation failed to create a table while innodb_flush_method was set to O_DIRECT. (Bug #22180006, Bug #79200)
- References: This bug is a regression of Bug #21113036.
- InnoDB: In debug builds, a buffer pool resizing operation resulted in a segmentation violation. The buf_pool_resizing variable was not protected. (Bug #22179317)
- InnoDB: The innodb_open_files setting could exceed the open files limit. (Bug #22111472)
- InnoDB: InnoDB attempted crc32 checksum validation instead of innodb after a crc32 checksum validation failure, causing repeated crc32 checksum validation attempts. Checksum validation order is now optimized dynamically.
- Thanks to Daniel Black for the patch. (Bug #79725, Bug #22452597)
- Replication: The recovery channel must be set using the CHANGE MASTER command, and the plugin will not set default values for the user or password fields in CHANGE MASTER. The server side recovery channel is restricted to MASTER_USER and MASTER_PASSWORD, whereas all other settings for the change master are added on the plugin side, as done previously. Attempting to use other values will emit ER_SLAVE_CHANNEL_OPERATION_NOT_ALLOWED errors. The password value used on CHANGE MASTER commands for the recovery channel is not logged as plain text in any log or history files. Also, at the end of recovery, the plugin no longer resets info objects, but does continue to purge the logs. (Bug #22815932)
- Replication: When a binlog-less slave connected to a GR master, it failed with "Error running query" in the error log. But, there was no information available in "SHOW SLAVE STATUS" or P_S.replication_applier_status_by_worker. (Bug #22699395)
- Replication: Setting the relay log recovery to 1 could generate an error during recovery. Once the relay log recovery happened, repositories were not initiated and the server reported an error related to this. Also, attempting to execute "START GROUP_REPLICATION" in this situation could cause a crash. To fix this, the recovery procedure will no longer take the group_replication_channel into consideration. It now skips the relay logs of the GR channel to proceed further. (Bug #22523554)
- Replication: Issuing STOP SLAVE caused a spurious Error reading packet from server: Lost connection to MySQL server during query message to be written to the error log. With this fix, when connection to the master is lost, the abort_slave flag is checked and the error message is printed only if the flag is not set. (Bug #22305605, Bug #79504)
- References: See also Bug #12977988, Bug #22290309.
- Replication: When binlog was disabled, the GTID specified by GTID_NEXT when committing an empty transaction caused by a 'BEGIN' command was being saved into GLOBAL@gtid_executed when it should not have been. However, when binlog was enabled, the same situation did not save it.
- Now, when "@@SESSION.GTID_NEXT == 'UUID:NUMBER'", the 'BEGIN' command causes an 'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET' error inside an empty or non-empty transaction regardless of the binlog setting, since it causes an implicit commit like other DDLs. In this case, the GTID specified by GTID_NEXT is not saved into GLOBAL@gtid_executed. (Bug #22130929)
- Replication: When replication was configured but not started on a slave, the variable currently_executing_gtid was not properly initialized, but it would be used if the performance_schema table replication_applier_status_by_worker was queried, causing assertion failures and pointer issues. With this fix, the variable is now properly initialized at the construction of the Relay_log_info object. (Bug #21953132, Bug #78722)
- Replication: RESET SLAVE ALL could delete a channel even when master_pos_wait and wait_until_sql_thread_after_gtid were still waiting for binlog to be applied. This could cause a MySQL server exit when the functions tried to access the channel that was deleted. Now, a channel reference counter was added that is increased if the channel should not be deleted when the functions are running. RESET SLAVE ALL will wait for no reference, and then it will delete the channel. (Bug #21842399, Bug #78445)
- Replication: When relay_log_recovery=1, a slave server, at its initialization, still tried to scan the relay log files in order to update Retrieved_Gtid_Set and the transaction parser state, which was an unnecessary waste of resources because the slave I/O thread would just be initialized to the SQL thread position in the new relay log file. With this fix, the slave server skips scanning the relay log files when relay_log_recovery=1. (Bug #21798355, Bug #78352)
- Replication: In Slave_worker::write_info(), DBUG_ENTER() had “Master_info::write_info” as its argument instead of “Slave_worker::write_info”. This fix corrects the argument. Thanks to Stewart Smith for the patch. (Bug #21658067, Bug #78133)
- Replication: XA transactions were not handled correctly when --gtid-mode=ON and the binary log was disabled. It was because on both master and slave servers, the GTID state was sometimes not saved and the GTID ownership was sometimes not cleaned up. This fix makes sure those steps are now properly performed. (Bug #21618727)
- References: See also Bug #22165138, Bug #77740, Bug #21452916.
- Replication: When a multi-threaded slave stopped with an error, the same error message was printed three times. Now, the SQL thread's kill acceptance status is saved, and only printed once. (Bug #21198611, Bug #77237)
- Replication: When using a multi-threaded slave with relay_log_info_repository set to TABLE, the slave applier thread failed to write XA transactions to the worker configuration. (Bug #20988291)
- Replication: mysqlbinlog --verbose displayed BINARY and VARBINARY data as ordinary strings, causing any single quote (“'”) or backslash (“”) among the data to be printed as such, which was confusing to the users and, in the case of a backslash, caused the next character to be skipped. This fix makes mysqlbinlog print the characters' hexadecimal values (“x27” for single quote and “x5c” for backslash) instead. (Bug #20836250)
- Replication: The test case main.merge failed when the variables binlog_format was set to “ROW,” as the server tried to get information for table creation for a child table before it was opened. With this fix, the server skips getting information for the table in the situation. (Bug #20574550)
- Replication: If a query on a master generated an error and partial results were written to the binary log, for example due to a DROP TABLE IF EXISTS statement applying to multiple tables that would break foreign key constraints, when a slave configured with replication filters encountered the query it could be incorrectly binary logged. This caused errors such as:
- Last_SQL_Error: Query caused different errors on master and slave. Error on master: message (format)='Cannot delete or update a parent row: a foreign key constraint fails' error code=1217 ; Error on slave: actual message='no error', error code=0. Default database: 'db1'. Query: 'DROP TABLE IF EXISTS `table1` /* generated by server */'
- There were two fixes required for this bug.
- If a DROP TABLE statement used to drop a single table fails, to avoid partial results causing this bug the query is not written to the binary log. If a DROP TABLE statement used to drop a list of tables fails, any partial results it generates are written to the binary log with an error.
- When a query that generates an error as expected was received by a slave but it was skipped due to replication filters, the slave was incorrectly checking the error. The fix for Bug #76493 ensures that this comparison of the expected error from the master with the actual error from the slave does not happen.
- References: See also Bug #20797764.
- RTRIM() on large strings could be very slow. (Bug #22884187)
- References: This bug was introduced by Bug #18315770, Bug #12368495.
- Integer overflow could occur during client handshake processing, leading to a server exit. (Bug #22722946)
- Missing initializers in the query plan constructor resulted in Valgrind warnings. (Bug #22573117)
- The obsolete support-files/MySQL-shared-compat.spec.sh file was removed from distributions. (Bug #22525609)
- mysqlpump failed (syntax error) when a view name contained a space character. View names are now quoted. (Bug #22505474)
- UNHEX() with an invalid argument could result in garbage characters in the warning message. (Bug #22358933)
- Improper host name checking in X509 certificates could permit man-in-the-middle attacks. (Bug #22295186, Bug #22738607)
- For debug builds, when an indexed nonnullable generated column with an empty string generated expression was updated during an insert for a duplicated key, there was an optimization that resulted in the server failing to find the duplicated index, causing an assertion to be raised. (Bug #22195364)
- A boolean mode full-text search caused a segmentation fault. (Bug #22176795)
- Queries on generated columns that used WITH ROLLUP could raise an assertion. (Bug #22131343)
- For a prepared statement that used a derived table, an assertion could be raised at execute time when checking statement privileges. (Bug #22108567)
- Concurrent selecting and flushing of a FEDERATED table while killing connections accessing it could result in a server exit. (Bug #21918190)
- For debug builds, when a query using join buffering and one of the tables inserted into the join buffer was accessed using a dynamic range scan on an index containing a virtual column, a Valgrind error occurred when writing columns to the join buffer. (Bug #21872184)
- After iterations of uninstalling and installing the audit_log plugin, the server could hang. (Bug #21796658)
- With a LOCK TABLES statement in effect, access to Performance Schema tables could fail, as could SHOW STATUS with show_compatibility_56=OFF. (Bug #21789221)
- Executing GRANT PROXY statements after altering the definition of the mysql.user system table could result in a server exit. (Bug #21699037)
- Certain error messages included part of the SQL statement that produced them, possibly exposing data. (Bug #21682356)
- The Performance Schema assumed that tables named using a #sql prefix were temporary and could be ignored. But it is possible to create nontemporary tables using that prefix. The Performance Schema now uses table attributes other than the name to identify temporary tables. (Bug #21105475, Bug #22532368, Bug #79934)
- Account filtering performed by the audit_log plugin incorrectly used the account named by the USER() function rather than the CURRENT_USER() function (the latter being the account used for authentication). (Bug #19509471)
- NAME_CONST() can return null if incorrect arguments are given. In some cases, this was not handled and could cause a server exit. (Bug #19143243)
- Character set conversion operations on NULL parameters to prepared statements could cause a server exit. (Bug #18823979)
- Loose Index Scan was not chosen for queries that had an equality condition. (Bug #18109609)
- Long or complex SQL statements could cause the parser to run out of memory. The new parser_max_mem_size system variable now enables control over the maximum amount of memory available to the parser. The default value places no limit on memory available, but the value can be reduced to protect against out-of-memory situations. (Bug #14744160)
- A Valgrind warning for memory_free_noop() was silenced. (Bug #80457, Bug #22782197)
- The MySQL server failed to start if built with the -m32 option on Solaris/Sparc, due to improper static data alignment in init_delegates(). (Bug #80445, Bug #22763880)
- The plugin_keyring.h header file misspelled st_mysql_keyring as st_mysql_keyring_file. (Bug #80414, Bug #22748867)
- For shared-memory connections on Windows, the client library opened a handle on a mutex but did not close it. Subsequent attempts to restart the server on the other end of the connection failed if the client still had the mutex handle open. (Bug #80234, Bug #22646779)
- mysqld attempted to initialize plugins specified using the --early-plugin-load option when the --help option was specified. (Bug #80077, Bug #22573767)
- ALTER USER IDENTIFIED WITH ... expired the account password, even if the authentication plugin did not support password expiration. (Bug #79999, Bug #22551523)
- Some Performance Schema global instruments, if not enabled at server startup, could be in a state where it was not possible to enable them at runtime. This restriction has been lifted. Affected instruments include mutex, rwlock, cond, and socket instances.
- Thanks to Zhang Yingqiang for the patch. (Bug #79784, Bug #22517278)
- Setting the super_read_only system variable at server startup had no effect. (Bug #79328, Bug #22233503)
- These audit_log plugin issues were corrected:
- Calling my_message() from the MYSQL_AUDIT_GENERAL_CLASS handler resulted in infinite recursion.
- Diagnostic messages were improved for the case when the MYSQL_AUDIT_GENERAL_CLASS handler returned nonzero.
- Calling my_message() from the MYSQL_AUDIT_SERVER_STARTUP_CLASS handler did not abort server startup as it should have.
- SHOW GLOBAL VARIABLES produced different output for the null_audit_abort_value system variable with show_compatibility_56 enabled and disabled.
- For INSERT and UPDATE operations that caused FOREIGN KEY constraint violations, errors were reported rather than warnings when the IGNORE keyword was used. (Bug #78853, Bug #22037930)
- Using the server session service, executing an SQL statement from a thread with no VIO context could raise an assertion. (Bug #78734, Bug #21959409)
- Error messages raised by JSON_KEYS() and JSON_EXTRACT() contained the wrong data. (Bug #78699, Bug #22026278)
- CREATE VIEW statements that used the TIMESTAMPDIFF() function with MICROSECOND as the unit resulted in incorrect view definitions. (Bug #78506, Bug #21877062)
- For an existing user, CREATE USER IF NOT EXISTS produced an error rather than a warning. Similarly, for an nonexisting user, ALTER USER IF EXISTS produced an error rather than a warning. (Bug #78374, Bug #21807286)
- For some queries, an Index Merge access plan was chosen over a range scan when the cost for the range scan was the same or less. (Bug #77209, Bug #21178196)
- UNHEX() could attempt a left shift of a negative number. (Bug #73964, Bug #19642015)
- EXPLAIN for SELECT ... FOR UPDATE statements acquired locks. (Bug #72858, Bug #18899860)
- Processlist state information was not updated correctly for LOAD DATA INFILE and could show a state different from executing. (Bug #69375, Bug #16912362)
更新時間:2016-04-12
更新細節:
What's new in this version:
Configuration Notes:
- Incompatible Change: To load a keyring plugin, the --early-plugin-load option is used. Previously, the default --early-plugin-load option value was the name of the keyring_file plugin library file. Now the default value is empty.
Important
- InnoDB tablespace encryption requires the keyring_file plugin to be loaded prior to InnoDB initialization, so this change of default --early-plugin-load value introduces an incompatibility for upgrades from 5.7.11 to 5.7.12 or higher. Administrators who have encrypted InnoDB tablespaces must take explicit action to ensure continued loading of the keyring_file plugin: Start the server with an --early-plugin-load option that names the plugin library file. For example, on platforms where the plugin library file suffix is .so, use these lines in the server my.cnf file: [mysqld] early-plugin-load=keyring_file.so
- On other platforms, adjust the file name suffix as necessary. For more information, see The MySQL Keyring.
Security Notes:
- InnoDB: The InnoDB tablespace encryption feature, which provides at-rest data encryption for InnoDB tables, now supports Oracle Key Vault for encryption key management. Oracle Key Vault support relies on the keyring_okv plugin which is available in MySQL Enterprise Edition. A secure and robust encryption key management solution such as OKV is critical for security and for compliance with various security standards. For more information, see InnoDB Tablespace Encryption.
- The linked OpenSSL library for the MySQL Commercial Server has been updated to version 1.0.1s. Issues fixed in the new version are described at http://www.openssl.org/news/vulnerabilities.html.
- This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #22685885, Bug #22923458)
- MySQL Enterprise Edition now includes a keyring_okv plugin that uses Oracle Key Vault for keyring backend storage. For more information, see The MySQL Keyring.
Functionality Added or Changed:
- For queries with many OR conditions, the optimizer now is more memory-efficient and less likely to exceed the memory limit imposed by the range_optimizer_max_mem_size system variable. In addition, the default value for that variable has been raised from 1536000 to 8388608. (Bug #79450, Bug #22283790)
Bugs Fixed:
- InnoDB; Partitioning: INSERT and SELECT statements against a partitioned InnoDB table having generated columns were not always handled correctly. (Bug #22444530)
- References: See also Bug #21776494, Bug #21824564, Bug #21864838.
- InnoDB: An error was returned on startup when a replication slave attempted to access an encrypted table. The server UUID used to compose the master key name was not persisted to the tablespace data file, resulting in the use of an incorrect master key. (Bug #22912582)
- InnoDB: In debug builds, an unnecessary buf_block_align() call could cause a latching order violation. A DML operation resulted in a page mismatch assertion due to the same buf_block_align() call. (Bug #22709463, Bug #21321238)
- InnoDB: An ALTER TABLE ... ADD COLUMN operation on a table with virtual columns raised an assertion. (Bug #22650296)
- InnoDB: An unnecessary comparison in tablespace encryption code caused compiler warnings. (Bug #22645816)
- InnoDB: INNODB_SYS_TABLESPACES could report incorrect ALLOCATED_SIZE and FILE_SIZE values for a general tablespace created outside of the data directory. The i_s_dict_fill_sys_tablespaces() function generated an incorrect remote file path. (Bug #22590095, Bug #80070)
- InnoDB: In debug builds, an update operation on a table with virtual columns raised an assertion. (Bug #22572997)
- InnoDB: Modifications were made to InnoDB code to handle warnings when compiling with Microsoft Visual Studio 2015. (Bug #22542547, Bug #79964)
- InnoDB: Running REPLACE operations on multiple connections resulted in a hang. (Bug #22530768, Bug #79185)
- InnoDB: Tabespace encryption-related operations resulted in a hang on FreeBSD. (Bug #22520464, Bug #79901)
- InnoDB: MySQL stalled when syncing the InnoDB full-text index cache. (Bug #22516559, Bug #16510576, Bug #73816)
- InnoDB: A CREATE TABLE ... DATA DIRECTORY operation failed to create a table while innodb_flush_method was set to O_DIRECT. (Bug #22180006, Bug #79200)
- References: This bug is a regression of Bug #21113036.
- InnoDB: In debug builds, a buffer pool resizing operation resulted in a segmentation violation. The buf_pool_resizing variable was not protected. (Bug #22179317)
- InnoDB: The innodb_open_files setting could exceed the open files limit. (Bug #22111472)
- InnoDB: InnoDB attempted crc32 checksum validation instead of innodb after a crc32 checksum validation failure, causing repeated crc32 checksum validation attempts. Checksum validation order is now optimized dynamically.
- Thanks to Daniel Black for the patch. (Bug #79725, Bug #22452597)
- Replication: The recovery channel must be set using the CHANGE MASTER command, and the plugin will not set default values for the user or password fields in CHANGE MASTER. The server side recovery channel is restricted to MASTER_USER and MASTER_PASSWORD, whereas all other settings for the change master are added on the plugin side, as done previously. Attempting to use other values will emit ER_SLAVE_CHANNEL_OPERATION_NOT_ALLOWED errors. The password value used on CHANGE MASTER commands for the recovery channel is not logged as plain text in any log or history files. Also, at the end of recovery, the plugin no longer resets info objects, but does continue to purge the logs. (Bug #22815932)
- Replication: When a binlog-less slave connected to a GR master, it failed with "Error running query" in the error log. But, there was no information available in "SHOW SLAVE STATUS" or P_S.replication_applier_status_by_worker. (Bug #22699395)
- Replication: Setting the relay log recovery to 1 could generate an error during recovery. Once the relay log recovery happened, repositories were not initiated and the server reported an error related to this. Also, attempting to execute "START GROUP_REPLICATION" in this situation could cause a crash. To fix this, the recovery procedure will no longer take the group_replication_channel into consideration. It now skips the relay logs of the GR channel to proceed further. (Bug #22523554)
- Replication: Issuing STOP SLAVE caused a spurious Error reading packet from server: Lost connection to MySQL server during query message to be written to the error log. With this fix, when connection to the master is lost, the abort_slave flag is checked and the error message is printed only if the flag is not set. (Bug #22305605, Bug #79504)
- References: See also Bug #12977988, Bug #22290309.
- Replication: When binlog was disabled, the GTID specified by GTID_NEXT when committing an empty transaction caused by a 'BEGIN' command was being saved into GLOBAL@gtid_executed when it should not have been. However, when binlog was enabled, the same situation did not save it.
- Now, when "@@SESSION.GTID_NEXT == 'UUID:NUMBER'", the 'BEGIN' command causes an 'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET' error inside an empty or non-empty transaction regardless of the binlog setting, since it causes an implicit commit like other DDLs. In this case, the GTID specified by GTID_NEXT is not saved into GLOBAL@gtid_executed. (Bug #22130929)
- Replication: When replication was configured but not started on a slave, the variable currently_executing_gtid was not properly initialized, but it would be used if the performance_schema table replication_applier_status_by_worker was queried, causing assertion failures and pointer issues. With this fix, the variable is now properly initialized at the construction of the Relay_log_info object. (Bug #21953132, Bug #78722)
- Replication: RESET SLAVE ALL could delete a channel even when master_pos_wait and wait_until_sql_thread_after_gtid were still waiting for binlog to be applied. This could cause a MySQL server exit when the functions tried to access the channel that was deleted. Now, a channel reference counter was added that is increased if the channel should not be deleted when the functions are running. RESET SLAVE ALL will wait for no reference, and then it will delete the channel. (Bug #21842399, Bug #78445)
- Replication: When relay_log_recovery=1, a slave server, at its initialization, still tried to scan the relay log files in order to update Retrieved_Gtid_Set and the transaction parser state, which was an unnecessary waste of resources because the slave I/O thread would just be initialized to the SQL thread position in the new relay log file. With this fix, the slave server skips scanning the relay log files when relay_log_recovery=1. (Bug #21798355, Bug #78352)
- Replication: In Slave_worker::write_info(), DBUG_ENTER() had “Master_info::write_info” as its argument instead of “Slave_worker::write_info”. This fix corrects the argument. Thanks to Stewart Smith for the patch. (Bug #21658067, Bug #78133)
- Replication: XA transactions were not handled correctly when --gtid-mode=ON and the binary log was disabled. It was because on both master and slave servers, the GTID state was sometimes not saved and the GTID ownership was sometimes not cleaned up. This fix makes sure those steps are now properly performed. (Bug #21618727)
- References: See also Bug #22165138, Bug #77740, Bug #21452916.
- Replication: When a multi-threaded slave stopped with an error, the same error message was printed three times. Now, the SQL thread's kill acceptance status is saved, and only printed once. (Bug #21198611, Bug #77237)
- Replication: When using a multi-threaded slave with relay_log_info_repository set to TABLE, the slave applier thread failed to write XA transactions to the worker configuration. (Bug #20988291)
- Replication: mysqlbinlog --verbose displayed BINARY and VARBINARY data as ordinary strings, causing any single quote (“'”) or backslash (“”) among the data to be printed as such, which was confusing to the users and, in the case of a backslash, caused the next character to be skipped. This fix makes mysqlbinlog print the characters' hexadecimal values (“x27” for single quote and “x5c” for backslash) instead. (Bug #20836250)
- Replication: The test case main.merge failed when the variables binlog_format was set to “ROW,” as the server tried to get information for table creation for a child table before it was opened. With this fix, the server skips getting information for the table in the situation. (Bug #20574550)
- Replication: If a query on a master generated an error and partial results were written to the binary log, for example due to a DROP TABLE IF EXISTS statement applying to multiple tables that would break foreign key constraints, when a slave configured with replication filters encountered the query it could be incorrectly binary logged. This caused errors such as:
- Last_SQL_Error: Query caused different errors on master and slave. Error on master: message (format)='Cannot delete or update a parent row: a foreign key constraint fails' error code=1217 ; Error on slave: actual message='no error', error code=0. Default database: 'db1'. Query: 'DROP TABLE IF EXISTS `table1` /* generated by server */'
- There were two fixes required for this bug.
- If a DROP TABLE statement used to drop a single table fails, to avoid partial results causing this bug the query is not written to the binary log. If a DROP TABLE statement used to drop a list of tables fails, any partial results it generates are written to the binary log with an error.
- When a query that generates an error as expected was received by a slave but it was skipped due to replication filters, the slave was incorrectly checking the error. The fix for Bug #76493 ensures that this comparison of the expected error from the master with the actual error from the slave does not happen.
- References: See also Bug #20797764.
- RTRIM() on large strings could be very slow. (Bug #22884187)
- References: This bug was introduced by Bug #18315770, Bug #12368495.
- Integer overflow could occur during client handshake processing, leading to a server exit. (Bug #22722946)
- Missing initializers in the query plan constructor resulted in Valgrind warnings. (Bug #22573117)
- The obsolete support-files/MySQL-shared-compat.spec.sh file was removed from distributions. (Bug #22525609)
- mysqlpump failed (syntax error) when a view name contained a space character. View names are now quoted. (Bug #22505474)
- UNHEX() with an invalid argument could result in garbage characters in the warning message. (Bug #22358933)
- Improper host name checking in X509 certificates could permit man-in-the-middle attacks. (Bug #22295186, Bug #22738607)
- For debug builds, when an indexed nonnullable generated column with an empty string generated expression was updated during an insert for a duplicated key, there was an optimization that resulted in the server failing to find the duplicated index, causing an assertion to be raised. (Bug #22195364)
- A boolean mode full-text search caused a segmentation fault. (Bug #22176795)
- Queries on generated columns that used WITH ROLLUP could raise an assertion. (Bug #22131343)
- For a prepared statement that used a derived table, an assertion could be raised at execute time when checking statement privileges. (Bug #22108567)
- Concurrent selecting and flushing of a FEDERATED table while killing connections accessing it could result in a server exit. (Bug #21918190)
- For debug builds, when a query using join buffering and one of the tables inserted into the join buffer was accessed using a dynamic range scan on an index containing a virtual column, a Valgrind error occurred when writing columns to the join buffer. (Bug #21872184)
- After iterations of uninstalling and installing the audit_log plugin, the server could hang. (Bug #21796658)
- With a LOCK TABLES statement in effect, access to Performance Schema tables could fail, as could SHOW STATUS with show_compatibility_56=OFF. (Bug #21789221)
- Executing GRANT PROXY statements after altering the definition of the mysql.user system table could result in a server exit. (Bug #21699037)
- Certain error messages included part of the SQL statement that produced them, possibly exposing data. (Bug #21682356)
- The Performance Schema assumed that tables named using a #sql prefix were temporary and could be ignored. But it is possible to create nontemporary tables using that prefix. The Performance Schema now uses table attributes other than the name to identify temporary tables. (Bug #21105475, Bug #22532368, Bug #79934)
- Account filtering performed by the audit_log plugin incorrectly used the account named by the USER() function rather than the CURRENT_USER() function (the latter being the account used for authentication). (Bug #19509471)
- NAME_CONST() can return null if incorrect arguments are given. In some cases, this was not handled and could cause a server exit. (Bug #19143243)
- Character set conversion operations on NULL parameters to prepared statements could cause a server exit. (Bug #18823979)
- Loose Index Scan was not chosen for queries that had an equality condition. (Bug #18109609)
- Long or complex SQL statements could cause the parser to run out of memory. The new parser_max_mem_size system variable now enables control over the maximum amount of memory available to the parser. The default value places no limit on memory available, but the value can be reduced to protect against out-of-memory situations. (Bug #14744160)
- A Valgrind warning for memory_free_noop() was silenced. (Bug #80457, Bug #22782197)
- The MySQL server failed to start if built with the -m32 option on Solaris/Sparc, due to improper static data alignment in init_delegates(). (Bug #80445, Bug #22763880)
- The plugin_keyring.h header file misspelled st_mysql_keyring as st_mysql_keyring_file. (Bug #80414, Bug #22748867)
- For shared-memory connections on Windows, the client library opened a handle on a mutex but did not close it. Subsequent attempts to restart the server on the other end of the connection failed if the client still had the mutex handle open. (Bug #80234, Bug #22646779)
- mysqld attempted to initialize plugins specified using the --early-plugin-load option when the --help option was specified. (Bug #80077, Bug #22573767)
- ALTER USER IDENTIFIED WITH ... expired the account password, even if the authentication plugin did not support password expiration. (Bug #79999, Bug #22551523)
- Some Performance Schema global instruments, if not enabled at server startup, could be in a state where it was not possible to enable them at runtime. This restriction has been lifted. Affected instruments include mutex, rwlock, cond, and socket instances.
- Thanks to Zhang Yingqiang for the patch. (Bug #79784, Bug #22517278)
- Setting the super_read_only system variable at server startup had no effect. (Bug #79328, Bug #22233503)
- These audit_log plugin issues were corrected:
- Calling my_message() from the MYSQL_AUDIT_GENERAL_CLASS handler resulted in infinite recursion.
- Diagnostic messages were improved for the case when the MYSQL_AUDIT_GENERAL_CLASS handler returned nonzero.
- Calling my_message() from the MYSQL_AUDIT_SERVER_STARTUP_CLASS handler did not abort server startup as it should have.
- SHOW GLOBAL VARIABLES produced different output for the null_audit_abort_value system variable with show_compatibility_56 enabled and disabled.
- For INSERT and UPDATE operations that caused FOREIGN KEY constraint violations, errors were reported rather than warnings when the IGNORE keyword was used. (Bug #78853, Bug #22037930)
- Using the server session service, executing an SQL statement from a thread with no VIO context could raise an assertion. (Bug #78734, Bug #21959409)
- Error messages raised by JSON_KEYS() and JSON_EXTRACT() contained the wrong data. (Bug #78699, Bug #22026278)
- CREATE VIEW statements that used the TIMESTAMPDIFF() function with MICROSECOND as the unit resulted in incorrect view definitions. (Bug #78506, Bug #21877062)
- For an existing user, CREATE USER IF NOT EXISTS produced an error rather than a warning. Similarly, for an nonexisting user, ALTER USER IF EXISTS produced an error rather than a warning. (Bug #78374, Bug #21807286)
- For some queries, an Index Merge access plan was chosen over a range scan when the cost for the range scan was the same or less. (Bug #77209, Bug #21178196)
- UNHEX() could attempt a left shift of a negative number. (Bug #73964, Bug #19642015)
- EXPLAIN for SELECT ... FOR UPDATE statements acquired locks. (Bug #72858, Bug #18899860)
- Processlist state information was not updated correctly for LOAD DATA INFILE and could show a state different from executing. (Bug #69375, Bug #16912362)
更新時間:2016-04-12
更新細節:
What's new in this version:
Bugs Fixed:
- InnoDB: Running REPLACE operations on multiple connections resulted in a hang
- Replication: The test case main.merge failed when the variables binlog_format was set to “ROW,” as the server tried to get information for table creation for a child table before it was opened. With this fix, the server skips getting information for the table in the situation
- MySQL did not build with GCC 5
- The System-V initialization script for RHEL6 or older failed to enable the mysqld service by default
- Improper host name checking in X509 certificates could permit man-in-the-middle attacks.
- A boolean mode full-text search caused a segmentation fault
- Concurrent selecting and flushing of a FEDERATED table while killing connections accessing it could result in a server exit
- Executing GRANT PROXY statements after altering the definition of the mysql.user system table could result in a server exit
- Certain error messages included part of the SQL statement that produced them, possibly exposing data
- Character set conversion operations on NULL parameters to prepared statements could cause a server exit
- For INSERT and UPDATE operations that caused FOREIGN KEY constraint violations, errors were reported rather than warnings when the IGNORE keyword was used
- Processlist state information was not updated correctly for LOAD DATA INFILE and could show a state different from executing
更新時間:2016-02-08
更新細節:
What's new in this version:
Functionality Added or Changed:
- InnoDB: A new InnoDB configuration option, innodb_tmpdir, allows you to configure a separate temporary file directory for online ALTER TABLE operations. This option was introduced to help avoid tmpdir overflows that could occur as a result of large temporary files created during online ALTER TABLE operations. innodb_tmpdir is a SESSION variable and can be configured dynamically using a SET statement
- yaSSL was upgraded to version 2.3.9. This upgrade corrects an issue in which yaSSL handled only cases of zero or one leading zeros for the key agreement instead of potentially any number, which in rare cases could cause connections to fail when using DHE cipher suites
- The Valgrind function signature in mysql-test/valgrind.supp was upgraded for Valgrind 3.11
Bugs Fixed:
- InnoDB: A small InnoDB buffer pool size with a large innodb_stats_persistent_sample_pages setting resulted in a Difficult to find free blocks in the buffer pool warning
- InnoDB: Starting the server with an empty innodb_data_home_dir entry in the configuration file caused InnoDB to look for the buffer pool file in the root directory, resulting in a startup error
- InnoDB: A full-text query run under high concurrency caused a server exit due to an invalid memory access
- InnoDB: With a large innodb_sort_buffer_size setting, adding an index on an empty table performed more slowly than expected
- Replication: When DML invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column, that DML has to be marked as an unsafe statement. If the tables are locked in the transaction prior to the DML statement (for example by using LOCK TABLES), then the DML statement was not being marked as an unsafe statement. The fix ensures that such DML statements are marked correctly as unsafe
- Replication: As part of the fix for Bug #16290902, when writing a DROP TEMPORARY TABLE IF EXISTS query into the binary log, the query is no longer preceded by a USE `db` statement. Instead the query uses a fully qualified table name, for example DROP TEMPORARY TABLE IF EXISTS `db`.`t1`;. This changed the application of replicate-rewrite-db filter rules, as they work only on the default database specified in a USE statement. This caused slaves to fail when the resulting CREATE TEMPORARY TABLE was applied. The fix ensures that at the time of writing a DROP TEMPORARY TABLE IF EXISTS query into the binary log, a check is made for the default database. If it exists then the query is written as USE default_db in the binary log. If a default database is not present then the query is logged with the qualified table name
- Replication: If generating a GTID for a transaction fails, the transaction is not written to the binary log but still gets committed. Although running out of GTIDs is a rare situation, if it did occur an error was written to the binary log as a sync stage error. With binlog_error_action=ABORT_SERVER, the server aborts on such an error, avoiding data inconsistency. When binlog_error_action=IGNORE_ERROR, the server continues binary logging after such an error, potentially leading to data inconsistency between the master and the slave. The fix changes the error to be correctly logged as a flush stage error
- Replication: When using --gtid-mode=on , --enforce-gtid-consistency , and --binlog-format=row, if a user defined function with multiple DROP TEMPORARY TABLE statements was executed on a master, the resulting binary log caused an error on slaves. The fix ensures that stored functions and triggers are also considered multi-statement transactions, and that when --enforce-gtid-consistency is enabled, functions with CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE statements generate an ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION error
- Replication: Stored procedure local variables that were used in an ALTER EVENT statement were not being replicated correctly. This was related to the fact that CALL statements are not written into the binary log. Instead each statement executed in a stored procedure is binary logged separately, with the exception that the query string is modified so that uses of stored procedure local variables are replaced with NAME_CONST('spvar_name', 'spvar-value') calls. DDL statements (which are always binary logged in statement binary log mode irrespective of the current binary log format) can also use stored procedure local variables and a clash could cause them to not be replicated correctly. The fix ensures that any stored procedure local variables used in a query are replaced with NAME_CONST(...), except for the case when it is a DML query and the binary log format is ROW
- Replication: DROP TABLE statements are regenerated by the server before being written to the binary log. If a table or database name contained a non-regular character, such as non-latin characters, the regenerated statement was using the wrong name, breaking replication. The fix ensures that in such a case the regenerated name is correctly converted back to the original character set. Also during work on this bug, it was discovered that in the rare case that a table or database name contained 64 characters, the server was throwing an assert(M_TBLLEN < 128) assertion. The assertion has been corrected to be less than or equal 128
- Replication: Irrespective of the current binlog_format setting, DDL that changes metadata on a master is always identified and written to the binary log in STATEMENT format. Such DDL could occur from event based SQL statements, such as CREATE EVENT or DROP EVENT, or transactions that had unsafe functions such as sysdate(). When binlog_format=MIXED and attempting to replicate such DDL, it was not being correctly identified and therefore was not being correctly replicated
- Inserting a token of 84 4-byte characters into a full-text index raised an assertion. The maximum token length was 84 characters up to a maximum of 252 bytes, which did not account for 4-byte characters. The maximum byte length is now 336 bytes
- If a client attempted to use an unsupported client character set (ucs2, utf16, utf32), the error message reported to the client differed for SSL and non-SSL connections
- Data corruption or a server exit could occur if a stored procedure had a variable declared as TEXT or BLOB and data was copied to that variable using SELECT ... INTO syntax from a TEXT or BLOB column
- CREATE TEMPORARY TABLE .. SELECT statements involving BIT columns that resulted in a column type redefinition could cause a server exit or an improperly created table
- Added Microsoft Visual Studio 2015 support. Changes include using the native (added in VS 2015) timespec library if it exists, renamed lfind/lsearch and timezone/tzname to avoid redefinition problems, set TMPDIR to "" by default as P_tmpdir no longer exists, deprecated std::hash_map in favor of std::unordered_map, and added Wix Toolset 3.10 support
- With character_set_server=utf16le, some values of ft_boolean_syntax could cause a server exit for full-text searches
- With LOCK TABLES in force, an attempt to open a temporary MERGE table consisting of a view in its list of tables (not the last table in the list) caused a server exit
- For certain prepared statements, the optimizer could transform join conditions such that it used a pointer to a temporary table field that was no longer available after the initial execution. Subsequent executions caused a server exit
- Repeated execution of ALTER TABLE v1 CHECK PARTITION as a prepared statement, where v1 is a view, led to a server exit
- In addition, output for some administrative operations, when they are attempted on a view, changes from “Corrupt” to “Operation failed”. These include ANALYZE TABLE, OPTIMIZE TABLE, and REPAIR TABLE, and ALTER TABLE statements that perform ANALYZE PARTITION, CHECK PARTITION, OPTIMIZE PARTITION, and REPAIR PARTITION operations
- Valgrind detected some possibly unsafe use of string functions in code used for asymmetric encryption
- SSL connections ignored any change made by passing the MYSQL_OPT_READ_TIMEOUT option to the mysql_options() C API function
- Solaris packages failed to note the dependency of the MySQL client library on the libstlport library
- Using systemd to start mysqld failed if configuration files contained multiple datadir lines. Now the last datadir line is used
- If server was started with --thread-handling=no-threads, no foreground thread was created for a client connection. The Performance Schema did not account for the possibility of no foreground threads for queries on the session_connect_attrs table, causing an assertion to be raised
- ALTER TABLE ... CONVERT TO CHARACTER SET operations that used the INPLACE algorithm were ineffective if the table contained only numeric data types. Also, such operations failed to clean up their temporary .frm file
- Heavy SHOW PROCESSLIST or SELECT ... FROM INFORMATION_SCHEMA.PROCESSLIST activity could result in the server accepting more than max_connections connections
- When used with the libmysqld embedded server, the mysql_stmt_execute() C API function failed with a malformed communication packet error, even for simple prepared statements
更新時間:2016-02-08
更新細節:
What's new in this version:
Functionality Added or Changed:
- InnoDB: A new InnoDB configuration option, innodb_tmpdir, allows you to configure a separate temporary file directory for online ALTER TABLE operations. This option was introduced to help avoid tmpdir overflows that could occur as a result of large temporary files created during online ALTER TABLE operations. innodb_tmpdir is a SESSION variable and can be configured dynamically using a SET statement
- yaSSL was upgraded to version 2.3.9. This upgrade corrects an issue in which yaSSL handled only cases of zero or one leading zeros for the key agreement instead of potentially any number, which in rare cases could cause connections to fail when using DHE cipher suites
- The Valgrind function signature in mysql-test/valgrind.supp was upgraded for Valgrind 3.11
Bugs Fixed:
- InnoDB: A small InnoDB buffer pool size with a large innodb_stats_persistent_sample_pages setting resulted in a Difficult to find free blocks in the buffer pool warning
- InnoDB: Starting the server with an empty innodb_data_home_dir entry in the configuration file caused InnoDB to look for the buffer pool file in the root directory, resulting in a startup error
- InnoDB: A full-text query run under high concurrency caused a server exit due to an invalid memory access
- InnoDB: With a large innodb_sort_buffer_size setting, adding an index on an empty table performed more slowly than expected
- Replication: When DML invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column, that DML has to be marked as an unsafe statement. If the tables are locked in the transaction prior to the DML statement (for example by using LOCK TABLES), then the DML statement was not being marked as an unsafe statement. The fix ensures that such DML statements are marked correctly as unsafe
- Replication: As part of the fix for Bug #16290902, when writing a DROP TEMPORARY TABLE IF EXISTS query into the binary log, the query is no longer preceded by a USE `db` statement. Instead the query uses a fully qualified table name, for example DROP TEMPORARY TABLE IF EXISTS `db`.`t1`;. This changed the application of replicate-rewrite-db filter rules, as they work only on the default database specified in a USE statement. This caused slaves to fail when the resulting CREATE TEMPORARY TABLE was applied. The fix ensures that at the time of writing a DROP TEMPORARY TABLE IF EXISTS query into the binary log, a check is made for the default database. If it exists then the query is written as USE default_db in the binary log. If a default database is not present then the query is logged with the qualified table name
- Replication: If generating a GTID for a transaction fails, the transaction is not written to the binary log but still gets committed. Although running out of GTIDs is a rare situation, if it did occur an error was written to the binary log as a sync stage error. With binlog_error_action=ABORT_SERVER, the server aborts on such an error, avoiding data inconsistency. When binlog_error_action=IGNORE_ERROR, the server continues binary logging after such an error, potentially leading to data inconsistency between the master and the slave. The fix changes the error to be correctly logged as a flush stage error
- Replication: When using --gtid-mode=on , --enforce-gtid-consistency , and --binlog-format=row, if a user defined function with multiple DROP TEMPORARY TABLE statements was executed on a master, the resulting binary log caused an error on slaves. The fix ensures that stored functions and triggers are also considered multi-statement transactions, and that when --enforce-gtid-consistency is enabled, functions with CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE statements generate an ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION error
- Replication: Stored procedure local variables that were used in an ALTER EVENT statement were not being replicated correctly. This was related to the fact that CALL statements are not written into the binary log. Instead each statement executed in a stored procedure is binary logged separately, with the exception that the query string is modified so that uses of stored procedure local variables are replaced with NAME_CONST('spvar_name', 'spvar-value') calls. DDL statements (which are always binary logged in statement binary log mode irrespective of the current binary log format) can also use stored procedure local variables and a clash could cause them to not be replicated correctly. The fix ensures that any stored procedure local variables used in a query are replaced with NAME_CONST(...), except for the case when it is a DML query and the binary log format is ROW
- Replication: DROP TABLE statements are regenerated by the server before being written to the binary log. If a table or database name contained a non-regular character, such as non-latin characters, the regenerated statement was using the wrong name, breaking replication. The fix ensures that in such a case the regenerated name is correctly converted back to the original character set. Also during work on this bug, it was discovered that in the rare case that a table or database name contained 64 characters, the server was throwing an assert(M_TBLLEN < 128) assertion. The assertion has been corrected to be less than or equal 128
- Replication: Irrespective of the current binlog_format setting, DDL that changes metadata on a master is always identified and written to the binary log in STATEMENT format. Such DDL could occur from event based SQL statements, such as CREATE EVENT or DROP EVENT, or transactions that had unsafe functions such as sysdate(). When binlog_format=MIXED and attempting to replicate such DDL, it was not being correctly identified and therefore was not being correctly replicated
- Inserting a token of 84 4-byte characters into a full-text index raised an assertion. The maximum token length was 84 characters up to a maximum of 252 bytes, which did not account for 4-byte characters. The maximum byte length is now 336 bytes
- If a client attempted to use an unsupported client character set (ucs2, utf16, utf32), the error message reported to the client differed for SSL and non-SSL connections
- Data corruption or a server exit could occur if a stored procedure had a variable declared as TEXT or BLOB and data was copied to that variable using SELECT ... INTO syntax from a TEXT or BLOB column
- CREATE TEMPORARY TABLE .. SELECT statements involving BIT columns that resulted in a column type redefinition could cause a server exit or an improperly created table
- Added Microsoft Visual Studio 2015 support. Changes include using the native (added in VS 2015) timespec library if it exists, renamed lfind/lsearch and timezone/tzname to avoid redefinition problems, set TMPDIR to "" by default as P_tmpdir no longer exists, deprecated std::hash_map in favor of std::unordered_map, and added Wix Toolset 3.10 support
- With character_set_server=utf16le, some values of ft_boolean_syntax could cause a server exit for full-text searches
- With LOCK TABLES in force, an attempt to open a temporary MERGE table consisting of a view in its list of tables (not the last table in the list) caused a server exit
- For certain prepared statements, the optimizer could transform join conditions such that it used a pointer to a temporary table field that was no longer available after the initial execution. Subsequent executions caused a server exit
- Repeated execution of ALTER TABLE v1 CHECK PARTITION as a prepared statement, where v1 is a view, led to a server exit
- In addition, output for some administrative operations, when they are attempted on a view, changes from “Corrupt” to “Operation failed”. These include ANALYZE TABLE, OPTIMIZE TABLE, and REPAIR TABLE, and ALTER TABLE statements that perform ANALYZE PARTITION, CHECK PARTITION, OPTIMIZE PARTITION, and REPAIR PARTITION operations
- Valgrind detected some possibly unsafe use of string functions in code used for asymmetric encryption
- SSL connections ignored any change made by passing the MYSQL_OPT_READ_TIMEOUT option to the mysql_options() C API function
- Solaris packages failed to note the dependency of the MySQL client library on the libstlport library
- Using systemd to start mysqld failed if configuration files contained multiple datadir lines. Now the last datadir line is used
- If server was started with --thread-handling=no-threads, no foreground thread was created for a client connection. The Performance Schema did not account for the possibility of no foreground threads for queries on the session_connect_attrs table, causing an assertion to be raised
- ALTER TABLE ... CONVERT TO CHARACTER SET operations that used the INPLACE algorithm were ineffective if the table contained only numeric data types. Also, such operations failed to clean up their temporary .frm file
- Heavy SHOW PROCESSLIST or SELECT ... FROM INFORMATION_SCHEMA.PROCESSLIST activity could result in the server accepting more than max_connections connections
- When used with the libmysqld embedded server, the mysql_stmt_execute() C API function failed with a malformed communication packet error, even for simple prepared statements
更新時間:2016-02-08
更新細節:
What's new in this version:
Bug Fixed:
- Replication: When DML invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column, that DML has to be marked as an unsafe statement. If the tables are locked in the transaction prior to the DML statement (for example by using LOCK TABLES), then the DML statement was not being marked as an unsafe statement. The fix ensures that such DML statements are marked correctly as unsafe
- Replication: DROP TABLE statements are regenerated by the server before being written to the binary log. If a table or database name contained a non-regular character, such as non-latin characters, the regenerated statement was using the wrong name, breaking replication. The fix ensures that in such a case the regenerated name is correctly converted back to the original character set. Also during work on this bug, it was discovered that in the rare case that a table or database name contained 64 characters, the server was throwing an assert(M_TBLLEN < 128) assertion. The assertion has been corrected to be less than or equal 128
- Data corruption or a server exit could occur if a stored procedure had a variable declared as TEXT or BLOB and data was copied to that variable using SELECT ... INTO syntax from a TEXT or BLOB column
- CREATE TEMPORARY TABLE .. SELECT statements involving BIT columns that resulted in a column type redefinition could cause a server exit or an improperly created table
- Added Microsoft Visual Studio 2015 support. Changes include using the native (added in VS 2015) timespec library if it exists, renamed lfind/lsearch and timezone/tzname to avoid redefinition problems, set TMPDIR to "" by default as P_tmpdir no longer exists, deprecated std::hash_map in favor of std::unordered_map, and added Wix Toolset 3.10 support
- When an invalid date was supplied to the UNIX_TIMESTAMP() function using the STR_TO_DATE() function, no check was performed before converting it to a timestamp value
- With LOCK TABLES in force, an attempt to open a temporary MERGE table consisting of a view in its list of tables (not the last table in the list) caused a server exit
- For certain prepared statements, the optimizer could transform join conditions such that it used a pointer to a temporary table field that was no longer available after the initial execution. Subsequent executions caused a server exit
- Repeated execution of ALTER TABLE v1 CHECK PARTITION as a prepared statement, where v1 is a view, led to a server exit
- In addition, output for some administrative operations, when they are attempted on a view, changes from “Corrupt” to “Operation failed”. These include ANALYZE TABLE, OPTIMIZE TABLE, and REPAIR TABLE, and ALTER TABLE statements that perform ANALYZE PARTITION, CHECK PARTITION, OPTIMIZE PARTITION, and REPAIR PARTITION operations
- Using systemd to start mysqld failed if configuration files contained multiple datadir lines. Now the last datadir line is used