[ This is part 2 of the announcement ] Functionality Added or Changed
* InnoDB: By default, InnoDB reads uncommitted data when calculating statistics. In the case of an uncommitted transaction that deletes rows from a table, InnoDB excludes records that are delete-marked when calculating row estimates and index statistics, which can lead to non-optimal execution plans for other transactions that are operating on the table concurrently using a transaction isolation level other than READ UNCOMMITTED. To avoid this scenario, a new configuration option, innodb_stats_include_delete_marked, can be enabled to ensure that InnoDB includes delete-marked records when calculating persistent optimizer statistics. (Bug #23333990) * InnoDB: Geometry parsing and bounding box computational code for r-trees was moved from InnoDB to the server. * InnoDB: InnoDB now supports NOWAIT and SKIP LOCKED options with SELECT ... FOR SHARE and SELECT ... FOR UPDATE locking read statements. NOWAIT causes the statement to return immediately if a requested row is locked by another transaction. SKIP LOCKED removes locked rows from the result set. See Locking Read Concurrency with NOWAIT and SKIP LOCKED (http://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html#innodb-locking-reads-nowait-skip-locked). SELECT ... FOR SHARE replaces SELECT ... LOCK IN SHARE MODE, but LOCK IN SHARE MODE remains available for backward compatibility. The statements are equivalent. However, FOR SHARE supports NOWAIT, SKIP LOCKED, and OF tbl_name options. See SELECT Syntax (http://dev.mysql.com/doc/refman/8.0/en/select.html). OF tbl_name applies locking queries to named tables. Note OF is now a reserved word and cannot be used as an identifier without identifier quoting. * InnoDB: The InnoDB tablespace encryption feature now supports encryption of redo log and undo log data, controlled by the innodb_redo_log_encrypt and innodb_undo_log_encrypt configuration options. See Redo Log Data Encryption (http://dev.mysql.com/doc/refman/8.0/en/innodb-tablespace-encryption.html#innodb-tablespace-encryption-redo-log), and Undo Log Data Encryption (http://dev.mysql.com/doc/refman/8.0/en/innodb-tablespace-encryption.html#innodb-tablespace-encryption-undo-log). * InnoDB: InnoDB internal temporary tables that are stored on disk now support multiple cursor positions, permitting single writer and multiple reader access within the same thread. The purpose of this enhancement is to provide support for recursive and non-recursive common table expressions (CTEs). Additionally, consistent-read access to InnoDB on-disk internal temporary tables is replaced by a dirty-read scheme, and row counts for InnoDB on-disk internal temporary tables now use row count statistics instead of slower table scans. * InnoDB: InnoDB now compresses large objects into a sequence of smaller zlib streams for tables that use ROW_FORMAT=COMPRESSED. Previously, large object data was compressed into a single zlib stream. * Replication: View change events from a Group Replication group can now be replicated to an external multithreaded slave (MTS) of type DATABASE. (Bug #25170698) * Replication: When a negative or fractional timeout parameter was supplied to WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS(), the server behaved in unexpected ways. With this fix: + A fractional timeout value is read as-is, with no round-off. + A negative timeout value is rejected with an error if the server is on a strict SQL mode; if the server is not on a strict SQL mode, the value makes the function return NULL immediately without any waiting and then issue a warning. (Bug #24976304, Bug #83537) * Replication: Added the binlog_expire_logs_seconds system variable, which sets an interval in seconds for purging of the binary log. The effects of this variable and expire_logs_days are cumulative, making it possible to set a period such as 1.5 days. To completely disable automatic binary log purging, set both variables equal to 0, which is the default value for both of them. (Bug #71697, Bug #18260088) * Replication: Performance schema tables have been added to monitor replication lags and queues. The replication_connection_status table has updated information on the last transaction queued in the relay log, as well as the transaction currently being queued in the relay log. The replication_applier_status_by_coordinator table has updated information on the last transaction written to the buffer of a worker, as well as the transaction currently being processed by the coordinator. The replication_applier_status_by_worker table has updated information on the last transaction applied by the worker, as well as on the transaction currently being applied. The information presented in each of these tables contains the transaction's GTID, commit timestamps, processing stage timestamp, and the timestamp of the completion. In the replication_applier_status_by_worker table, the LAST_SEEN_TRANSACTION column is replaced by the APPLYING_TRANSACTION column. * Replication: The new binlog_expire_logs_seconds variable is a global server variable in addition to the existing expire_logs_days variable. The purpose is to facilitate finer grained retention policies of binary logs than the current day granularity. * Replication: Work has been done to reduce contention between receiver (I/O) and applier (SQL) replication threads. This ensures slaves keep up with a higher insert load on their master. * Replication: The binlog-transaction-dependency-tracking variable has been added to improve writeset-based multi-threaded slave dependency tracking on masters. This enables you to choose whether to put information in the binary log that allows the slave to parallelize based on commit timestamps or transaction write sets. Parallelizing on write sets has potentially much more parallelism since it does not depend on the commit history, and as such, applying binary logs on a slave may explore better the underlying computing hardware (cpu cores) and ultimately this means that replication can become a lot faster. Our testing shows that we can apply binlog on the slave about 4 times faster, even for a single-threaded workload, which is the most difficult workloads for multi-threaded slaves. * Replication: Correct recovery of DDL statements or transactions by binary log implements support for correct recovery of DDL transactions based on the binary log data. In the context of the new data-dictionary it becomes possible to make metadata changes and write them to the binary log as a single transaction by using the 2-phase commit protocol. * Replication: Multi-source replication now supports per-channel replication filters. This makes it possible to filter out the execution of selected replicated data from a specific channel. Until now replication filters have been global, and only applicable to all channels. * Replication: Row-based replication now uses extended table metadata in the binary log. The extended metadata serves two major purposes: slaves use the metadata to transfer data smoothly when its table structure is different from master's, and external software can use the metadata to decode row events and store the data into external databases. * Replication: Group Replication now supports SQL transaction SAVEPOINT. * Replication: An infrastructure for GTID based delayed replication and replication lag monitoring has been added to enable you to properly monitor replication lag. Two new timestamps that are associated with each transaction (not each event or statement) in the binary log have been introduced. The original_commit_timestamp is in microseconds since the epoch when the transaction was committed on the original master, and the immediate_commit_timestamp is in microseconds since the epoch when the transaction was committed on the immediate master. * Replication: The RESET MASTER statement has been extended to allow specification of a binary log file number. The RESET MASTER TO statement accepts an argument which specifies the index of the new binary log file to use. The purpose is to simplify failover procedures by replacing the FLUSH BINARY LOGS and PURGE BINARY LOGS TO statements with a single RESET MASTER statement. * Replication: The process used for how delay is defined and calculated for delayed replication have been improved. This relies on a new timestamp in the binary log, the immediate_commit_timestamp, which is the number of microseconds since epoch when the transaction was written to the binary log of the immediate master. This means that the delay is no longer computed per-event, it is now applied per-transaction. * Replication: It is now possible to specify whether information written into the binary log enables replication slaves to parallelize based on commit timestamps, or on transaction write sets. Using write sets has a the potential for greater parallelism than using commit timestamps since it does not depend on the commit history. When applying binary logs in this fashion on a replication slave, it may be able to leverage capabilities of the underlying computing hardware (such as CPU cores) and thus speed up this process. The interface for choosing the source of parallelization is implemented as a new server system variable binlog_transaction_dependency_tracking which can take any one of the values COMMIT_ORDER, WRITESET, or WRITESET_SESSION. COMMIT_ORDER (the default) causes parallelization information to be logged using commit timestamps; WRITESET causes this information to be logged using write sets in such a way that any transactions not updating the same row can be parallelized; and WRITESET_SESSION acts in the same fashion as WRITESET, except that updates originating with the same session cannot be reordered. The size of the row hash history that is kept in memory for tracking transaction dependencies can be set using binlog_transaction_dependency_size, also introduced in this release. * JSON: Added the JSON utility function JSON_PRETTY(), which prints an existing JSON value, or any string that can successfully be parsed as a JSON document, in a format that can be easily read by humans. Each JSON object member or array value is displayed on a separate line of the output; each child object or array is intended 2 spaces with respect to its parent. Examples: mysql> SELECT JSON_PRETTY('123'); +--------------------+ | JSON_PRETTY('123') | +--------------------+ | 123 | +--------------------+ mysql> SELECT JSON_PRETTY("[1,3,5]"); +------------------------+ | JSON_PRETTY("[1,3,5]") | +------------------------+ | [ 1, 3, 5 ] | +------------------------+ mysql> SELECT JSON_PRETTY('{"a":"10","b":"15","x":"25"}'); +---------------------------------------------+ | JSON_PRETTY('{"a":"10","b":"15","x":"25"}') | +---------------------------------------------+ | { "a": "10", "b": "15", "x": "25" } | +---------------------------------------------+ * JSON: Previously, when sorting JSON values in a query using ORDER BY, each value was represented by a part having a fixed length in the sort key, each such part requiring 1K of memory. In many cases this usage was excessive---for example, an integer scalar value requires only a relatively very few bytes, so that the remainder of the 1K (90% or more) was taken up by padding. Variable length parts for JSON sort keys have been introduced to address this issue, with each key part now taking up only the space that is needed to store the value. This has the following benefits for performance: + Because sort buffer space is used more effectively, filesorts need not flush to disk as early or often, which means that more data can be sorted in memory. + Shorter keys can be compared more quickly than longer ones, providing a noticeable improvement in performance for in-memory sorts as well as sorts requiring disk usage. * The WEIGHT_STRING() debugging function no longer supports the LEVEL clause. (Bug #25469683) * For Developer Studio 12.5, 32-bit builds are now disabled unless the FORCE_UNSUPPORTED_COMPILER option is given. (Bug #25267157, Bug #84230) * Several foreign key constraint checks that were storage engine agnostic were being done inside InnoDB. These are now done at the SQL layer. (Bug #25252847) * Some GIS out-of-bounds checking was simplified. Thanks to Daniel Black for the contribution. (Bug #25202470, Bug #84062) * The set of compiler flags used for Developer Studio 12.5 was improved. (Bug #25148549, Bug #83955) * CMake now uses CMAKE_POLICY of CMP0022 NEW rather than CMP0022 OLD. (Bug #25090147, Bug #83804) * If MySQL was configured to build with the -Wno-error option, mysql_config produced incorrect output for its --cflags option. The set of compiler options that mysql_config and pkg-config produce now is determined by whitelisting rather than blacklisting. (Bug #25040566, Bug #22898475, Bug #80662) * The performance of UTF-8 binary collations was improved. (Bug #24788778, Bug #83247, Bug #25076862) * The systemd service file for mysqld now includes a Documentation value in the [Unit] section to provide a link to the systemd documentation in the MySQL Reference Manual. (Bug #24735762) * Unit testing now uses Google Mock 1.8. (Bug #24572381, Bug #82823) * The unimplemented and nonstandard WITH CUBE clause for GROUP BY is no longer supported. Note CUBE is now a reserved word and cannot be used as an identifier without identifier quoting. (Bug #24572048, Bug #82821) * These outdated build scripts were removed from MySQL source distributions: BUILD/SETUP.sh, BUILD/autorun.sh, BUILD/cmake_configure.sh, BUILD/compile-dist, and cmake/configure.pl. (Bug #24512933) * Consistency and maintainability of Debian/Ubuntu packaging maintainer scripts was improved. (Bug #23588977) * In-place ALTER TABLE operations are now possible for column modifications of tables containing generated columns that depend on columns with a DEFAULT value if the modified columns are not involved in the generated column expressions. For example, changing the NULL property of a separate column can be done in place without a table rebuild. (Bug #22987899, Bug #80832) * For dumps of the mysql system database, mysqldump no longer generates DDL statements for the innodb_index_stats and innodb_table_stats tables. Such statements fail at dump reload time because those tables are not user accessible. (Bug #22655287) * If mysqld is invoked with --daemonize, stdout and stderr are redirected to /dev/null if connected to a terminal type device, so that mysqld can behave as a true daemon. (Bug #21627629) * mysql_secure_installation is more strict about what it considers valid yes and no responses. (Bug #13344753, Bug #62925) * MySQL client and utility programs reported their own program-specific version number when invoked with the --version option, and the version strings did not follow a consistent format. Now these programs print the MySQL version number (same as mysqld) in a consistent format. (Bug #11763201, Bug #55885) * A new mysqldump option, --network-timeout, enables large tables to be dumped by setting max_allowed_packet to its maximum value and network read and write timeouts to a large value. This option is enabled by default. To disable it, use --skip-network-timeout. (Bug #11754493, Bug #46103) * Added two JSON aggregation functions JSON_ARRAYAGG() and JSON_OBJECTAGG(). The JSON_ARRAYAGG() function takes a column or column expression as an argument, and aggregates the result set as a single JSON array, as shown here: mysql> SELECT col FROM t1; +--------------------------------------+ | col | +--------------------------------------+ | {"key1": "value1", "key2": "value2"} | | {"keyA": "valueA", "keyB": "valueB"} | +--------------------------------------+ 2 rows in set (0.00 sec) mysql> SELECT JSON_ARRAYAGG(col) FROM t1; +--------------------------------------------------------------------- ---------+ | JSON_ARRAYAGG(col) | +--------------------------------------------------------------------- ---------+ | [{"key1": "value1", "key2": "value2"}, {"keyA": "valueA", "keyB": "v alueB"}] | +--------------------------------------------------------------------- ---------+ 1 row in set (0.00 sec) The order of the array elements is unspecified. JSON_OBJECTAGG() takes two columns or expressions which it interprets as a key and a value, respectively; it returns the result as a single JSON object, as shown here: mysql> SELECT id, col FROM t1; +------+--------------------------------------+ | id | col | +------+--------------------------------------+ | 1 | {"key1": "value1", "key2": "value2"} | | 2 | {"keyA": "valueA", "keyB": "valueB"} | +------+--------------------------------------+ 2 rows in set (0.00 sec) mysql> SELECT JSON_OBJECTAGG(id, col) FROM t1; +--------------------------------------------------------------------- -------------------+ | JSON_OBJECTAGG(id, col) | +--------------------------------------------------------------------- -------------------+ | {"1": {"key1": "value1", "key2": "value2"}, "2": {"keyA": "valueA", "keyB": "valueB"}} | +--------------------------------------------------------------------- -------------------+ 1 row in set (0.00 sec) A NULL key causes an error; duplicate keys are ignored. For more information, see Aggregate (GROUP BY) Functions (http://dev.mysql.com/doc/refman/8.0/en/group-by-functions-and-modifiers.html). (Bug #78117, Bug #21647417) * MySQL now supports an IMPORT TABLE statement that imports nontransactional tables based on information contained in .SDI (Serialized Dictionary Information) files. For more information, see IMPORT TABLE Syntax (http://dev.mysql.com/doc/refman/8.0/en/import-table.html). * The deprecated libmysqld embedded server library has been removed, along with: + The mysql_config --libmysqld-libs, --embedded-libs, and --embedded options + The CMake WITH_EMBEDDED_SERVER, WITH_EMBEDDED_SHARED_LIBRARY, and INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR options + The (undocumented) mysql --server-arg option + The mysqltest --embedded-server, --server-arg, and --server-file options + The mysqltest_embedded and mysql_client_test_embedded test programs * The deprecated replace utility has been removed. If you wish to continue using this utility, be sure to retain a copy from an installed version of MySQL before upgrading to the current version. * The removal of the mysql_shutdown() C API function in MySQL 8.0.0 has been reverted. It is still to be removed in a future MySQL release, but that removal has been deferred. * 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 * Incompatible Change: The stored definition of a view for which an explicit column name list was provided could be invalid. For example, for this statement: CREATE VIEW v1 (name2) AS SELECT 1 AS name1 UNION SELECT 2 ORDER BY na me1; The stored definition looked like this, which is invalid: CREATE VIEW v1 AS SELECT 1 AS name2 UNION SELECT 2 AS 2 ORDER BY name1 ; Now column names within the stored definition are not replaced by the column name list: CREATE VIEW v1 (name2) AS SELECT 1 AS name1 UNION SELECT 2 AS 2 ORDER BY name1; An incompatibility resulting from this change is that the CREATE VIEW statement can no longer be recreated solely from the INFORMATION_SCHEMA VIEWS table, because the VIEW_DEFINITION value does not show the column name list. Instead, you must also consult the COLUMNS table to get the column name list. Alternatively (and more simply), use SHOW CREATE VIEW. (Bug #23265335, Bug #81377) * InnoDB: In debug builds, a call that initialized latch debugging raised an assertion due to a race condition. (Bug #25700405) * InnoDB: InnoDB did not set the compression algorithm when opening a partitioned table. (Bug #25685868) * InnoDB: The restriction that required the first undo tablespace to use space ID 1 was removed. The first undo tablespace may now be assigned a space ID other than 1. Space ID values for undo tablespaces are still assigned in a consecutive sequence. (Bug #25551311) * InnoDB: A DROP TABLE operation raised an assertion on a server with an innodb_force_recovery setting of 5 or 6. DROP TABLE is no longer permitted with these innodb_force_recovery settings. (Bug #25385590) References: This issue is a regression of: Bug #19779113. * InnoDB: Compiling the server without the Performance Schema caused a build failure. (Bug #25348787) * InnoDB: During read-ahead, the wrong page size was used to calculate the tablespace size. (Bug #25330449) * InnoDB: Compiling on Fedora 25 using DWITH_LZ4=system resulted in a build failure due to a deprecated LZ4_COMPRESS_LIMITEDOUTPUT function. (Bug #25297593) * InnoDB: Disabling macros such as UNIV_PFS_MUTEX, UNIV_PFS_RWLOCK, and UNIV_PFS_THREAD caused compilation errors. (Bug #25251082) * InnoDB: A NULL virtual column field name in a virtual index caused a server exit during a field name comparison that occurs while populating virtual columns affected by a foreign key constraint. (Bug #25222337) * InnoDB: The file handle type name for InnoDB file I/O Performance Schema instrumentation was changed from os_pfs_file_t to pfs_os_file_t. (Bug #25220118) * InnoDB: Transactions with subqueries on INFORMATION_SCHEMA tables could block concurrent DDL operations. (Bug #25200952) * InnoDB: During a range comparison, a secondary index field number was passed instead of clustered index field number, eventually causing the retrieval of an incorrect field. (Bug #25175249) * InnoDB: A server exit on restart was caused by missing my_thread_init() and my_thread_exit() functions for background threads that initialize the st_my_thread_var structure. (Bug #25167032) * InnoDB: A memcached read operation with a non-default read batch size configuration resulted in a server exit. (Bug #25147515) * InnoDB: The INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS table reported NULL for a foreign key constraint name (UNIQUE_CONSTRAINT_NAME) after restarting the server. (Bug #25126722) * InnoDB: A gap lock was taken unnecessarily during foreign key validation while using the READ COMMITTED isolation level. (Bug #25082593) * InnoDB: Loading InnoDB tables required more memory in MySQL 5.7 due primarily to the addition of in-memory structure members introduced with temporary table optimizations. The in-memory structure members, only used for temporary tables, are now only allocated as needed. (Bug #25080442) * InnoDB: After a TRUNCATE TABLE operation on a table with a FULLTEXT index, space size was incorrectly calculated resulting in an invalid read. (Bug #25053705) * InnoDB: A prepared XA transaction was rolled back by a high priority transaction. The high priority transaction should wait if the blocking transaction is in a prepared state. (Bug #25032066) * InnoDB: InnoDB passed an invalid argument to syscall(SYS_futex). (Bug #24923840, Bug #83375) * InnoDB: After redo log recovery, the node size of an undo tablespace object could sporadically be zero, eventually causing an error. Additionally, the undo tablespace object was incorrectly placed on the LRU list, and the header page of the undo tablespace could be present the buffer cache when the tablespace object is freed, causing a file-open failure on the first page read. (Bug #24916359) * InnoDB: During a checkpoint, all MLOG_FILE_NAME redo log records were written in a single mini-transaction (mtr), causing a log parsing buffer overflow. (Bug #24793413, Bug #83245) * InnoDB: On a MySQL 64-bit build on Windows, a file I/O retry result was misinterpreted due to a missing cast necessary for the correct operation of the retry path, resulting in a failing assertion and operating system error. (Bug #24711351) * InnoDB: The GCC mach_parse_compressed function should load one to five bytes depending on the value of the first byte. Due to a GCC bug, GCC 5 and 6 emit code to load four bytes before the first byte value is checked (GCC Bug #77673). A workaround prevents this behavior. Thanks to Laurynas Biveinis for the patch. (Bug #24707869, Bug #83073) * InnoDB: Code related to tablespace type functions was improved to address issues with naming consistency, function distribution, and function usage. (Bug #24706739, Bug #83092) * InnoDB: A mechanism was added to debug builds to ensure that keys for InnoDB Performance Schema instrumentation are registered with Performance Schema. The mechanism causes startup to fail on debug builds if the number of Performance Schema keys does not match the number of registered Performance Schema keys. (Bug #24686908) * InnoDB: A race condition while updating table statistics could result in an estimated row count of 1 and an incorrect query execution plan. (Bug #24666839, Bug #82968) * InnoDB: Due to a glibc bug, short-lived detached threads could exit before the caller had returned from pthread_create(), causing a server exit. Thanks to Laurynas Biveinis for the patch. (Bug #24605956, Bug #82886) * InnoDB: An error in code related to table statistics raised an assertion in the dict0stats.cc source file. (Bug #24585978) * InnoDB: The list of module base names representing modules in the InnoDB code base that allocate memory using ut_malloc or ut_new was incomplete. The list is used by the Performance Schema for reporting of InnoDB memory allocation event data. (Bug #24571816) * InnoDB: Some InnoDB rw-lock and mutex keys were not registered for use with the Performance Schema. (Bug #24571597) * InnoDB: After increasing the value of innodb_undo_logs and restarting the server, the number of active undo tablespaces was not increased when assigning undo tablespaces to newly allocated rollback segments. (Bug #24488141) * InnoDB: The unused MLOG_UNDO_HDR_DISCARD redo log record type and related functions were removed. (Bug #24482001) * InnoDB: An assertion was raised when the purge thread started due to the server not recognizing a tablespace ID as an undo tablespace ID. (Bug #24479773) References: This issue is a regression of: Bug #23517560. * InnoDB: InnoDB incorrectly reported an error about missing encryption when restoring pages from the doublewrite buffer during recovery. (Bug #24471076) * InnoDB: InnoDB reported an incorrect estimate for the number of pages in the buffer pool for a table. The number of pages was not decremented correctly when pages were removed. (Bug #24464147) References: This issue is a regression of: Bug #21747906. * InnoDB: The following code changes related to undo tablespace management were implemented: + An in-memory array for temporary tablespace rollback segments was added, freeing 32 slots in the TRX_SYS page for use by redo-enabled rollback segments. + Code comments related to undo logs and rollback segments were revised. + Fixed arrays that list rollback segments and undo tablespaces were replaced by dynamic size arrays. + The function that initializes undo tablespaces was refactored. + A class was added for managing just-in-time creation of undo and undo file names. (Bug #24462978) * InnoDB: A cached undo segment was not removed from the rollback segment history during a slow shutdown. (Bug #24450908) * InnoDB: An error during a table-rebuilding operation on a table with only a generated clustered index (GEN_CLUST_INDEX) raised and assertion due to an error called with an invalid key name. (Bug #24444831) * InnoDB: MySQL did not build with GCC 6.1.1. (Bug #24438752) * InnoDB: Rotating the tablespace encryption master key while the server is in read-only mode raised an assertion instead of displaying an error message. (Bug #24404091) * InnoDB: On a table without an explicitly defined primary key, InnoDB did not replace the implicit clustered index (GEN_CLUST_INDEX) when a unique key was defined on a NOT NULL column. (Bug #24397406) * InnoDB: handler::keys_to_use_for_scanning() was removed from the handler API. The function was no longer used. The HA_READ_ORDER index flag provides the same information for each index. (Bug #24364448) * InnoDB: Page cleaner threads asserted due to a regression related to the adaptive hash index feature. (Bug #24346574) References: This issue is a regression of: Bug #21407023. * InnoDB: InnoDB failed to free memory used by the full-text optimizer thread. (Bug #24331265) * InnoDB: During recovery, InnoDB attempted to fetch LOB pages using a null reference. (Bug #23615208) * InnoDB: When adding a new index, the server dropped an internally defined foreign key index and attempted to use a secondary index defined on a generated virtual column as the foreign key index, causing a server exit. InnoDB now permits a foreign key constraint to reference a secondary index defined on a generated virtual column. (Bug #23533396) * InnoDB: An INFORMATION_SCHEMA.FILES query resulted in a server exit due to a race condition with a concurrent tablespace creation operation. (Bug #23477214) * InnoDB: A concurrent DML operation during an in in-place ALTER TABLE operation that rebuilt the table did not update a virtual index, resulting in a mismatch between the virtual index and clustered index. (Bug #23219499) * InnoDB: A TRUNCATE TABLE operation held the dict_sys mutex while scanning for and removing pages from the buffer pool, causing concurrent DDL operations to stall. The mutex is now released during the scan and acquired again when the scan is completed. (Bug #23070734, Bug #80060) * InnoDB: Inserting GIS data into an r-tree raised an assertion due to a missing page number field that was encountered when storing the b-tree cursor. (Bug #23044098) * InnoDB: Writing to an InnoDB internal temporary table did not increment the Handler_write counter. (Bug #23024178) * InnoDB: Changes to the InnoDB recovery process in MySQL 5.7 could require up to three scans of the redo log during recovery. To reduce the number of scans, the first and second scans are were merged. With this change, there is only one scan unless the redo log record hash table that is populated by the scan reaches its memory threshold. In this case, a second scan is initiated that performs a simultaneous scan and apply. (Bug #22963951, Bug #80788) * InnoDB: A table-copying online ALTER TABLE operation on a ROW_FORMAT=REDUNDANT table with indexed virtual columns raised an assertion. (Bug #22018745) * InnoDB: After a server restart, concurrent INSERT operations a table with an auto-increment primary key resulted in a duplicate entry error. The current auto-increment value was not changed after auto_increment_increment and auto_increment_offset settings were modified. (Bug #20989615, Bug #76872) * InnoDB: Performance Schema instrumentation for InnoDB file I/O was disabled on Windows. (Bug #14025581) * InnoDB: The row_search_mvcc() function unnecessarily traversed the entire table for a range query, which occurred when the record was not in the transaction read view. (Bug #84202, Bug #23481444, Bug #25251375) * Packaging: The my_create_minidump function in the mysys library called the Windows API function MiniDumpWriteDump with an incorrect value (NULL) for the ExceptionParam parameter. This resulted in exception information being omitted from the minidump file. (Bug #24505650, Bug #82695) * Partitioning: For a partitioned table, dropping a partition dropped triggers for the table as well. (Bug #24449174) * Partitioning: Updating a row of a table that had partitioning on a generated column could raise an assertion failure for debug builds, and return incorrect results in nondebug builds. (Bug #22574695, Bug #80080) * Replication: MySQL 8.0.1 adds the original commit timestamp related statements, but mysqlbinlog was wrongly reporting that these statements have been present since MySQL 8.0.0 because they were written to the log with the incorrect version number 80000. The fix changes the version to 80001 in mysqlbinlog dumps. (Bug #25710507) * Replication: MEMBER_STATE of a group replication member did not go from ERROR to OFFLINE when the STOP GROUP_REPLICATION command was executed if the error state was due to ER3092. (Bug #25674926) * Replication: With flow control enabled, reaching a minimum flow control quota of 1 will made Group Replication not stop throttling when the cause of throttling was no longer in effect. (Bug #25461354) * Replication: Using an unresolvable host name in group_replication_group_seeds caused START GROUP_REPLICATION to fail. The fix ensures that host names in group_replication_group_seeds are validated when starting Group Replication and the list must contain at least one valid address. Invalid addresses are ignored. (Bug #25460324, Bug #84674) * Replication: Lock contention impeded binary relay performance during processing of the relay log file on the slave. (Bug #25321231, Bug #77778) * Replication: A failed node that was removed from the cluster could be expelled upon rejoining the cluster. (Bug #25311008) * Replication: The _gr_user account created by Group Replication plugin installation was not reliably removed when the plugin was uninstalled. (Bug #25298987) * Replication: When starting Group Replication on an offline node, the node could be configured for replication, but fail for recovery. (Bug #25256910) * Replication: When using a multi-threaded slave, applier errors displayed worker ID data that was inconsistent with data externalized in Performance Schema replication tables. (Bug #25231367) * Replication: Not all Group Replication GCS debug and trace messages were enabled in debug mode. (Bug #25209109) * Replication: Compiling MySQL 5.7.17 failed with a variable length array error. (Bug #25163241) * Replication: In row-based replication, a message that incorrectly displayed field lengths was returned when replicating from a table with a utf8mb3 column to a table of the same definition where the column was defined with a utf8mb4 character set. (Bug #25135304, Bug #83918) * Replication: Group Replication GCS was not discarding messages when a member within the group was inactive. (Bug #25134074) * Replication: Some unnecessary warnings were given when the Group Replication plugin was compiled on Windows platforms. (Bug #25119288) * Replication: If the binary log on a master server was rotated and a full disk condition occured on the partition where the binary log file was being stored, the server could stop unexpectedly. The fix adds a check for the existence of the binary log when the dump thread switches to next binary log file. If the binary log is disabled, all binary logs up to the current active log are transmitted to slave and an error is returned to the receiver thread. (Bug #25076007) * Replication: As assertion could be raised if the Group Replication plugin attempted to contact the server when that was no longer possible. (Bug #25071492) * Replication: The GTID transaction skipping mechanism that silently skips a GTID transaction that was previously executed did not work properly for XA transactions. (Bug #25041920) * Replication: After executing restarts on the group replication applier SQL thread, the plugin could no longer detect failure of the thread. (Bug #24969065) * Replication: Building Group Replication on Windows requires a minimum CMAKE version of 2.8.12. (Bug #24964522) * Replication: If a relay log index file named relay log files that did not exist, RESET SLAVE ALL sometimes did not fully clean up properly. (Bug #24901077) * Replication: When the MTS slave applier stopped because of an (injected) error, it reported no useful information for troubleshooting. (Bug #24822686) * Replication: FLUSH BINARY LOG could become slow with data replicated from many servers. (Bug #24806259, Bug #83270) * Replication: When using XA transactions, if a lock wait timeout or deadlock occurred for the applier (SQL) thread on a replication slave, the automatic retry did not work. The cause was that while the SQL thread would do a rollback, it would not roll the XA transaction back. This meant that when the transaction was retried, the first event was XA START which was invalid as the XA transaction was already in progress, leading to an XAER_RMFAIL error. (Bug #24764800) References: See also: Bug #24923091, Bug #24966941. * Replication: Enabling the group replication plugin caused the performance_schema_max_mutex_classes default value of 200 to be exceeded. As a result, some group replication mutex instruments did not appear in the performance_schema.setup_instruments table. (Bug #24746530) * Replication: A partially failed CREATE USER, RENAME USER, or ALTER USER statement was not correctly consuming an auto-generated or specified GTID when binary logging was disabled. (Bug #24693798) * Replication: Binlog_sender, which writes events from the binary log to a packet buffer and then sends the packet to the slave, did not reduce the size of the send buffer as expected. (Bug #24643036) * Replication: The group commit update of GTIDs has been refactored to improve performance on workloads with many small transactions. (Bug #24398760) * Replication: If the relay_log option was not specified in a configuration file, the relay_log_basename variable was being internally constructed on the fly using hostname but the relay_log_basename variable was not set. When a slave tried to access this uninitialized variable it resulted in an unexpected halt of the server. (Bug #24352667) * Replication: For servers built with yaSSL, using group replication with secure connections could result in timeout failures waiting for view delivery. (Bug #23592214) * Replication: When using a multi-threaded slave (slave_parallel_workers greater than 0) the value of Seconds_Behind_Master was incorrect when rotating a relay log. (Bug #23532304) * Replication: An XA PREPARE statement that failed during the intermediate steps could lead to an inconsistent XA transaction state, where ID = -1 but the binlogged flag was set to true. This caused asserts while executing XA COMMIT and XA ROLLBACK queries. (Bug #22915670) * Replication: The server prevented several replication-related administrative statements from working if the read_only system variable was enabled. (Bug #22857926) * Replication: CHANGE MASTER TO for a channel that did not exist could raise an assertion. (Bug #22255698) * Replication: The delay specified by the binlog_group_commit_sync_delay system variable was applied to too many binary log commit groups. (Bug #21420180) * Replication: The number of generated unwanted fseeks into the binary log file being replicated to a slave has been reduced. (Bug #83226, Bug #24763579) * Replication: The fix for Bug #81657 was not correctly merged into MySQL 8.0. Thanks to Laurynas Biveinis for alerting us. (Bug #83124, Bug #24715790) * Replication: The rpl.rpl_binlog_errors test was failing sporadically on Windows. (Bug #82302, Bug #24330138) * Replication: When binlog_group_commit_sync_delay was set to a value between 1 and 9, if binlog_group_commit_sync_no_delay_count was set to a value greater than 1, and the number of transaction commits was less than binlog_group_commit_sync_no_delay_count, these commits hung forever if no more commits were received; and if binlog_group_commit_sync_no_delay_count was set to 0, all transaction commits hung forever. (Bug #80652, Bug #22891628) * Replication: Concurrent CREATE TRIGGER and DROP TRIGGER statements were not being binary logged in the correct order, causing slaves to fail. (Bug #77095, Bug #21114768) * Microsoft Windows: On Windows, SHOW TABLES FROM db_name hung if db_name was given in uppercase. (Bug #24800048, Bug #83262) * Microsoft Windows: 32-bit builds are no longer supported on Windows, but CMake failed to detect when a 32-built build would be attempted, resulting in compilation errors later. Now CMake detects 32-bit build attempts and produces an appropriate error message. (Bug #24487483, Bug #82645) -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/mysql