There are over 250 new features in MySQL 8.0. The MySQL Manual is very good, but verbose. This is a list of new features in short bullet form. We have tried very hard to make sure each feature is only mentioned once. Note the similar list for MySQL 5.7.
SQL DML
- Non-recursive CTEs [1]
- Recursive CTEs [1]
- Window functions [1]
- ORDER BY and DISTINCT with ROLLUP [1]
- LATERAL derived tables [1]
- Outer table references in derived tables [1]
SQL DDL
- Instant ADD COLUMN [1]
- Instant RENAME COLUMN [1]
- Instant RENAME TABLESPACE [1]
- RESTART statement [1]
- SET PERSIST statement [1]
- RENAME TABLES under LOCK TABLES [1]
- Option to disallow tables without primary keys [1]
- Character set conversion as an inplace operation [1 2]
- CREATE TABLESPACE without DATAFILE clause [1]
- CREATE RESOURCE GROUP [1 2]
- ALTER RESOURCE GROUP [1 2]
- DROP RESOURCE GROUP [1 2]
- Expressions as DEFAULT values [1]
- CHECK constraint [1]
Indexes
Functions
- New function REGEXP_INSTR [1]
- New function REGEXP_LIKE [1]
- New function REGEXP_REPLACE [1]
- New function REGEXP_SUBSTR [1]
- New function UUID_TO_BIN [1]
- New function BIN_TO_UUID [1]
- New function IS_UUID [1]
- New function GROUPING [1 2]
- New function STATEMENT_DIGEST [1]
- New function STATEMENT_DIGEST_TEXT [1]
- Bit operations allowed on BINARY, VARBINARY, BLOB, TINYBLOB, MEDIUMBLOB and LONGBLOB [1]
JSON
- New function JSON_PRETTY [1]
- New function JSON_STORAGE_SIZE [1]
- New function JSON_STORAGE_FREE [1]
- New function JSON_MERGE_PATCH [1]
- New aggregation and window function JSON_ARRAYAGG [1]
- New aggregation and window function JSON_OBJECTAGG [1]
- New table function JSON_TABLE [1]
- Faster sorting of JSON values [1]
- Ranges in JSON patch expressions [1 2]
- In-place updates of JSON values [1 2]
- JSON Schema validation [1]
- JSON array indexes [1 2]
GIS
- Spatial reference systems (SRSs) [1 2 3 4]
- CREATE SPATIAL REFERENCE SYSTEM statement [1 2]
- DROP SPATIAL REFERENCE SYSTEM statement [1]
- SRID type modifier [1 2]
- Geographic R-trees [1]
- New setter function ST_SRID(geometry, new_srid) [1]
- New setter function ST_X(geometry, new_x) [1]
- New setter function ST_Y(geometry, new_y) [1]
- New function ST_SwapXY [1]
- New function ST_Latitude [1]
- New function ST_Longitude [1]
- New function ST_Transform [1]
- Geography support in ST_Distance, ST_Contains, ST_Crosses, ST_Disjoint, ST_Equals, ST_Intersects, ST_Overlaps, ST_Touches, ST_Within, MBRContains, MBRCoveredBy, MBRCovers, MBRDisjoint, MBREquals, MBRIntersects, MBROverlaps, MBRTouches, MBRWithin, ST_IsSimple, ST_IsValid, ST_Length, ST_Validate, ST_Area [1 2 3 4 5 6 7 8]
- ST_Distance_Sphere for geographic geometries [1]
- GEOMCOLLECTION as synonym to GEOMETRYCOLLECTION [1 2 3]
- Optional SPATIAL keyword in R-tree index clauses [1]
- Ability to specify length unit in ST_Distance() [1]
- Ability to specify length unit in ST_Length() [1]
Character sets and collations
- UTF-8 (utf8mb4) as default character set [1 2 3 4 5 6 7 8 9 10 11]
- General Unicode 9.0 collations covering German (dictionary order), Austrian German (dictionary order), English, French (including accent insensitive Canadian French), Irish, Indonesian, Italian, Luxembourgian, Malay, Dutch (including Flemish), Portuguese (including Brazilian Portuguese), Swahili, and Zulu [1 2]
- Language specific Unicode 9.0 collations for Czech, Danish (also valid for Norwegian), German (phonebook order), Esperanto, Spanish, Spanish (traditional), Estonian, Croatian (also valid for Serbian with latin characters, and Bosnian), Hungarian, Icelandic, Lithuanian, Latvian, Polish, Romanian, Slovak, Slovenian, Swedish, Turkish, Vietnamese, Japanese (including kana sensitive collation), Chinese, and Russian (also valid for Bulgarian)
- Unicode support in RLIKE and REGEXP [1]
- Unicode 9.0 code point order collation (utf8mb4_0900_bin) [1]
Information Schema
- Information Schema implemented as views over data dictionary tables [1]
- New Information Schema view VIEW_TABLE_USAGE [1]
- New Information Schema view VIEW_ROUTINE_USAGE [1]
- New Information Schema view KEYWORDS [1]
- New Information Schema view COLUMN_STATISTICS [1]
- New Information Schema view ST_GEOMETRY_COLUMNS [1]
- New Information Schema view ST_SPATIAL_REFERENCE_SYSTEMS [1]
- New Information Schema view ST_UNITS_OF_MEASURE [1]
Performance Schema
- Performance Schema Indexes [1]
- Instrument server errors [1]
- Statements latency histograms [1]
- Instrument data locks [1]
- Pluggable performance schema tables [1]
- Added QUERY_SAMPLE_TEXT [1]
- Added Thread Pool Tables [1] (Enterprise)
SHOW
Optimizer
- Histograms [1 2 3]
- Adaptive scan buffer size [1]
- IO costs separation between memory and disk [1]
- Default values in cost tables [1]
- Sampling interface in storage engine API [1 2 3 4]
- NOWAIT and SKIP LOCKED [1 2]
- Avoid unnecesary index dives with FORCE INDEX [1 2 3]
- Optimizer switch to use invisible indexes [1 2 3]
- Increased default optimizer trace buffer size [1]
- New hint MERGE [1]
- New hint INDEX_MERGE [1]
- New hint NO_INDEX_MERGE [1]
- New hint JOIN_FIXED_ORDER [1]
- New hint JOIN_ORDER [1]
- New hint JOIN_PREFIX [1]
- New hint JOIN_SUFFIX [1]
- New hint SET_VAR [1]
- Consider covering prefix indexes for LIKE [1]
- Transformed statement in EXPLAIN of INSERT/UPDATE/REPLACE/DELETE [1]
InnoDB
- Highly scalable latch free redo log implementation [1 2].
- Redesign of LOB infrastructure for better performance [1 2 3]
- State of the art lock scheduler using Contention Aware Transaction Scheduling (CATS) (Contribution from University of Michigan) [1]
- Infrastructure to do non locking parallel reads (currently used by CHECK TABLE) [1]
- Instant add column and virtual column [1]
- Report pages cached in the buffer pool by indexes via the information schema [1]
- Persistent auto increment [1]
- Manage UNDO tablespaces using SQL syntax [1]
- New in-memory temptable storage engine for use by optimiser [1]
- Support for BLOBs in new temptable engine [1 2]
- Redo log encryption [1]
- Undo log encryption [1]
- General tablespace encryption support [1]
- Dedicated server mode, automatically configures the buffer pool and redo log size [1 2]
- Tablespace version support for better upgrade/downgrade experience [1]
- Self describing tablespaces with Serialized Dictionary Information (SDI) [1]
- Tools to manage the SDI [ 1]
- Atomic DDL [1]
- Remove the buffer pool mutex (Percona contribution) [1]
- Improved purge [1]
- Dynamically enable/disable the deadlock detector [1]
- IO layer is now more scalable and efficient [1]
- Extended locking semantics with skip and no-waits [1 2]
- Use the new error logging infra structure [1]
- System data dictionary is now stored in InnoDB [1]
- New configuration to generate smaller core files [1]
- Deprecate Shared tablespaces in partitioned table [1]
- Reclaim temporary tablespace disk space online [1]
Data Dictionary and Upgrade
- Transactional Data Dictionary [1]
- Store all meta data in InnoDB, no FRMs, TRG etc [1,2]
- Store redundant copy of meta data in SDI [1]
- Atomic and crash safe DDL [1]
- Automatic upgrade of dictionary tables, and enhanced checks [1]
- Automatic upgrade, no need for mysql_upgrade script [1]
Network
- Support multiple addresses for the –bind-address command option [1]
- Add Admin Port [1 2 3 4 5]
- Remove mutex bottlenecks for connect/disconnect performance [1]
Error logging
- Improved error logging in 8.0 [1]
- Defaults change: log_error_verbosity=2 [1]
- Added severity, error code, subsystem to error messages [1]
- Filtering the error log [1]
- Error logging in JSON format [1]
- Force-print specific non-error messages to error log [1]
- Suppress error logs of type warning or note [1]
- New “syseventlog” settings [1]
- Added –log-slow-extra, for richer slow logging [1]
Replication
- Multi-source Replication Per Channel Filters [1]
- Atomic DDL Recovery With The Binary Log [1]
- Write-set Based Transaction Dependency Tracking [1 2 ]
- Reduced Contention Between Receiver and Applier Threads [1]
- Binary Log Encryption at Rest [1]
- GTID Support for Temporary Tables Inside Transactions [1]
- Partial JSON Update Replication [1]
- Extended table metadata in the binary log [1 2]
- RESET MASTER TO ‘x’ [1]
- Settable GTID_PURGED When GTID_EXECUTED is Not Empty [1]
- Sub-second Binary Logs Expiration Settings [1]
- Non-Blocking Replication Monitoring even when Disk is Full [1]
- Transaction Byte Length Metadata in Binary log [1]
- Server Versions for each Transaction in the Binary Log [1, 2, 3]
- Support for START SLAVE UNTIL for Multi-Threaded Applier [1]
- Delayed Replication in Microseconds [1]
- binlog-row-event-max-size system variable [1]
- PFS: Applier Lag and Queues Monitoring [1 2 3]
- PFS: Read Consistent Log Positions for Backups [1]
- PFS: Row-based Replication Applier Thread Progress [1]
- PFS: Counters for Replication Applier Retries [1]
- Rotating binary log master key online [1]
Group Replication
- Transaction Savepoint Support [1]
- Disallow Writes to Isolated Members in Group Replication [1 2 3]
- Group-wide Certification and Applier Stats Monitoring [1 2]
- Options to Fine-tune the Flow-Control [1 2 3 4 5 6 7 8]
- Support for Hostnames in the Whitelist [1]
- Shutdown Server When Server Drops Out of the Group [1]
- Online and User-Triggered Primary Switchover/Election [1 2]
- Online and User-Triggered Single-to-Multi Primary Switchover [1 2]
- Configurable Messaging Pipelining [1 2]
- Relaxed Member Eviction [1]
- Consistent Reads [1]
- Consistent Reads on Primary Fail-over [1]
- IPv6 Support [1 2]
- Tracing for Message Passing [1]
- Configure primary failover candidates priority [1 2]
- PFS: Instrumented Threads [1 2]
- PFS: Instrumented Mutexes and Condvars [1 2]
- PFS: Instrumented Memory Used for the Message Cache [1 2]
- Better support for large transactions in GR [1]
- Ability to configure the GR communication protocol [1]
- Changed EXIT STATE ACTION default to READ_ONLY [1]
- Auto-rejoin of Group Members [1]
- Option to display passwords as hexadecimal strings [1]
Security – Authentication
- Caching sha2 authentication plugin [1]
- Introduce delays in authentication based on failed logins [1]
- Password rotation policy enforcement [1]
- Old password required for SET PASSWORD for some users [1]
- Support 2 active passwords per user account [1]
- Extra authentication to allow SET PERSIST for security sensitive variables [1]
- SASL authentication for LDAP on windows [1] (Enterprise)
- Add support for users with multiple LDAP groups [1] (Enterprise)
Security – Authorization
- SQL Roles [1]
- Break the SUPER privilege into dynamic privileges [1]
- Granting default roles when new users are created [1 2 3]
- Additional safety to –skip-grant-tables [1]
- Secure session variable setting (MYSQL_SESSION_ADMIN privilege) [1]
- Checking authorization for rolling back XA-transactions [1]
- Added Partial Revokes [1]
- Added the SYSTEM_USER Dynamic Privilege [1]
Security – Auditing
- Audit log: abort queries on rule based conditions [1] (Enterprise)
- Audit log: JSON format, compression and encryption [1] (Enterprise)
- Audit log: SQL function to inject data into the Audit log [1] (Enterprise)
- Audit log: Multiple encryption passwords [1] (Enterprise)
Security – Other
- Make ACL statements atomic [1]
- Server as a keyring backend migration tool [1]
- Migrate away from yaSSL [1]
- Support for FIPs enabled OpenSSL library [1 2]
- Data masking functions [1] (Enterprise)
- Ensure foreign key error does not reveal information about parent table [1]
- Added support for TLS 1.3 [1]
- Allow switching SSL options for a running server [1]
Router
- Persist last known metadata-server addresses [1]
- Reset max_connect_errors on successful connections [1]
- Build Router as part of the MySQL Server source-tree [1]
- Added mysqlrouter_plugin_info tool [1]
- Reduced metadata-cache TTL from 300s to 500ms [1]
- Added routing strategies [1]
- Added bootstrap option for –report-host [1]
- Added bootstrap option for –account-host [1]
- Disconnect clients to server-nodes that changed from PRIMARY to SECONDARY [1]
- Log-rotation via SIGHUP [1]
- HTTP server plugin [1]
- Flexible support for single/multi-PRIMARY Group Replication [1]
Shell
- MySQL 8.0 support for InnoDB clusters [1]
- Remote MySQL server configuration and re-configuration for InnoDB clusters [1]
- Extended cluster status display, including replication lag times [1]
- Manual primary switch-over and topology re-configuration in InnoDB clusters [1]
- Advanced cluster customizations for more use-cases and environments
- MySQL server upgrade checker [1, 2]
- Import JSON and JSON serialized BSON data [1, 2]
- Updated X DevAPI support
- Secure password management [1, 2]
- Display column metadata for query results [1]
- Direct command line execution of shell APIs [1]
- Improved built-in help [1]
- Screen paging [1]
- Auto-completion [1]
- Persisted command history by Shell mode. [1]
- Custom prompts [1]
- The \sql shell command also works in JavaScript or Python mode [1]
- Support for server monitoring through user defined reports and the \show and \watch shell commands [1]
- Parallel Data Import Utility [1]
- Support for Shell Extensions [1]
- Support for Shell Plugins [1 2]
- Support for different result formats: Table, tabbed, vertical, json/raw, json/pretty [1]
Misc
- Added mysqld_safe-functionality to server [1 2 3]
- Defaults change: explicit_defaults_for_timestamp= ON [1]
- Defaults change: max_error_count=1024 [1]
- Renamed tx_read_only variable to transaction_read_only [1]
- Renamed tx_isolation variable to transaction_isolation [1]
- Defaults change: max_allowed_packet=67108864 [1]
- Defaults change: event_scheduler=ON [1]
- Defaults change: back_log=-1 (auto-sized) [1]
- Defaults change: table_open_cache=4000 [1 2]
- New Backup Lock [1]
- Server version stored in InnoDB tablespaces [1]
- Enable MDL Locking for Recovered and Detached Prepared XA Transactions [1]
- Support meta data locking for Foreign Keys [1]
- The –ssl-mode client side option to streamline SSL checking [1]
- The service registry and the component infrastructure [1]
- CLI interface to read the replication stream [1]
- UDF registration service to allow components to auto-register UDFs [1]
- MySQL server strings component service [1]
- Keyring plugin for AWS KMS 5.7.19 [1]
- LDAP authentication plugin (client and server) 5.7.19 [1]
- Make result set metadata transfer optional [1]
- Status variables service for components [1]
- performance schema instrumentation via a component service [1]
- System variables service for components [1]
- Password validation plugin implemented as a component [1]
- Component service to deliver signals to the host application
- Allow plugins to use prepared statements [1]
- INSERT/UPDATE/DELETE in query rewrite plugin [1]
- Dynamic allocation of sort buffer [1]
- Variable length sort keys for NO PAD collations [1]
- Faster SELECT COUNT (*) without grouping [1]
- Source code improvements [1]
- Small tarball download option [1]
- CAST to FLOAT and DOUBLE [1]
- OS user as a connection attribute [1]
- gtid_purged as a comment in mysqldump files [1]
- Early plugin load flag [1]
- Current thread component service [1]
- Mutex lock order tool [1]
Thank you for using MySQL !