There are over 150 new features in MySQL 5.7.
The MySQL manual is very good, but verbose. This is a list of new features in short bullet form. I have tried very hard to make sure each feature is only mentioned once. So InnoDB native partitioning could be mentioned under either InnoDB or partitioning.
Replication
- Multi source replication [1]
- Online GTID migration path [1 2 3]
- Improved semi-sync performance [1 2]
- Loss-less semi-sync replication [1 2]
- Semi-sync can now wait for a configurable number of slaves [1]
- Intra-schema parallel replication [1]
- Ability to tune group commit viabinlog_group_commit_sync_delay andbinlog_group_commit_sync_no_delay_countoptions. [1 2]
- Non-blocking SHOW SLAVE STATUS [1 2]
- Online CHANGE REPLICATION FILTER [1]
- Online CHANGE MASTER TO without stopping SQL thread [1]
- Multi-threaded slave ordered commits (Sequential Consistency) [1]
- Support SLAVE_TRANSACTION_RETRIES in multi-threaded slave mode [1]
- A WAIT_FOR_EXECUTED_GTID_SET function has been introduced [1 2]
- Optimize GTIDs for Passive Slaves [1 2]
- GTID Replication no longer requires log-slave-updates be enabled
- XA Support when the binary log is turned on [1]
- GTIDs in the OK packet [1]
- Better synchronization between dump and user threads when racing for the binlog [1]
- Improved memory management of Binlog_sender [1]
- Option to suppress "unsafe for binlog" messages in error log [1]
- Defaults change: binlog_format=ROW
- Defaults change: sync_binlog=1
- Defaults change:binlog_gtid_simple_recovery=1
- Defaults change:binlog_error_action=ABORT_SERVER
- Defaults change: slave_net_timeout=60
InnoDB
- Online buffer pool resize [1]
- Improved crash recovery performance [1]
- Improved read-only transaction scalability [1 2 34]
- Improved read-write transaction scalability [1 23 4]
- Several optimizations for high performance temporary tables [1 2 3 4 5]
- ALTER TABLE RENAME INDEX only requires meta-data change [1]
- Increasing VARCHAR size only requires meta-data change [1]
- ALTER TABLE performance improved [1]
- Multiple page_cleaner threads [1]
- Optimized buffer pool flushing [1]
- New innodb_log_checksum_algorithm option [1]
- Improved NUMA support [1]
- General Tablespace support [1]
- Transparent Page Compression [1]
- innodb_log_write_ahead_size introduced to address potential ‘read-on-write‘ with redo logs [1]
- Fulltext indexes now support pluggable parsers [1]
- Support for ngram and MeCab full-text parser plugins [1 2]
- Fulltext search optimizations [1]
- Buffer pool dump now supportsinnodb_buffer_pool_dump_pct [1]
- The doublewrite buffer is now disabled on filesystems that supports atomic writes (aka Fusion-io support) [1]
- Page fill factor is now configurable [1]
- Support for 32K and 64K pages [1]
- Online undo log truncation [1]
- Update_time meta data is now updated [1]
- TRUNCATE TABLE is now atomic [1]
- Memcached API performance improvements [1]
- Adaptive hash scalability improvements [1]
- InnoDB now implementsinformation_schema.files [1]
- Legacy InnoDB monitor tables have been removed or replaced by global configuration settings
- InnoDB default row format now configurable [1]
- InnoDB now drops tables in a background thread [1]
- InnoDB tmpdir is now configurable [1]
- InnoDB MERGE_THRESHOLD is now configurable [1]
- Defaults change:innodb_file_format=Barracuda
- Defaults change: innodb_large_prefix=1
- Defaults change: innodb_page_cleaners=4
- Defaults change: innodb_purge_threads=4
- Defaults change:innodb_buffer_pool_dump_at_shutdown=1
- Defaults change:innodb_buffer_pool_load_at_startup=1
- Defaults change:innodb_buffer_pool_dump_pct=25
- Defaults change: innodb_strict_mode=1
- Defaults change:innodb_checksum_algorithm=crc32
- Defaults change:innodb_default_row_format=DYNAMIC
Optimizer
- Improved optimizer cost model, leading to more consistently better query plans [1 2 3 4]
- Optimizer cost constants are now configurable on a global or per engine basis [1 2]
- Query parser has been refactored and improved [1]
- EXPLAIN FOR CONNECTION [1]
- UNION ALL does not use a temporary table [1 23 4]
- Filesort is now optimized to pack values [1]
- Subqueries in FROM clause can now be handled same as a view (derived_merge) [1]
- Queries using row value constructors are now optimized [1 2]
- Optimizer now supports a new condition filtering optimization [1 2]
- EXPLAIN FORMAT=JSON now shows cost information [1]
- Support for STORED and VIRTUAL generated columns (aka functional indexes) [1]
- Prepared statements refactored internally and performance improved [1 2]
- New query hints using comment-like /*+ */syntax [1]
- Server-side query rewrite framework [1]
- ONLY_FULL_GROUP_BY now more standards compliant [1]
- Support for gb18030 character set [1]
- Improvements to Dynamic Range access [1]
- Memory used by the range optimizer is now configurable [1]
- Defaults change:internal_tmp_disk_storage_engine=INNODB[1]
- Defaults change:eq_range_index_dive_limit=200
- Defaults change:sql_mode=ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION Defaults change:
- Defaults change: EXTENDED and PARTITIONSkeywords for EXPLAIN enabled by default
Security
- Username size increased to 32 characters [1]
- Support for IF [NOT] EXISTS clause inCREATE/DROP USER [1]
- Server option to require secure transport [1]
- Support for multiple AES Encryption modes [12]
- Support for TLSv1.2 (with OpenSSL) and TLSv1.1 (with YaSSL) [1 2]
- Support to LOCK/UNLOCK user accounts [1 2]
- Support for password expiration policy [1 2]
- Password strength enforcement
- test database no longer created on installation
- Anonymous users no longer created on installation
- Random password generated by default on installation
- New ALTER USER command
- SET password=‘‘ now accepts a password instead of hash
- Server now generates SSL keys by default
- Insecure old_password hash removed [1]
- Ability to create utility users for stored programs that can not login [1]
- mysql.user.password field renamed asauthentication_string to better describe its current usage.
- Support for tablespace encryption [1]
Performance Schema
- Scalable memory allocation [1]
- Overhead has been reduced in client connect/disconnect phases
- Memory footprint has been reduced
- pfs_lock implementation has been improved
- Table IO statistics are now batched for improved performance
- Memory usage instrumentation
- Stored programs instrumentation
- Replication slave instrumentation
- Metadata Locking (MDL) Instrumentation
- Transaction instrumentation
- Prepared Statement instrumentation
- Stage Progress instrumentation
- SX-lock and rw_lock instrumentation
- Thread status and variables
- Defaults change: performance-schema-consumer-events_statements_history=ON
GIS
- InnoDB supports indexing of spatial datatypes [1]
- Consistent naming scheme for GIS functions [1]
- GIS has been refactored internally and is now based on Boost Geometry [1]
- Geohash functions [1 2]
- GeoJSON functions [1 2]
- Functions: ST_Distance_Sphere, ST_MakeEnvelope, ST_IsValid, ST_Validate, ST_Simplify, ST_Buffer and ST_IsSimple [1 2]
Triggers
Partitioning
- Index condition pushdown optimization now supported
- HANDLER command is now supported
- WITHOUT VALIDATION option now supported forALTER TABLE ... EXCHANGE PARTITION
- Support for Transportable Tablespaces
- Partitioning is now storage-engine native for InnoDB
SYS (new)
JSON (new)
- Native JSON Data Type [1]
- JSON Comparator
- Short-hand JSON_EXTRACT operator (field->"json_path") [1]
- New Document Store (5.7.12)
- Functions: JSON_ARRAY, JSON_MERGE, JSON_OBJECT for creating JSON values [1]
- Functions: JSON_CONTAINS, JSON_CONTAINS_PATH, JSON_EXTRACT, JSON_KEYS, JSON_SEARCH for searching JSON values [1]
- Functions: JSON_ARRAY_APPEND, JSON_ARRAY_INSERT, JSON_INSERT, JSON_QUOTE, JSON_REMOVE, JSON_REPLACE, JSON_UNSET, JSON_UNQUOTE to modify JSON values [1]
- Functions: JSON_DEPTH, JSON_LENGTH, JSON_TYPE, JSON_VALID to return JSON value attributes [1]
Client Programs
- New mysqlpump utility [1]
- The mysql client now supports Ctrl+C to clear statement buffer
- rewrite-db option added to mysqlbinlog [1 2]
- New mysql_ssl_rsa_setup utility to help set up SSL [1]
- SSL support added to mysqlbinlog
- Idempotent mode added to mysqlbinlog
- Client --ssl changed to now force SSL
- Enhancements to the innochecksum utility
- Removal of several outdated/unsafe command line utilities [1]
- Many Perl command line clients converted to C++
- Client Side Protocol Tracing
- Client API method to reset connection
- New MySQL Shell (mysqlsh) (separate download)
libmysqlclient
- Restricted export functions to documented MySQL C API
- Added pkg-config support
- Removed _r symlinks
- Changed so version to 20 (from 18)
Building
- Compiler switched to GCC on Solaris
- MySQL now compiles with Bison 3 (* change also backported)
- CMake now used to compile on all platforms
- Unneeded CMake checks have been removed (and unused macros removed from source files)
- Build support for gcc, clang and MS Studio
Misc
- Server new connection throughput improved considerably [1]
- mysql_install_db replaced by mysqld --initialize [1]
- Native support for syslog [1 2]
- Native support for systemd
- disabled_storage_engines option allows a block list of engines
- SET GLOBAL offline_mode=1 [1 2]
- super_read_only option [1]
- Detect transaction boundaries
- Server version token and check [1
- SELECT GET_LOCK() can now acquire multiple locks [1 2]
- Configurable maximum statement execution time on a global and per query basis [1 2]
- Better handling of connection id rollover
- DTrace support [1]
- More consistent IGNORE clause and STRICTmode
- A number of tables in the mysql schema have moved from MyISAM to InnoDB
- Server error log format improved to be consistent
- Extract query digest moved from performance_schema into the server directly
- Improved scalability of meta data locking
- Increased control over error log verbosity
- Stacked Diagnostic Areas
- The server now supports a "SHUTDOWN" command
- Removed support for custom atomics implementation
- Removed "unique option prefix support" from server and utilities, which allowed options to be configured using multiple names.
- Removed unsafe ALTER IGNORE TABLE functionality. Syntax remains for compatibility
- Removed unsafe INSERT DELAYED functionality. Syntax remains for compatibility
- Removed of outdated sql-bench scripts in distributions
- Removal of ambiguous YEAR(2) datatype
- Defaults change: log_warnings=2
- Defaults change:table_open_cache_instances=16