TinyButStrong Error in field [var.version...]: the key 'version' does not exist or is not set in VarRef. (VarRef seems refers to $GLOBALS) This message can be cancelled using parameter 'noerr'.

TinyButStrong Error in field [var.version...]: the key 'version' does not exist or is not set in VarRef. (VarRef seems refers to $GLOBALS) This message can be cancelled using parameter 'noerr'.
 MySQL 軟體歷史版本 Download Page36 :: 軟體兄弟

MySQL 歷史版本列表 Page36

最新版本 [var.version]

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)


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

更新時間: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

MySQL 5.7.11 (32-bit) 查看版本資訊

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

What's new in this version:

Compilation Notes:
- A value of system is now permitted for the WITH_BOOST CMake option. If this option is not set or is set to system, it is assumed that the correct version of Boost is installed on the compilation host in the standard location. In this case, the installed version of Boost is used rather than any version included with a MySQL source distribution. (Bug #22224313)
- In addition to the mysql-5.7.11.tar.gz source tarball, another tarball named mysql-boost-5.7.11.tar.gz is provided. The new tarball contains everything in the first tarball, but also contains all the required Boost header files in a subdirectory named boost. This is for the benefit of those who do not have the correct Boost version installed and do not wish to or cannot download it. To build from this source distribution, add -DWITH_BOOST=boost to the CMake command line.

Data Type Notes:
- Bit functions and operators comprise BIT_COUNT(), BIT_AND(), BIT_OR(), BIT_XOR(), &, |, ^, ~, . Currently, bit functions and operators require BIGINT (64-bit integer) arguments and return BIGINT values, so they have a maximum range of 64 bits. Arguments of other types are converted to BIGINT and truncation might occur.
- A planned extension for MySQL 5.8 is to permit bit functions and operators to take binary string type arguments (BINARY, VARBINARY, and the BLOB types), enabling them to take arguments and produce return values larger than 64 bits. Consequently, bit operations on binary arguments in MySQL 5.7 might produce different results in MySQL 5.8. To provide advance notice about this potential change in behavior, the server now produces warnings for bit operations for which binary arguments will not be converted to integer in MySQL 5.8. These warnings afford an opportunity to rewrite affected statements. To explicitly produce MySQL 5.7 behavior in a way that will not change after an upgrade to 5.8, cast bit-operation binary arguments to convert them to integer. For more information and examples, see Bit Functions and Operators.

Installation Notes:
- Previously, mysqld --initialize required the data directory to not exist or, if it existed, to be empty. Now an existing data directory is permitted to be nonempty if every entry either has a name that begins with a period (.) or is named using an --ignore-db-dir option. (Bug #79250, Bug #22213873)

Security Notes:
- The linked OpenSSL library for the MySQL Commercial Server has been updated from version 1.0.1p to version 1.0.1q. Issues fixed in the new version are described at http://www.openssl.org/news/vulnerabilities.html.
- This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #22348181)
- The default value of the default_password_lifetime system variable that controls the global password expiration policy has been changed from 360 (360 days) to 0 (no password expiration). The default of 360 sometimes took people by surprise when account passwords expired a year after upgrading to MySQL 5.7. To continue to use a value other than 0 as the password expiration, start the server with an explicit setting for default_password_lifetime.
- MySQL client programs now support an --ssl-mode option that enables you to specify the security state of the connection to the server. Permitted option values are PREFERRED (establish a secure encrypted connection if the server supports the capability, falling back to an unencrypted connection otherwise), DISABLED (establish an unencrypted connection), REQUIRED (establish a secure connection, or fail), VERFIFY_CA (like REQUIRED, but additionally verify the server certificate), VERIFY_IDENTITY (like VERIFY_CA, but additionally verify that the server certificate matches the host name to which the connection is attempted). For backward compatibility, the default is PREFERRED if --ssl-mode is not specified.
- These clients support --ssl-mode: mysql, mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlshow, mysqlpump, mysqlslap, mysqltest, mysql_upgrade.
- The --ssl-mode option comprises the capabilities of the client-side --ssl and --ssl-verify-server-cert options. Consequently, both of those options are now deprecated and will be removed in a future MySQL release. Use --ssl-mode=REQUIRED instead of --ssl=1 or --enable-ssl. Use --ssl-mode=DISABLED instead of --ssl=0, --skip-ssl, or --disable-ssl. Use --ssl-mode=VERIFY_IDENTITY instead of --ssl-verify-server-cert options. (The server-side --ssl option is not deprecated.)
- For the C API, the new MYSQL_OPT_SSL_MODE option for mysql_options() corresponds to the --ssl-mode option. The MYSQL_OPT_SSL_ENFORCE and MYSQL_OPT_SSL_VERIFY_SERVER_CERT options for mysql_options() correspond to the client-side --ssl and --ssl-verify-server-cert options. They are now deprecated and will be removed in a future MySQL release. Use MYSQL_OPT_SSL_MODE with an option value of SSL_MODE_REQUIRED or SSL_MODE_VERIFY_IDENTITY instead. In consequence of this change, the minor C API version number was incremented.
- MySQL now supports a keyring service that enables internal MySQL server components and plugins to securely store sensitive information for later retrieval. The implementation includes a keyring_file plugin that stores data in a file local to the server host.

Functionality Added or Changed:
- InnoDB: A new InnoDB configuration option, innodb_tmpdir, allows you to configure a separate temporary file directory for online ALTER TABLE operations. This option was introduced to help avoid tmpdir overflows that could occur as a result of large temporary files created during online ALTER TABLE operations. innodb_tmpdir is a SESSION variable and can be configured dynamically using a SET statement. (Bug #19183565)
- InnoDB: InnoDB now supports at-rest data encryption for InnoDB tables stored in file-per-table tablespaces. Encryption is enabled by specifying the ENCRYPTION option when creating or altering an InnoDB table. For more information, see InnoDB Tablespace Encryption.
- Replication: The log_statements_unsafe_for_binlog variable was added to provide control over whether the warnings generated by error 1592 are added to the binary log or not.
- yaSSL was upgraded to version 2.3.9. This upgrade corrects an issue in which yaSSL handled only cases of zero or one leading zeros for the key agreement instead of potentially any number, which in rare cases could cause connections to fail when using DHE cipher suites. (Bug #22361038)
- The Valgrind function signature in mysql-test/valgrind.supp was upgraded for Valgrind 3.11. (Bug #22214867)
- The audit_log plugin now produces events in the MYSQL_AUDIT_TABLE_ACCESS_CLASS class. These events are abortable. (Bug #21458192)
- The format of log output produced by mysqld_safe now is configurable using the --mysqld-safe-log-timestamps option. This option can be used to produce log timestamps in formats compatible with the server or in formats used by mysqld_safe in older versions of MySQL. For more information, see mysqld_safe — MySQL Server Startup Script. (Bug #78475, Bug #21862951)
- The mysql_kill(), mysql_list_fields(), mysql_list_processes(), and mysql_refresh() C API functions are deprecated and will be removed in a future version of MySQL. The same is true of the corresponding COM_PROCESS_KILL, COM_FIELD_LIST, COM_PROCESS_INFO, and COM_REFRESH client/server protocol commands. Instead, use mysql_query() to execute a KILL, SHOW COLUMNS, SHOW PROCESSLIST, or FLUSH statement, respectively.
- The mysql_plugin utility is deprecated and will be removed in a future version of MySQL. Alternatives include loading plugins at server startup using the --plugin-load or --plugin-load-add option, or at runtime using the INSTALL PLUGIN statement.
- Storage engines now can request notification about acquisition and release of exclusive metadata locks. As result, the LOCK_STATUS column of the metadata_locks Performance Schema table has two new status values. The PRE_ACQUIRE_NOTIFY and POST_RELEASE_NOTIFY status values are brief and signify that the metadata locking subsubsystem is notifying interested storage engines while entering lock acquisition or leaving lock release operations.

Bugs Fixed:
- InnoDB; Partitioning: When OPTIMIZE TABLE rebuilt a partitioned InnoDB table, it placed the resulting partition tablespace files (*.ibd files) in the default data directory instead of the directory specified using the DATA DIRECTORY option. (Bug #75112, Bug #20160327)
- InnoDB: InnoDB failed to update index statistics when adding or dropping a virtual column. (Bug #22469660, Bug #79775)
- InnoDB: A small InnoDB buffer pool size with a large innodb_stats_persistent_sample_pages setting resulted in a Difficult to find free blocks in the buffer pool warning. (Bug #22385442)
- InnoDB: memcached connections are blocked from accessing tables that contain an indexed virtual column. Accessing an indexed virtual column requires a callback to the server, but a memcached connection does not have access to the server code. (Bug #22384503, Bug #79691)
- InnoDB: InnoDB did not return an informative message when refusing an online ALTER TABLE operation that attempted to add an index and a virtual column. (Bug #22374827)
- InnoDB: An invalid innodb_saved_page_number_debug setting caused a server exit. (Bug #22311319, Bug #79516)
- InnoDB: InnoDB failed to free a table object when a compressed table and temporary compressed table were created in the same shared tablespace. (Bug #22306581)
- InnoDB: In Numa-related code, the size information passed to the mbind() call in the buf_chunk_init() function was incorrect. (Bug #22293530, Bug #79434)
- InnoDB: Numa support was incomplete for online buffer pool resizing operations. (Bug #22293511, Bug #79354)
- InnoDB: A SELECT COUNT(*) query that counted the results of a full-text subquery raised an assertion. (Bug #22270139)
- InnoDB: InnoDB passed a buffer with an incorrect TINYBLOB data length for a virtual column, resulting in a purge thread failure. (Bug #22256752)
- InnoDB: A purge failure occurred while deleting data from a table that contained a spatial index. (Bug #22230442)
- InnoDB: An assertion was raised when purge accessed a freed page while attempting to rebuild virtual column data from the clustered index. (Bug #22204260)
- InnoDB: Only prefix bytes were logged for an indexed virtual column, resulting in an a Clustered record for sec rec not found error. (Bug #22202788)
- InnoDB: A small buffer pool with an innodb_page_size setting of 64K could cause startup, bootstrap, and recovery failures. (Bug #22179133, Bug #79201)
- InnoDB: Unreachable code that checks for 32-bit file offsets was removed. (Bug #22163880, Bug #79150)
- InnoDB: A slow shutdown failure was caused by background threads adding undo records to the purge history list during or after purge thread exit. (Bug #22154730)
- InnoDB: The InnoDB purge thread died attempting to purge a virtual column index record that was not delete-marked. (Bug #22141031)
- InnoDB: In debug builds, an ALTER TABLE operation that increased the column length of a virtual column raised an assertion. (Bug #22139917)
- InnoDB: ut_allocator prepended the allocation payload with a 12-byte header on 32-bit systems, causing unaligned memory access. On 32-bit SPARC systems, the unaligned memory access caused a crash during bootstrap. (Bug #22131684)
- InnoDB: In debug builds, an ALTER TABLE operation that added a new virtual column before an existing virtual column raised an assertion. (Bug #22123674, Bug #22111464)
- InnoDB: InnoDB startup messages related to dumping and loading of the buffer pool were improved. (Bug #22096661, Bug #78960)
- InnoDB: Creating a table with a full-text index and a foreign key constraint failed when foreign_key_checks was disabled. (Bug #22094601, Bug #78955)
- References: This bug is a regression of Bug #16845421.
- InnoDB: Support was enabled for ALGORITHM=INPLACE operations that add an index on an existing virtual column while dropping another virtual column. Support was also enabled for ALGORITHM=INPLACE operations that add a virtual column and an index. When adding an index on a newly-added virtual column, purge now skips the uncommitted virtual index. (Bug #22082762)
- InnoDB: The wrong table object was used to compute virtual column values for a query that accessed multiple instances of the same table. (Bug #22070021)
- InnoDB: A purge thread failure occurred when inserting and deleting spatial data. The child page number field was not stored during the R-tree search stage. (Bug #22027053)
- InnoDB: Starting the server with an empty innodb_data_home_dir entry in the configuration file caused InnoDB to look for the buffer pool file in the root directory, resulting in a startup error. (Bug #22016556, Bug #78831)
- InnoDB: A failure to compute virtual column values caused an excessive number of error messages. (Bug #21968375)
- InnoDB: An INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX query raised an assertion. A dictionary mutex was taken while InnoDB populated an in-memory heap table. The mutex was not released before InnoDB attempted to convert the in-memory heap table to an optimized internal temporary table. (Bug #21950756, Bug #78714)
- InnoDB: To avoid a potential hang and redo log overwrite, the innodb_log_file_size minimum value was increased from 1MB to 4MB, and the length calculation in log_margin_checkpoint_age() was revised. (Bug #21924224, Bug #78647)
- InnoDB: A full-text query run under high concurrency caused a server exit due to an invalid memory access. (Bug #21922532)
- InnoDB: An ALTER TABLE operation on a table partitioned across multiple tablespaces moved existing partitions to the table's default tablespace, resulting in an assertion on SHOW CREATE TABLE. Likewise, ALTER TABLE tbl_name TABLESPACE tablespace_name moved existing partitions to the named tablespace. Only ALTER TABLE ... REORGANIZE PARTITION should move existing partitions to the table's default tablespace or to a named tablespace. Running ALTER TABLE tbl_name TABLESPACE tablespace_name on a table partitioned across multiple tablespaces should only change the table's default tablespace. (Bug #21914047, Bug #22124042, Bug #79030)
- InnoDB: With a large innodb_sort_buffer_size setting, adding an index on an empty table performed more slowly than expected. (Bug #21762319, Bug #78262)
- InnoDB: A race condition occurred between fil_names_write() and file_rename_tablespace_in_mem(). (Bug #21549928)
- InnoDB: Purge attempted to access undo pages that were freed by a preceding undo log truncate operation, resulting in an assertion. (Bug #21508627)
- InnoDB: InnoDB did not return an informative message when refusing an online ALTER TABLE operation on a table with a spatial index. (Bug #20111575)
- InnoDB: A compiler barrier was added to ut_relax_cpu(). The ut_always_false dummy global variable was removed from ut_delay(). (Bug #20045167, Bug #74832)
- InnoDB: Incorrect index values were returned while dropping a virtual column. The altered table object was used to evaluate virtual column values. (Bug #79773, Bug #22469459)
- References: This bug is a regression of Bug #22082762.
- Partitioning: Subquery scans on partitioned tables with virtual columns could leak memory. (Bug #79145, Bug #22162200)
- Replication: When a slave was configured with log_bin=OFF, the applier (SQL) thread was failing to correctly roll back partial transactions left in the relay log. The fix ensures that on reconnection, the applier thread correctly rolls back a partial transaction and starts applying it again from the next relay log file. (Bug #21691396)
- Replication: The behavior of SET GTID_PURGED was not consistent between version 5.6 and 5.7. The fix ensures that version 5.7 does not initiate a transaction for SET GTID_PURGED statements. (Bug #21472492)
- Replication: When DML invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column, that DML has to be marked as an unsafe statement. If the tables are locked in the transaction prior to the DML statement (for example by using LOCK TABLES), then the DML statement was not being marked as an unsafe statement. The fix ensures that such DML statements are marked correctly as unsafe. (Bug #17047208)
- Replication: If pseudo_slave_mode was set to 1 while an XA transaction was in the prepare stage, an assert was generated. The fix ensures that changes from 0 to 1 can be made during XA transactions. Note that this variable is solely for internal use by the server. (Bug #79416, Bug #22273964, Bug #78695, Bug #21942487)
- Replication: If the server stopped unexpectedly immediately before committing an XA transaction which had been prepared, and the transaction modified the mysql.gtid_executed table, then the subsequent recovery aborted due to an innodb_lock_wait_timeout error when it was reading the mysql.gtid_executed table. To fix the problem, XA transactions are no longer permitted to modify the mysql.gtid_executed table. (Bug #77740, Bug #21452916)
- Replication: As part of the fix for Bug #16290902, when writing a DROP TEMPORARY TABLE IF EXISTS query into the binary log, the query is no longer preceded by a USE `db` statement. Instead the query uses a fully qualified table name, for example DROP TEMPORARY TABLE IF EXISTS `db`.`t1`;. This changed the application of replicate-rewrite-db filter rules, as they work only on the default database specified in a USE statement. This caused slaves to fail when the resulting CREATE TEMPORARY TABLE was applied. The fix ensures that at the time of writing a DROP TEMPORARY TABLE IF EXISTS query into the binary log, a check is made for the default database. If it exists then the query is written as USE default_db in the binary log. If a default database is not present then the query is logged with the qualified table name. (Bug #77417, Bug #21317739)
- Replication: If generating a GTID for a transaction fails, the transaction is not written to the binary log but still gets committed. Although running out of GTIDs is a rare situation, if it did occur an error was written to the binary log as a sync stage error. With binlog_error_action=ABORT_SERVER, the server aborts on such an error, avoiding data inconsistency. When binlog_error_action=IGNORE_ERROR, the server continues binary logging after such an error, potentially leading to data inconsistency between the master and the slave. The fix changes the error to be correctly logged as a flush stage error. (Bug #77393, Bug #21276661)
- Replication: When using --gtid-mode=on , --enforce-gtid-consistency , and --binlog-format=row, if a user defined function with multiple DROP TEMPORARY TABLE statements was executed on a master, the resulting binary log caused an error on slaves. The fix ensures that stored functions and triggers are also considered multi-statement transactions, and that when --enforce-gtid-consistency is enabled, functions with CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE statements generate an ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION error. (Bug #77354, Bug #21253415)
- Replication: Stored procedure local variables that were used in an ALTER EVENT statement were not being replicated correctly. This was related to the fact that CALL statements are not written into the binary log. Instead each statement executed in a stored procedure is binary logged separately, with the exception that the query string is modified so that uses of stored procedure local variables are replaced with NAME_CONST('spvar_name', 'spvar-value') calls. DDL statements (which are always binary logged in statement binary log mode irrespective of the current binary log format) can also use stored procedure local variables and a clash could cause them to not be replicated correctly. The fix ensures that any stored procedure local variables used in a query are replaced with NAME_CONST(...), except for the case when it is a DML query and the binary log format is ROW. (Bug #77288, Bug #21229951)
- Replication: DROP TABLE statements are regenerated by the server before being written to the binary log. If a table or database name contained a non-regular character, such as non-latin characters, the regenerated statement was using the wrong name, breaking replication. The fix ensures that in such a case the regenerated name is correctly converted back to the original character set. Also during work on this bug, it was discovered that in the rare case that a table or database name contained 64 characters, the server was throwing an assert(M_TBLLEN < 128) assertion. The assertion has been corrected to be less than or equal 128. (Bug #77249, Bug #21205695)
- References: See also Bug #78036, Bug #22261585, Bug #21619371.
- Replication: Irrespective of the current binlog_format setting, DDL that changes metadata on a master is always identified and written to the binary log in STATEMENT format. Such DDL could occur from event based SQL statements, such as CREATE EVENT or DROP EVENT, or transactions that had unsafe functions such as sysdate(). When binlog_format=MIXED and attempting to replicate such DDL, it was not being correctly identified and therefore was not being correctly replicated. (Bug #71859, Bug #19286708)
- The System-V initialization script for RHEL6 or older failed to enable the mysqld service by default. (Bug #22600974)
- Some activations of triggers that referenced a NEW value inside a query might cause a server exit. (Bug #22377554)
- Parsing the output of ST_GeometryType() as a DATETIME value with a default character set of utf32 caused a server exit. (Bug #22340858)
- For a character set loaded from an XML file, the server could fail to properly initialize its state map, leading to a server exit. (Bug #22338946)
- Inserting a token of 84 4-byte characters into a full-text index raised an assertion. The maximum token length was 84 characters up to a maximum of 252 bytes, which did not account for 4-byte characters. The maximum byte length is now 336 bytes. (Bug #22291765, Bug #79475)
- For some combination of consumers, the Performance Schema prepared statement instrumentation could cause a server exit. (Bug #22291560)
- If a client attempted to use an unsupported client character set (ucs2, utf16, utf32), the error message reported to the client differed for SSL and non-SSL connections. (Bug #22216715)
- Data corruption or a server exit could occur if a stored procedure had a variable declared as TEXT or BLOB and data was copied to that variable using SELECT ... INTO syntax from a TEXT or BLOB column. (Bug #22203532, Bug #22232332, Bug #21941152)
- For debug builds, with the ONLY_FULL_GROUP_BY SQL mode disabled, the optimizer could attempt to sort on outer references, causing an assertion to be raised. (Bug #22200984)
- Different handling of YEAR values for INSERT and SELECT could raise an assertion when such values were used in a generated-column expression. (Bug #22195458)
- For debug builds, for queries involving MIN() or MAX() on an indexed column and a reference to an unindexed datetime column, the optimizer could attempt to access unread values, causing an assertion to be raised. (Bug #22186926)
- Geohash decoding (for example, for ST_LongFromGeoHash(), ST_LatFromGeoHash(), and ST_PointFromGeoHash()) could yield incorrect results due to the rounding algorithm being too aggressive. (Bug #22165582)
- In debug builds, with READ UNCOMMITTED transaction isolation level, a SELECT reading a generated column using an index could raise an assertion. (Bug #22133710)
- For generated columns, the optimizer could fail to establish the proper table reference, resulting in a server exit. (Bug #22132822)
- For some combination of consumers, the Performance Schema file instrumentation could fail due to an attempt to use a NULL pointer while instrumenting temporary file I/O. (Bug #22130453)
- The Performance Schema could raise an assertion based on the (incorrect) assumption that instrumenting a temporary file open operation always resulted in an instrumented file. (Bug #22118669)
- An ALTER TABLE statement that added an index on a virtual generated column using the INPLACE algorithm did not properly report warnings (or errors in strict SQL mode) for problems with virtual column values. Any subsequent ALTER TABLE on the same table using the COPY algorithm produced such warnings (or failures in strict SQL mode) due to evaluating the problematic value, but left the connection in a state that made further INPLACE alterations on the table fail for the same reason. (Bug #22095783)
- If the left expression of an IN expression was a row subquery that accesses no tables, an assertion could be raised (in debug builds), or incorrect results could be returned (in release builds). (Bug #22089623)
- Expressions that match an indexed generated column may be replaced with the generated column by the optimizer to enable use of the associated index. However, this optimization was not performed for single-table update and delete statements. The optimizer now extends this replacement optimization to such statements. (Bug #22077611)
- ANSI SQL mode could cause inconsistencies in processing of generated column expressions. (Bug #22018979)
- Removal of server session plugins was faulty and could cause a server exit. (Bug #21983102)
- For some queries, if the optimizer used Disk-Sweep Multi-Range Read optimization on generated columns, the server could exit. (Bug #21980430)
- mysqlpump tries to do as much work in parallel as possible, but the dump threads lacked a synchronization point before backing up the data, resulting in inconsistent backup. mysqlpump now locks the server and flushes all the tables using FLUSH TABLES WITH READ LOCK to ensure that any further connections view the same state of all the databases.
- This change lifts the restriction aginst the --single-transaction option being mutually exclusive with parallelism. When using --single-transaction, it is no longer necessary to disable parallelism by setting --default-parallelism to 0 and not using any instances of --parallel-schemas. (Bug #21980284)
- A fault in pthread_rwlock_unlock() wherein it decremented the lock counter even for already unlocked objects could result in deadlock. (Bug #21966621)
- The Performance Schema could acquire a double lock on session system variables, causing a server hang or (in debug builds) an assertion to be raised. (Bug #21935106)
- Certain queries containing WHERE 0 of the following form could cause a server exit due to uninitialized reads: SELECT (SELECT col AND constant FROM t WHERE 0) IN (SELECT constant FROM t1). (Bug #21922202)
- CREATE TEMPORARY TABLE .. SELECT statements involving BIT columns that resulted in a column type redefinition could cause a server exit or an improperly created table. (Bug #21902059)
- For UPDATE operations on InnoDB tables, there could be a mismatch between the value of a virtual generated column in the index and the value in the “before” buffer, resulting in a server exit. (Bug #21875520)
- With character_set_server=utf16le, some values of ft_boolean_syntax could cause a server exit for full-text searches. (Bug #21631855)
- With gtid_mode=ON, concurrent execution of SHOW TABLE STATUS and REVOKE ALL PRIVILEGES could lead to deadlock in there was a view in the database and REVOKE ALL PRIVILEGES failed for some but not all of the named users. (Bug #21463167)
- mysqlpump could exit due to incorrect synchronization of view-handling threads during dump processing. (Bug #21399236, Bug #21447753)
- With LOCK TABLES in force, an attempt to open a temporary MERGE table consisting of a view in its list of tables (not the last table in the list) caused a server exit. (Bug #20691429)
- For certain prepared statements, the optimizer could transform join conditions such that it used a pointer to a temporary table field that was no longer available after the initial execution. Subsequent executions caused a server exit. (Bug #19941403)
- Repeated execution of ALTER TABLE v1 CHECK PARTITION as a prepared statement, where v1 is a view, led to a server exit.
- In addition, output for some administrative operations, when they are attempted on a view, changes from “Corrupt” to “Operation failed”. These include ANALYZE TABLE, OPTIMIZE TABLE, and REPAIR TABLE, and ALTER TABLE statements that perform ANALYZE PARTITION, CHECK PARTITION, OPTIMIZE PARTITION, and REPAIR PARTITION operations. (Bug #19817021)
- Valgrind detected some possibly unsafe use of string functions in code used for asymmetric encryption. (Bug #19688135)
- An out-of-memory failure in join buffer allocation could lead to incorrect results for multiple-table queries. (Bug #19031409)
- SSL connections ignored any change made by passing the MYSQL_OPT_READ_TIMEOUT option to the mysql_options() C API function. (Bug #17618162)
- For ALTER TABLE statements, the parser did not support the ALGORITHM clause for some operations involving tablespaces or partitions. (Bug #17400320)
- Debian packages create the root user account using the auth_socket authentication plugin to achieve secure-by-default installation if installation was done with a blank root password. However, auth_socket was being used even if the password was not blank. (Bug #80137, Bug #22594846)
- Solaris packages failed to note the dependency of the MySQL client library on the libstlport library. (Bug #79778, Bug #22504264)
- Thread handle resource leakage could occur when creating threads for handling connections on Windows, which could lead to Windows servers eventually running out of handles. (Bug #79714, Bug #22455198)
- Using systemd to start mysqld failed if configuration files contained multiple datadir lines. Now the last datadir line is used. (Bug #79613, Bug #22361702)
- A derived table contained in the SET clause of an UPDATE statement should be materialized to avoid an error about updating a table that is also read in the same statement. Materialization did not occur for some statements, leading to that error. (Bug #79590, Bug #22343301)
- MySQL 5.7.8 prohibited references to select list columns of the outer query from the HAVING clause of a correlated subquery in the inner query because they are not permitted by standard SQL. However, because this is a frequently used extension, it is once again permitted. (Bug #79549, Bug #22328395)
- References: This bug was introduced by Bug #19823076.
- Installing just shared libraries, clients, and development support files failed to install everything needed to build client applications because the binary_log_types.h header file was not installed. (Bug #79531, Bug #22321338)
- SHOW CREATE TRIGGER could fail to display all applicable SQL modes. (Bug #79526, Bug #22313133)
- On SELinux, mysqld --initialize with an --init-file option could fail to initialize the data directory. (Bug #79442, Bug #22314098, Bug #79458, Bug #22286481)
- Syntax checks were not always performed when an ALTER TABLE statement changed a column's type from TEXT to JSON. This could lead to JSON columns containing invalid JSON data. This issue was observed when the original TEXT column used the utf8mb4_bin collation. (Bug #79432, Bug #22278524)
- Hexadecimal and bit literals written to saved view definitions could be truncated. This could also affect extended EXPLAIN output. (Bug #79398, Bug #22268110)
- ST_Buffer() returned an error for geometries with an SRID different from 0. Nonzero SRID values now are permitted but ignored (calculations are still done using Cartesian coordinates). (Bug #79394, Bug #22306745)
- A regression caused failure of the workaround at Restrictions on Subqueries for avoiding ER_UPDATE_TABLE_USED errors when referencing the same table in a subquery as was used as target for an UPDATE or DELETE statement. (Bug #79333, Bug #22239474)
- Statements causing multiple parse errors could cause an assertion to be raised. (Bug #79303, Bug #22222013)
- Some queries with derived tables perform better with materialization than when merged into the outer query. The optimizer no longer uses merging by default for derived tables containing dependent subqueries in the select list. (Bug #79294, Bug #22223202)
- ALTER USER and SET PASSWORD did not work at server startup when invoked in the file named using the --init-file option. (Bug #79277, Bug #22205360)
- When not in strict SQL mode, attempts to implicitly insert NULL into a NOT NULL column resulted in different behavior depending on whether the table had a trigger. (Bug #79266, Bug #22202665)
- Some replication-only code was not protected with #ifdef and failed to compile with the WITH_UBSAN CMake option enabled. (Bug #79236, Bug #22190632)
- Configuring MySQL with the -DWITH_UBSAN=ON CMake option resulted in spurious runtime warnings from comp_err. These are now suppressed. Also, a CMake warning was added that undefined behavior address sanitizer support is currently experimental. (Bug #79230, Bug #22190656)
- INSERT INTO ... SELECT statements could insert values other than DEFAULT into generated columns. (Bug #79204, Bug #22179637)
- With the derived_merge flag of the optimizer_switch system variable enabled, queries that used a derived table on the inner side of an outer join could return incorrect results. (Bug #79194, Bug #22176604)
- Memory leaks in libmysqld were corrected. (Bug #79187, Bug #22174219)
- FOUND_ROWS() could return a negative value if the preceding query was a UNION involving SQL_CALC_FOUND_ROWS and LIMIT ... OFFSET. (Bug #79131, Bug #22155786)
- IN-to-EXISTS subquery transformation could cause SELECT NULL IN (subquery) to return 0 rather than NULL.
- IN-to-EXISTS subquery transformation could yield incorrect results for queries for which the table was nonempty, the subquery on the left side of the IN predicate produced an empty result, and semi-join optimization was disabled. (Bug #78946, Bug #22090717, Bug #19822406)
- The result from WEIGHT_STRING() could be incorrect when used in a view. (Bug #78783, Bug #21974321)
- If server was started with --thread-handling=no-threads, no foreground thread was created for a client connection. The Performance Schema did not account for the possibility of no foreground threads for queries on the session_connect_attrs table, causing an assertion to be raised. (Bug #78292, Bug #21765843)
- mysqlpump generated incorrect INSERT statements for tables that had generated columns. (Bug #78082, Bug #21650559)
- ALTER TABLE ... CONVERT TO CHARACTER SET operations that used the INPLACE algorithm were ineffective if the table contained only numeric data types. Also, such operations failed to clean up their temporary .frm file. (Bug #77554, Bug #21345391)
- Heavy SHOW PROCESSLIST or SELECT ... FROM INFORMATION_SCHEMA.PROCESSLIST activity could result in the server accepting more than max_connections connections. (Bug #75155, Bug #20201006)
- When used with the libmysqld embedded server, the mysql_stmt_execute() C API function failed with a malformed communication packet error, even for simple prepared statements. (Bug #70664, Bug #17883203)
- Queries using SUM(DISTINCT) could produce incorrect results when there were many distinct values. (Bug #56927, Bug #11764126, Bug #79648, Bug #22370382)

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

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

What's new in this version:

Compilation Notes:
- A value of system is now permitted for the WITH_BOOST CMake option. If this option is not set or is set to system, it is assumed that the correct version of Boost is installed on the compilation host in the standard location. In this case, the installed version of Boost is used rather than any version included with a MySQL source distribution. (Bug #22224313)
- In addition to the mysql-5.7.11.tar.gz source tarball, another tarball named mysql-boost-5.7.11.tar.gz is provided. The new tarball contains everything in the first tarball, but also contains all the required Boost header files in a subdirectory named boost. This is for the benefit of those who do not have the correct Boost version installed and do not wish to or cannot download it. To build from this source distribution, add -DWITH_BOOST=boost to the CMake command line.

Data Type Notes:
- Bit functions and operators comprise BIT_COUNT(), BIT_AND(), BIT_OR(), BIT_XOR(), &, |, ^, ~, . Currently, bit functions and operators require BIGINT (64-bit integer) arguments and return BIGINT values, so they have a maximum range of 64 bits. Arguments of other types are converted to BIGINT and truncation might occur.
- A planned extension for MySQL 5.8 is to permit bit functions and operators to take binary string type arguments (BINARY, VARBINARY, and the BLOB types), enabling them to take arguments and produce return values larger than 64 bits. Consequently, bit operations on binary arguments in MySQL 5.7 might produce different results in MySQL 5.8. To provide advance notice about this potential change in behavior, the server now produces warnings for bit operations for which binary arguments will not be converted to integer in MySQL 5.8. These warnings afford an opportunity to rewrite affected statements. To explicitly produce MySQL 5.7 behavior in a way that will not change after an upgrade to 5.8, cast bit-operation binary arguments to convert them to integer. For more information and examples, see Bit Functions and Operators.

Installation Notes:
- Previously, mysqld --initialize required the data directory to not exist or, if it existed, to be empty. Now an existing data directory is permitted to be nonempty if every entry either has a name that begins with a period (.) or is named using an --ignore-db-dir option. (Bug #79250, Bug #22213873)

Security Notes:
- The linked OpenSSL library for the MySQL Commercial Server has been updated from version 1.0.1p to version 1.0.1q. Issues fixed in the new version are described at http://www.openssl.org/news/vulnerabilities.html.
- This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #22348181)
- The default value of the default_password_lifetime system variable that controls the global password expiration policy has been changed from 360 (360 days) to 0 (no password expiration). The default of 360 sometimes took people by surprise when account passwords expired a year after upgrading to MySQL 5.7. To continue to use a value other than 0 as the password expiration, start the server with an explicit setting for default_password_lifetime.
- MySQL client programs now support an --ssl-mode option that enables you to specify the security state of the connection to the server. Permitted option values are PREFERRED (establish a secure encrypted connection if the server supports the capability, falling back to an unencrypted connection otherwise), DISABLED (establish an unencrypted connection), REQUIRED (establish a secure connection, or fail), VERFIFY_CA (like REQUIRED, but additionally verify the server certificate), VERIFY_IDENTITY (like VERIFY_CA, but additionally verify that the server certificate matches the host name to which the connection is attempted). For backward compatibility, the default is PREFERRED if --ssl-mode is not specified.
- These clients support --ssl-mode: mysql, mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlshow, mysqlpump, mysqlslap, mysqltest, mysql_upgrade.
- The --ssl-mode option comprises the capabilities of the client-side --ssl and --ssl-verify-server-cert options. Consequently, both of those options are now deprecated and will be removed in a future MySQL release. Use --ssl-mode=REQUIRED instead of --ssl=1 or --enable-ssl. Use --ssl-mode=DISABLED instead of --ssl=0, --skip-ssl, or --disable-ssl. Use --ssl-mode=VERIFY_IDENTITY instead of --ssl-verify-server-cert options. (The server-side --ssl option is not deprecated.)
- For the C API, the new MYSQL_OPT_SSL_MODE option for mysql_options() corresponds to the --ssl-mode option. The MYSQL_OPT_SSL_ENFORCE and MYSQL_OPT_SSL_VERIFY_SERVER_CERT options for mysql_options() correspond to the client-side --ssl and --ssl-verify-server-cert options. They are now deprecated and will be removed in a future MySQL release. Use MYSQL_OPT_SSL_MODE with an option value of SSL_MODE_REQUIRED or SSL_MODE_VERIFY_IDENTITY instead. In consequence of this change, the minor C API version number was incremented.
- MySQL now supports a keyring service that enables internal MySQL server components and plugins to securely store sensitive information for later retrieval. The implementation includes a keyring_file plugin that stores data in a file local to the server host.

Functionality Added or Changed:
- InnoDB: A new InnoDB configuration option, innodb_tmpdir, allows you to configure a separate temporary file directory for online ALTER TABLE operations. This option was introduced to help avoid tmpdir overflows that could occur as a result of large temporary files created during online ALTER TABLE operations. innodb_tmpdir is a SESSION variable and can be configured dynamically using a SET statement. (Bug #19183565)
- InnoDB: InnoDB now supports at-rest data encryption for InnoDB tables stored in file-per-table tablespaces. Encryption is enabled by specifying the ENCRYPTION option when creating or altering an InnoDB table. For more information, see InnoDB Tablespace Encryption.
- Replication: The log_statements_unsafe_for_binlog variable was added to provide control over whether the warnings generated by error 1592 are added to the binary log or not.
- yaSSL was upgraded to version 2.3.9. This upgrade corrects an issue in which yaSSL handled only cases of zero or one leading zeros for the key agreement instead of potentially any number, which in rare cases could cause connections to fail when using DHE cipher suites. (Bug #22361038)
- The Valgrind function signature in mysql-test/valgrind.supp was upgraded for Valgrind 3.11. (Bug #22214867)
- The audit_log plugin now produces events in the MYSQL_AUDIT_TABLE_ACCESS_CLASS class. These events are abortable. (Bug #21458192)
- The format of log output produced by mysqld_safe now is configurable using the --mysqld-safe-log-timestamps option. This option can be used to produce log timestamps in formats compatible with the server or in formats used by mysqld_safe in older versions of MySQL. For more information, see mysqld_safe — MySQL Server Startup Script. (Bug #78475, Bug #21862951)
- The mysql_kill(), mysql_list_fields(), mysql_list_processes(), and mysql_refresh() C API functions are deprecated and will be removed in a future version of MySQL. The same is true of the corresponding COM_PROCESS_KILL, COM_FIELD_LIST, COM_PROCESS_INFO, and COM_REFRESH client/server protocol commands. Instead, use mysql_query() to execute a KILL, SHOW COLUMNS, SHOW PROCESSLIST, or FLUSH statement, respectively.
- The mysql_plugin utility is deprecated and will be removed in a future version of MySQL. Alternatives include loading plugins at server startup using the --plugin-load or --plugin-load-add option, or at runtime using the INSTALL PLUGIN statement.
- Storage engines now can request notification about acquisition and release of exclusive metadata locks. As result, the LOCK_STATUS column of the metadata_locks Performance Schema table has two new status values. The PRE_ACQUIRE_NOTIFY and POST_RELEASE_NOTIFY status values are brief and signify that the metadata locking subsubsystem is notifying interested storage engines while entering lock acquisition or leaving lock release operations.

Bugs Fixed:
- InnoDB; Partitioning: When OPTIMIZE TABLE rebuilt a partitioned InnoDB table, it placed the resulting partition tablespace files (*.ibd files) in the default data directory instead of the directory specified using the DATA DIRECTORY option. (Bug #75112, Bug #20160327)
- InnoDB: InnoDB failed to update index statistics when adding or dropping a virtual column. (Bug #22469660, Bug #79775)
- InnoDB: A small InnoDB buffer pool size with a large innodb_stats_persistent_sample_pages setting resulted in a Difficult to find free blocks in the buffer pool warning. (Bug #22385442)
- InnoDB: memcached connections are blocked from accessing tables that contain an indexed virtual column. Accessing an indexed virtual column requires a callback to the server, but a memcached connection does not have access to the server code. (Bug #22384503, Bug #79691)
- InnoDB: InnoDB did not return an informative message when refusing an online ALTER TABLE operation that attempted to add an index and a virtual column. (Bug #22374827)
- InnoDB: An invalid innodb_saved_page_number_debug setting caused a server exit. (Bug #22311319, Bug #79516)
- InnoDB: InnoDB failed to free a table object when a compressed table and temporary compressed table were created in the same shared tablespace. (Bug #22306581)
- InnoDB: In Numa-related code, the size information passed to the mbind() call in the buf_chunk_init() function was incorrect. (Bug #22293530, Bug #79434)
- InnoDB: Numa support was incomplete for online buffer pool resizing operations. (Bug #22293511, Bug #79354)
- InnoDB: A SELECT COUNT(*) query that counted the results of a full-text subquery raised an assertion. (Bug #22270139)
- InnoDB: InnoDB passed a buffer with an incorrect TINYBLOB data length for a virtual column, resulting in a purge thread failure. (Bug #22256752)
- InnoDB: A purge failure occurred while deleting data from a table that contained a spatial index. (Bug #22230442)
- InnoDB: An assertion was raised when purge accessed a freed page while attempting to rebuild virtual column data from the clustered index. (Bug #22204260)
- InnoDB: Only prefix bytes were logged for an indexed virtual column, resulting in an a Clustered record for sec rec not found error. (Bug #22202788)
- InnoDB: A small buffer pool with an innodb_page_size setting of 64K could cause startup, bootstrap, and recovery failures. (Bug #22179133, Bug #79201)
- InnoDB: Unreachable code that checks for 32-bit file offsets was removed. (Bug #22163880, Bug #79150)
- InnoDB: A slow shutdown failure was caused by background threads adding undo records to the purge history list during or after purge thread exit. (Bug #22154730)
- InnoDB: The InnoDB purge thread died attempting to purge a virtual column index record that was not delete-marked. (Bug #22141031)
- InnoDB: In debug builds, an ALTER TABLE operation that increased the column length of a virtual column raised an assertion. (Bug #22139917)
- InnoDB: ut_allocator prepended the allocation payload with a 12-byte header on 32-bit systems, causing unaligned memory access. On 32-bit SPARC systems, the unaligned memory access caused a crash during bootstrap. (Bug #22131684)
- InnoDB: In debug builds, an ALTER TABLE operation that added a new virtual column before an existing virtual column raised an assertion. (Bug #22123674, Bug #22111464)
- InnoDB: InnoDB startup messages related to dumping and loading of the buffer pool were improved. (Bug #22096661, Bug #78960)
- InnoDB: Creating a table with a full-text index and a foreign key constraint failed when foreign_key_checks was disabled. (Bug #22094601, Bug #78955)
- References: This bug is a regression of Bug #16845421.
- InnoDB: Support was enabled for ALGORITHM=INPLACE operations that add an index on an existing virtual column while dropping another virtual column. Support was also enabled for ALGORITHM=INPLACE operations that add a virtual column and an index. When adding an index on a newly-added virtual column, purge now skips the uncommitted virtual index. (Bug #22082762)
- InnoDB: The wrong table object was used to compute virtual column values for a query that accessed multiple instances of the same table. (Bug #22070021)
- InnoDB: A purge thread failure occurred when inserting and deleting spatial data. The child page number field was not stored during the R-tree search stage. (Bug #22027053)
- InnoDB: Starting the server with an empty innodb_data_home_dir entry in the configuration file caused InnoDB to look for the buffer pool file in the root directory, resulting in a startup error. (Bug #22016556, Bug #78831)
- InnoDB: A failure to compute virtual column values caused an excessive number of error messages. (Bug #21968375)
- InnoDB: An INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX query raised an assertion. A dictionary mutex was taken while InnoDB populated an in-memory heap table. The mutex was not released before InnoDB attempted to convert the in-memory heap table to an optimized internal temporary table. (Bug #21950756, Bug #78714)
- InnoDB: To avoid a potential hang and redo log overwrite, the innodb_log_file_size minimum value was increased from 1MB to 4MB, and the length calculation in log_margin_checkpoint_age() was revised. (Bug #21924224, Bug #78647)
- InnoDB: A full-text query run under high concurrency caused a server exit due to an invalid memory access. (Bug #21922532)
- InnoDB: An ALTER TABLE operation on a table partitioned across multiple tablespaces moved existing partitions to the table's default tablespace, resulting in an assertion on SHOW CREATE TABLE. Likewise, ALTER TABLE tbl_name TABLESPACE tablespace_name moved existing partitions to the named tablespace. Only ALTER TABLE ... REORGANIZE PARTITION should move existing partitions to the table's default tablespace or to a named tablespace. Running ALTER TABLE tbl_name TABLESPACE tablespace_name on a table partitioned across multiple tablespaces should only change the table's default tablespace. (Bug #21914047, Bug #22124042, Bug #79030)
- InnoDB: With a large innodb_sort_buffer_size setting, adding an index on an empty table performed more slowly than expected. (Bug #21762319, Bug #78262)
- InnoDB: A race condition occurred between fil_names_write() and file_rename_tablespace_in_mem(). (Bug #21549928)
- InnoDB: Purge attempted to access undo pages that were freed by a preceding undo log truncate operation, resulting in an assertion. (Bug #21508627)
- InnoDB: InnoDB did not return an informative message when refusing an online ALTER TABLE operation on a table with a spatial index. (Bug #20111575)
- InnoDB: A compiler barrier was added to ut_relax_cpu(). The ut_always_false dummy global variable was removed from ut_delay(). (Bug #20045167, Bug #74832)
- InnoDB: Incorrect index values were returned while dropping a virtual column. The altered table object was used to evaluate virtual column values. (Bug #79773, Bug #22469459)
- References: This bug is a regression of Bug #22082762.
- Partitioning: Subquery scans on partitioned tables with virtual columns could leak memory. (Bug #79145, Bug #22162200)
- Replication: When a slave was configured with log_bin=OFF, the applier (SQL) thread was failing to correctly roll back partial transactions left in the relay log. The fix ensures that on reconnection, the applier thread correctly rolls back a partial transaction and starts applying it again from the next relay log file. (Bug #21691396)
- Replication: The behavior of SET GTID_PURGED was not consistent between version 5.6 and 5.7. The fix ensures that version 5.7 does not initiate a transaction for SET GTID_PURGED statements. (Bug #21472492)
- Replication: When DML invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column, that DML has to be marked as an unsafe statement. If the tables are locked in the transaction prior to the DML statement (for example by using LOCK TABLES), then the DML statement was not being marked as an unsafe statement. The fix ensures that such DML statements are marked correctly as unsafe. (Bug #17047208)
- Replication: If pseudo_slave_mode was set to 1 while an XA transaction was in the prepare stage, an assert was generated. The fix ensures that changes from 0 to 1 can be made during XA transactions. Note that this variable is solely for internal use by the server. (Bug #79416, Bug #22273964, Bug #78695, Bug #21942487)
- Replication: If the server stopped unexpectedly immediately before committing an XA transaction which had been prepared, and the transaction modified the mysql.gtid_executed table, then the subsequent recovery aborted due to an innodb_lock_wait_timeout error when it was reading the mysql.gtid_executed table. To fix the problem, XA transactions are no longer permitted to modify the mysql.gtid_executed table. (Bug #77740, Bug #21452916)
- Replication: As part of the fix for Bug #16290902, when writing a DROP TEMPORARY TABLE IF EXISTS query into the binary log, the query is no longer preceded by a USE `db` statement. Instead the query uses a fully qualified table name, for example DROP TEMPORARY TABLE IF EXISTS `db`.`t1`;. This changed the application of replicate-rewrite-db filter rules, as they work only on the default database specified in a USE statement. This caused slaves to fail when the resulting CREATE TEMPORARY TABLE was applied. The fix ensures that at the time of writing a DROP TEMPORARY TABLE IF EXISTS query into the binary log, a check is made for the default database. If it exists then the query is written as USE default_db in the binary log. If a default database is not present then the query is logged with the qualified table name. (Bug #77417, Bug #21317739)
- Replication: If generating a GTID for a transaction fails, the transaction is not written to the binary log but still gets committed. Although running out of GTIDs is a rare situation, if it did occur an error was written to the binary log as a sync stage error. With binlog_error_action=ABORT_SERVER, the server aborts on such an error, avoiding data inconsistency. When binlog_error_action=IGNORE_ERROR, the server continues binary logging after such an error, potentially leading to data inconsistency between the master and the slave. The fix changes the error to be correctly logged as a flush stage error. (Bug #77393, Bug #21276661)
- Replication: When using --gtid-mode=on , --enforce-gtid-consistency , and --binlog-format=row, if a user defined function with multiple DROP TEMPORARY TABLE statements was executed on a master, the resulting binary log caused an error on slaves. The fix ensures that stored functions and triggers are also considered multi-statement transactions, and that when --enforce-gtid-consistency is enabled, functions with CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE statements generate an ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION error. (Bug #77354, Bug #21253415)
- Replication: Stored procedure local variables that were used in an ALTER EVENT statement were not being replicated correctly. This was related to the fact that CALL statements are not written into the binary log. Instead each statement executed in a stored procedure is binary logged separately, with the exception that the query string is modified so that uses of stored procedure local variables are replaced with NAME_CONST('spvar_name', 'spvar-value') calls. DDL statements (which are always binary logged in statement binary log mode irrespective of the current binary log format) can also use stored procedure local variables and a clash could cause them to not be replicated correctly. The fix ensures that any stored procedure local variables used in a query are replaced with NAME_CONST(...), except for the case when it is a DML query and the binary log format is ROW. (Bug #77288, Bug #21229951)
- Replication: DROP TABLE statements are regenerated by the server before being written to the binary log. If a table or database name contained a non-regular character, such as non-latin characters, the regenerated statement was using the wrong name, breaking replication. The fix ensures that in such a case the regenerated name is correctly converted back to the original character set. Also during work on this bug, it was discovered that in the rare case that a table or database name contained 64 characters, the server was throwing an assert(M_TBLLEN < 128) assertion. The assertion has been corrected to be less than or equal 128. (Bug #77249, Bug #21205695)
- References: See also Bug #78036, Bug #22261585, Bug #21619371.
- Replication: Irrespective of the current binlog_format setting, DDL that changes metadata on a master is always identified and written to the binary log in STATEMENT format. Such DDL could occur from event based SQL statements, such as CREATE EVENT or DROP EVENT, or transactions that had unsafe functions such as sysdate(). When binlog_format=MIXED and attempting to replicate such DDL, it was not being correctly identified and therefore was not being correctly replicated. (Bug #71859, Bug #19286708)
- The System-V initialization script for RHEL6 or older failed to enable the mysqld service by default. (Bug #22600974)
- Some activations of triggers that referenced a NEW value inside a query might cause a server exit. (Bug #22377554)
- Parsing the output of ST_GeometryType() as a DATETIME value with a default character set of utf32 caused a server exit. (Bug #22340858)
- For a character set loaded from an XML file, the server could fail to properly initialize its state map, leading to a server exit. (Bug #22338946)
- Inserting a token of 84 4-byte characters into a full-text index raised an assertion. The maximum token length was 84 characters up to a maximum of 252 bytes, which did not account for 4-byte characters. The maximum byte length is now 336 bytes. (Bug #22291765, Bug #79475)
- For some combination of consumers, the Performance Schema prepared statement instrumentation could cause a server exit. (Bug #22291560)
- If a client attempted to use an unsupported client character set (ucs2, utf16, utf32), the error message reported to the client differed for SSL and non-SSL connections. (Bug #22216715)
- Data corruption or a server exit could occur if a stored procedure had a variable declared as TEXT or BLOB and data was copied to that variable using SELECT ... INTO syntax from a TEXT or BLOB column. (Bug #22203532, Bug #22232332, Bug #21941152)
- For debug builds, with the ONLY_FULL_GROUP_BY SQL mode disabled, the optimizer could attempt to sort on outer references, causing an assertion to be raised. (Bug #22200984)
- Different handling of YEAR values for INSERT and SELECT could raise an assertion when such values were used in a generated-column expression. (Bug #22195458)
- For debug builds, for queries involving MIN() or MAX() on an indexed column and a reference to an unindexed datetime column, the optimizer could attempt to access unread values, causing an assertion to be raised. (Bug #22186926)
- Geohash decoding (for example, for ST_LongFromGeoHash(), ST_LatFromGeoHash(), and ST_PointFromGeoHash()) could yield incorrect results due to the rounding algorithm being too aggressive. (Bug #22165582)
- In debug builds, with READ UNCOMMITTED transaction isolation level, a SELECT reading a generated column using an index could raise an assertion. (Bug #22133710)
- For generated columns, the optimizer could fail to establish the proper table reference, resulting in a server exit. (Bug #22132822)
- For some combination of consumers, the Performance Schema file instrumentation could fail due to an attempt to use a NULL pointer while instrumenting temporary file I/O. (Bug #22130453)
- The Performance Schema could raise an assertion based on the (incorrect) assumption that instrumenting a temporary file open operation always resulted in an instrumented file. (Bug #22118669)
- An ALTER TABLE statement that added an index on a virtual generated column using the INPLACE algorithm did not properly report warnings (or errors in strict SQL mode) for problems with virtual column values. Any subsequent ALTER TABLE on the same table using the COPY algorithm produced such warnings (or failures in strict SQL mode) due to evaluating the problematic value, but left the connection in a state that made further INPLACE alterations on the table fail for the same reason. (Bug #22095783)
- If the left expression of an IN expression was a row subquery that accesses no tables, an assertion could be raised (in debug builds), or incorrect results could be returned (in release builds). (Bug #22089623)
- Expressions that match an indexed generated column may be replaced with the generated column by the optimizer to enable use of the associated index. However, this optimization was not performed for single-table update and delete statements. The optimizer now extends this replacement optimization to such statements. (Bug #22077611)
- ANSI SQL mode could cause inconsistencies in processing of generated column expressions. (Bug #22018979)
- Removal of server session plugins was faulty and could cause a server exit. (Bug #21983102)
- For some queries, if the optimizer used Disk-Sweep Multi-Range Read optimization on generated columns, the server could exit. (Bug #21980430)
- mysqlpump tries to do as much work in parallel as possible, but the dump threads lacked a synchronization point before backing up the data, resulting in inconsistent backup. mysqlpump now locks the server and flushes all the tables using FLUSH TABLES WITH READ LOCK to ensure that any further connections view the same state of all the databases.
- This change lifts the restriction aginst the --single-transaction option being mutually exclusive with parallelism. When using --single-transaction, it is no longer necessary to disable parallelism by setting --default-parallelism to 0 and not using any instances of --parallel-schemas. (Bug #21980284)
- A fault in pthread_rwlock_unlock() wherein it decremented the lock counter even for already unlocked objects could result in deadlock. (Bug #21966621)
- The Performance Schema could acquire a double lock on session system variables, causing a server hang or (in debug builds) an assertion to be raised. (Bug #21935106)
- Certain queries containing WHERE 0 of the following form could cause a server exit due to uninitialized reads: SELECT (SELECT col AND constant FROM t WHERE 0) IN (SELECT constant FROM t1). (Bug #21922202)
- CREATE TEMPORARY TABLE .. SELECT statements involving BIT columns that resulted in a column type redefinition could cause a server exit or an improperly created table. (Bug #21902059)
- For UPDATE operations on InnoDB tables, there could be a mismatch between the value of a virtual generated column in the index and the value in the “before” buffer, resulting in a server exit. (Bug #21875520)
- With character_set_server=utf16le, some values of ft_boolean_syntax could cause a server exit for full-text searches. (Bug #21631855)
- With gtid_mode=ON, concurrent execution of SHOW TABLE STATUS and REVOKE ALL PRIVILEGES could lead to deadlock in there was a view in the database and REVOKE ALL PRIVILEGES failed for some but not all of the named users. (Bug #21463167)
- mysqlpump could exit due to incorrect synchronization of view-handling threads during dump processing. (Bug #21399236, Bug #21447753)
- With LOCK TABLES in force, an attempt to open a temporary MERGE table consisting of a view in its list of tables (not the last table in the list) caused a server exit. (Bug #20691429)
- For certain prepared statements, the optimizer could transform join conditions such that it used a pointer to a temporary table field that was no longer available after the initial execution. Subsequent executions caused a server exit. (Bug #19941403)
- Repeated execution of ALTER TABLE v1 CHECK PARTITION as a prepared statement, where v1 is a view, led to a server exit.
- In addition, output for some administrative operations, when they are attempted on a view, changes from “Corrupt” to “Operation failed”. These include ANALYZE TABLE, OPTIMIZE TABLE, and REPAIR TABLE, and ALTER TABLE statements that perform ANALYZE PARTITION, CHECK PARTITION, OPTIMIZE PARTITION, and REPAIR PARTITION operations. (Bug #19817021)
- Valgrind detected some possibly unsafe use of string functions in code used for asymmetric encryption. (Bug #19688135)
- An out-of-memory failure in join buffer allocation could lead to incorrect results for multiple-table queries. (Bug #19031409)
- SSL connections ignored any change made by passing the MYSQL_OPT_READ_TIMEOUT option to the mysql_options() C API function. (Bug #17618162)
- For ALTER TABLE statements, the parser did not support the ALGORITHM clause for some operations involving tablespaces or partitions. (Bug #17400320)
- Debian packages create the root user account using the auth_socket authentication plugin to achieve secure-by-default installation if installation was done with a blank root password. However, auth_socket was being used even if the password was not blank. (Bug #80137, Bug #22594846)
- Solaris packages failed to note the dependency of the MySQL client library on the libstlport library. (Bug #79778, Bug #22504264)
- Thread handle resource leakage could occur when creating threads for handling connections on Windows, which could lead to Windows servers eventually running out of handles. (Bug #79714, Bug #22455198)
- Using systemd to start mysqld failed if configuration files contained multiple datadir lines. Now the last datadir line is used. (Bug #79613, Bug #22361702)
- A derived table contained in the SET clause of an UPDATE statement should be materialized to avoid an error about updating a table that is also read in the same statement. Materialization did not occur for some statements, leading to that error. (Bug #79590, Bug #22343301)
- MySQL 5.7.8 prohibited references to select list columns of the outer query from the HAVING clause of a correlated subquery in the inner query because they are not permitted by standard SQL. However, because this is a frequently used extension, it is once again permitted. (Bug #79549, Bug #22328395)
- References: This bug was introduced by Bug #19823076.
- Installing just shared libraries, clients, and development support files failed to install everything needed to build client applications because the binary_log_types.h header file was not installed. (Bug #79531, Bug #22321338)
- SHOW CREATE TRIGGER could fail to display all applicable SQL modes. (Bug #79526, Bug #22313133)
- On SELinux, mysqld --initialize with an --init-file option could fail to initialize the data directory. (Bug #79442, Bug #22314098, Bug #79458, Bug #22286481)
- Syntax checks were not always performed when an ALTER TABLE statement changed a column's type from TEXT to JSON. This could lead to JSON columns containing invalid JSON data. This issue was observed when the original TEXT column used the utf8mb4_bin collation. (Bug #79432, Bug #22278524)
- Hexadecimal and bit literals written to saved view definitions could be truncated. This could also affect extended EXPLAIN output. (Bug #79398, Bug #22268110)
- ST_Buffer() returned an error for geometries with an SRID different from 0. Nonzero SRID values now are permitted but ignored (calculations are still done using Cartesian coordinates). (Bug #79394, Bug #22306745)
- A regression caused failure of the workaround at Restrictions on Subqueries for avoiding ER_UPDATE_TABLE_USED errors when referencing the same table in a subquery as was used as target for an UPDATE or DELETE statement. (Bug #79333, Bug #22239474)
- Statements causing multiple parse errors could cause an assertion to be raised. (Bug #79303, Bug #22222013)
- Some queries with derived tables perform better with materialization than when merged into the outer query. The optimizer no longer uses merging by default for derived tables containing dependent subqueries in the select list. (Bug #79294, Bug #22223202)
- ALTER USER and SET PASSWORD did not work at server startup when invoked in the file named using the --init-file option. (Bug #79277, Bug #22205360)
- When not in strict SQL mode, attempts to implicitly insert NULL into a NOT NULL column resulted in different behavior depending on whether the table had a trigger. (Bug #79266, Bug #22202665)
- Some replication-only code was not protected with #ifdef and failed to compile with the WITH_UBSAN CMake option enabled. (Bug #79236, Bug #22190632)
- Configuring MySQL with the -DWITH_UBSAN=ON CMake option resulted in spurious runtime warnings from comp_err. These are now suppressed. Also, a CMake warning was added that undefined behavior address sanitizer support is currently experimental. (Bug #79230, Bug #22190656)
- INSERT INTO ... SELECT statements could insert values other than DEFAULT into generated columns. (Bug #79204, Bug #22179637)
- With the derived_merge flag of the optimizer_switch system variable enabled, queries that used a derived table on the inner side of an outer join could return incorrect results. (Bug #79194, Bug #22176604)
- Memory leaks in libmysqld were corrected. (Bug #79187, Bug #22174219)
- FOUND_ROWS() could return a negative value if the preceding query was a UNION involving SQL_CALC_FOUND_ROWS and LIMIT ... OFFSET. (Bug #79131, Bug #22155786)
- IN-to-EXISTS subquery transformation could cause SELECT NULL IN (subquery) to return 0 rather than NULL.
- IN-to-EXISTS subquery transformation could yield incorrect results for queries for which the table was nonempty, the subquery on the left side of the IN predicate produced an empty result, and semi-join optimization was disabled. (Bug #78946, Bug #22090717, Bug #19822406)
- The result from WEIGHT_STRING() could be incorrect when used in a view. (Bug #78783, Bug #21974321)
- If server was started with --thread-handling=no-threads, no foreground thread was created for a client connection. The Performance Schema did not account for the possibility of no foreground threads for queries on the session_connect_attrs table, causing an assertion to be raised. (Bug #78292, Bug #21765843)
- mysqlpump generated incorrect INSERT statements for tables that had generated columns. (Bug #78082, Bug #21650559)
- ALTER TABLE ... CONVERT TO CHARACTER SET operations that used the INPLACE algorithm were ineffective if the table contained only numeric data types. Also, such operations failed to clean up their temporary .frm file. (Bug #77554, Bug #21345391)
- Heavy SHOW PROCESSLIST or SELECT ... FROM INFORMATION_SCHEMA.PROCESSLIST activity could result in the server accepting more than max_connections connections. (Bug #75155, Bug #20201006)
- When used with the libmysqld embedded server, the mysql_stmt_execute() C API function failed with a malformed communication packet error, even for simple prepared statements. (Bug #70664, Bug #17883203)
- Queries using SUM(DISTINCT) could produce incorrect results when there were many distinct values. (Bug #56927, Bug #11764126, Bug #79648, Bug #22370382)

MySQL 5.5.47 (32-bit) 查看版本資訊

更新時間:2015-12-09
更新細節:

What's new in this version:

Bugs Fixed:
- InnoDB: Altering the letter case of a column introduced an inconsistency between the frm file and data dictionary resulting in a failed CREATE INDEX operation on the altered column
- MySQL development RPM packages could fail to install if MySQL Connector/C development RPM packages were installed
- Possible buffer overflow from incorrect use of strcpy() and sprintf() was corrected
- MySQL RPM packages for RHEL5 failed to create the mysql system user
- Concurrent FLUSH PRIVILEGES and REVOKE or GRANT statements could produce a small time window during which invalid memory access to proxy user information could occur, leading to a server exit
- Starting the server with the query_alloc_block_size system variable set to certain negative values on a machine without enough memory could result in out-of-memory errors
- Using UNINSTALL PLUGIN to uninstall the daemon_example plugin could cause a server exit
- FLUSH DES_KEY_FILE failed to reload the DES key file
- A server exit could occur for the second execution of a prepared statement for which an ORDER BY clause referred to a column position
- Repeated execution of a prepared statement could cause a server exit if the default database was changed
- Outer references do not work as arguments to MATCH(), but the server did not properly detect them. Now it does and raises an error
- Valgrind errors were produced during row comparator setup
- INSERT DELAYED could cause a server exit for tables partitioned with a character column as the key and for which the expression required a character set conversion
- A server exit could occur when updating a view using an ALL comparison operator on a subquery that selects from an indexed column in the main table
- When a fixed-width row was inserted into a MyISAM temporary table, the entire content of the record buffer was written to the table, including any trailing space contained in VARCHAR columns, the issue being that this trailing space could be uninitialized. This problem has been resolved by insuring that only the bytes actually used to store the VARCHAR (and none extra) are copied and inserted in such cases
- Temporary MyISAM tables (unlike normal MyISAM tables) did not use the dynamic row format when they contained VARCHAR columns, resulting in larger temporary files (and more file I/O) than necessary

MySQL 5.6.28 (32-bit) 查看版本資訊

更新時間:2015-12-09
更新細節:

What's new in this version:

Bugs Fixed:
- InnoDB: InnoDB returned an invalid corruption-related error message during an IMPORT TABLESPACE operation
- InnoDB: An old version of numactl headers on the build host caused a compilation error when building a MySQL version that includes NUMA memory policy support
- InnoDB: An online ALTER TABLE operation caused a server exit
- InnoDB: A schema mismatch error occurred when importing a tablespace that was altered by DROP INDEX operation on the source server
- InnoDB: A duplicate key error that occurred during an online DDL operation reported an incorrect key name
- InnoDB: An ALTER TABLE operation caused the server to exit on disk full
- InnoDB: The system tablespace data file did not extend automatically when reaching the file size limit, causing startup to fail with a size mismatch error and preventing the addition of another system tablespace data file
- InnoDB: Altering the letter case of a column introduced an inconsistency between the frm file and data dictionary resulting in a failed CREATE INDEX operation on the altered column
- InnoDB: An ALTER TABLE operation that converted a table to an InnoDB file-per-table tablespace did not check for unknown files with the same name as the destination .idb file, permitting an unknown file of the same name to be overwritten
- Replication: As binlog_error_action=ABORT_SERVER is the default in MySQL 5.7.7 and later it is being used for more error situations. The behavior has been adjusted to generate a core dump to improve troubleshooting possibilities
- Replication: On a multi-threaded slave configured with master_info_repository=TABLE and relay_log_info_repository=TABLE which had previously been run with autocommit=1, if the slave was stopped and autocommit changed to 0, executing START SLAVE caused the session to appear to hang. After the lock wait timeout, when START SLAVE proceeded the server would stop unexpectedly. The fix ensures that when master_info_repository=TABLE, relay_log_info_repository=TABLE, and autocommit=0 a new transaction is generated for start and commit to avoid deadlocks
- Replication: Fatal errors encountered during flushing or synchronizing the binary log were being ignored. Such errors are now caught and handled depending on the setting of binlog_error_action
- Internal buffer sizes in resolve_stack_dump were increased to accommodate larger symbol space requirements for C++ code
- MySQL development RPM packages could fail to install if MySQL Connector/C development RPM packages were installed
- Possible buffer overflow from incorrect use of strcpy() and sprintf() was corrected
- MySQL RPM packages for RHEL5 failed to create the mysql system user
- For Debian package control files, libnuma-dev was added to Build-Depends to enable NUMA support
- Selecting DECIMAL values into user-defined variables could cause a server exit
- Concurrent FLUSH PRIVILEGES and REVOKE or GRANT statements could produce a small time window during which invalid memory access to proxy user information could occur, leading to a server exit
- Starting the server with the query_alloc_block_size system variable set to certain negative values on a machine without enough memory could result in out-of-memory errors
- Using UNINSTALL PLUGIN to uninstall the daemon_example plugin could cause a server exit
- FLUSH DES_KEY_FILE failed to reload the DES key file
- If an error occurred during the setup phase of subquery materialization used to compute an IN predicate, cleanup of the temporary table did not happen, leading to Valgrind errors
- Queries rejected by MySQL Enterprise Firewall were truncated to 512 characters when written to the error log
- A server exit could occur for the second execution of a prepared statement for which an ORDER BY clause referred to a column position
- Repeated execution of a prepared statement could cause a server exit if the default database was changed
- Outer references do not work as arguments to MATCH(), but the server did not properly detect them. Now it does and raises an error
- Valgrind errors were produced during row comparator setup
- After failure to create a temporary table during join processing and releasing the table descriptor, an attempt to access the now-invalid descriptor could cause a server exit
- Type conversion failure for DECIMAL values could cause a server exit
- INSERT DELAYED could cause a server exit for tables partitioned with a character column as the key and for which the expression required a character set conversion
- During a filesort for an UPDATE statement, the optimizer could access a stale pointer, resulting in a server exit
- A server exit could occur when updating a view using an ALL comparison operator on a subquery that selects from an indexed column in the main table
- Some stress test files in the mysql-test/suite/innodb_stress directory had the executable file mode set although they were not script files
- The server initialization script used for the service mysql status command on Linux sometimes incorrectly reported that the server was stopped

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

更新時間:2015-12-09
更新細節:

What's new in this version:

Bugs Fixed:
- InnoDB: Altering the letter case of a column introduced an inconsistency between the frm file and data dictionary resulting in a failed CREATE INDEX operation on the altered column
- MySQL development RPM packages could fail to install if MySQL Connector/C development RPM packages were installed
- Possible buffer overflow from incorrect use of strcpy() and sprintf() was corrected
- MySQL RPM packages for RHEL5 failed to create the mysql system user
- Concurrent FLUSH PRIVILEGES and REVOKE or GRANT statements could produce a small time window during which invalid memory access to proxy user information could occur, leading to a server exit
- Starting the server with the query_alloc_block_size system variable set to certain negative values on a machine without enough memory could result in out-of-memory errors
- Using UNINSTALL PLUGIN to uninstall the daemon_example plugin could cause a server exit
- FLUSH DES_KEY_FILE failed to reload the DES key file
- A server exit could occur for the second execution of a prepared statement for which an ORDER BY clause referred to a column position
- Repeated execution of a prepared statement could cause a server exit if the default database was changed
- Outer references do not work as arguments to MATCH(), but the server did not properly detect them. Now it does and raises an error
- Valgrind errors were produced during row comparator setup
- INSERT DELAYED could cause a server exit for tables partitioned with a character column as the key and for which the expression required a character set conversion
- A server exit could occur when updating a view using an ALL comparison operator on a subquery that selects from an indexed column in the main table
- When a fixed-width row was inserted into a MyISAM temporary table, the entire content of the record buffer was written to the table, including any trailing space contained in VARCHAR columns, the issue being that this trailing space could be uninitialized. This problem has been resolved by insuring that only the bytes actually used to store the VARCHAR (and none extra) are copied and inserted in such cases
- Temporary MyISAM tables (unlike normal MyISAM tables) did not use the dynamic row format when they contained VARCHAR columns, resulting in larger temporary files (and more file I/O) than necessary

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

更新時間:2015-12-09
更新細節:

What's new in this version:

Bugs Fixed:
- InnoDB: InnoDB returned an invalid corruption-related error message during an IMPORT TABLESPACE operation
- InnoDB: An old version of numactl headers on the build host caused a compilation error when building a MySQL version that includes NUMA memory policy support
- InnoDB: An online ALTER TABLE operation caused a server exit
- InnoDB: A schema mismatch error occurred when importing a tablespace that was altered by DROP INDEX operation on the source server
- InnoDB: A duplicate key error that occurred during an online DDL operation reported an incorrect key name
- InnoDB: An ALTER TABLE operation caused the server to exit on disk full
- InnoDB: The system tablespace data file did not extend automatically when reaching the file size limit, causing startup to fail with a size mismatch error and preventing the addition of another system tablespace data file
- InnoDB: Altering the letter case of a column introduced an inconsistency between the frm file and data dictionary resulting in a failed CREATE INDEX operation on the altered column
- InnoDB: An ALTER TABLE operation that converted a table to an InnoDB file-per-table tablespace did not check for unknown files with the same name as the destination .idb file, permitting an unknown file of the same name to be overwritten
- Replication: As binlog_error_action=ABORT_SERVER is the default in MySQL 5.7.7 and later it is being used for more error situations. The behavior has been adjusted to generate a core dump to improve troubleshooting possibilities
- Replication: On a multi-threaded slave configured with master_info_repository=TABLE and relay_log_info_repository=TABLE which had previously been run with autocommit=1, if the slave was stopped and autocommit changed to 0, executing START SLAVE caused the session to appear to hang. After the lock wait timeout, when START SLAVE proceeded the server would stop unexpectedly. The fix ensures that when master_info_repository=TABLE, relay_log_info_repository=TABLE, and autocommit=0 a new transaction is generated for start and commit to avoid deadlocks
- Replication: Fatal errors encountered during flushing or synchronizing the binary log were being ignored. Such errors are now caught and handled depending on the setting of binlog_error_action
- Internal buffer sizes in resolve_stack_dump were increased to accommodate larger symbol space requirements for C++ code
- MySQL development RPM packages could fail to install if MySQL Connector/C development RPM packages were installed
- Possible buffer overflow from incorrect use of strcpy() and sprintf() was corrected
- MySQL RPM packages for RHEL5 failed to create the mysql system user
- For Debian package control files, libnuma-dev was added to Build-Depends to enable NUMA support
- Selecting DECIMAL values into user-defined variables could cause a server exit
- Concurrent FLUSH PRIVILEGES and REVOKE or GRANT statements could produce a small time window during which invalid memory access to proxy user information could occur, leading to a server exit
- Starting the server with the query_alloc_block_size system variable set to certain negative values on a machine without enough memory could result in out-of-memory errors
- Using UNINSTALL PLUGIN to uninstall the daemon_example plugin could cause a server exit
- FLUSH DES_KEY_FILE failed to reload the DES key file
- If an error occurred during the setup phase of subquery materialization used to compute an IN predicate, cleanup of the temporary table did not happen, leading to Valgrind errors
- Queries rejected by MySQL Enterprise Firewall were truncated to 512 characters when written to the error log
- A server exit could occur for the second execution of a prepared statement for which an ORDER BY clause referred to a column position
- Repeated execution of a prepared statement could cause a server exit if the default database was changed
- Outer references do not work as arguments to MATCH(), but the server did not properly detect them. Now it does and raises an error
- Valgrind errors were produced during row comparator setup
- After failure to create a temporary table during join processing and releasing the table descriptor, an attempt to access the now-invalid descriptor could cause a server exit
- Type conversion failure for DECIMAL values could cause a server exit
- INSERT DELAYED could cause a server exit for tables partitioned with a character column as the key and for which the expression required a character set conversion
- During a filesort for an UPDATE statement, the optimizer could access a stale pointer, resulting in a server exit
- A server exit could occur when updating a view using an ALL comparison operator on a subquery that selects from an indexed column in the main table
- Some stress test files in the mysql-test/suite/innodb_stress directory had the executable file mode set although they were not script files
- The server initialization script used for the service mysql status command on Linux sometimes incorrectly reported that the server was stopped

MySQL 5.7.10 (32-bit) 查看版本資訊

更新時間:2015-12-07
更新細節:

What's new in this version:

SECURITY NOTES:
- Previously, MySQL supported only the TLSv1 protocol for encrypting secure connections. TLS support is now extended to enable a higher level of encrypted connection security: when compiled using OpenSSL 1.0.1 or higher, MySQL supports the TLSv1, TLSv1.1, and TLSv1.2 protocols; when compiled using the bundled version of yaSSL, MySQL supports the TLSv1 and TLSv1.1 protocols.
- Because TLSv1.2 requires OpenSSL, support for this protocol is available in binary distributions only for MySQL Commercial Server, and not for MySQL Community Server (which is compiled using yaSSL). To enable TLSv1.2 support if you build from source, you must set the WITH_SSL CMake option to use OpenSSL.
- The tls_version system variable enables specifying at startup the TLS protocols permitted by the server. On the client side, the --tls-version option enables specifying the TLS protocols permitted per client invocation.
- The mysql_options() C API function has a new MYSQL_OPT_TLS_VERSION option that enables specifying from within the client library the TLS protocols permitted by a client program.
- By default, MySQL attempts to use the highest TLS protocol version available, depending on which SSL library was used to compile the server and client, which key size is used, and whether the server or client are restricted from using some protocols by means of tls_version/--tls-version.
- For more information, see Secure Connection Protocols and Ciphers.

FUNCTIONALITY ADDED OR CHANGED:
- InnoDB: Enabling the new innodb_background_drop_list_empty debug configuration option helps avoid test case failures by delaying table creation until the background drop list is empty. (Bug #21891560)
- InnoDB: The innodb_support_xa system variable, which enables support for two-phase commit in XA transactions, is deprecated. InnoDB support for two-phase commit in XA transactions is always enabled as of MySQL 5.7.10. Disabling innodb_support_xa is no longer permitted as it makes replication unsafe and prevents performance gains associated with binary log group commit.
- MySQL distributions now include lz4_decompress and zlib_decompress utilities that can be used to decompress mysqlpump output that was compressed using the --compress-output=LZ4 and --compress-output=ZLIB options. For more information, see lz4_decompress — Decompress mysqlpump LZ4-Compressed Output, and zlib_decompress — Decompress mysqlpump ZLIB-Compressed Output. (Bug #21644479)
- mysql_upgrade now attempts to print more informative errors than FATAL ERROR: Upgrade failed. (Bug #21489398)
- These client programs now support the --enable-cleartext-plugin option: mysqlcheck, mysqldump, mysqlimport, mysqlshow. This option enables the mysql_clear_password cleartext authentication plugin. (See The Cleartext Client-Side Authentication Plugin.) (Bug #21235226)
- These functions now produce warnings for invalid input: UNHEX(), INET_NTOA(), INET_ATON(), INET6_NTOA(), INET6_ATON(). Also, INET_ATON() now returns NULL and produces a warning for arguments that contain more than four groups of digits. (Bug #78856, Bug #22042027, Bug #78884, Bug #22071558)

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

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

更新時間:2015-12-07
更新細節:

What's new in this version:

SECURITY NOTES:
- Previously, MySQL supported only the TLSv1 protocol for encrypting secure connections. TLS support is now extended to enable a higher level of encrypted connection security: when compiled using OpenSSL 1.0.1 or higher, MySQL supports the TLSv1, TLSv1.1, and TLSv1.2 protocols; when compiled using the bundled version of yaSSL, MySQL supports the TLSv1 and TLSv1.1 protocols.
- Because TLSv1.2 requires OpenSSL, support for this protocol is available in binary distributions only for MySQL Commercial Server, and not for MySQL Community Server (which is compiled using yaSSL). To enable TLSv1.2 support if you build from source, you must set the WITH_SSL CMake option to use OpenSSL.
- The tls_version system variable enables specifying at startup the TLS protocols permitted by the server. On the client side, the --tls-version option enables specifying the TLS protocols permitted per client invocation.
- The mysql_options() C API function has a new MYSQL_OPT_TLS_VERSION option that enables specifying from within the client library the TLS protocols permitted by a client program.
- By default, MySQL attempts to use the highest TLS protocol version available, depending on which SSL library was used to compile the server and client, which key size is used, and whether the server or client are restricted from using some protocols by means of tls_version/--tls-version.
- For more information, see Secure Connection Protocols and Ciphers.

FUNCTIONALITY ADDED OR CHANGED:
- InnoDB: Enabling the new innodb_background_drop_list_empty debug configuration option helps avoid test case failures by delaying table creation until the background drop list is empty. (Bug #21891560)
- InnoDB: The innodb_support_xa system variable, which enables support for two-phase commit in XA transactions, is deprecated. InnoDB support for two-phase commit in XA transactions is always enabled as of MySQL 5.7.10. Disabling innodb_support_xa is no longer permitted as it makes replication unsafe and prevents performance gains associated with binary log group commit.
- MySQL distributions now include lz4_decompress and zlib_decompress utilities that can be used to decompress mysqlpump output that was compressed using the --compress-output=LZ4 and --compress-output=ZLIB options. For more information, see lz4_decompress — Decompress mysqlpump LZ4-Compressed Output, and zlib_decompress — Decompress mysqlpump ZLIB-Compressed Output. (Bug #21644479)
- mysql_upgrade now attempts to print more informative errors than FATAL ERROR: Upgrade failed. (Bug #21489398)
- These client programs now support the --enable-cleartext-plugin option: mysqlcheck, mysqldump, mysqlimport, mysqlshow. This option enables the mysql_clear_password cleartext authentication plugin. (See The Cleartext Client-Side Authentication Plugin.) (Bug #21235226)
- These functions now produce warnings for invalid input: UNHEX(), INET_NTOA(), INET_ATON(), INET6_NTOA(), INET6_ATON(). Also, INET_ATON() now returns NULL and produces a warning for arguments that contain more than four groups of digits. (Bug #78856, Bug #22042027, Bug #78884, Bug #22071558)

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

MySQL 5.7.9 (32-bit) 查看版本資訊

更新時間:2015-10-22
更新細節:

What's new in this version:

Audit Log Plugin Notes:
- Some events cannot be terminated. Previously, if an audit plugin returned nonzero status for a nonterminable event, the server ignored the status and continued processing the event. However, if an audit plugin used the my_message() function to terminate a nonterminable event, a server exit occurred. Now the server correctly handles termination of nonterminable events using my_message(). (Bug #21458066)

C API Notes:
- Incompatible Change: The mysql_options() C API function has two new options, MYSQL_OPT_MAX_ALLOWED_PACKET and MYSQL_OPT_NET_BUFFER_LENGTH, that set the max_allowed_packet and net_buffer_length system variables, respectively. Each option name also now can be passed to the mysql_get_option() C API function to retrieve its value. For more information, see mysql_options(), and mysql_get_option().
- The (undocumented) mysql_get_parameters() function has been removed. Applications that attempt to use it will get link errors and should be modified to use mysql_options() and mysql_get_option() instead.

Previously, it was necessary to call mysql_thread_end() for each mysql_thread_init() call to avoid a memory leak. C API internals have been reimplemented to reduce the amount of information allocated by mysql_thread_init() that must be freed by mysql_thread_end():
- For release/production builds without debugging support enabled, mysql_thread_end() need not be called.
- For debug builds, mysql_thread_init() allocates debugging information for the DBUG package (see The DBUG Package). mysql_thread_end() must be called for each mysql_thread_init() call to avoid a memory leak.

Compilation Notes:
- MySQL distributions now contain a mysqlclient.pc file that provides information about MySQL configuration for use by the pkg-config command. This enables pkg-config to be used as an alternative to mysql_config for obtaining information such as compiler flags or link libraries required to compile MySQL applications. For more information, see Building C API Client Programs Using pkg-config.
- A new INSTALL_PKGCONFIGDIR CMake option is available to specify the directory in which to install the mysqlclient.pc file. The default value is INSTALL_LIBDIR/pkgconfig, unless INSTALL_LIBDIR ends with /mysql, in which case that is removed first.

Packaging Notes:
- The shell and Perl versions of mysql_install_db have been removed from MySQL distributions. The executable C++ version of mysql_install_db implemented in MySQL 5.7.5 is still present, but remains deprecated (use mysqld --initialize instead) and will be removed in a future MySQL release.
- The deprecated _r versions of the libmysqlclient libraries are no longer installed.

Performance Schema Notes:
- Previously, the transaction instrument in the setup_instruments table was disabled by default, and the events_transactions_current and events_transactions_history consumers in the setup_consumers table were enabled by default. This setup is inconsistent, and having the consumers enabled could lead to the impression that transactions were instrumented by default. Now, the consumers are also disabled by default. To monitor transactions, enable the instrument and the applicable consumers.

With the show_compatibility_56 system variable disabled, SHOW VARIABLES and SHOW STATUS statements failed if MySQL was compiled without Performance Schema support. Consequently, it is no longer possible to compile without the Performance Schema. If it is desired to compile without particular types of instrumentation, that can be done with the following CMake options:
- For example, to compile without mutex instrumentation, configure MySQL using the -DDISABLE_PSI_MUTEX=1 option. (Bug #21669500)

Two changes were made regarding the effect of show_compatibility_56:
- Previously, when show_compatibility_56=OFF, selecting from the following INFORMATION_SCHEMA system and status variable tables returned an empty result and a deprecation warning: INFORMATION_SCHEMA.GLOBAL_VARIABLES, INFORMATION_SCHEMA.SESSION_VARIABLES, INFORMATION_SCHEMA.GLOBAL_STATUS, INFORMATION_SCHEMA.SESSION_STATUS
- This caused confusion for applications that were not aware that such selects could be empty: An empty result and a warning was not sufficient notice to signal the need to migrate to the corresponding Performance Schema system and status variable tables.
- To address this issue, selecting from the INFORMATION_SCHEMA system and status tables now produces an error, to make it more evident that an application is operating under conditions that require modification, as well as where the problem lies. The error code is ER_FEATURE_DISABLED_SEE_DOC. The error message indicates which table is disabled and that the show_compatibility_56 documentation should be consulted.

Previously, when show_compatibility_56=ON, selecting from the following Performance Schema status variable tables returned an empty result:
- performance_schema.global_status
- performance_schema.session_status
- This made it more difficult to migrate applications from the INFORMATION_SCHEMA status variable tables to the corresponding Performance Schema tables: Successfully selecting from the Performance Schema tables required knowing both that the server is from MySQL 5.7 and that show_compatibility_56=OFF.
- To address this issue, selecting from the Performance Schema status variable tables now produces the same result regardless of the value of show_compatibility_56. Thus, it is necessary to know only that the server is from MySQL 5.7.9 or higher. (If so, select from the Performance Schema tables. Otherwise, select from the INFORMATION_SCHEMA tables.)
- For additional information about the effects of show_compatibility_56 and migration issues, see Server System Variables, and Migrating to Performance Schema System and Status Variable Tables. (Bug #21606701)
- These Performance Schema tables now are world readable and accessible without the SELECT privilege: global_variables, session_variables, global_status, and session_status. An implication of this change is that SHOW VARIABLES and SHOW STATUS no longer require privileges on the underlying Performance Schema tables from which their output is produced when show_compatibility_56=OFF. (Bug #21251297)
- With the show_compatibility_56 system variable enabled, the reported values of the Last_query_cost and Last_query_partial_plans status variables were incorrect.
- With the show_compatibility_56 system variable disabled, the reported values of the Created_tmp_tables, Handler_external_lock, and Table_open_cache_% status variables were incorrect. (Bug #20483278, Bug #21788549, Bug #21788887)
- The Performance Schema session_account_connect_attrs had mistakenly been changed to require the SELECT privilege. It requires no special privileges again. (Bug #77702, Bug #21436364)
- In the setup_timers table, a CYCLE timer for ARM64 platforms is now available.

The Performance Schema now includes these instruments for monitoring I/O on binary log and relay log cache files:
- wait/io/file/sql/binlog_cache
- wait/io/file/sql/binlog_index_cache
- wait/io/file/sql/relaylog_cache
- wait/io/file/sql/relaylog_index_cache
- In addition, the default value of performance_schema_max_file_classes has been increased from 50 to 80.
- The Performance Schema threads table now contains a THREAD_OS_ID column that indicates the thread or task identifier as defined by the underlying operating system. For example, the column value corresponds to the Process Explorer thread ID on Windows and the gettid() value on Linux. For more information, see The threads Table.
- If you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade (and restart the server) to incorporate this change into the performance_schema database.

Plugin Notes:
- The audit plugin API has been extensively revised to support a finer breakdown of the general event type (MYSQL_AUDIT_GENERAL_CLASS) into more specific events. This enables audit plugins to more precisely indicate the types of events in which they are interested and reduces overhead for plugins that have use for only a few event types. The API also now permits early termination of event execution. For more information, see Writing Audit Plugins. The general event type is still available but is deprecated and will be removed in a future MySQL release.
- In addition, a security_context plugin service is now available. Audit plugins can use this service to examine or modify the security context of threads associated with audited events. See MySQL Services for Plugins.

Security Notes:
- For RPM-based packages, the permissions used to create the data directory (/var/lib/mysql) have been changed from 755 to 751. This tightens the data directory permissions while still permitting world access to the mysql.sock file in that directory. (Bug #21066592)

Spatial Data Support:
- The required version of the Boost library for server builds has been raised from 1.58.0 to 1.59.0.

Spatial functions such as ST_MPointFromText() and ST_GeomFromText() that accept WKT-format representations of MultiPoint values now permit individual points within values to be surrounded by parentheses. For example, both of the following function calls are valid, whereas previously the second one produced an error:
- ST_MPointFromText('MULTIPOINT (1 1, 2 2, 3 3)')
- ST_MPointFromText('MULTIPOINT ((1 1), (2 2), (3 3))')
- In addition, functions such as ST_AsText() and ST_AsWKT() that produce WKT-format results now display MultiPoint values with parentheses surrounding each point.

Schema Notes:

The sys schema included in MySQL distributions was updated to version 1.5.0. This includes new features and fixes for several issues:
- sys schema objects now have a DEFINER of 'mysql.sys'@'localhost'. (Previously, the DEFINER was 'root'@'localhost'.) Use of the dedicated mysql.sys account avoids problems that occur if a DBA renames or removes the root account.
- The following sys schema session views now provide progress reporting for long-running transactions.
- The progress column of these views shows the percentage of work completed for stages that support progress reporting.
- A new diagnostics() stored procedure enables DBAs and other support personnel to collect diagnostic information for investigating MySQL instances. A new metrics view and statement_performance_analyzer() stored procedure provide supporting infrastructure for the diagnostics() procedure.
- The sys schema ps_is_instrument_default_enabled() and ps_is_instrument_default_timed() stored functions returned incorrect results in some cases.
- The ENABLED and HISTORY columns that were added to the Performance Schema setup_actors table in earlier MySQL 5.7 releases caused the sys schema ps_setup_reset_to_default() stored procedure not to work.
- Handing of event-timing information in the sys schema was updated to handle changes to Performance Schema event-timing columns in MySQL 5.7.8.
- mysql_upgrade previously checked for an exact object-count value in the sys schema to determine whether an upgrade was needed. If local objects had been added, the resulting reinstallation removed those objects. Now it checks for at least the expected number of objects.
- If you upgrade to this MySQL release from an earlier version, you must run mysql_upgrade to incorporate these changes into the sys schema.
- Thanks to Daniël van Eeden, Jesper Wisborg Krogh, Shlomi Noach, and Morgan Tocker for their contributions to this update. (Bug #78115, Bug #21647101, Bug #77927, Bug #21550271, Bug #78720, Bug #21966366)

Functionality Added or Changed:
- Incompatible Change; InnoDB: To better manage redo log format changes, the redo log header of the first redo log file (ib_logfile0) now includes a format version identifier and a text string that identifies the MySQL version that created the redo log files.
- A new boolean configuration option, innodb_log_checksums, replaces the innodb_log_checksum_algorithm option. innodb_log_checksums=ON enables a CRC-32C checksum, making it the only supported checksum for redo log pages.
- This patch also removes unused fields from the redo log header and checkpoint pages.
- Due to redo log format changes introduced by this patch, upgrading to or downgrading from MySQL 5.7.9 and higher requires a clean shutdown and, in some cases, removal of existing redo log files. For instructions related to this change, see Changes Affecting Upgrades to MySQL 5.7, and Changes Affecting Downgrades from MySQL 5.7.
- Important Change; InnoDB: DYNAMIC replaces COMPACT as the implicit default row format for InnoDB tables. A new configuration option, innodb_default_row_format, specifies the default InnoDB row format. Permitted values include DYNAMIC (the default), COMPACT, and REDUNDANT.
- The COMPACT row format remained the default row format until this release to ensure compatibility with older versions of InnoDB in MySQL 5.1 and earlier. Now that MySQL 5.1 has reached the end of its product lifecycle, the newer DYNAMIC row format becomes the default. For information about advantages of the DYNAMIC row format, see DYNAMIC and COMPRESSED Row Formats.
- Newly created tables use the row format defined by innodb_default_row_format when a ROW_FORMAT option is not specified explicitly or when ROW_FORMAT=DEFAULT is used.
- Existing tables retain their current row format if a ROW_FORMAT option was specified explicitly. If a ROW_FORMAT option was not specified explicitly or if ROW_FORMAT=DEFAULT was used, any operation that rebuilds a table also silently changes the row format of the table to the format defined by innodb_default_row_format. For more information, see Specifying the Row Format for a Table.
- Important Change: Introduced the -> JSON column-path operator. column->path is now supported as a synonym of JSON_EXTRACT(column, path), where column is a JSON column, and path is a valid JSON path.
- An expression with ->, like its equivalent that uses JSON_EXTRACT() instead, can be used in place of a column identifier wherever the latter can occur within a valid SQL statement. For example, the following CREATE TABLE and SELECT statements are valid.
- A column-path expression can be used for any column value that is read in a SELECT column list, or in a WHERE, ORDER BY, or GROUP BY clause in any SQL statement; such expressions cannot be used to set values.
- When an SQL statement contains one or more expressions using -> notation, each of these is translated into an equivalent expression that employs the JSON_EXTRACT() function instead. This can be seen in the output from EXPLAIN when used on such a statement.
- Like JSON_EXTRACT(), the -> operator returns as NULL if no matching value for an otherwise valid path is found.
- For more information about -> and JSON_EXTRACT(), see Functions That Search JSON Values. See Searching and Modifying JSON Values, for information about JSON path support. See also Secondary Indexes and Virtual Generated Columns, for additionl information and examples.
- InnoDB: A new INNODB_METRICS server operations counter (innodb_dict_lru_count) counts the number of tables evicted from the table cache LRU list. Thanks to Daniël van Eeden for the patch.
- InnoDB: The new innodb_numa_interleave read-only configuration option allows you to enable the NUMA interleave memory policy for allocation of the InnoDB buffer pool. When innodb_numa_interleave is enabled, the NUMA memory policy is set to MPOL_INTERLEAVE for the mysqld process. After the InnoDB buffer pool is allocated, the NUMA memory policy is set back to MPOL_DEFAULT. This option is only available on NUMA-enabled systems.
- MySQL distributions now include these header files because my_sys.h depends on them: my_thread_local.h, thr_cond.h, thr_mutex.h, thr_rwlock.h.
- MySQL Server RPM packages now obsolete MySQL Connector C. Installing MySQL Server causes older libmysqlclient from any MySQL Connector C packages to be removed and replaces them with the current libmysqlclient.
- yaSS was upgraded to version 2.3.8.
- Insert overhead for the MEMORY storage table was reduced by caching computed hash values.
- RPM .spec files were updated so that MySQL Server builds from source RPM packages will include the proper files to take advantage of operating system NUMA capabilities. This introduces a runtime dependency on libnuma.so.1. RPM and yum detect this and refuse to install if that library is not installed.
- The initial-password message written by mysqld --initialize to the error log has been reduced from a [Warning] to a [Note].
- The JSON_APPEND() function was renamed to JSON_ARRAY_APPEND().
- Unneeded scripts and test files were removed from the tests directory and that directory was renamed to testclients.
- The JSON value-updating functions JSON_APPEND(), JSON_SET(), JSON_REPLACE(), and JSON_INSERT() now treat SQL NULL values as JSON null literals, which is consistent with JSON_OBJECT() and JSON_ARRAY().
- The server now generates a warning when the default_storage_engine or default_tmp_storage_engine system variable is set to a disabled storage engine named in the disabled_storage_engines system variable.
- Metadata locking for tablespaces has been extended so that, for DDL statements that refer to multiple tablespaces, a metadata lock is acquired on all used tablespaces.
- Support for building with Solaris Studio 5.13 was added.
- mysql_ssl_rsa_setup now is less noisy by default. Output from openssl commands is displayed only if --verbose is given.
- yaSSL was upgraded to version 2.3.7d. This fixes a connection-failure issue whenused with the thread pool plugin.
- mysqlpump now supports a --version option.
- Performance Schema digests in DIGEST_TEXT columns have ... appended to the end to indicate when statements exceed the maximum statement size and were truncated. This is also now done for statement text values in SQL_TEXT columns.
- Output from mysql_upgrade is now less noisy and more informative.
- A new SHUTDOWN SQL statement is available. This provides a SQL-level interface to the same functionality previously available using the mysqladmin shutdown command or the mysql_shutdown() C API function. See SHUTDOWN Syntax.
- Work was done to clean up the source code base, including: Removal of unneeded CMake checks; removing unused macros from source files; reorganizing header files to reduce the number of dependencies and make them more modular, removal of function declarations without definitions.

Bugs Fixed:
- Important Change; InnoDB; Partitioning: There was no way to upgrade existing partitioned tables to use the native partitioning implemented for InnoDB tables in MySQL 5.7.6. This fix adds support to both mysql_upgrade and the mysql client for upgrading partitioned InnoDB tables created in previous releases, which used the ha_partition handler, to use InnoDB native partitioning instead.
- mysql_upgrade now checks for all InnoDB tables that were created using the generic ha_partition handler and attempts to upgrade them to InnoDB native partitioning.
- In the mysql client, pre-5.7.6 partitioned InnoDB tables can be upgraded one by one to native partitioning using the ALTER TABLE ... UPGRADE PARTITIONING statement that is implemented in this release.
- Important Change; Replication: The START SLAVE and STOP SLAVE statements can no longer be used for the group_replication_recovery channel. See Replication Channels, for more information.
- Important Change; Replication: In MySQL 5.7, the binlog_max_flush_queue_time system variable introduced in MySQL 5.6 no longer has any effect. This variable is now deprecated, and has been marked for eventual removal in a future MySQL release.
- Important Change; Replication: When using a single-threaded slave, the status of the applier thread is now reported as part of the replication_applier_status_by_worker table, instead of replication_applier_status_by_coordinator. This means that replication_applier_status_by_coordinator is now empty when using a single-threaded slave; it should be noted that such reporting for multi-threaded slaves has not been changed, and continues to be shown in that table.
- InnoDB: The undo log contained insufficient information about virtual columns and virtual column indexes, which could cause a server exit when adding or dropping virtual columns. As a result, a slow shutdown (using innodb_fast_shutdown=0) is required prior to performing an in-place upgrade or downgrade from MySQL 5.7.8. For more information, refer to Upgrading or Downgrading MySQL.
- InnoDB: A table-rebuilding ALTER TABLE operation that created an index on a virtual column raised an assertion.
- InnoDB: A SELECT ... FOR UPDATE operation on a table with virtual generated columns raised an assertion. InnoDB unnecessarily retrieved a non-indexed virtual column for a covered secondary index scan.
- InnoDB: Creating a table with large rows failed when using a ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED due to an incorrect undo log record size calculation. The same operation succeeded with ROW_FORMAT=COMPACT or ROW_FORMAT=REDUNDANT.ROW_FORMAT=DYNAMIC and ROW_FORMAT=COMPRESSED now permit a row length violation at DDL time if innodb_strict_mode is disabled.
- InnoDB: Adding an index on a generated virtual column with an index prefix length that exceeded the maximum length caused a server exit.
- InnoDB: A memory leak occurred after crash recovery. Memory allocated in fil_space_read_name_and_filepath() was not freed.
- InnoDB: Altering the data type or computation method of a virtual generated column caused an error.
- InnoDB: An assertion was raised when creating a spatial index. InnoDB failed to count irtual columns that preceded the spatial index column.
- InnoDB: Tablespace discovery modifications in MySQL 5.7.5 included the removal of code related to MLOG_FILE_CREATE2 redo log records. As a result, the redo log did not contain sufficient information about file creation.
- InnoDB: The redo log provided no indication that redo logging is disabled for index page writes during concurrent DDL operations. As a result, external hot backup tools could produce corrupt backups.
- InnoDB: In debug builds, recovery asserted during a transparent page compression test. A torn page from the doublewrite buffer caused an LSN debug check failure.
- InnoDB: Creating a virtual generated column on a partitioned table caused a server exit.
- InnoDB: An old version of numactl headers on the build host caused a compilation error when building a MySQL version that includes NUMA memory policy support.
- InnoDB: A SELECT .. FOR UPDATE operation on an indexed virtual generated column raised an assertion.
- InnoDB: The mysql_system_tables_fix_for_downgrade.sql script, provided to facilitate system table alterations when downgrading from MySQL 5.7.6 or higher, was removed from the MySQL installation directory. The script was no longer valid for all downgrade paths. For more information, see Changes Affecting Downgrades from MySQL 5.7.
- InnoDB: The tablespace identifier (space_id) was logged twice for an MLOG_TRUNCATE redo log record.
- InnoDB: Crash recovery issued an invalid error message indicating that an isl file could not be opened or is not correct.
- InnoDB: The InnoDB Monitor displayed incorrect mutex creation information for a mutex with a long semaphore wait.
- InnoDB: Error message formatting was corrected in the os_file_write_page() function.
- InnoDB: The i_s_dict_fill_sys_tablespaces() function could free memory associated with a file name before printing an error message.
- InnoDB: In debug builds, scanned and applied redo log records are now printed with a string identifier instead of a numerical identifier when --debug=d,ib_log is passed to mysqld. For example, rec MLOG_2BYTES is now printed instead of rec 2.
- InnoDB: The number of system calls made by the InnoDB page compression feature was reduced.
- InnoDB: The recv_parse_log_rec function returned the length of the redo log record instead of 0 when encountering an incomplete MLOG_CHECKPOINT record.


InnoDB: In debug builds, a parenthesis mismatch in a MATCH() ... AGAINST clause raised a full-text parser assertion.
InnoDB: Debug code was added to avoid a doublewrite buffer assertion that was raised during Valgrind testing.
InnoDB: Log messages were improved to help identify out-of-space errors that could occur when adding rollback segments.
InnoDB: In debug builds, enabling the innodb_log_checkpoint_now debug option while a table-rebuilding ALTER TABLE operation is running could result in an infinite loop.
InnoDB: UNIV_INLINE was not defined for the dict_table_has_indexed_v_cols function.
InnoDB: Altering a virtual column data type is not supported as an in-place operation.
InnoDB: Sorting was skipped by an ALTER TABLE statement that changed the primary key and dropped the last column of the previous primary key.
InnoDB: During recovery, an invalid isl file was treated as a missing isl file, resulting in the tablespace being opened using the file location defined in an MLOG_FILE_* record in the redo log. Recovery no longer opens the tablespace if the isl file is invalid.
InnoDB: Code that provided a timeout mechanism intended to reduce adaptive hash index search latch (btr_search_latch) contention was removed. The code became obsolete after the introduction of adaptive hash index search system partitioning in MySQL 5.7.8.
InnoDB: The COMPRESSION option was displayed incorrectly in SHOW CREATE TABLE output.
InnoDB: An innodb_data_file_path mismatch raised an assertion, as did initializing the database with a data file size that was too small for the specified page size.
InnoDB: A check was added to prevent accessing full-text index tables that are in an inconsistent state.
InnoDB: A schema mismatch error occurred when importing a tablespace that was altered by DROP INDEX operation on the source server.
InnoDB: A virtual generated column on a table that uses index condition pushdown (ICP) caused an assertion.
InnoDB: Creating an index on a virtual generated column after adding a full-text index on a preceding column raised an assertion.
InnoDB: An INSERT operation raised a btr_search_enabled assertion. Assertion code was too restrictive.
InnoDB: Reloading a table that was evicted while empty caused an AUTO_INCREMENT value to be reset.
InnoDB: A crash during a TRUNCATE TABLE operation caused the server to exit on startup.
InnoDB: The .isl was not removed when dropping a general tablespace that was created outside of the MySQL data directory.
InnoDB: An inconsistent read occurred under the REPEATABLE READ transaction isolation level. Transactions that operated on the same row were removed from transaction ID list in the incorrect order.
InnoDB: Attempting to create a general tablespace data file on a Windows root drive caused an error.
InnoDB: After disabling the adaptive hash index feature, an adaptive hash index latch was unnecessarily obtained and released.
InnoDB: An ALTER TABLE operation on a table with an index defined on a virtual column incorrectly modified the data of the virtual column.
InnoDB: Resizing the buffer pool online raised an assertion due to a memory full condition.
InnoDB: An ALTER TABLE ... IMPORT TABLESPACE operation with innodb_page_size=4K and ROW_FORMAT=DYNAMIC raised an assertion.
InnoDB: For spatial indexes, InnoDB unnecessarily stored a 3072-byte prefix in undo log records instead of just the maximum bounding rectangle (MBR). For columns with externally stored data, both the prefix and MBR are logged.
InnoDB: Invalid init_ftfuncs() assertion code was removed.
InnoDB: Memory allocation sanity checks were added to the memcached code.
InnoDB: An incorrect reference count caused a hang in the TrxInInnoDB constructor. innobase_close_connection() released the transaction object before destroying the TrxInInnoDB object where the reference count is adjusted.
InnoDB: A MySQL 5.7.8 patch that reintroduced SHOW ENGINE INNODB MUTEX functionality caused a performance regression.
InnoDB: A memcached flush_all command raised an assertion. A function that starts a transaction was called from within assertion code.
InnoDB: A shutdown hang occurred when a high priority transaction waited for a victim transaction to exit while the victim transaction waited for an asynchronous rollback t
InnoDB: A data corruption occurred on ARM64. GCC builtins did not issue the correct fences when setting or unsetting the lock word.
InnoDB: Server shutdown was delayed waiting for the purge thread to exit. To avoid this problem, the number of calls to trx_purge() was reduced, and the trx_purge() batch size was reduced to 20.
InnoDB: In READ COMMITTED mode, a REPLACE operation on a unique secondary index resulted in a constraint violation. Thanks to Alexey Kopytov for the patch.
InnoDB: The IBUF_BITMAP_FREE bit indicated that there was more free space in the leaf page than was actually available.
InnoDB: Moving the data directory before recovering a crashed database caused tablespace discovery to fail for file-per-table tablespaces created outside of the MySQL data directory.
InnoDB: The innodb_buf_flush_list_now debug setting failed to flush all dirty pages to disk.
InnoDB: An ALTER TABLE ... ADD FULLTEXT INDEX operation raised an assertion. A thread attempted to use a lower priority transaction that was being rolled back before the rollback operation completed.
InnoDB: Running an ALTER TABLE operation on a referencing table with a cascading foreign key constraint during a concurrent DML operation on the referenced table caused a loss of referential integrity.
InnoDB: Setting lower_case_table_names=0 on a case-insensitive file system could result in a hang condition when running an INSERT INTO ... SELECT ... FROM tbl_name operation with the wrong tbl_name letter case. An error message is now printed and the server exits when attempting to start the server with --lower_case_table_names=0 on a case-insensitive file system.
InnoDB: The server failed to start with an innodb_force_recovery setting greater than 3. InnoDB was set to read-only mode before redo logs were applied.
DROP TABLE is now supported with an innodb_force_recovery setting greater than 3.
InnoDB: The trx_sys_read_pertable_file_format_id() function reported the wrong file format.
Packaging; OS X: Using user=mysql during installation on OS X did not allow the mysql database to be installed. To fix this problem, OS X packages now use the --no-defaults option when creating this database. This also means that having a my.cnf file on the system no longer affects the installation.
Partitioning: Error handling for failed partitioning-related ALTER TABLE operations against non-partitioned tables was not performed correctly.
Partitioning: ALTER TABLE when executed from a stored procedure did not always work correctly with tables partitioned by RANGE.
Replication: The group replication applier channel does not support DATABASE as the slave_parallel_type; when group replication is started, this is checked for explicitly, and handled correctly. However, it remained possible to change this value indirectly at a later point in time by increasing the value of slave_parallel_workers while the slave SQL thread was stopped, which caused the applier to fail with an error. To fix this problem, the slave_parallel_type for the group_replication_applier is now checked to make sure that it is set to LOGICAL_CLOCK whenever the number of slave_parallel_workers is set greater then 0, and not merely when group replication is first started.
Replication: As binlog_error_action=ABORT_SERVER is the default in MySQL 5.7.7 and later it is being used for more error situations. The behavior has been adjusted to generate a core dump to improve troubleshooting possibilities.
Replication: At runtime, some Gtid_set objects could be instrumented with a performance schema mutex key equal to 0 (which is invalid), due to its use as the effective default value when the mutex key was not actually supplied. This allowed these objects to be created without a valid key, which led to further issues when using them.
Replication: When running the server with gtid_mode=ON, a DELETE from a MEMORY table following a restart was not written to the binary log correctly.
Replication: The locking behavior of replication administration statements has changed to make SHOW SLAVE STATUS more concurrent. This makes the NONBLOCKING clause redundant for SHOW SLAVE STATUS and it has been removed.
Replication: ER_CANT_USE_AUTO_POSITION_WITH_GTID_MODE_OFF errors were not reported using the correct format.
Replication: When the dump thread was killed while dumping an inactive binary log, some events in this log could be skipped and thus not replicated.
Replication: XA transactions could cause an assert condition on XA COMMIT; this was happening because the internal transaction state was not reset between XA PREPARE and XA COMMIT or XA ROLLBACK, due to the fact that these operations constitute separate transactions under XA. In addition, XA ROLLBACK statements were not handled properly in some cases.
Replication: The interface between the Group Replication plugin and the Performance Schema engine made use of a type of memory allocation which was passed to the server, and was a potential source of problems when passing information between the plugin and performance_schema tables. The implementation for this interface has been reworked so as to avoid performing this type of memory allocation when sharing data.
Replication: The MTS submode set for each channel was ignored by the worker threads, which continued to read and use the global flag set for all slave channels. This could lead to errors when the coordinator was of one type and its workers of another.
Replication: Replication slaves could fail for having insufficient privileges when they had been granted only the REPLICATION SLAVE privilege.
Replication: The status variable Slave_open_temp_tables keeps track of the number of temporary tables that are opened by the replication slave. If multi-source replication is enabled, it is the total number of temporary tables for all channels. This fix addresses the following issues relating to this variable: RESET SLAVE FOR CHANNEL channel forced the value of Slave_open_temp_tables to 0; in the event that some other replication channel had open temporary tables which were later dropped, the value wrapped around to a large negative value (1 - 232). This also caused spurious or missed warnings when issuing a STOP SLAVE or CHANGE MASTER TO statement.

The internal function that modifies Slave_open_temp_tables in such cases relied on two incorrect assumptions:
- That the variable is updated by only one thread when multi-threaded slaves are not enabled, which is not true in the case of multi-source replication.
- That non-atomic operations are safe with a single writer and multiple readers, which is not necessarily true for some platforms supported by MySQL.
- Replication: The warning '@@session.gtid_executed' is deprecated and will be removed in a future release. was printed even when the session variable gtid_executed was not included in the result of a query. In addition, the result of SELECT @@session.gtid_executed included a duplicate warning. Both issues occurred because the warning was printed whenever the value of gtid_executed was accessed by a statement, such access occurring as a matter of course, whether or not a given variable is actually included in the result.

To fix this issue, we make handling of @@session.gtid_executed consistent with how the also-deprecated variable @@global.sql_log_bin is treated in such cases, by making the following changes:
- gtid_executed is no longer included in the performnce_schema.session_variables table.
- gtid_executed is still included in the information_schema.session_variables table, but when show_compatibility_56 = ON, the warning is not issued when querying the session_variables table, or when issuing SHOW VARIABLES or SHOW SESSION VARIABLES, even when using a matching LIKE clause with either of the SHOW statements.
- The warning is still issued by a statement such as SELECT @@session.gtid_executed which accesses the value of the variable directly.
- Replication: When a transaction consisting of a single statement with a specified GTID failed in autocommit mode, its GTID was not released when rolling it back when binary logging was disabled.
- Replication: The slave group event parser did not properly register an XA_ROLLBACK event as a transaction boundary.
- Replication: mysqlbinlog printed a ROLLBACK statement at the end of the binary log file, which when played back failed with error 1782 @@SESSION.GTID_NEXT cannot be set to ANONYMOUS when @@GLOBAL.GTID_MODE = ON. This occurred when the binary log file did not include any data related events, or when the relay log file included a Format_description_log_event that had been generated on the master at server startup.
- The fix for this issue causes a relay log's Format_description_log_event to do nothing if it is applied by a BINLOG statement, and stops a ROLLBACK from setting gtid_next to ANONYMOUS when the state of gtid_next has not yet been determined by a subsequent event.
- Replication: SAVEPOINT and ROLLBACK TO SAVEPOINT within a trigger led to an assertion.
- Replication: While a SHOW BINLOG EVENTS statement was executing, any parallel transaction was blocked. The fix ensures that the SHOW BINLOG EVENTS process now only acquires a lock for the duration of calculating the file's end position, therefore parallel transactions are not blocked for long durations.
- Replication: If a CREATE VIEW statement failed, it was being incorrectly written to the binary log even though it did not result in the creation of a partial view. The fix ensures that such statements are not recorded in the binary log. Additionally it was found that when a statement which had failed on a master was received by a slave with an expected error, if the statement was skipped on the slave, for example due to a replication filter, the expected error was being compared with the actual error that happened on the slave. The fix ensures that if a statement with an expected error is received by a slave, if the statement has not been filtered, only then is it compared with the actual error that happened on the slave.
- Replication: The action specified for binlog_error_action was not always honored correctly after a hardware failure occurred during log rotation.
- Replication: When using MySQL 5.7.6 and later with binlog_format=row and gtid_mode=off, if CREATE ... SELECT was killed during execution it could lead to an inconsistent state, breaking replication. The cause was that in MySQL 5.7.6 the way CREATE ... SELECT was logged was changed, so that a commit was introduced between the CREATE TABLE and SELECT steps. The fix ensures that CREATE ... SELECT does not commit in the middle of the transaction when binlog_format=row.
- Replication: Modifying the master_info_repository or relay_log_info_repository inside a transaction and later rolling back that transaction left the repository in an unusable state. We fix this by preventing any modification of these repositories inside a transaction.
- Replication: Transactions added to gtid_executed using SET gtid_purged were not taken into account by WAIT_FOR_EXECUTED_GTID_SET() until a subsequent transaction was committed by a client or slave thread.
- Replication: When the running with --relay-log-info-repository=TABLE, the mysql.slave_relay_log_info table is updated when a transaction is committed or when a flush is performed explicitly, such during relay log rotation. If a transaction that uses any nontransactional tables (such as MyISAM tables) is split across multiple relay logs, it is partially committed on relay log flush. When gtid_mode=ON, this caused the same GTID to be used for the remaining portion of the transaction, which raised an ER_GTID_NEXT_TYPE_UNDEFINED_GROUP error.
- We fix this issue by postponing in such cases the update of the relay log information repository that normally occurs on relay log rotation until the commit for the transaction in question has been executed.
- This issue did not affect tables using transactional storage engines such as InnoDB.
- For an index-only scan over an indexed generated column, the server could do random calculations; the random results were not exposed to the user, but Valgrind warnings could occur, and the server could exit when calculations involved function
- Although the use of JSON values with GREATEST() or LEAST() is not currently supported, the server did not handle attempts to do so correctly, leading to an assert (Linux) or exit() call (Windows) in debug builds. Now when you try to use JSON values with either of these functions, the server emits a suitable warning (ER_NOT_SUPPORTED_YET).
- For debug builds, a DROP TRIGGER statement could raise an assertion if the trigger was defined on a table that contained a generated column.
- A table that included a generated column referencing a JSON column in some cases become corrupted, so that a subsequent access of the table using a different connection caused the server to fail.
- For tables with VIRTUAL generated columns, an INSERT with an empty values list could cause a server exit.
- CMake configuration was adjusted to handle new warnings reported by Clang 3.7.
- Using a materialized view defined over a table containing generated columns could cause a server exit.
- For partitioned InnoDB tables containing a virtual generated column, reads from the table could return random data for the column.
- The CMake checks for NUMA availability could cause compilation problems on platforms without NUMA support.
- The optimizer did not consider nonfunctional expressions such as (a AND b) = 1 when looking for indexed generated columns to substitute for the (a AND b) expression. Now expressions using the AND and OR logical operators are considered.
- For debug builds, when the optimizer tried to clone certain types of keys for a range optimization, an assertion was raised.
- For debug builds, the server could exit when the optimizer attempted to estimate the cost for processing unique values when there were no keys.
- An INSERT into a view with a subquery could fail if executed as a prepared statement.
- mysql-test-run.pl now has an --valgrind-clients option that causes all clients started by .test files to be run with valgrind. This option requires valgrind 3.9 or later.
- In addition, several client memory leak issues were fixed.
- For queries on InnoDB tables for which the optimizer used SPATIAL indexes for full index scans, the result was empty because such indexes do not support a full scan. The optimizer no longer considers SPATIAL indexes as candidates for full index scans.
- For some inputs, ST_Intersection() could return an invalid polygon.
- 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.
- Spatial functions could simplify geometry values in contexts where the value might be used elsewhere in a query, producing incorrect results.
- If ST_ConvexHull() or ST_SRID() were used in a view definition, the resulting definition contained ST_Convex_Hull() (misspelled) or SRID() (deprecated).
- JSON_TYPE() returned OPAQUE for some binary values that it should have identified as BLOB.
- The mysql client parser incorrectly interpreted optimizer hint comments that contained ;, ", ', or ` characters.

These Version Tokens issues were resolved:
- version_tokens_delete() now strips whitespace surrounding token names in its argument, similar to version_tokens_set() and version_tokens_edit().
- Passing NULL to version_tokens_delete() caused a server exit.
- Passing an argument with an empty token name to to version_tokens_set() or version_tokens_edit() caused a server exit.
- Passing NULL as the timeout value to version_tokens_lock_exclusive() or version_tokens_lock_shared() caused a server exit.
- For debug builds, enabling the PAD_CHAR_TO_FULL_LENGTH SQL mode could cause SHOW FUNCTION STATUS to raise an assertion.
- mysqlpump did not exit with a message for some combinations of incompatible options.
- An assertion could be raised if the optimizer tried to create a temporary table based on a prepared statement parameter.
- Executing a prepared statement with multiple nested subqueries could raise an assertion.
- For debug builds, failure of subquery optimization could cause an assertion to be raised due to improper error handling.
- Some table and index optimizer hints were lost early in statement processing, so query rewrite plugins did not have access to them. This could cause incorrect matching between incoming statements and statement pattern templates.
- Queries containing nested subqueries combining grouping and outer references might cause a server exit.
- Passing NULL as the second or third argument to ST_AsGeoJSON() could cause the server to stop responding to the session or (in debug builds) to raise an assertion.
- Giving input to HANDLER READ that could not be converted to the correct type could cause the server to stop responding to the session or (in debug builds) to raise an assertion.
- For debug builds, ST_IsValid(NULL) could raise an assertion.
- For debug builds, an assertion could be raised for negative zero values when converting time values to decimal.
- ST_AsWKB() could cause a server exit if given invalid data.
- If an aggregate function was used over a generated column that was itself part of a multiple-column index, the server could exit.
- A missing error check during column reference resolution could result in an incorrect error message or (in debug builds) an assertion being raised.
- For debug builds, an assertion could be raised in Filesort::make_sortorder() for attempts to sort Item_ref objects.
- JSON functions could return incorrect values if a path argument was passed as a user-defined variable that changed values between result set rows.
- Columns selected from the right-hand table of a left join, which was also a derived table, might produce incorrect NULL value information when used in an IN subquery.
- For debug builds, an assertion was raised for some queries that have a semi-join and use the materialization strategy, if a key length or number of key parts was zero.
- Compilation using gcc 4.9 or 5.1 failed on ARM64 platforms.
- If a multiple-column UPDATE statement failed to update a JSON column that was then referenced in a later update, the server could exit.
- For debug builds, invalid geometry byte strings could cause spatial functions to raise an assertion rather than return an error to the caller.
- For debug builds, a too-strict assertion could be raised by invalid characters for LOAD DATA.
- The server could exit when InnoDB tried to update a secondary index on a VIRTUAL generated column of type BLOB.
- Binary logging of CREATE USER and statements could log the hash of the password hash (rather than the hash itself) when log_backward_compatible_user_definitions was enabled. Binary logging of ALTER USER statements could include attributes not present in the original statements.
- In consequence of the fix for these issues, log_backward_compatible_user_definitions has been replaced by log_builtin_as_identified_by_password. If this variable is enabled, binary logging for CREATE USER statements involving built-in authentication plugins rewrites the statements to include an IDENTIFIED BY PASSWORD clause, and SET PASSWORD statements are logged as SET PASSWORD statements, rather than being rewritten to ALTER USER statements.
- For debug builds, incorrect caching of JSON values could cause an assertion to be raised.
- An empty string (which is not a valid JSON value) normally is parsed and returned as a JSON null literal, but in some cases could raise an assertion for debug builds.
- For temporary tables created to handle UNION statements that selected CHAR or SET columns, the maximum column width could be too long for InnoDB to handle. Now such columns are created as variable-length columns.
- Certain JSON functions could return incorrect results when used in prepared statements which had path expression constants.
- Valgrind errors could occur during partition pruning for tables containing generated columns.
- For builds configured with MAX_INDEXES greater than 64, certain queries for which the server used temporary tables could cause a server exit.
- Adding or dropping a VIRTUAL generated column could cause a server exit.
- An attempt to use a previously unused time zone with CONVERT_TZ() could produce warnings or errors or (in debug builds) raise an assertion if GTIDs were enabled but the binary log was not enabled.
- In debug builds, an attempt to use a previously unused time zone with CONVERT_TZ() or as the value of the time_zone system variable inside a stored program could raise an assertion.
- For plugins that use the audit plugin API, MYSQL_AUDIT_GLOBAL_VARIABLE_SET events passed to the notification function did not include the new variable value.
- Queries on a table containing an indexed generated column could fail if the table name contained special characters.
- When a view was the inner table of an outer join, a JSON column could produce a non-NULL value when NULL was expected.
- If JSON_CONTAINS_PATH() was called with a one_or_all argument of all and a path argument contained a wildcard, the function found all matches per path, even though in this case one match is sufficient.
- JSON_SET() and JSON_REPLACE() sometimes produced an incorrect result if a path expression identified a nonarray value.
- Suppression of JSON conversion errors using non-strict SQL mode or INSERT IGNORE could then cause an assertion to be raised if an empty value inserted into a JSON NOT NULL column was copied to another JSON column.
- For debug builds, some spatial functions that accept raw byte data for spatial arguments (for example, specified as hex values) could raise an assertion if such an argument contained extra garbage following valid data.
- ALTER TABLE could raise an assertion for a table with an indexed virtual column having a column position greater than 64.
- Evaluation of virtual generated columns could fail to evaluate all base columns and result in invalid memory reads.
- For deeply nested JSON input, ST_GeomFromGeoJSON() or JSON_VALID() could produce stack overflow.
- Failure to parse a JSON string that contained a floating-point number with a large, negative exponent could cause a server exit.
- For debug builds, an incorrect assertion could be raised during subquery execution.
- For debug builds, a missing error check in Item_sum_hybrid::fix_fields() caused an assertion to be raised.
- For debug builds, invoking ST_AsGeoJSON() within GROUP BY ... WITH ROLLUP could raise an assertion.
- JSON_SEARCH() could return incorrect results if an invalid escape expression was specified.
- For debug builds, a NULL first argument to JSON_SET() could raise an assertion.
- For expressions of the form (subquery) IN (subquery), where a subquery could return a JSON value, failure to handle a row result could cause a server exit.
- Failure of JSON_APPEND() to handle a legal condition could cause a server exit.
- Calls to ST_Buffer() could hang or raise an assertion.
- The server could exit in unclean fashion if configured to listen on a TCP/IP port number already in use by another server instance.
- Certain subqueries as arguments to PROCEDURE ANALYSE() could cause a server exit.
- A query with a right outer join inside a derived table might return wrong data.
- Starting the server with --skip-grant-tables (or with options such as --initialize for which --skip-grant-tables is implicit) prevented the INSTALL PLUGIN and UNINSTALL PLUGIN statements from working.
- mysql_ssl_rsa_setup could create an unwanted .rnd file in the data directory. (The file is actually created by openssl, which mysql_ssl_ras_setup invokes. mysql_ssl_rsa_setup now cleans up the file.)
- For spatial functions, input polygons were automatically closed if open. However, the Open Geospatial Consortium guidelines require that input polygons already be closed. Unclosed polygons are now rejected as invalid rather than being closed.
- When a VIRTUAL generated column was added to a table, it was not ensured that data being calculated by the generated column expression would not be out of range for the column. This could lead to inconsistent data being returned and unexpectedly failed statements.

ALTER TABLE now supports WITHOUT VALIDATION and WITH VALIDATION clauses to control whether ALTER TABLE validates the data for a VIRTUAL generated column:
- With WITHOUT VALIDATION (the default if neither clause is specified), an in-place operation is performed (if possible), data integrity is not checked, and the statement finishes more quickly. However, later reads from the table might report warnings or errors for the column if values are out of range.
- With WITH VALIDATION, ALTER TABLE copies the table. If an out-of-range or any other error occurs, the statement fails. Because a table copy is performed, the statement takes longer.
- WITHOUT VALIDATION and WITH VALIDATION are permitted only with ADD COLUMN, CHANGE COLUMN, and MODIFY COLUMN operations.
- Some INFORMATION_SCHEMA queries consumed excessive memory due to suboptimal query plans and insufficient materialization.
- With the server configured to send error messages to syslog or a log file, messages generated prior to error log setup were sent to stderr or stdout. These messages are now buffered until error log setup has completed, then logged to the proper destination.
- Statement digests did not include information about optimizer hint comments, causing statements with and without hints to be aggregated.
- Executing a prepared statement using a derived table and an aggregate function in a subquery in the SELECT list could cause a server exit.
- GRANT created the account for nonexistent accounts even if the NO_AUTO_CREATE_USER SQL mode was enabled.
- ST_SymDifference() with multipolygon arguments could return incorrect results.
- A query with a NOT IN subquery that had COUNT(DISTINCT) could return incorrect results.
- When started using a very old data directory (from MySQL 5.0), the server could exit due to failure to properly read the old grant tables.
- A mulitple-table update involving generated columns that updated used a temporay table could cause a server exit or raise an assertion.
- Unit testing now uses Google Mock 1.7 rather than 1.6.
- For queries containing an expression of the form (x IN (subquery)) IN (subquery2), a combination of semi-join and subquery materialization strategies could cause a server exit.
- If a query contained an outer join such as LEFT JOIN (t1,t2,...) and a hint was used to disable join buffering on a right-side table but not on the others, a server exit occurred.
- For a cursor type of CURSOR_TYPE_READ_ONLY, retrieving the result set for the first execution of a prepared CALL staement could be missing the first result set row if the data was numeric; raise an assertion for debug builds if the data was string; cause loss of the server connection when calling mysql_stmt_fetch().
- Dangling blob pointers could remain when closing an InnoDB table, resulting in a subsequent read of invalid memory and a server exit.
- For some operations where sorting or grouping required a temporary table, the table could have zero columns and raise an assertion.
- For debug builds, merging a derived table into an outer query block could raise an assertion.
- Queries containing an expression of the form (x IS NULL) IN (subquery) could cause a server exit.
- During server SSL file autogeneration, ca.pem briefly had insecure file permissions.
- An assertion could be raised due to incorrect error handling if a SELECT ... FOR UPDATE subquery resulted in deadlock and caused a rollback.
- Selecting the result of an INSERT() function call to which input was passed as a hexidecimal string could expose more information than was passed to the function.
- Subqueries having COUNT() with GROUP BY could yield incorrect results.
- The updatable property of a view is set during view creation. If the underlying table was dropped and re-created as a nonupdatable one, the updatable property of the original view was not revised accordingly. This could cause a server exit for attempts to insert or replace into the view is made. (This problem was specific to views with multiple tables/views and did not occur with update statements.)
- The locking functions provided by the version_token plugin were renamed: vtoken_get_read_locks(), vtoken_get_write_locks(), and vtoken_release_locks() are now named version_tokens_lock_shared(), version_tokens_lock_exclusive(), and version_tokens_unlock(), respectively.
- These functions also failed to have any effect because they were implicitly unlocked at the end of the statement in which they were set.
- Servers linked against yaSSL and compiled with GCC 4.8.2 could fail to respond correctly to connection attempts until several seconds after startup.
- yaSSL was upgraded to version 2.3.7e.
- When upgrading an old data directory (MySQL 5.0 or 5.1), mysql_upgrade could fail to properly read the mysql.proc table.
- For tables with subpartitions, the server could exit due to incorrect error handling during partition pruning if the partition could be identified but not the subpartition.
- mysql_upgrade could fail to look for checked tables in the wrong database during the repair phase.
- DELETE could check privileges for the wrong database when table aliases were used.
- mysqldump used incorrect syntax for generated column definitions.
- Within a trigger, use of a cursor that accessed OLD or NEW values from a row could cause a server exit.
- If a file was specified using an --init-file option, mysqld --initialize produced errors for statements in the file such as GRANT that affect user accounts.
- Failure during execution of an XA PREPARE statement could result in an invalid XA transaction state. Subsequent attempts to start another XA transaction led to an ER_XAER_OUTSIDE error.
- The audit log plugin could audit accounts named in the audit_log_exclude_accounts system variable.
- If a generated foreign key index was renamed by the same ALTER TABLE statement that added a new foreign key with the same name, the server could exit.
- ALTER TABLE operations that dropped and added the same FULLTEXT index were not performed as in-place (fast) operations that avoid using a temporary copy of the table.
- When the number of days calculated by DATE_FORMAT() function was negative, the server could exit.
- ALTER TABLE operations to add or modify columns could create geometry columns containing invalid data due to missing valida