[Due to size limitation, this announcement is split in two. This is part 1]
Dear MySQL users, MySQL Server 8.0.16, a new version of the popular Open Source Database Management System, has been released. MySQL 8.0.16 is recommended for use on production systems. For an overview of what's new in MySQL 8.0, please see http://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html For information on installing MySQL 8.0.16 on new servers, please see the MySQL installation documentation at http://dev.mysql.com/doc/refman/8.0/en/installing.html MySQL Server 8.0.16 is available in source and binary form for a number of platforms from our download pages at http://dev.mysql.com/downloads/mysql/ MySQL Server 8.0.16 is also available from our repository for Linux platforms, go here for details: http://dev.mysql.com/downloads/repo/ Windows packages are available via the Installer for Windows: http://dev.mysql.com/downloads/installer/ along with .ZIP (no-install) packages for more advanced needs. 8.0.16 also comes with a web installer as an alternative to the full installer. The web installer doesn't come bundled with any actual products and instead relies on download-on-demand to fetch only the products you choose to install. This makes the initial download much smaller but increases install time as the individual products will need to be downloaded. We welcome and appreciate your feedback, bug reports, bug fixes, patches, etc.: http://bugs.mysql.com/report.php The following link lists the changes in the MySQL 8.0 since the release of MySQL 8.0.15. It may also be viewed online at http://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-16.html Enjoy! ============================================================================== Changes in MySQL 8.0.16 (2019-04-25, General Availability) * Account Management Notes * C API Notes * Character Set Support * Compilation Notes * Configuration Notes * Deprecation and Removal Notes * Installation Notes * Packaging Notes * Parser Notes * Performance Schema Notes * Plugin Notes * Security Notes * Spatial Data Support * SQL Syntax Notes * Test Suite Notes * X Plugin Notes * Functionality Added or Changed * Bugs Fixed Account Management Notes * Previously, users who had the DROP ROLE privilege could use the DROP ROLE statement to drop locked or unlocked accounts. Now, users who have the DROP ROLE privilege can use DROP ROLE only to drop accounts that are locked (unlocked accounts are presumably user accounts used to log in to the server and not just as roles). Users who have the CREATE USER privilege can use DROP ROLE to drop accounts that are locked or unlocked. (Bug #28953158, Bug #93263) * Several changes have been made to MySQL account-management capabilities: + MySQL now incorporates the concept of user account categories, with system and regular users distinguished according to whether they have the new SYSTEM_USER privilege: o System users are users who possess the SYSTEM_USER privilege. A system user can perform operations on both system and regular accounts. o Regular users are ordinary users who do not possess the SYSTEM_USER privilege. A regular user can perform operations on regular accounts, but not system accounts. If a user has the appropriate privileges to perform a given operation on regular accounts, SYSTEM_USER enables the user to also perform the operation on system accounts. SYSTEM_USER does not imply any other privilege, so the ability to perform a given account operation remains predicated on possession of any other required privileges. For example, if a user can grant the SELECT and UPDATE privileges to regular accounts, then with SYSTEM_USER the user can also grant SELECT and UPDATE to system accounts. The distinction between system and regular accounts enables better control over certain account administration issues by protecting accounts that have the SYSTEM_USER privilege from accounts that do not have the privilege. For example, the CREATE USER privilege enables not only creation of new accounts, but modification and removal of existing accounts. Without the system user concept, a user who has the CREATE USER privilege can modify or drop any existing account, including the root account. The concept of system user enables restricting modifications to the root account (itself a system account) so they can be made only by system users. Regular users with the CREATE USER privilege can still modify or drop existing accounts, but only regular accounts. Other operational implications of the SYSTEM_USER privilege: o A session that has the SYSTEM_USER privilege can be killed only by users who have the SYSTEM_USER privilege, in addition to any other required privileges. o An account that has the SYSTEM_USER privilege can be specified as the DEFINER for a stored object only by users who have the SYSTEM_USER privilege, in addition to any other required privileges. o A role that has the SYSTEM_USER privilege cannot be listed in the value of the mandatory_roles system variable. For more information, see Account Categories (http://dev.mysql.com/doc/refman/8.0/en/account-categories.html). + Previously, it was not possible to grant privileges that apply globally except for certain schemas. This is now possible if the new partial_revokes system variable is enabled. For example, the following statements enable an account to select from or insert into any table except those in the mysql system schema: SET PERSIST partial_revokes = ON; GRANT SELECT, INSERT ON *.* TO u1; REVOKE SELECT, INSERT ON mysql.* FROM u1; The server records partial revokes by adding a Restrictions attribute to the User_attributes column of the mysql.user system table. SHOW GRANTS includes REVOKE statements in its output to indicate partial revokes. For more information, see Privilege Restriction Using Partial Revokes (http://dev.mysql.com/doc/refman/8.0/en/partial-revokes.html). + The GRANT statement has a new AS user [WITH ROLE] clause that specifies additional information about the privilege context to use for statement execution. This syntax is visible at the SQL level, although its primary purpose is to enable uniform replication across all nodes of grantor privilege restrictions imposed by partial revokes, by causing those restrictions to appear in the binary log. For more information, see GRANT Syntax (http://dev.mysql.com/doc/refman/8.0/en/grant.html). C API Notes * The MySQL C API now supports asynchronous functions for nonblocking communication with the MySQL server: + mysql_real_connect_nonblocking() + mysql_real_query_nonblocking() + mysql_store_result_nonblocking() + mysql_next_result_nonblocking() + mysql_fetch_row_nonblocking() + mysql_free_result_nonblocking() Each function is the asynchronous counterpart to a synchronous function that has the same name without a _nonblocking suffix. The synchronous functions block if reads from or writes to the server connection must wait. The asynchronous functions enable an application to check whether work on the server connection is ready to proceed. If not, the application can perform other work before checking again later. See C API Asynchronous Interface (http://dev.mysql.com/doc/refman/8.0/en/c-api-asynchronous-interface.html). Character Set Support * MySQL now supports a new Chinese collation, utf8mb4_zh_0900_as_cs, for the utf8mb4 Unicode character set. utf8mb4_zh_0900_as_cs is the first Chinese language-specific collation available for Unicode in MySQL. This collation is accent sensitive and case sensitive. Its characteristics are similar to utf8mb4_0900_as_cs except that language-specific rules take precedence where applicable. For more information, see Unicode Character Sets (http://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html). Compilation Notes * CMake now causes the build process to link with the llvm lld linker for Clang if it is available and not explicitly disabled. To disable use of this linker, specify the -DUSE_LD_LLD=OFF option. (Bug #29264211) * Builds on EL6 and EL7 now try to use the compiler in devtoolset-8 rather than devtoolset-7. (Bug #29198846) * The minimum version of the Boost library for server builds is now 1.69.0. (Bug #29114233) * The configuration-time check for Visual Studio 2017 was not specific enough. The check for MySQL compilation now requires at least Visual Studio update 15.8, which is version number 1915. (Bug #28970895) * MySQL now can be compiled using C++14. The following minimum version requirements apply for compiler support: + GCC 5.3 (Linux) + Clang 4.0 (FreeBSD) + XCode 9 (MacOS) + Developer Studio 12.6 (Solaris) + Visual Studio 2017 (Windows) Configuration Notes * MySQL configuration now requires a minimum CMake version of 3.4.3. This requires the use of cmake3 rather than cmake on some Red Hat and Oracle Linux platforms. (Bug #29246216) * The WITH_LZMA CMake option was removed. (Bug #29153932, Bug #93755) * The EXCLUDE_FROM_ALL option is now used in CMake configuration as appropriate so that libraries are built only if they are actually used by any executable. (Bug #29052599) * The new WITH_JEMALLOC CMake option indicates whether to link with -ljemalloc. If enabled, built-in malloc(), calloc(), realloc(), and free() routines are disabled. The default is OFF. (Bug #29027974) * The new WITH_LSAN CMake option indicates whether to run LeakSanitizer, without AddressSanitizer. The default is OFF. (Bug #28936574) * The new WITH_ROUTER CMake option indicates whether to build MySQL Router. The default is ON. (Bug #28759234) * MySQL Server now supports a --validate-config option that enables the startup configuration to be checked for problems without running the server in normal operational mode. For more information, see Server Configuration Validation (http://dev.mysql.com/doc/refman/8.0/en/server-configuration-validation.html). Deprecation and Removal Notes * The TempTable storage engine now always uses InnoDB to manage internal temporary tables on disk, and the choice of storage engine employed for this task is no longer user-configurable. The internal_tmp_disk_storage_engine system variable has been removed. (Bug #91377, Bug #28234637) References: See also: Bug #28081038, Bug #82556, Bug #27408352. Installation Notes * Previously, after installation of a new version of MySQL, the MySQL server automatically upgrades the data dictionary tables at the next startup, after which the DBA is expected to invoke mysql_upgrade manually to upgrade the system tables in the mysql schema, as well as objects in other schemas such as the sys schema and user schemas. The server now performs the tasks previously handled by mysql_upgrade. After installation of a new MySQL version, the server now automatically performs all necessary upgrade tasks at the next startup and is not dependent on the DBA invoking mysql_upgrade. In addition, the server updates the contents of the help tables (something mysql_upgrade did not do). A new --upgrade server option provides control over how the server performs automatic data dictionary and server upgrade operations. For more information, see Upgrading MySQL (http://dev.mysql.com/doc/refman/8.0/en/upgrading.html). This change to the upgrade procedure results in some deprecations: + mysql_upgrade is deprecated because it is no longer necessary. + The --no-dd-upgrade server option is deprecated because the --upgrade option supersedes it. mysql_upgrade and the --no-dd-upgrade option will be removed in a future MySQL version. (Bug #28146052, Bug #28162609, Bug #91205, Bug #29185739, Bug #27740692, Bug #28547424, Bug #91961) Packaging Notes * Binary packages that include curl rather than linking to the system curl library now use curl 7.64.0. (Bug #29357198) * The Henry Spencer regex library (extra/regex) is no longer used by MySQL 8.0 and is no longer present in source distributions. (Bug #29192306) * RPM packages now have dependencies on libtirpc and rpcgen because newer versions of glibc do not include Sun RPC. (Bug #28995257) * The support-files/magic file was removed from the MySQL source tree. Most MySQL file formats are covered by operating system file type capabilities. (Bug #18335080, Bug #71898) Parser Notes * The parser no longer accepts the undocumented and nonstandard = alias_name syntax for specifying table aliases. (Bug #29205289) * The parser is now permits several additional nonreserved keywords to be used as labels within stored programs that previously were restricted from such use: ACCOUNT, ALWAYS, BACKUP, CLOSE, FORMAT, GROUP_REPLICATION, HOST, INVISIBLE, OPEN, OPTIONS, OWNER, PARSER, PORT, REMOVE, RESTORE, ROLE, SECONDARY, SECONDARY_ENGINE, SECONDARY_LOAD, SECONDARY_UNLOAD, SECURITY, SERVER, SOCKET, SONAME, UPGRADE, VISIBLE, WRAPPER. (Bug #29033659) * The parser accepted ODBC escape syntax for outer joins ({ OJ outer_join }), but also accepted identifiers other than OJ. The parser now accepts only OJ. Note OJ now is a nonreserved keyword. (Bug #22320942) Performance Schema Notes * MySQL now includes built-in SQL functions that format or retrieve Performance Schema data, and that may be used as equivalents for existing sys schema stored functions: + FORMAT_BYTES(): Converts a byte count to a value with units. Similar to sys.format_bytes(). + FORMAT_PICO_TIME(): Converts a time in picoseconds to a value with units. Similar to sys.format_time(). + PS_THREAD_ID(): Returns the Performance Schema thread ID for a given thread. Similar to sys.ps_thread_id() invoked with a non-NULL argument. + PS_CURRENT_THREAD_ID(): Returns the Performance Schema thread ID for the current thread. Shortcut for sys.ps_thread_id() invoked with a NULL argument. The built-in functions can be invoked in any schema and require no qualifier, unlike the sys functions, which require either a sys. schema qualifier or that sys be the current schema. The built-in functions supersede the corresponding sys functions, which now are deprecated and will be removed in a future MySQL version. Applications that use the sys functions should be adjusted to use the built-in functions instead, keeping in mind some minor differences between the sys functions and the built-in functions. See Performance Schema Functions (http://dev.mysql.com/doc/refman/8.0/en/performance-schema-functions.html). * The new Performance Schema keyring_keys table exposes metadata for keys in the MySQL Keyring. Key metadata includes key IDs, key owners, and backend key IDs. The keyring_keys table does not expose any sensitive keyring data such as key contents. See The keyring_keys table (http://dev.mysql.com/doc/refman/8.0/en/keyring-keys-table.html). Plugin Notes * MySQL now includes a ddl_rewriter plugin that modifies CREATE TABLE statements received by the server before it parses and executes them. The plugin removes ENCRYPTION, DATA DIRECTORY, and INDEX DIRECTORY clauses, which may be helpful when restoring tables from SQL dump files created from databases that are encrypted or that have their tables stored outside the data directory. For example, the plugin may enable restoring such dump files into an unencrypted instance or in an environment where the paths outside the data directory are not accessible. When installed, ddl_rewriter exposes the Performance Schema memory/rewriter/ddl_rewriter instrument for tracking plugin memory use. For more information, see The ddl_rewriter Plugin (http://dev.mysql.com/doc/refman/8.0/en/ddl-rewriter.html). Security Notes * Previously, if the grant tables were corrupted, the MySQL server wrote a message to the error log but continued as if the --skip-grant-tables option had been specified. This resulted in the server operating in an unexpected state unless --skip-grant-tables had in fact been specified. Now, the server stops after writing a message to the error log unless started with --skip-grant-tables. (Starting the server with that option enables you to connect to perform diagnostic operations.) (Bug #29394501, Bug #94394) * The OpenSSL libraries bundled with MySQL on some platforms (Windows, macOS, and Generic Linux) have been upgraded to version 1.0.2r. On all other platforms, MySQL uses the system installed OpenSSL. Issues fixed in the new OpenSSL version are described at http://www.openssl.org/news/vulnerabilities.html. (Bug #28988091) * Granting roles to anonymous users is no longer supported because such roles caused problematic behavior. (Bug #28910120) * OpenSSL 1.1.1 supports the TLS v1.3 protocol for encrypted connections, and MySQL now supports TLS v1.3 as well, if compiled using OpenSSL 1.1.1 or higher: + Some TLSv1.3 ciphersuites are enabled by default. The tls_ciphersuites system variable enables explicitly specifying which TLSv1.3 ciphersuites the server permits. + The --tls-ciphersuites client option enables specifying which TLSv1.3 ciphersuites a client permits. This option applies to these programs: mysql, mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlpump, mysqlshow, mysqlslap, mysqltest, mysql_secure_installation, and mysql_upgrade. + The mysql_options() C API function has a new MYSQL_OPT_TLS_CIPHERSUITES option that enables specifying from within the client library which TLSv1.3 ciphersuites a client program permits. For more information, see Encrypted Connection Protocols and Ciphers (http://dev.mysql.com/doc/refman/8.0/en/encrypted-connection-protocols-ciphers.html). Note Currently, Group Replication does not support TLSv1.3. * The SSL context the server uses for new connections now is reconfigurable at runtime. This capability may be useful, for example, to avoid restarting a MySQL server that has been running so long that its SSL certificate has expired. Dynamic SSL reconfigurability is based on these changes: + The system variables that define the SSL context are dynamic and can be changed at runtime: ssl_ca, ssl_capath, ssl_cert, ssl_cipher, ssl_crl, ssl_crlpath, ssl_key, tls_ciphersuites. tls_version. + The ALTER INSTANCE statement supports a RELOAD TLS action that reconfigures the SSL context from the current values of the system variables that define the context. + These status variables reflect the SSL context the server uses for new connections: Current_tls_ca, Current_tls_capath, Current_tls_cert, Current_tls_cipher, Current_tls_ciphersuites, Current_tls_crl, Current_tls_crlpath, Current_tls_key, Current_tls_version. ALTER INSTANCE RELOAD TLS updates those status variables from the corresponding system variable values when it reconfigures the SSL context. For more information, see Server-Side Runtime Configuration for Encrypted Connections (http://dev.mysql.com/doc/refman/8.0/en/using-encrypted-connections.html#using-encrypted-connections-server-side-runtime-configuration). Thanks to Facebook for submitting code for a similar feature (although the code was not used). References: See also: Bug #27980097. * In MySQL 8.0, the default authentication plugin was changed from mysql_native_password. to caching_sha2_password. Because caching_sha2_password provides a superset of the capabilities of the sha256_password authentication plugin, sha256_password is now deprecated and will be removed in a future MySQL version. MySQL accounts that authenticate using sha256_password should be migrated to use caching_sha2_password instead. Spatial Data Support * The ST_Length() function now takes an optional second argument enabling the unit for the return value to be specified. Permitted units are those listed in the new INFORMATION_SCHEMA ST_UNITS_OF_MEASURE table. See LineString and MultiLineString Property Functions (http://dev.mysql.com/doc/refman/8.0/en/gis-linestring-property-functions.html), and The INFORMATION_SCHEMA ST_UNITS_OF_MEASURE Table (http://dev.mysql.com/doc/refman/8.0/en/st-units-of-measure-table.html). SQL Syntax Notes * Incompatible Change: In MySQL 5.7, specifying a FOREIGN KEY definition for an InnoDB table without a CONSTRAINT symbol clause, or specifying the CONSTRAINT keyword without a symbol, causes InnoDB to use a generated constraint name. That behavior changed in MySQL 8.0, with InnoDB using the FOREIGN KEY index_name value instead of a generated name. Because constraint names must be unique per schema (database), the change caused errors due to foreign key index names that were not unique per schema. To avoid such errors, the new constraint naming behavior has been reverted, and InnoDB once again uses a generated constraint name. For consistency with InnoDB, the NDB storage engine now uses a generated constraint name if the CONSTRAINT symbol clause is not specified, or the CONSTRAINT keyword is specified without a symbol. In NDB releases based on MySQL 5.7 and earlier MySQL 8.0 releases, NDB used the FOREIGN KEY index_name value. The changes described above may introduce incompatibilities for applications that depend on the previous foreign key constraint naming behavior. (Bug #29173134) * Previously, MySQL permitted a limited form of CHECK constraint syntax, but parsed and ignored it. MySQL now implements the core features of table and column CHECK constraints, for all storage engines. Constraints are defined using CREATE TABLE and ALTER TABLE statements. For more information, see CHECK Constraints (http://dev.mysql.com/doc/refman/8.0/en/create-table-check-constraints.html). (Bug #11744849, Bug #3464, Bug #3465, Bug #11746042, Bug #22759) Test Suite Notes * mysql-test-run.pl now supports the MTR_UNIQUE_IDS_DIR environment variable, which may be set to specify a unique-IDs directory to be used as the common location for all chroot environments by multiple simultaneous mysql-test-run.pl instances. This enables those instances to avoid conflicts when reserving port numbers. Thanks to Facebook for the contribution. (Bug #29221085, Bug #93950) * The my_safe_process program was renamed to mysqltest_safe_process and now is installed with other binaries such as mysqltest rather than with test suite files. (Bug #29198969) * These changes to the all_persisted_variables test were implemented: + It limits the number of hardcoded values in the test output by putting them into local variables. New patches that are then rebased on top that add new system variables do not need to change as many lines of the original test case, making it easier on the rebase process. + It removes entries for bugs that were fixed and modifies the queries to include the system variables that were not tested due to open bugs. Thanks to the Facebook team for the contribution. (Bug #29013375, Bug #93478) X Plugin Notes * X Plugin previously returned a StmtExecuteOk message to the client after query cleanup had ended and the session had been deactivated. The message is now returned as soon as the result is known and before query cleanup, which gives a noticeable improvement in performance. (Bug #28997370) * X Plugin logged the system message "X Plugin ready for connections" when user connections were not available because preparation of I/O interfaces had failed. (Bug #28906360) * Some items in the X Plugin code were not instrumented for the Performance Schema by default. (Bug #28898155) * X Protocol now supports the COM_RESET_CONNECTION utility command to reset the session state without re-authenticating or closing the connection. (Bug #28732455) * X Plugin produced compilation warnings when the MySQL Server source code was built using the Clang 8 compiler. (Bug #28732158) Functionality Added or Changed * InnoDB: When the amount of memory occupied by the TempTable storage engine exceeds the limit defined by the temptable_max_ram variable, the TempTable storage engine allocates space for internal in-memory temporary tables as memory-mapped temporary files. This behavior is now controlled by the temptable_use_mmap variable, which can be disabled to have the TempTable storage engine use InnoDB on-disk internal temporary tables instead. For more information, see Internal Temporary Table Use in MySQL (http://dev.mysql.com/doc/refman/8.0/en/internal-temporary-tables.html). (Bug #28944457) * InnoDB: undo and purge subsystem counters were added for monitoring background activities associated with undo log truncation. For counter names and descriptions, query the INFORMATION_SCHEMA.INNODB_METRICS table. SELECT NAME, SUBSYSTEM, COMMENT FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE NAME LIKE '%truncate%'; For information about enabling counters and querying counter data, see InnoDB INFORMATION_SCHEMA Metrics Table (http://dev.mysql.com/doc/refman/8.0/en/innodb-information-schema-metrics-table.html). (Bug #28813526) * InnoDB: The new innodb_spin_wait_pause_multiplier variable provides greater control over the duration of spin-lock polling delays that occur when a thread waits to acquire a mutex or rw-lock. Delays can now be tuned more finely to account for differences in PAUSE instruction duration on different processor architectures. For more information, see Configuring Spin Lock Polling (http://dev.mysql.com/doc/refman/8.0/en/innodb-performance-spin_lock_polling.html). * InnoDB: An internal service interface was added to support tracking of modified pages. * InnoDB: The InnoDB data-at-rest encryption feature now supports encryption of the mysql system tablespace. The mysql system tablespace contains the mysql system database and the MySQL data dictionary tables. * Some InnoDB memory allocation functions that previously were evaluated at runtime now are evaluated at compile time, resulting in performance improvements. (Bug #29370811, Bug #94380) * The semi-join optimizations for IN subqueries have been extended to work with EXISTS subqueries as well; these can now be handled with the same semi-join strategies as IN subqueries, including first-match, materialization, duplicate weedout and loose index scan. In addition, the optimizer decorrelates trivially-correlated equality predicates in the WHERE condition attached to the subquery, so that they can be treated similarly to expressions in IN subqueries. The decorrelation is now also performed for IN subqueries as well as EXISTS subqueries. All hints and optimizer switches applicable to IN subqueries which are transformed into semi-join operations are also applicable to transformed EXISTS subqueries. All limitations on such optimization of IN subqueries also apply to transformed EXISTS subqueries, so that, for example, aggregate EXISTS subqueries cannot be transformed. For more information, see Optimizing Subqueries, Derived Tables, View References, and Common Table Expressions with Semi-Join Transformations (http://dev.mysql.com/doc/refman/8.0/en/semi-joins.html). * For consistency with the SQL standard and other RDBMS, table aliases are now supported in single-table as well as multi-table DELETE statements. (Bug #27455809) * The group communication engine for Group Replication (XCom, a Paxos variant) includes a cache for messages (and their metadata) that are exchanged between the group members as a part of the consensus protocol. Among other functions, the message cache is used for recovery by members that return to the group after a period where they were unable to communicate with the other group members. Previously, the size limit for the message cache was fixed at 1GB of memory, and the maximum number of messages in the cache was also fixed. However, now that the group_replication_member_expel_timeout system variable (introduced in MySQL 8.0.13) can be set to allow up to an hour for members to return to the group rather than being expelled, having a fixed 1GB limit on the size of the cache could cause such nodes to be unable to recover the messages they missed on re-establishing communication. For this reason, from MySQL 8.0.16, XCom's message cache has no fixed limit on the number of messages it can contain, and is only bounded by the limit set for the amount of memory it can use. The cache size limit can be set using the new group_replication_message_cache_size system variable, which has a default and minimum setting of 1GB, as used in previous MySQL Server versions. If the cache size limit is reached, XCom removes the oldest entries that have been decided and delivered. The cache size limit can be increased or reduced dynamically at runtime. If you reduce the cache size limit, XCom removes the oldest entries that have been decided and delivered until the current size is below the limit. Group Replication's Group Communication System (GCS) alerts you, by a warning message, when a message that is likely to be needed for recovery by a member that is currently unreachable is removed from the message cache. (Bug #26482507) * Large messages sent between Group Replication group members can now be split into multiple messages when they exceed a user-defined threshold size. Sending an abnormally large message can result in some group members being reported as failed and expelled from the group. This is because the single thread used by the group communication engine (XCom, a Paxos variant) is occupied processing the message for too long, so some of the group members might report the receiver as failed. The new system variable group_replication_communication_max_message_size can be used to specify the maximum message size for Group Replication communications. Messages greater than this size are automatically split into fragments that are sent separately and reassembled by the recipients. Message delivery for a fragmented message is considered complete when all the fragments of the message have been received and reassembled by all the group members. Fragmentation is applied by default, and can be switched off by specifying a zero value for the system variable. Because older MySQL Server releases do not support message fragmentation, in order to ensure backward compatibility, Group Replication now has the concept of a communication protocol for the group. The communication protocol version is set to accommodate the oldest MySQL Server version that you want the group to support. A MySQL server at version X can only join and reach ONLINE status in a replication group if the group's communication protocol version is less than or equal to X. You can inspect the communication protocol in use by a group by using the new group_replication_get_communication_protocol() UDF, which returns the oldest MySQL Server version that the group supports. Versions from MySQL 5.7.14 allow compression of messages, and versions from MySQL 8.0.16 also allow fragmentation of messages. When a new member joins a replication group, it checks the communication protocol version that is announced by the existing members of the group. If the joining member supports that version, it joins the group and uses the communication protocol that the group has announced, even if the member supports additional communication capabilities. If the joining member does not support the communication protocol version, it is expelled from the group. If you need to change the communication protocol version of a group so that members at earlier releases can join, use the new group_replication_set_communication_protocol() UDF to specify the MySQL Server version of the oldest member that you want to allow. This makes the group fall back to a compatible communication protocol version if possible. If you upgrade all the members of a replication group to a new MySQL Server release, the group's communication protocol version is not automatically upgraded to match. If you no longer need to support members at earlier releases, use the group_replication_set_communication_protocol() UDF to set the communication protocol version to the new MySQL Server version to which you have upgraded the members. (Bug #26438884, Bug #23240361, Bug #28474580, Bug #91830, Bug #28642504, Bug #26941977, Bug #29240931) * For Group Replication, the new system variable group_replication_autorejoin_tries lets you specify the number of tries that a member makes to automatically rejoin the group if it is expelled, or if it is unable to contact a majority of the group before the group_replication_unreachable_majority_timeout setting is reached. The default setting, 0, means that the member does not try to rejoin, and proceeds to the action specified by the group_replication_exit_state_action system variable. Activate auto-rejoin if you can tolerate the possibility of stale reads and want to minimize the need for manual intervention, especially where transient network issues fairly often result in the expulsion of members. If you specify a number of tries, when the member's expulsion or unreachable majority timeout is reached, it makes an attempt to rejoin (using the current plugin option values), then continues to make further auto-rejoin attempts up to the specified number of tries. After an unsuccessful auto-rejoin attempt, the member waits 5 minutes before the next try. During the auto-rejoin procedure, the member remains in super read only mode and displays an ERROR state on its view of the replication group. The member can be stopped manually at any time by using a STOP GROUP_REPLICATION statement or shutting down the server. If the specified number of tries is exhausted without the member rejoining or being stopped, the member proceeds to the action specified by the group_replication_exit_state_action system variable, which can be either remaining in super read only mode or shutting down. (Bug #25673350, Bug #84784, Bug #28732174) * WHERE conditions making comparisons between constants and column values in which the constant value is out of range or of the wrong type with respect to the column type are now handled during optimization rather than during execution. For example, given a table t with a column c whose type is TINYINT UNSIGNED, the condition in the query SELECT * FROM t WHERE c < 256 can be folded to SELECT * FROM t WHERE TRUE because 256 is out of range for a column of this type. Comparisons with NULL columns can also be optimized; if the column c is nullable, the same query can be optimized as SELECT * FROM t WHERE c IS NOT NULL. The comparisons that can be treated in this manner are >, >=, <, <=, =, <>/!=, and <=>. (BETWEEN and IN are not currently supported.) Types for which comparisons can be folded based on range and type include integer, floating-point, and fixed-point numeric types. BIT is not supported by this optimization, nor are columns of date and time types. For more information, see Constant-Folding Optimization (http://dev.mysql.com/doc/refman/8.0/en/constant-folding-optimization.html). (Bug #90100, Bug #25484743, Bug #29048682, Bug #27703371) References: See also: Bug #28172538. * When binary log and relay log encryption is in use on a MySQL server (binlog_encryption=ON), you can now rotate the binary log master key at any time while the server is running by issuing ALTER INSTANCE ROTATE BINLOG MASTER KEY. You can do this on a regular basis to comply with your organization's security policy, and also if you suspect that the current or any of the previous binary log master keys might have been compromised. When you rotate the binary log master key, the new master key is used to encrypt the file passwords for the new binary log and relay log files, and subsequent files until the key is changed again. The file passwords for existing encrypted binary log files and relay log files on the server are also re-encrypted in turn using the new binary log master key, starting with the most recent files. Any unencrypted files are skipped. Finally, all binary log encryption keys that no longer apply to any retained binary log files or relay log files are cleaned up from the keyring. * Table encryption can now be managed globally by defining and enforcing encryption defaults. The default_table_encryption variable defines an encryption default for newly created schemas and general tablespaces. The encryption default for a schema can also be defined using the DEFAULT ENCRYPTION clause when creating a schema. By default, a table inherits the encryption of the schema or general tablespace it is created in. Encryption defaults are enforced by enabling the table_encryption_privilege_check variable. The privilege check occurs when creating or altering a schema or general tablespace with an encryption setting that differs from the default_table_encryption setting, or when creating or altering a table with an encryption setting that differs from the default schema encryption. The TABLE_ENCRYPTION_ADMIN privilege permits overriding default encryption settings when table_encryption_privilege_check is enabled. For more information, see Defining an Encryption Default for Schemas and General Tablespaces (http://dev.mysql.com/doc/refman/8.0/en/innodb-tablespace-encryption.html#innodb-schema-tablespace-encryption-default). * The system variable group_replication_exit_state_action specifies how Group Replication behaves when a server instance leaves the group unintentionally, for example after encountering an applier error, or in the case of a loss of majority, or when another member of the group expels it due to a suspicion timing out. Before the system variable was introduced, the server's response in these situations was to switch MySQL to super read only mode by setting the system variable super_read_only to ON. group_replication_exit_state_action provided the alternative option for the server to shut itself down, which minimizes the possibility of stale reads and means that servers do not need to be pro-actively monitored for failures. When the system variable was introduced in MySQL 5.7.24 and MySQL 8.0.12, the default was set to READ_ONLY in 5.7 for compatibility with the existing behavior, and to ABORT_SERVER in 8.0. Following user feedback, the default has now been changed to READ_ONLY from MySQL 8.0.16. * When insertions, deletions, or updates are made to partitioned tables, the binary log now records information about the partition and (if any) the subpartition in which the row event took place. A new row event is created for a modification that takes place in a different partition or subpartition, even if the table involved is the same. So if a transaction involves three partitions or subpartitions, three row events are generated. For an update event, the partition information is recorded for both the "before" image and the "after" image. The partition information is displayed if you specify the -v or --verbose option when viewing the binary log using mysqlbinlog. Partition information is only recorded when row-based logging is in use (binlog_format=ROW). Bugs Fixed * NDB Cluster: EXPLAIN of a query executed with table access type eq_ref could also show a condition being pushed down, even when condition pushdown was not supported for the query. Now the access type is checked before NDB checks the condition for a possible pushdown optimization. This fix does not affect handling of tables which are part of a pushed join, for which NDB continues to support pushed conditions as before. (Bug #27429615) References: See also: Bug #27397802, Bug #27808758, Bug #90301. * InnoDB: Undo tablespaces remained unencrypted after enabling undo tablespace encryption at startup. (Bug #29477795) * InnoDB: Problematic macros introduced with undo tablespace DDL support in MySQL 8.0.14 were revised. (Bug #29324132, Bug #94243) * InnoDB: Static thread local variables defined at the wrong scope were not released at thread exit. (Bug #29305186) * InnoDB: The performance_schema.data_locks LOCK_DATA column only showed the secondary index values of the locked record for a lock placed on a unique secondary index, which was not sufficient to ensure the uniqueness of identified records. The clustered index column values of the locked record are now appended. (Bug #29296645) * InnoDB: An incorrect count of transactions using a rollback segment for recovery of an XA transaction prevented an undo tablespace truncation operation from proceeding and left the purge thread busy checking for the undo tablespace to become empty. (Bug #29273194) References: This issue is a regression of: Bug #29273194. * InnoDB: Invalid assertions were raised at startup after a failure to retrieve the space ID of a compressed file-per-table tablespace. The invalid assertion code was removed. (Bug #29221385, Bug #93760) * InnoDB: Optimized InnoDB internal temporary tables did not support in-place UPDATE operations, which caused the number of delete-marked records to increase continuously. The large number of delete-marked records could cause longer than expected query execution times. (Bug #29207450) * InnoDB: The std::sort function in the Variance-Aware Transaction Scheduling (VATS) algorithm was replaced by the std::stable_sort function to preserve the original FIFO order for transactions of equal weight. (Bug #29058967) [To be continued] -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/mysql