Note: I am no longer working for Oracle/MySQL. This post is based on public information.
The MySQL 8.0.17 release is around the corner. Let's take a look at the new features in the upcoming release.
The MySQL 8.0.17 release is around the corner. Let's take a look at the new features in the upcoming release.
InnoDB redo log archive
InnoDB added new parameter “--innodb-redo-log-archive-dirs” in 8.0.17, according to the doc page. The implementation of both page archive and redo log archive has been in the code for a while, under arch directory. This feature can be used by backup and database clone.Multi-Valued Indexes
As of MySQL 8.0.17, InnoDB supports multi-valued indexes. A multi-valued index is a secondary index defined on a column that stores an array of values. A “normal” index has one index record for each data record (1:1). A multi-valued index can have multiple index records for a single data record (N:1). Multi-valued indexes are intended for indexing JSON arrays. For example, a multi-valued index defined on the array of zip codes in the following JSON document creates an index record for each zip code, with each index record referencing the same data record.
It has some good examples on the page. Also listed Limitations and Restrictions on Multi-valued Indexes.
The LOCK_ORDER Tool
As of MySQL 8.0.17, to enable detection of lock-acquisition deadlocks and enforcement that runtime execution is free of them, MySQL supports LOCK_ORDER tooling. This enables a lock-order dependency graph to be defined as part of server design, and server runtime checking to ensure that lock acquisition is acyclic and that execution paths comply with the graph.
The LOCK_ORDER tool is intended for debugging the server, not for production use.
Table 29.4 LOCK_ORDER System Variable Summary
Variable Name | Variable Type | Variable Scope |
Boolean | Global | |
Boolean | Global | |
Boolean | Global | |
Boolean | Global | |
Boolean | Global | |
File name | Global | |
File name | Global | |
Directory name | Global | |
Boolean | Global | |
Boolean | Global | |
Boolean | Global | |
Boolean | Global | |
Boolean | Global |
Default the tool is disabled in source, according to the source configuration options:
-DWITH_LOCK_ORDER=bool
Whether to enable LOCK_ORDER tooling. By default, this option is disabled and server builds contain no tooling. If tooling is enabled, the LOCK_ORDER tool is available and can be used as described in Section 29.5.3, “The LOCK_ORDER Tool”.
Other Changes
Early plugin loading
From 8.0.17, all early loading plugins must specify the following flag:
#definePLUGIN_OPT_ALLOW_EARLY 4UL /* allow --early-plugin-load */
This flag was added in MySQL 8.0.17. All plugins compiled using MySQL distributions prior to 8.0.17 do not have this flag set. When loading these into pre-8.0.17 servers this does not matter, but attempts to use
--early-plugin-load
to load plugin binaries compiled using pre-8.0.17 MySQL distributions into a 8.0.17 or higher server will fail. The plugins must be recompiled against MySQL 8.0.17 or higher.
Additional Target Types for Casts.
JSON Schema Validation
MySQL 8.0.17 adds two functions
JSON_SCHEMA_VALID()
and JSON_SCHEMA_VALIDATION_REPORT()
for validating JSON documents again JSON schemas.
hintable time_zone
From MySQL 8.0.17, when binary log encryption is active on the server, temporary files used to hold the binary log cache are encrypted using AES-CTR (AES Counter mode) for stream encryption. Because the temporary files are volatile and tied to a single process, they are encrypted using single-tier encryption, using a randomly generated file password and initialization vector that exist only in memory and are never stored on disk or in the keyring.
For SHOW CREATE USER, print hash values containing unprintable characters in hex. Added in MySQL 8.0.17.
Upgrade on case sensitive file system
Due to a regression introduced in MySQL 8.0.14, in-place upgrade on a case sensitive file system from MySQL 5.7 or a MySQL 8.0 release prior to MySQL 8.0.14 to MySQL 8.0.16 failed for instances with partitioned tables and
lower_case_table_names=1
.
Reserved Keyword
ARRAY
(R); added in 8.0.17 (reserved)
MEMBER
(R); added in 8.0.17 (reserved)
Compress option
--compress is only used in one release (8.0.17).
Option Name | Description | Introduced | Deprecated | Removed |
Compress all information sent between client and server
| 8.0.17
| 8.0.18
| ||
Permitted compression algorithms for connections to server
| 8.0.18
|
This option was added in MySQL 8.0.17. As of MySQL 8.0.18 it is deprecated. It will be removed in a future MySQL version.