This section summarizes what has been added to, deprecated in, and removed from MySQL 5.7. A companion section lists MySQL server options and variables that have been added, deprecated, or removed in MySQL 5.7; see *note added-deprecated-removed::.
*note mysql-nutshell-additions::
*note mysql-nutshell-deprecations::
*note mysql-nutshell-removals::
Features Added in MySQL 5.7
The following features have been added to MySQL 5.7:
Security improvements
These security enhancements were added:
* In MySQL 8.0, 'caching_sha2_password' is the default
authentication plugin. To enable MySQL 5.7 clients to connect
to 8.0 servers using accounts that authenticate using
'caching_sha2_password', the MySQL 5.7 client library and
client programs support the 'caching_sha2_password'
client-side authentication plugin as of MySQL 5.7.23. This
improves compatibility of MySQL 5.7 with MySQL 8.0 and higher
servers. See *note caching-sha2-pluggable-authentication::.
* The server now requires account rows in the 'mysql.user'
system table to have a nonempty 'plugin' column value and
disables accounts with an empty value. For server upgrade
instructions, see *note upgrading-from-previous-series::.
DBAs are advised to also convert accounts that use the
'mysql_old_password' authentication plugin to use
'mysql_native_password' instead, because support for
'mysql_old_password' has been removed. For account upgrade
instructions, see *note account-upgrades::.
* MySQL now enables database administrators to establish a
policy for automatic password expiration: Any user who
connects to the server using an account for which the password
is past its permitted lifetime must change the password. For
more information, see *note password-management::.
* Administrators can lock and unlock accounts for better control
over who can log in. For more information, see *note
account-locking::.
* To make it easier to support secure connections, MySQL servers
compiled using OpenSSL can automatically generate missing SSL
and RSA certificate and key files at startup. See *note
creating-ssl-rsa-files-using-mysql::.
All servers, if not configured for SSL explicitly, attempt to
enable SSL automatically at startup if they find the requisite
SSL files in the data directory. See *note
using-encrypted-connections::.
In addition, MySQL distributions include a *note
'mysql_ssl_rsa_setup': mysql-ssl-rsa-setup. utility that can
be invoked manually to create SSL and RSA key and certificate
files. For more information, see *note mysql-ssl-rsa-setup::.
* MySQL deployments installed using *note 'mysqld --initialize':
mysqld. are secure by default. The following changes have
been implemented as the default deployment characteristics:
* The installation process creates only a single 'root'
account, ''root'@'localhost'', automatically generates a
random password for this account, and marks the password
expired. The MySQL administrator must connect as 'root'
using the random password and assign a new password.
(The server writes the random password to the error log.)
* Installation creates no anonymous-user accounts.
* Installation creates no 'test' database.
For more information, see *note
data-directory-initialization::.
* MySQL Enterprise Edition now provides data masking and
de-identification capabilities. Data masking hides sensitive
information by replacing real values with substitutes. MySQL
Enterprise Data Masking and De-Identification functions enable
masking existing data using several methods such as
obfuscation (removing identifying characteristics), generation
of formatted random data, and data replacement or
substitution. For more information, see *note data-masking::.
* MySQL now sets the access control granted to clients on the
named pipe to the minimum necessary for successful
communication on Windows. Newer MySQL client software can
open named pipe connections without any additional
configuration. If older client software cannot be upgraded
immediately, the new 'named_pipe_full_access_group' system
variable can be used to give a Windows group the necessary
permissions to open a named pipe connection. Membership in
the full-access group should be restricted and temporary.
SQL mode changes
Strict SQL mode for transactional storage engines ('STRICT_TRANS_TABLES') is now enabled by default.
Implementation for the 'ONLY_FULL_GROUP_BY' SQL mode has been made more sophisticated, to no longer reject deterministic queries that previously were rejected. In consequence, this mode is now enabled by default, to prohibit only nondeterministic queries containing expressions not guaranteed to be uniquely determined within a group.
The 'ERROR_FOR_DIVISION_BY_ZERO', 'NO_ZERO_DATE', and 'NO_ZERO_IN_DATE' SQL modes are now deprecated but enabled by default. The long term plan is to have them included in strict SQL mode and to remove them as explicit modes in a future MySQL release. See *note sql-mode-changes::.
The changes to the default SQL mode result in a default 'sql_mode' system variable value with these modes enabled: 'ONLY_FULL_GROUP_BY', 'STRICT_TRANS_TABLES', 'NO_ZERO_IN_DATE', 'NO_ZERO_DATE', 'ERROR_FOR_DIVISION_BY_ZERO', 'NO_AUTO_CREATE_USER', and 'NO_ENGINE_SUBSTITUTION'.
Online ALTER TABLE
'ALTER TABLE' now supports a 'RENAME INDEX' clause that renames an index. The change is made in place without a table-copy operation. It works for all storage engines. See *note alter-table::.
ngram and MeCab full-text parser plugins
MySQL provides a built-in full-text ngram parser plugin that supports Chinese, Japanese, and Korean (CJK), and an installable MeCab full-text parser plugin for Japanese.
For more information, see note fulltext-search-ngram::, and note fulltext-search-mecab::.
InnoDB enhancements
These 'InnoDB' enhancements were added:
* *note 'VARCHAR': char. column size can be increased using an
in-place *note 'ALTER TABLE': alter-table, as in this example:
ALTER TABLE t1 ALGORITHM=INPLACE, CHANGE COLUMN c1 c1 VARCHAR(255);
This is true as long as the number of length bytes required by
a *note 'VARCHAR': char. column remains the same. For *note
'VARCHAR': char. columns of 0 to 255 bytes in size, one length
byte is required to encode the value. For *note 'VARCHAR':
char. columns of 256 bytes in size or more, two length bytes
are required. As a result, in-place *note 'ALTER TABLE':
alter-table. only supports increasing *note 'VARCHAR': char.
column size from 0 to 255 bytes, or from 256 bytes to a
greater size. In-place *note 'ALTER TABLE': alter-table. does
not support increasing the size of a *note 'VARCHAR': char.
column from less than 256 bytes to a size equal to or greater
than 256 bytes. In this case, the number of required length
bytes changes from 1 to 2, which is only supported by a table
copy ('ALGORITHM=COPY').
Decreasing *note 'VARCHAR': char. size using in-place *note
'ALTER TABLE': alter-table. is not supported. Decreasing
*note 'VARCHAR': char. size requires a table copy
('ALGORITHM=COPY').
For more information, see *note
innodb-online-ddl-operations::.
* DDL performance for 'InnoDB' temporary tables is improved
through optimization of *note 'CREATE TABLE': create-table,
*note 'DROP TABLE': drop-table, *note 'TRUNCATE TABLE':
truncate-table, and *note 'ALTER TABLE': alter-table.
statements.
* 'InnoDB' temporary table metadata is no longer stored to
'InnoDB' system tables. Instead, a new table,
'INNODB_TEMP_TABLE_INFO', provides users with a snapshot of
active temporary tables. The table contains metadata and
reports on all user and system-created temporary tables that
are active within a given 'InnoDB' instance. The table is
created when the first 'SELECT' statement is run against it.
* 'InnoDB' now supports MySQL-supported spatial data types.
Prior to this release, 'InnoDB' would store spatial data as
binary *note 'BLOB': blob. data. 'BLOB' remains the
underlying data type but spatial data types are now mapped to
a new 'InnoDB' internal data type, 'DATA_GEOMETRY'.
* There is now a separate tablespace for all non-compressed
'InnoDB' temporary tables. The new tablespace is always
recreated on server startup and is located in 'DATADIR' by
default. A newly added configuration file option,
'innodb_temp_data_file_path', allows for a user-defined
temporary data file path.
* *note 'innochecksum': innochecksum. functionality is enhanced
with several new options and extended capabilities. See *note
innochecksum::.
* A new type of non-redo undo log for both normal and compressed
temporary tables and related objects now resides in the
temporary tablespace. For more information, see *note
innodb-undo-logs::.
* 'InnoDB' buffer pool dump and load operations are enhanced. A
new system variable, 'innodb_buffer_pool_dump_pct', allows you
to specify the percentage of most recently used pages in each
buffer pool to read out and dump. When there is other I/O
activity being performed by 'InnoDB' background tasks,
'InnoDB' attempts to limit the number of buffer pool load
operations per second using the 'innodb_io_capacity' setting.
* Support is added to 'InnoDB' for full-text parser plugins.
For information about full-text parser plugins, see Full-Text
Parser Plugins
(https://dev.mysql.com/doc/extending-mysql/5.7/en/plugin-types.html#full-text-plugin-type)
and Writing Full-Text Parser Plugins
(https://dev.mysql.com/doc/extending-mysql/5.7/en/writing-full-text-plugins.html).
* 'InnoDB' supports multiple page cleaner threads for flushing
dirty pages from buffer pool instances. A new system
variable, 'innodb_page_cleaners', is used to specify the
number of page cleaner threads. The default value of '1'
maintains the previous configuration in which there is a
single page cleaner thread. This enhancement builds on work
completed in MySQL 5.6, which introduced a single page cleaner
thread to offload buffer pool flushing work from the 'InnoDB'
master thread.
* *note Online DDL: innodb-online-ddl. support is extended to
the following operations for regular and partitioned 'InnoDB'
tables:
* *note 'OPTIMIZE TABLE': optimize-table.
* *note 'ALTER TABLE ... FORCE': alter-table.
* *note 'ALTER TABLE ... ENGINE=INNODB': alter-table. (when
run on an 'InnoDB' table)
*note Online DDL: innodb-online-ddl. support reduces
table rebuild time and permits concurrent DML. See *note
innodb-online-ddl::.
* The Fusion-io Non-Volatile Memory (NVM) file system on Linux
provides atomic write capability, which makes the 'InnoDB'
doublewrite buffer redundant. The 'InnoDB' doublewrite buffer
is automatically disabled for system tablespace files (ibdata
files) located on Fusion-io devices that support atomic
writes.
* 'InnoDB' supports the Transportable Tablespace feature for
partitioned 'InnoDB' tables and individual 'InnoDB' table
partitions. This enhancement eases backup procedures for
partitioned tables and enables copying of partitioned tables
and individual table partitions between MySQL instances. For
more information, see *note innodb-table-import::.
* The 'innodb_buffer_pool_size' parameter is dynamic, allowing
you to resize the buffer pool without restarting the server.
The resizing operation, which involves moving pages to a new
location in memory, is performed in chunks. Chunk size is
configurable using the new 'innodb_buffer_pool_chunk_size'
configuration option. You can monitor resizing progress using
the new 'Innodb_buffer_pool_resize_status' status variable.
For more information, see *note
innodb-buffer-pool-online-resize::.
* Multithreaded page cleaner support ('innodb_page_cleaners') is
extended to shutdown and recovery phases.
* 'InnoDB' supports indexing of spatial data types using
'SPATIAL' indexes, including use of *note 'ALTER TABLE ...
ALGORITHM=INPLACE': alter-table. for online operations ('ADD
SPATIAL INDEX').
* 'InnoDB' performs a bulk load when creating or rebuilding
indexes. This method of index creation is known as a 'sorted
index build'. This enhancement, which improves the efficiency
of index creation, also applies to full-text indexes. A new
global configuration option, 'innodb_fill_factor', defines the
percentage of space on each page that is filled with data
during a sorted index build, with the remaining space reserved
for future index growth. For more information, see *note
sorted-index-builds::.
* A new log record type ('MLOG_FILE_NAME') is used to identify
tablespaces that have been modified since the last checkpoint.
This enhancement simplifies tablespace discovery during crash
recovery and eliminates scans on the file system prior to redo
log application. For more information about the benefits of
this enhancement, see *note
innodb-recovery-tablespace-discovery::.
This enhancement changes the redo log format, requiring that
MySQL be shut down cleanly before upgrading to or downgrading
from MySQL 5.7.5.
* You can truncate undo logs that reside in undo tablespaces.
This feature is enabled using the 'innodb_undo_log_truncate'
configuration option. For more information, see *note
truncate-undo-tablespace::.
* 'InnoDB' supports native partitioning. Previously, 'InnoDB'
relied on the 'ha_partition' handler, which creates a handler
object for each partition. With native partitioning, a
partitioned 'InnoDB' table uses a single partition-aware
handler object. This enhancement reduces the amount of memory
required for partitioned 'InnoDB' tables.
As of MySQL 5.7.9, *note 'mysql_upgrade': mysql-upgrade. looks
for and attempts to upgrade partitioned 'InnoDB' tables that
were created using the 'ha_partition' handler. Also in MySQL
5.7.9 and later, you can upgrade such tables by name in the
*note 'mysql': mysql. client using *note 'ALTER TABLE ...
UPGRADE PARTITIONING': alter-table.
* 'InnoDB' supports the creation of general tablespaces using
*note 'CREATE TABLESPACE': create-tablespace. syntax.
CREATE TABLESPACE `TABLESPACE_NAME`
ADD DATAFILE 'FILE_NAME.ibd'
[FILE_BLOCK_SIZE = n]
General tablespaces can be created outside of the MySQL data
directory, are capable of holding multiple tables, and support
tables of all row formats.
Tables are added to a general tablespace using *note 'CREATE
TABLE TBL_NAME ... TABLESPACE [=] TABLESPACE_NAME':
create-table. or *note 'ALTER TABLE TBL_NAME TABLESPACE [=]
TABLESPACE_NAME': alter-table. syntax.
For more information, see *note general-tablespaces::.
* 'DYNAMIC' replaces 'COMPACT' as the implicit default row
format for 'InnoDB' tables. A new configuration option,
'innodb_default_row_format', specifies the default 'InnoDB'
row format. For more information, see *note
innodb-row-format-defining::.
* As of MySQL 5.7.11, 'InnoDB' supports data-at-rest encryption
for file-per-table tablespaces. Encryption is enabled by
specifying the 'ENCRYPTION' option when creating or altering
an 'InnoDB' table. This feature relies on a 'keyring' plugin
for encryption key management. For more information, see
*note keyring::, and *note innodb-data-encryption::.
* As of MySQL 5.7.24, the zlib library (http://www.zlib.net/)
version bundled with MySQL was raised from version 1.2.3 to
version 1.2.11. MySQL implements compression with the help of
the zlib library.
If you use 'InnoDB' compressed tables, see *note
upgrading-from-previous-series:: for related upgrade
implications.
JSON support
Beginning with MySQL 5.7.8, MySQL supports a native note 'JSON': json. type. JSON values are not stored as strings, instead using an internal binary format that permits quick read access to document elements. JSON documents stored in 'JSON' columns are automatically validated whenever they are inserted or updated, with an invalid document producing an error. JSON documents are normalized on creation, and can be compared using most comparison operators such as '=', '<', '<=', '>', '>=', '<>', '!=', and '<=>'; for information about supported operators as well as precedence and other rules that MySQL follows when comparing 'JSON' values, see note json-comparison::.
MySQL 5.7.8 also introduces a number of functions for working with *note 'JSON': json. values. These functions include those listed here:
* Functions that create 'JSON' values: 'JSON_ARRAY()',
'JSON_MERGE()', and 'JSON_OBJECT()'. See *note
json-creation-functions::.
* Functions that search 'JSON' values: 'JSON_CONTAINS()',
'JSON_CONTAINS_PATH()', 'JSON_EXTRACT()', 'JSON_KEYS()', and
'JSON_SEARCH()'. See *note json-search-functions::.
* Functions that modify 'JSON' values: 'JSON_APPEND()',
'JSON_ARRAY_APPEND()', 'JSON_ARRAY_INSERT()', 'JSON_INSERT()',
'JSON_QUOTE()', 'JSON_REMOVE()', 'JSON_REPLACE()',
'JSON_SET()', and 'JSON_UNQUOTE()'. See *note
json-modification-functions::.
* Functions that provide information about 'JSON' values:
'JSON_DEPTH()', 'JSON_LENGTH()', 'JSON_TYPE()', and
'JSON_VALID()'. See *note json-attribute-functions::.
In MySQL 5.7.9 and later, you can use 'COLUMN->PATH' as shorthand for 'JSON_EXTRACT(COLUMN, PATH)'. This works as an alias for a column wherever a column identifier can occur in an SQL statement, including 'WHERE', 'ORDER BY', and 'GROUP BY' clauses. This includes note 'SELECT': select, note 'UPDATE': update, note 'DELETE': delete, note 'CREATE TABLE': create-table, and other SQL statements. The left hand side must be a *note 'JSON': json. column identifier (and not an alias). The right hand side is a quoted JSON path expression which is evaluated against the JSON document returned as the column value.
MySQL 5.7.22 adds the following JSON functions:
* Two JSON aggregation functions 'JSON_ARRAYAGG()' and
'JSON_OBJECTAGG()'. 'JSON_ARRAYAGG()' takes a column or
expression as its argument, and aggregates the result as a
single *note 'JSON': json. array. The expression can evaluate
to any MySQL data type; this does not have to be a 'JSON'
value. 'JSON_OBJECTAGG()' takes two columns or expressions
which it interprets as a key and a value; it returns the
result as a single 'JSON' object. For more information and
examples, see *note aggregate-functions-and-modifiers::.
* The JSON utility function 'JSON_PRETTY()', which outputs an
existing *note 'JSON': json. value in an easy-to-read format;
each JSON object member or array value is printed on a
separate line, and a child object or array is intended 2
spaces with respect to its parent.
This function also works with a string that can be parsed as a
JSON value.
See also *note json-utility-functions::.
* The JSON utility function 'JSON_STORAGE_SIZE()', which returns
the storage space in bytes used for the binary representation
of a JSON document prior to any partial update (see previous
item).
This function also accepts a valid string representation of a
JSON document. For such a value, 'JSON_STORAGE_SIZE()'
returns the space used by its binary representation following
its conversion to a JSON document. For a variable containing
the string representation of a JSON document,
'JSON_STORAGE_FREE()' returns zero. Either function produces
an error if its (non-null) argument cannot be parsed as a
valid JSON document, and 'NULL' if the argument is 'NULL'.
For more information and examples, see *note
json-utility-functions::.
* A JSON merge function intended to conform to RFC 7396
(https://tools.ietf.org/html/rfc7396). 'JSON_MERGE_PATCH()',
when used on 2 JSON objects, merges them into a single JSON
object that has as members a union of the following sets:
* Each member of the first object for which there is no
member with the same key in the second object.
* Each member of the second object for which there is no
member having the same key in the first object, and whose
value is not the JSON 'null' literal.
* Each member having a key that exists in both objects, and
whose value in the second object is not the JSON 'null'
literal.
As part of this work, the 'JSON_MERGE()' function has been
renamed 'JSON_MERGE_PRESERVE()'. 'JSON_MERGE()' continues to
be recognized as an alias for 'JSON_MERGE_PRESERVE()' in MySQL
5.7, but is now deprecated and is subject to removal in a
future version of MySQL.
For more information and examples, see *note
json-modification-functions::.
See note json-search-functions::, for more information about '->' and 'JSON_EXTRACT()'. For information about JSON path support in MySQL 5.7, see note json-paths::. See also *note json-column-indirect-index::.
System and status variables
System and status variable information is now available in Performance Schema tables, in preference to use of 'INFORMATION_SCHEMA' tables to obtain these variable. This also affects the operation of the note 'SHOW VARIABLES': show-variables. and note 'SHOW STATUS': show-status. statements. The value of the 'show_compatibility_56' system variable affects the output produced from and privileges required for system and status variable statements and tables. For details, see the description of that variable in *note server-system-variables::.
Note:
The default for 'show_compatibility_56' is 'OFF'. Applications that require 5.6 behavior should set this variable to 'ON' until such time as they have been migrated to the new behavior for system variables and status variables. See *note performance-schema-variable-table-migration::
sys schema
MySQL distributions now include the note 'sys': sys-schema. schema, which is a set of objects that help DBAs and developers interpret data collected by the Performance Schema. note 'sys': sys-schema. schema objects can be used for typical tuning and diagnosis use cases. For more information, see *note sys-schema::.
Condition handling
MySQL now supports stacked diagnostics areas. When the diagnostics area stack is pushed, the first (current) diagnostics area becomes the second (stacked) diagnostics area and a new current diagnostics area is created as a copy of it. Within a condition handler, executed statements modify the new current diagnostics area, but note 'GET STACKED DIAGNOSTICS': get-diagnostics. can be used to inspect the stacked diagnostics area to obtain information about the condition that caused the handler to activate, independent of current conditions within the handler itself. (Previously, there was a single diagnostics area. To inspect handler-activating conditions within a handler, it was necessary to check this diagnostics area before executing any statements that could change it.) See note get-diagnostics::, and *note diagnostics-area::.
Optimizer
These optimizer enhancements were added:
* *note 'EXPLAIN': explain. can be used to obtain the execution
plan for an explainable statement executing in a named
connection:
EXPLAIN [OPTIONS] FOR CONNECTION CONNECTION_ID;
For more information, see *note explain-for-connection::.
* It is possible to provide hints to the optimizer within
individual SQL statements, which enables finer control over
statement execution plans than can be achieved using the
'optimizer_switch' system variable. Hints are also permitted
in statements used with *note 'EXPLAIN': explain, enabling you
to see how hints affect execution plans. For more
information, see *note optimizer-hints::.
* prefer_ordering_index flag
By default, MySQL attempts to use an ordered index for any
'ORDER BY' or 'GROUP BY' query that has a 'LIMIT' clause,
whenever the optimizer determines that this would result in
faster execution. Because it is possible in some cases that
choosing a different optimization for such queries actually
performs better, it is possible as of MySQL 5.7.33 to disable
this optimization by setting the 'prefer_ordering_index' flag
to 'off'.
The default value for this flag is 'on'.
For more information and examples, see *note
switchable-optimizations::, and *note limit-optimization::.
Triggers
Previously, a table could have at most one trigger for each combination of trigger event (note 'INSERT': insert, note 'UPDATE': update, note 'DELETE': delete.) and action time ('BEFORE', 'AFTER'). This limitation has been lifted and multiple triggers are permitted. For more information, see note triggers::.
Logging
These logging enhancements were added:
* Previously, on Unix and Unix-like systems, MySQL support for
sending the server error log to 'syslog' was implemented by
having *note 'mysqld_safe': mysqld-safe. capture server error
output and pass it to 'syslog'. The server now includes
native 'syslog' support, which has been extended to include
Windows. For more information about sending server error
output to 'syslog', see *note error-log::.
* The *note 'mysql': mysql. client now has a '--syslog' option
that causes interactive statements to be sent to the system
'syslog' facility. Logging is suppressed for statements that
match the default 'ignore' pattern list
('"*IDENTIFIED*:*PASSWORD*"'), as well as statements that
match any patterns specified using the '--histignore' option.
See *note mysql-logging::.
Generated Columns
MySQL now supports the specification of generated columns in note 'CREATE TABLE': create-table. and note 'ALTER TABLE': alter-table. statements. Values of a generated column are computed from an expression specified at column creation time. Generated columns can be virtual (computed 'on the fly' when rows are read) or stored (computed when rows are inserted or updated). For more information, see *note create-table-generated-columns::.
mysql client
Previously, 'Control+C' in mysql interrupted the current statement if there was one, or exited mysql if not. Now 'Control+C' interrupts the current statement if there was one, or cancels any partial input line otherwise, but does not exit.
Database name rewriting with mysqlbinlog
Renaming of databases by *note 'mysqlbinlog': mysqlbinlog. when reading from binary logs written using the row-based format is now supported using the '--rewrite-db' option added in MySQL 5.7.1.
This option uses the format '--rewrite-db='DBOLDNAME->DBNEWNAME''. You can implement multiple rewrite rules, by specifying the option multiple times.
HANDLER with partitioned tables
The note 'HANDLER': handler. statement may now be used with user-partitioned tables. Such tables may use any of the available partitioning types (see note partitioning-types::).
Index condition pushdown support for partitioned tables
Queries on partitioned tables using the note 'InnoDB': innodb-storage-engine. or note 'MyISAM': myisam-storage-engine. storage engine may employ the index condition pushdown optimization that was introduced in MySQL 5.6. See *note index-condition-pushdown-optimization::, for more information.
WITHOUT VALIDATION support for ALTER TABLE ... EXCHANGE PARTITION
As of MySQL 5.7.5, note 'ALTER TABLE ... EXCHANGE PARTITION': alter-table. syntax includes an optional '{WITH|WITHOUT} VALIDATION' clause. When 'WITHOUT VALIDATION' is specified, note 'ALTER TABLE ... EXCHANGE PARTITION': alter-table. does not perform row-by-row validation when exchanging a populated table with the partition, permitting database administrators to assume responsibility for ensuring that rows are within the boundaries of the partition definition. 'WITH VALIDATION' is the default behavior and need not be specified explicitly. For more information, see *note partitioning-management-exchange::.
Source dump thread improvements
The source dump thread was refactored to reduce lock contention and improve source throughput. Previous to MySQL 5.7.2, the dump thread took a lock on the binary log whenever reading an event; in MySQL 5.7.2 and later, this lock is held only while reading the position at the end of the last successfully written event. This means both that multiple dump threads are now able to read concurrently from the binary log file, and that dump threads are now able to read while clients are writing to the binary log.
Character set support
MySQL 5.7.4 includes a 'gb18030' character set that supports the China National Standard GB18030 character set. For more information about MySQL character set support, see *note charset::.
Changing the replication source without STOP SLAVE
In MySQL 5.7.4 and later, the strict requirement to execute note 'STOP SLAVE': stop-slave. prior to issuing any note 'CHANGE MASTER TO': change-master-to. statement is removed. Instead of depending on whether the replica is stopped, the behavior of 'CHANGE MASTER TO' now depends on the states of the replica SQL thread and replica I/O threads; which of these threads is stopped or running now determines the options that can or cannot be used with a 'CHANGE MASTER TO' statement at a given point in time. The rules for making this determination are listed here:
* If the SQL thread is stopped, you can execute 'CHANGE MASTER
TO' using any combination of 'RELAY_LOG_FILE',
'RELAY_LOG_POS', and 'MASTER_DELAY' options, even if the
replica I/O thread is running. No other options may be used
with this statement when the I/O thread is running.
* If the I/O thread is stopped, you can execute 'CHANGE MASTER
TO' using any of the options for this statement (in any
allowed combination) _except_ 'RELAY_LOG_FILE',
'RELAY_LOG_POS', or 'MASTER_DELAY', even when the SQL thread
is running. These three options may not be used when the I/O
thread is running.
* Both the SQL thread and the I/O thread must be stopped before
issuing 'CHANGE MASTER TO ... MASTER_AUTO_POSITION = 1'.
You can check the current state of the replica SQL and I/O threads using *note 'SHOW SLAVE STATUS': show-slave-status.
If you are using statement-based replication and temporary tables, it is possible for a 'CHANGE MASTER TO' statement following a 'STOP SLAVE' statement to leave behind temporary tables on the replica. As part of this set of improvements, a warning is now issued whenever 'CHANGE MASTER TO' is issued following 'STOP SLAVE' when statement-based replication is in use and 'Slave_open_temp_tables' remains greater than 0.
For more information, see note change-master-to::, and note replication-solutions-switch::.
Test suite
The MySQL test suite now uses 'InnoDB' as the default storage engine.
Multi-source replication is now possible
MySQL Multi-Source Replication adds the ability to replicate from multiple sources to a replica. MySQL Multi-Source Replication topologies can be used to back up multiple servers to a single server, to merge table shards, and consolidate data from multiple servers to a single server. See *note replication-multi-source::.
As part of MySQL Multi-Source Replication, replication channels have been added. Replication channels enable a replica to open multiple connections to replicate from, with each channel being a connection to a source. See *note replication-channels::.
Group Replication Performance Schema tables
MySQL 5.7 adds a number of new tables to the Performance Schema to provide information about replication groups and channels. These include the following tables:
* *note 'replication_applier_configuration':
performance-schema-replication-applier-configuration-table.
* *note 'replication_applier_status':
performance-schema-replication-applier-status-table.
* *note 'replication_applier_status_by_coordinator':
performance-schema-replication-applier-status-by-coordinator-table.
* *note 'replication_applier_status_by_worker':
performance-schema-replication-applier-status-by-worker-table.
* *note 'replication_connection_configuration':
performance-schema-replication-connection-configuration-table.
* *note 'replication_connection_status':
performance-schema-replication-connection-status-table.
* *note 'replication_group_members':
performance-schema-replication-group-members-table.
* *note 'replication_group_member_stats':
performance-schema-replication-group-member-stats-table.
All of these tables were added in MySQL 5.7.2, except for 'replication_group_members' and 'replication_group_member_stats', which were added in MySQL 5.7.6. For more information, see *note performance-schema-replication-tables::.
Group Replication SQL
The following statements were added in MySQL 5.7.6 for controlling Group Replication:
* *note 'START GROUP_REPLICATION': start-group-replication.
* *note 'STOP GROUP_REPLICATION': stop-group-replication.
For more information, see *note replication-statements-group::.
Features Deprecated in MySQL 5.7
The following features are deprecated in MySQL 5.7 and may be removed in a future series. Where alternatives are shown, applications should be updated to use them.
For applications that use features deprecated in MySQL 5.7 that have been removed in a higher MySQL series, statements may fail when replicated from a MySQL 5.7 source to a higher-series replica, or may have different effects on source and replica. To avoid such problems, applications that use features deprecated in 5.7 should be revised to avoid them and use alternatives when possible.
The 'ERROR_FOR_DIVISION_BY_ZERO', 'NO_ZERO_DATE', and 'NO_ZERO_IN_DATE' SQL modes are now deprecated but enabled by default. The long term plan is to have them included in strict SQL mode and to remove them as explicit modes in a future MySQL release.
The deprecated 'ERROR_FOR_DIVISION_BY_ZERO', 'NO_ZERO_DATE', and 'NO_ZERO_IN_DATE' SQL modes are still recognized so that statements that name them do not produce an error, but are expected to be removed in a future version of MySQL. To make advance preparation for versions of MySQL in which these mode names do not exist, applications should be modified not to refer to them. See *note sql-mode-changes::.
These SQL modes are now deprecated; expect them to be removed in a future version of MySQL: 'DB2', 'MAXDB', 'MSSQL', 'MYSQL323', 'MYSQL40', 'ORACLE', 'POSTGRESQL', 'NO_FIELD_OPTIONS', 'NO_KEY_OPTIONS', 'NO_TABLE_OPTIONS'. These deprecations have two implications:
* Assigning a deprecated mode to the 'sql_mode' system variable
produces a warning.
* With the 'MAXDB' SQL mode enabled, using *note 'CREATE TABLE':
create-table. or *note 'ALTER TABLE': alter-table. to add a
*note 'TIMESTAMP': datetime. column to a table produces a
warning.
Changes to account-management statements make the following features obsolete. They are now deprecated:
* Using *note 'GRANT': grant. to create users. Instead, use
*note 'CREATE USER': create-user. Following this practice
makes the 'NO_AUTO_CREATE_USER' SQL mode immaterial for *note
'GRANT': grant. statements, so it too is deprecated.
* Using *note 'GRANT': grant. to modify account properties other
than privilege assignments. This includes authentication,
SSL, and resource-limit properties. Instead, establish such
properties at account-creation time with *note 'CREATE USER':
create-user. or modify them afterward with *note 'ALTER USER':
alter-user.
* 'IDENTIFIED BY PASSWORD 'AUTH_STRING'' syntax for *note
'CREATE USER': create-user. and *note 'GRANT': grant.
Instead, use 'IDENTIFIED WITH AUTH_PLUGIN AS 'AUTH_STRING''
for *note 'CREATE USER': create-user. and *note 'ALTER USER':
alter-user, where the ''AUTH_STRING'' value is in a format
compatible with the named plugin.
* The 'PASSWORD()' function is deprecated and should be avoided
in any context. Thus, *note 'SET PASSWORD ... =
PASSWORD('AUTH_STRING')': set-password. syntax is also
deprecated. *note 'SET PASSWORD ... = 'AUTH_STRING'':
set-password. syntax is not deprecated; nevertheless, *note
'ALTER USER': alter-user. is now the preferred statement for
assigning passwords.
* The 'old_passwords' system variable. Account authentication
plugins can no longer be left unspecified in the 'mysql.user'
system table, so any statement that assigns a password from a
cleartext string can unambiguously determine the hashing
method to use on the string before storing it in the
'mysql.user' table. This renders 'old_passwords' superflous.
The query cache is deprecated. Deprecation includes these items:
* The 'FLUSH QUERY CACHE' and *note 'RESET QUERY CACHE': reset.
statements.
* The 'SQL_CACHE' and 'SQL_NO_CACHE' *note 'SELECT': select.
modifiers.
* These system variables: 'have_query_cache',
'ndb_cache_check_time', 'query_cache_limit',
'query_cache_min_res_unit', 'query_cache_size',
'query_cache_type', 'query_cache_wlock_invalidate'.
* These status variables: 'Qcache_free_blocks',
'Qcache_free_memory', 'Qcache_hits', 'Qcache_inserts',
'Qcache_lowmem_prunes', 'Qcache_not_cached',
'Qcache_queries_in_cache', 'Qcache_total_blocks'.
Previously, the '--transaction-isolation' and '--transaction-read-only' server startup options corresponded to the 'tx_isolation' and 'tx_read_only' system variables. For better name correspondence between startup option and system variable names, 'transaction_isolation' and 'transaction_read_only' have been created as aliases for 'tx_isolation' and 'tx_read_only'. The 'tx_isolation' and 'tx_read_only' variables are now deprecated;expect them to be removed in MySQL 8.0. Applications should be adjusted to use 'transaction_isolation' and 'transaction_read_only' instead.
The '--skip-innodb' option and its synonyms ('--innodb=OFF', '--disable-innodb', and so forth) are deprecated. These options have no effect as of MySQL 5.7. because 'InnoDB' cannot be disabled.
The client-side '--ssl' and '--ssl-verify-server-cert' options are deprecated. Use '--ssl-mode=REQUIRED' instead of '--ssl=1' or '--enable-ssl'. Use '--ssl-mode=DISABLED' instead of '--ssl=0', '--skip-ssl', or '--disable-ssl'. Use '--ssl-mode=VERIFY_IDENTITY' instead of '--ssl-verify-server-cert' options. (The server-side '--ssl' option is not deprecated.)
For the C API, 'MYSQL_OPT_SSL_ENFORCE' and 'MYSQL_OPT_SSL_VERIFY_SERVER_CERT' options for 'mysql_options()' (https://dev.mysql.com/doc/c-api/5.7/en/mysql-options.html) correspond to the client-side '--ssl' and '--ssl-verify-server-cert' options and are deprecated. Use 'MYSQL_OPT_SSL_MODE' with an option value of 'SSL_MODE_REQUIRED' or 'SSL_MODE_VERIFY_IDENTITY' instead.
The 'log_warnings' system variable and '--log-warnings' server option are deprecated. Use the 'log_error_verbosity' system variable instead.
The '--temp-pool' server option is deprecated.
The 'binlog_max_flush_queue_time' system variable does nothing in MySQL 5.7, and is deprecated as of MySQL 5.7.9.
The 'innodb_support_xa' system variable, which enables 'InnoDB' support for two-phase commit in XA transactions, is deprecated as of MySQL 5.7.10. 'InnoDB' support for two-phase commit in XA transactions is always enabled as of MySQL 5.7.10.
The 'metadata_locks_cache_size' and 'metadata_locks_hash_instances' system variables are deprecated. These do nothing as of MySQL 5.7.4.
The 'sync_frm' system variable is deprecated.
The global 'character_set_database' and 'collation_database' system variables are deprecated; expect them to be removed in a future version of MySQL.
Assigning a value to the session 'character_set_database' and 'collation_database' system variables is deprecated and assignments produce a warning. The session variables are expected to become read only in a future version of MySQL, and assignments to them to produce an error, while remaining possible to read the session variables to determine the database character set and collation for the default database.
The global scope for the 'sql_log_bin' system variable has been deprecated, and this variable can now be set with session scope only. The statement *note 'SET GLOBAL SQL_LOG_BIN': set-variable. now produces an error. It remains possible to read the global value of 'sql_log_bin', but doing so produces a warning. You should act now to remove from your applications any dependencies on reading this value; the global scope 'sql_log_bin' is removed in MySQL 8.0.
With the introduction of the data dictionary in MySQL 8.0, the '--ignore-db-dir' option and 'ignore_db_dirs' system variable became superfluous and were removed in that version. Consequently, they are deprecated in MySQL 5.7.
'GROUP BY' implicitly sorts by default (that is, in the absence of 'ASC' or 'DESC' designators), but relying on implicit 'GROUP BY' sorting in MySQL 5.7 is deprecated. To achieve a specific sort order of grouped results, it is preferable to use To produce a given sort order, use explicit 'ASC' or 'DESC' designators for 'GROUP BY' columns or provide an 'ORDER BY' clause. 'GROUP BY' sorting is a MySQL extension that may change in a future release; for example, to make it possible for the optimizer to order groupings in whatever manner it deems most efficient and to avoid the sorting overhead.
The 'EXTENDED' and 'PARTITIONS' keywords for the *note 'EXPLAIN': explain. statement are deprecated. These keywords are still recognized but are now unnecessary because their effect is always enabled.
The 'ENCRYPT()', 'ENCODE()', 'DECODE()', 'DES_ENCRYPT()', and 'DES_DECRYPT()' encryption functions are deprecated. For 'ENCRYPT()', consider using 'SHA2()' instead for one-way hashing. For the others, consider using 'AES_ENCRYPT()' and 'AES_DECRYPT()' instead. The '--des-key-file' option, the 'have_crypt' system variable, the 'DES_KEY_FILE' option for the *note 'FLUSH': flush. statement, and the 'HAVE_CRYPT' 'CMake' option also are deprecated.
The 'MBREqual()' spatial function is deprecated. Use 'MBREquals()' instead.
The functions described in *note gis-wkb-functions:: previously accepted either WKB strings or geometry arguments. Use of geometry arguments is deprecated. See that section for guidelines for migrating queries away from using geometry arguments.
The 'INFORMATION_SCHEMA' note 'PROFILING': information-schema-profiling-table. table is deprecated. Use the Performance Schema instead; see note performance-schema::.
The 'INFORMATION_SCHEMA' note 'INNODB_LOCKS': information-schema-innodb-locks-table. and note 'INNODB_LOCK_WAITS': information-schema-innodb-lock-waits-table. tables are deprecated, to be removed in MySQL 8.0, which provides replacement Performance Schema tables.
The Performance Schema note 'setup_timers': performance-schema-setup-timers-table. table is deprecated and is removed in MySQL 8.0, as is the 'TICK' row in the note 'performance_timers': performance-schema-performance-timers-table. table.
The 'sys' schema *note 'sys.version': sys-version. view is deprecated; expect it be removed in a future version of MySQL. Affected applications should be adjusted to use an alternative instead. For example, use the 'VERSION()' function to retrieve the MySQL server version.
Treatment of '' as a synonym for 'NULL' in SQL statements is deprecated and is removed in MySQL 8.0; use 'NULL' instead.
This change does not affect text file import or export operations performed with note 'LOAD DATA': load-data. or note 'SELECT ... INTO OUTFILE': select-into, for which 'NULL' continues to be represented by ''. See *note load-data::.
'PROCEDURE ANALYSE()' syntax is deprecated.
Comment stripping by the *note 'mysql': mysql. client and the options to control it ('--skip-comments', '--comments') are deprecated.
note 'mysqld_safe': mysqld-safe. support for 'syslog' output is deprecated. Use the native server 'syslog' support used instead. See note error-log::.
Conversion of pre-MySQL 5.1 database names containing special characters to 5.1 format with the addition of a '#mysql50#' prefix is deprecated. Because of this, the '--fix-db-names' and '--fix-table-names' options for note 'mysqlcheck': mysqlcheck. and the 'UPGRADE DATA DIRECTORY NAME' clause for the note 'ALTER DATABASE': alter-database. statement are also deprecated.
Upgrades are supported only from one release series to another (for example, 5.0 to 5.1, or 5.1 to 5.5), so there should be little remaining need for conversion of older 5.0 database names to current versions of MySQL. As a workaround, upgrade a MySQL 5.0 installation to MySQL 5.1 before upgrading to a more recent release.
note 'mysql_install_db': mysql-install-db. functionality has been integrated into the MySQL server, note 'mysqld': mysqld. To use this capability to initialize a MySQL installation, if you previously invoked note 'mysql_install_db': mysql-install-db. manually, invoke note 'mysqld': mysqld. with the '--initialize' or '--initialize-insecure' option, depending on whether you want the server to generate a random password for the initial ''root'@'localhost'' account.
note 'mysql_install_db': mysql-install-db. is now deprecated, as is the special '--bootstrap' option that note 'mysql_install_db': mysql-install-db. passes to *note 'mysqld': mysqld.
The note 'mysql_plugin': mysql-plugin. utility is deprecated. Alternatives include loading plugins at server startup using the '--plugin-load' or '--plugin-load-add' option, or at runtime using the note 'INSTALL PLUGIN': install-plugin. statement.
The *note 'resolveip': resolveip. utility is deprecated. 'nslookup', 'host', or 'dig' can be used instead.
The note 'resolve_stack_dump': resolve-stack-dump. utility is deprecated. Stack traces from official MySQL builds are always symbolized, so there is no need to use note 'resolve_stack_dump': resolve-stack-dump.
The 'mysql_kill()' (https://dev.mysql.com/doc/c-api/5.7/en/mysql-kill.html), 'mysql_list_fields()' (https://dev.mysql.com/doc/c-api/5.7/en/mysql-list-fields.html), 'mysql_list_processes()' (https://dev.mysql.com/doc/c-api/5.7/en/mysql-list-processes.html), and 'mysql_refresh()' (https://dev.mysql.com/doc/c-api/5.7/en/mysql-refresh.html) C API functions are deprecated. The same is true of the corresponding 'COM_PROCESS_KILL', 'COM_FIELD_LIST', 'COM_PROCESS_INFO', and 'COM_REFRESH' client/server protocol commands. Instead, use 'mysql_query()' (https://dev.mysql.com/doc/c-api/5.7/en/mysql-query.html) to execute a note 'KILL': kill, note 'SHOW COLUMNS': show-columns, note 'SHOW PROCESSLIST': show-processlist, or note 'FLUSH': flush. statement, respectively.
The 'mysql_shutdown()' C API function is deprecated. Instead, use 'mysql_query()' (https://dev.mysql.com/doc/c-api/5.7/en/mysql-query.html) to execute a *note 'SHUTDOWN': shutdown. statement.
The 'libmysqld' embedded server library is deprecated as of MySQL 5.7.19. These are also deprecated:
* The *note 'mysql_config': mysql-config. '--libmysqld-libs',
'--embedded-libs', and '--embedded' options
* The 'CMake' 'WITH_EMBEDDED_SERVER',
'WITH_EMBEDDED_SHARED_LIBRARY', and
'INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR' options
* The (undocumented) *note 'mysql': mysql. '--server-arg' option
* The 'mysqltest' '--embedded-server', '--server-arg', and
'--server-file' options
* The 'mysqltest_embedded' and 'mysql_client_test_embedded' test
programs
Because 'libmysqld' uses an API comparable to that of 'libmysqlclient', the migration path away from 'libmysqld' is straightforward:
Bring up a standalone MySQL server (*note 'mysqld': mysqld.).
Modify application code to remove API calls that are specific to 'libmysqld'.
Modify application code to connect to the standalone MySQL server.
Modify build scripts to use 'libmysqlclient' rather than 'libmysqld'. For example, if you use *note 'mysql_config': mysql-config, invoke it with the '--libs' option rather than '--libmysqld-libs'.
The *note 'replace': replace-utility. utility is deprecated.
Support for DTrace is deprecated.
The 'JSON_MERGE()' function is deprecated as of MySQL 5.7.22. Use 'JSON_MERGE_PRESERVE()' instead.
Support for placing table partitions in shared 'InnoDB' tablespaces is deprecated as of MySQL 5.7.24. Shared tablespaces include the 'InnoDB' system tablespace and general tablespaces. For information about identifying partitions in shared tablespaces and moving them to file-per-table tablespaces, see Preparing Your Installation for Upgrade (https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html).
Support for 'TABLESPACE = innodb_file_per_table' and 'TABLESPACE = innodb_temporary' clauses with *note 'CREATE TEMPORARY TABLE': create-table. is deprecated as of MySQL 5.7.24.
The '--ndb' note 'perror': perror. option is deprecated. Use the note 'ndb_perror': mysql-cluster-programs-ndb-perror. utility instead.
The 'myisam_repair_threads' system variable 'myisam_repair_threads' are deprecated as of MySQL 5.7.38; expect support for both to be removed in a future release of MySQL.
From MySQL 5.7.38, values other than 1 (the default) for 'myisam_repair_threads' produce a warning.
Features Removed in MySQL 5.7
The following items are obsolete and have been removed in MySQL 5.7. Where alternatives are shown, applications should be updated to use them.
For MySQL 5.6 applications that use features removed in MySQL 5.7, statements may fail when replicated from a MySQL 5.6 source to a MySQL 5.7 replica, or may have different effects on source and replica. To avoid such problems, applications that use features removed in MySQL 5.7 should be revised to avoid them and use alternatives when possible.
Support for passwords that use the older pre-4.1 password hashing format is removed, which involves the following changes. Applications that use any feature no longer supported must be modified.
* The 'mysql_old_password' authentication plugin is removed.
Accounts that use this plugin are disabled at startup and the
server writes an 'unknown plugin' message to the error log.
For instructions on upgrading accounts that use this plugin,
see *note account-upgrades::.
* The '--secure-auth' option to the server and client programs
is the default, but is now a no-op. It is deprecated; expect
it to be removed in a future MySQL release.
* The '--skip-secure-auth' option to the server and client
programs is no longer supported and using it produces an
error.
* The 'secure_auth' system variable permits only a value of 1; a
value of 0 is no longer permitted.
* For the 'old_passwords' system variable, a value of 1 (produce
pre-4.1 hashes) is no longer permitted.
* The 'OLD_PASSWORD()' function is removed.
In MySQL 5.6.6, the 2-digit note 'YEAR(2)': year. data type was deprecated. Support for note 'YEAR(2)': year. is now removed. Once you upgrade to MySQL 5.7.5 or higher, any remaining 2-digit note 'YEAR(2)': year. columns must be converted to 4-digit note 'YEAR': year. columns to become usable again. For conversion strategies, see note migrating-from-year2::. For example, run note 'mysql_upgrade': mysql-upgrade. after upgrading.
The 'innodb_mirrored_log_groups' system variable. The only supported value was 1, so it had no purpose.
The 'storage_engine' system variable. Use 'default_storage_engine' instead.
The 'thread_concurrency' system variable.
The 'timed_mutexes' system variable, which had no effect.
The 'IGNORE' clause for *note 'ALTER TABLE': alter-table.
note 'INSERT DELAYED': insert. is no longer supported. The server recognizes but ignores the 'DELAYED' keyword, handles the insert as a nondelayed insert, and generates an 'ER_WARN_LEGACY_SYNTAX_CONVERTED' warning. ('INSERT DELAYED is no longer supported. The statement was converted to INSERT.') Similarly, note 'REPLACE DELAYED': replace. is handled as a nondelayed replace. You should expect the 'DELAYED' keyword to be removed in a future release.
In addition, several 'DELAYED'-related options or features were removed:
* The '--delayed-insert' option for *note 'mysqldump':
mysqldump.
* The 'COUNT_WRITE_DELAYED', 'SUM_TIMER_WRITE_DELAYED',
'MIN_TIMER_WRITE_DELAYED', 'AVG_TIMER_WRITE_DELAYED', and
'MAX_TIMER_WRITE_DELAYED' columns of the Performance Schema
*note 'table_lock_waits_summary_by_table':
performance-schema-table-lock-waits-summary-by-table-table.
table.
* *note 'mysqlbinlog': mysqlbinlog. no longer writes comments
mentioning 'INSERT DELAYED'.
Database symlinking on Windows using '.sym' files has been removed because it is redundant with native symlink support available using 'mklink'. Any '.sym' file symbolic links are now ignored and should be replaced with symlinks created using 'mklink'. See *note windows-symbolic-links::.
The unused '--basedir', '--datadir', and '--tmpdir' options for *note 'mysql_upgrade': mysql-upgrade. were removed.
Previously, program options could be specified in full or as any unambiguous prefix. For example, the '--compress' option could be given to *note 'mysqldump': mysqldump. as '--compr', but not as '--comp' because the latter is ambiguous. Option prefixes are no longer supported; only full options are accepted. This is because prefixes can cause problems when new options are implemented for programs and a prefix that is currently unambiguous might become ambiguous in the future. Some implications of this change:
* The '--key-buffer' option must now be specified as
'--key-buffer-size'.
* The '--skip-grant' option must now be specified as
'--skip-grant-tables'.
note 'SHOW ENGINE INNODB MUTEX': show-engine. output is removed. Comparable information can be generated by creating views on note Performance Schema: performance-schema. tables.
The 'InnoDB' Tablespace Monitor and 'InnoDB' Table Monitor are removed. For the Table Monitor, equivalent information can be obtained from 'InnoDB' 'INFORMATION_SCHEMA' tables.
The specially named tables used to enable and disable the standard 'InnoDB' Monitor and 'InnoDB' Lock Monitor ('innodb_monitor' and 'innodb_lock_monitor') are removed and replaced by two dynamic system variables: 'innodb_status_output' and 'innodb_status_output_locks'. For additional information, see *note innodb-monitors::.
The 'innodb_use_sys_malloc' and 'innodb_additional_mem_pool_size' system variables, deprecated in MySQL 5.6.3, were removed.
The 'msql2mysql', 'mysql_convert_table_format', 'mysql_find_rows', 'mysql_fix_extensions', 'mysql_setpermission', 'mysql_waitpid', 'mysql_zap', 'mysqlaccess', and 'mysqlbug' utilities.
The 'mysqlhotcopy' utility. Alternatives include *note 'mysqldump': mysqldump. and MySQL Enterprise Backup.
The 'binary-configure.sh' script.
The 'INNODB_PAGE_ATOMIC_REF_COUNT' 'CMake' option is removed.
The 'innodb_create_intrinsic' option is removed.
The 'innodb_optimize_point_storage' option and related internal data types ('DATA_POINT' and 'DATA_VAR_POINT') are removed.
The 'innodb_log_checksum_algorithm' option is removed.
The 'myisam_repair_threads' system variable as of MySQL 5.7.39.
File: manual.info.tmp, Node: added-deprecated-removed, Next: bug-reports, Prev: mysql-nutshell, Up: introduction