MySQL Blog Archive
For the latest blogs go to
The MySQL 8.0.23 Maintenance Release is Generally Available

The MySQL Development team is very happy to announce that MySQL 8.0.23 is now available for download at In addition to bug fixes there are a few new features added in this release.  Please download 8.0.23 from or from the MySQL  YumAPT, or SUSE repositories. The source code is available at GitHub. You can find the full list of changes and bug fixes in the 8.0.23 Release Notes. Here are the highlights. Enjoy!

Invisible Columns

Support for INVISIBLE columns  (WL#10905) This work by Praveenkumar Hulakund adds support for INVISIBLE columns. A column can be defined to be invisible e.g. when the table is created such as CREATE TABLE t1 (f1 INT INVISIBLE, f2 INT); or made invisible later by using the ALTER TABLE syntax. A SQL statement uses an invisible column by explicitly referencing it, e.g. SELECT f1, f2 FROM t1; An invisible column will not be in the result if it is not referenced, e.g. not visible by SELECT * FROM t1; Invisible columns can be useful for application migration and versioning purposes.

Query Attributes

Query attributes (WL#12542) This work by Georgi Kodinov introduces support for the clients to supply query attributes to the server. This allows applications to set per query metadata for their queries, for example the URL of the page that produced the query. This work is based on contributions from Facebook (Bug#92532 and Bug#90420).


InnoDB: Encrypt DBLWR files  (WL#13775) This work by Annamalai Gurusami ensures that the pages in double write (DBLWR) files belonging to encrypted tablespaces are also encrypted. Likewise, the pages in DBLWR files that belong to unencrypted tablespaces remain unencrypted. There is no separate encryption key for the double write files. The pages are encrypted making use of the respective tablespace encryption keys. The same encrypted page that will be written to the data file of a tablespace is also written to the double write file. Reusing the tablespace keys results in the optimization where pages are only encrypted once before they are written to the double write buffer and then to the data file.

Deterministic selection of user accounts based on IP (WL#14074) This work by Marek Szymczak implements a more deterministic approach to the matching of the host name for a new incoming connection with host names in existing user accounts .

More granular privilege control of the FLUSH operations (WL#14303) This work by Georgi Kodinov implements separate privilege(s) to allow customers to execute FLUSH OPTIMIZER_COSTSFLUSH STATUS, FLUSH USER_RESOURCES, and FLUSH TABLES statements without the need for the RELOAD privilege.


InnoDB: Faster truncate/drop table space (WL#14100) This work by Marcin Babij will fix the stalls reported by our users when dropping tables  as a consequence of either dropping a large tablespace,  truncating a Temporary Tablespace, or dropping a tablespace that has lots of pages referenced by the Adaptive Hash Index (AIH). After this improvement when  the user either drops or truncates a tablespace, MySQL will now mark it as deleted, then delete its file and report back to user that the operation has finished. MySQL will then lazily free  all pages belonging to the deleted tablespace from the Buffer Pool or reuse them just like free pages.

InnoDB: SET TABLESPACE AUTOEXTEND SIZE  (WL#13895) This work by Rahul Agarkar adds the AUTOEXTEND_SIZE attribute to the CREATE/ALTER TABLESPACE clause for general teablespaces and to the CREATE/ALTER TABLE clause for file_per_table tablespaces. Before this work the tablespace growth size was hardcoded inside InnoDB to 1MB (page_size * number of pages in an extent). After this work the tablespace growth size can be decided by the user. The default of 1MB has not been changed.

TempTable:  Implement an upper bound for MMAP-backed allocations (WL#14125) This work by Jusufadis Bakamovic introduces the temptable_max_mmap variable. The new variable defines the maximum amount of memory the TempTable storage engine is permitted to allocate from memory-mapped files before it starts storing internal temporary table data to InnoDB on-disk internal temporary tables. A temptable_max_mmap=0 setting disables allocation from memory-mapped files, effectively disabling their use, regardless of the temptable_use_mmap setting.


ST_FrechetDistance  (WL#14129) This work by Vissarion Fysikopoulos adds the function ST_FrechetDistance(geometry1, geometry2 [, length_unit]) that returns the discrete Fréchet distance between two geometries, reflecting how similar the geometries are. If a length unit is specified, the result is converted to that unit.

ST_HausdorffDistance  (WL#14128) This work by Vissarion Fysikopoulos adds the function ST_HausdorffDistance(geometry1, geometry2 [, length_unit]) that returns the discrete Hausdorff distance between two geometries, reflecting how similar the geometries are. If a length unit is specified, the result is converted to that unit.


Replace old terms in CHANGE MASTER TO  (WL#14189) This work by Luis Soares implements aliases for CHANGE MASTER and its parameters as well as for START REPLICA/SLAVE parameters. The alias introduced for CHANGE MASTER is CHANGE REPLICATION SOURCE. Parameters with MASTER in their name get an alias that replaces MASTER with SOURCE. If the old terminology is used, deprecation warnings are emitted.

GTIDs: Replicate from GTID disabled master to GTID enabled slave directly  (WL#12819) This work by Neha Kumari implements a new option ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = [OFF, LOCAL, <UUID>] for the CHANGE REPLICATION SOURCE TO statement which allows data to flow directly between a non-GTID replication setup and a GTID replication setup. The motivation is to enable online migration from of data between cloud providers that do not support GTIDs and the Oracle Cloud Infrastrcuture (OCI), as well as from some on-premise setups to OCI setups.

Include MDL and ACL locks in MTS deadlock detection infra-structure  (WL#13574) This work by Pedro Figueiredo integrates the thread serialization infra-structure needed to deliver a multi-threaded replica that keeps the same commit order as the source, with the MDL and ACL access serialization infra-structures. The motivation is to be able to execute any client statements on a replica while the replica is actively processing a change-stream. Such statements might create deadlocks that must be detected and eventually broken to progress execution.

Group Replication

Automatic connection failover for Async Replication Channels – Step II: Automatic senders list  (WL#14019) This work by Hemant Dangi implements the second step of WL#12649. This part will ensure that the receiver’s sender list is in sync with the Group Replication membership changes.

X Protocol

Connection_alive test in ServiceCommand  (WL#14167) This work by Grzegorz Szwarc implements a mechanism to terminate a long running SQL statement in case the connection has been closed by the client. The purpose is to free up server side resources as soon as the server detects that the connection has been closed by the client. This functionality already exists for the classic protocol.

Notice on shutdown (WL#14166) This work by Grzegorz Szwarc adds a notice on shutdown to the X Protocol. The Server will inform all clients about whether it just closed the connection or shut itself down. The Client can use this information to decide if it makes sense to reconnect and try again.


TLS endpoint for routing connections  (WL#12012) This work by Jan Kneschke implements  a TLS endpoint in the MySQL Router. Having the Router  as a TLS endpoint allows for protocol aware routing and TLS offloading. Protocol aware routing is enabled by the ability to see the unencrypted protocol exchanged between client and server. TLS offloading can be to encrypt the router-server communication while the client-router communication is unencrypted, or to allow unencrypted router-server communication while the client-router is encrypted.

MTR Testsuite

Migrate optimizer tests from main suite to run with default enginne innodb (select WL#11704, join WL#11705,  order WL#11706) This work by  Mohan Kumar converts Optimizer tests from assuming the MyISAM storage engine to assuming the InnoDB storage engine. This work is part of a larger effort to allow the MTR test suite to run on a server that is built without the MyISAM engine.


Optimize hash table in hash join (WL#13459) This work by Steinar H. Gunderson changes the implementation of the hash table used for hash join. The purpose is to enhance performance, use less memory, and improve memory control. This work also fixes Bug#99933.

A reference caching service (WL#12653) This work by Murthy Sidagam extends the internal server service infrastructure with a new service called the reference caching service. This is pure refactoring and has no user impact.

Converting old atomics to C++11 (WL#14235) This work by Elzbieta Babij replaces the old InnoDB code for atomics with standard C++11 atomics. This change doesn’t have any consequences for the end user. It helps us to tighten the  rules and semantics where atomics are used in the code, additionally making the code more standards compliant. Before this we had a mish mash of home-brew and platform specific atomics that made it difficult to reason about some parts of the code.

Deprecation and Removal

Deprecate relay_log_info_repository and master_info_repository  (WL#13958) This work by Parveez Baig adds a deprecation warning when the user sets or reads the value of relay_log_info_repository or master_info_repository variables. In the future, the only option for storing replication configuration and metadata will be in a transactional  system table.

Deprecate FLUSH HOSTS in favor of TRUNCATE performance_schema.host_cache (WL#14329) This work by Georgi Kodinov deprecates the FLUSH HOSTS statement and will be removed in a future MySQL release. Instead, the user should truncate the host_cache table.

Thank you for using MySQL!