[Due to size limitation, this announcement is split in two. This is part 1] 

Dear MySQL users,

MySQL Server 8.0.13, a new version of the popular Open Source
Database Management System, has been released. MySQL 8.0.13 is
recommended for use on production systems.

For an overview of what's new in MySQL 8.0, please see


For information on installing MySQL 8.0.13 on new servers, please see
the MySQL installation documentation at


MySQL Server 8.0.13 is available in source and binary form for a number of
platforms from the "Development Releases" selection of our download
pages at


MySQL Server 8.0.13 is also available from our repository for Linux
platforms, go here for details:


Windows packages are available via the Installer for Windows:


along with .ZIP (no-install) packages for more advanced needs. 

8.0.13 also comes with a web installer as an alternative to the full

The web installer doesn't come bundled with any actual products
and instead relies on download-on-demand to fetch only the
products you choose to install. This makes the initial download
much smaller but increases install time as the individual products
will need to be downloaded.

We welcome and appreciate your feedback, bug reports, bug fixes,
patches, etc.:


The following link lists the changes in the MySQL 8.0 since
the release of MySQL 8.0.12. It may also be viewed
online at



Changes in MySQL 8.0.13 (2018-10-22)

     * Account Management Notes

     * Compilation Notes

     * Configuration Notes

     * Data Type Notes

     * Deprecation and Removal Notes

     * Error Handling


     * Logging Notes

     * Optimizer Notes

     * Packaging Notes

     * Performance Schema Notes

     * Security Notes

     * Spatial Data Support

     * SQL Syntax Notes

     * XA Transaction Notes

     * X Plugin Notes

     * Functionality Added or Changed

     * Bugs Fixed

Account Management Notes

     * It is now possible to require that attempts to change an
       account password be verified by specifying the current
       password to be replaced. This enables DBAs to prevent
       users from changing a password without proving that they
       know the current password. It is possible to establish
       password-verification policy globally using the
       password_require_current system variable, as well as on a
       per-account basis using the PASSWORD REQUIRE option of
       the CREATE USER and ALTER USER statements. Together with
       existing password-management capabilities, the new
       capability of requiring verification provides DBAs more
       complete control over password management. For more
       information, see Password Management
       MySQL implements the password-verification capability
       using a new column in the mysql.user system table. If you
       upgrade to this MySQL release from an earlier version,
       you must run mysql_upgrade (and restart the server) to
       incorporate this system database change. Until this is
       done, password changes are not possible.

Compilation Notes

     * Solaris: MySQL now can be compiled on Solaris using gcc.
       (Bug #27802681)

Configuration Notes

     * The new WITH_LTO CMake option controls whether to enable
       link-time optimization. Currently, this is supported only
       by GCC 7 and 8. (Bug #28184537, Bug #28211382)

     * The new WITH_RAPIDJSON CMake option controls whether to
       compile with the bundled or system RapidJSON library.
       (Bug #28024992, Bug #90867)

     * The CMAKE_BUILD_TYPE CMake option now supports a Release
       build type, which is like the RelWithDebInfo build type
       but omits debugging information to reduce the build size.
       (Bug #27874068)

     * The new sql_require_primary_key system variable makes it
       possible to have statements that create new tables or
       alter the structure of existing tables enforce the
       requirement that tables have a primary key. Enabling this
       variable helps avoid performance problems in row-based
       replication that can occur when tables have no primary
       key. Suppose that a table has no primary key and an
       update or delete modifies multiple rows. On the master
       server, this operation can be performed using a single
       table scan but, when replicated using row-based
       replication, results in a table scan for each row to be
       modified on the slave. With a primary key, these table
       scans do not occur. (Bug #17468242, Bug #69845, Bug
       #17005592, Bug #69223)

     * To enable the server to listen on a set of addresses, the
       --bind-address option now permits a list of
       comma-separated IP addresses or host names, not just a
       single address or name. For details, see Server Command

Data Type Notes

     * MySQL now supports use of expressions as default values
       in data type specifications. This includes the use of
       expressions as default values for the BLOB, TEXT,
       GEOMETRY, and JSON data types, which previously could not
       be assigned default values at all. For details, see Data
       Type Default Values

Deprecation and Removal Notes

     * InnoDB; Partitioning: Support for placing table
       partitions in shared tablespaces was removed. Shared
       tablespaces include the 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

     * InnoDB: Support for TABLESPACE = innodb_file_per_table
       and TABLESPACE = innodb_temporary clauses with CREATE
       TEMPORARY TABLE is deprecated and will be removed in a
       future MySQL version.

     * The utf8mb3 character set is deprecated and will be
       removed in a future MySQL release. Please use utf8mb4

     * Nested comments have never been supported (although they
       might be permitted under some conditions), but now are
       considered deprecated and will be removed in a future
       MySQL release.

     * The deprecated metadata_locks_cache_size and
       metadata_locks_hash_instances system variables were

     * The PAD_CHAR_TO_FULL_LENGTH SQL mode has been deprecated
       and will be removed in a future MySQL version.

Error Handling

     * The MySQL client library now returns better error
       messages for OpenSSL errors. Thanks to Facebook for the
       patch. (Bug #27855668, Bug #90418)

     * Previously, the ER_NO_REFERENCED_ROW_2 and
       ER_ROW_IS_REFERENCED_2 error messages for foreign key
       operations were displayed and revealed information about
       parent tables, even when the user had no parent table
       access privileges. Error handling for this situation has
       been revised:

          + If the user does have table-level privileges for all
            parent tables, ER_NO_REFERENCED_ROW_2 and
            ER_ROW_IS_REFERENCED_2 are displayed, the same as

          + If the user does not have table-level privileges for
            all parent tables, more generic error messages are
            displayed instead (ER_NO_REFERENCED_ROW and
       An exception is that, for stored programs defined to
       execute with DEFINER privileges, the user against which
       privileges are assessed is the user in the program
       DEFINER clause, not the invoking user. If that user has
       table-level parent table privileges, parent table
       information is still displayed. In this case, it is the
       responsibility of the stored program creator to hide the
       information by including appropriate condition handlers.
       (Bug #19477611)


     * These new INFORMATION_SCHEMA tables are available as
       views on data dictionary tables:

          + VIEW_ROUTINE_USAGE provides information about stored
            functions used in view definitions.

          + VIEW_TABLE_USAGE provides information about tables
            and views used in view definitions.
       For more information, see The INFORMATION_SCHEMA

Logging Notes

     * Incompatible Change: The system variables have been
       removed that previously configured error logging to the
       system log (the Event Log on Windows, and syslog on Unix
       and Unix-like systems). Where appropriate, the removed
       system variables were replaced with new system variables
       managed by the log_sink_syseventlog error log component.
       The following table shows the old and new variable names.

         Old System Variable    New System Variable
       log_syslog_facility    syseventlog.facility
       log_syslog_include_pid syseventlog.include_pid
       log_syslog_tag         syseventlog.tag
       log_syslog             None
       Installations that used the old system variable names
       must update their configuration to use the new variable
       names. For more information, see Error Logging to the
       System Log
       References: See also: Bug #27534089.

     * A new system variable, log_error_suppression_list,
       enables specifying which diagnostics should not be
       written to the error log when they occur with a severity
       of WARNING or INFORMATION. For example, if a particular
       type of warning occurs frequently but is not of interest
       (and thus may be considered undesirable "noise" in the
       error log), it now can be suppressed.

     * The code to handle rewriting of account-management
       statements was refactored to make it easier to maintain
       and extend. This work resulted in a few minor
       user-visible effects in the audit, general, and slow
       query logs:

          + Plaintext passwords are replaced by <string> rather
            than '<string>'.

          + Default clauses are not written unless specified by
            the user.

     * Previously, messages written to the error log by several
       internal server methods were logged using the
       ER_LOG_PRINTF_MSG error code. Each of these messages now
       is logged using a unique error code.

Optimizer Notes

     * The optimizer now supports a Skip Scan access method that
       enables range access to be used in previously
       inapplicable situations to improve query performance. For
       more information, see Skip Scan Range Access Method
       Thanks to Facebook for
       the patch on which this access method is based. (Bug
       #26976512, Bug #88103)

     * MySQL now supports creation of functional index key parts
       that index expression values rather than column values.
       Functional key parts enable indexing of values that
       cannot be indexed otherwise, such as JSON values. For
       details, see CREATE INDEX Syntax

     * Performance of SELECT COUNT(*) FROM tbl_name queries for
       InnoDB tables was improved for single-threaded workloads
       and when no extra clauses such as WHERE or GROUP BY are

Packaging Notes

     * Binary packages that include curl rather than linking to
       the system curl library now use curl 7.60.0 rather than
       7.45.0. (Bug #28043702)

     * Debian packaging was updated to reflect the removal of
       yaSSL and that OpenSSL is the default SSL library for all
       builds. (Bug #28025599)

     * Test plugins have been moved from server packages to test
       packages. (Bug #27860172)

     * MySQL Router is now included in the MySQL server source
       and monolithic binary packages.

Performance Schema Notes

     * A new Performance Schema stage, waiting for handler
       commit, is available to detect threads going through
       transaction commit. Thanks to Facebook for the patch.
       (Bug #27855592, Bug #90417)

Security Notes

     * Microsoft Windows: On Windows, MySQL Enterprise Edition
       distributions now bundle the Cyrus SASL library files
       libsasl.dll and saslSCRAM.dll so that the LDAP
       authentication plugins can use the SCRAM-SHA-1
       authentication method.

     * MySQL Enterprise Edition now provides data masking and
       de-identification capabilities, implemented as a plugin
       library containing a plugin and a set of user-defined
       functions. 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 example:
mysql> SET @ssn = gen_rnd_ssn();
mysql> SET @masked_ssn1 = mask_ssn(@ssn);
mysql> SET @masked_ssn2 = mask_outer(mask_inner (@ssn,4,5,'A'), 3,0,'B
mysql> SELECT @ssn, @masked_ssn1, @masked_ssn2;
| @ssn        | @masked_ssn1 | @masked_ssn2 |
| 980-31-2838 | XXX-XX-2838  | BBB-AA-2838  |

       For more information, see MySQL Enterprise Data Masking
       and De-Identification

Spatial Data Support

     * Incompatible Change: Previously, ST_Area() supported only
       geometry arguments having a Cartesian spatial reference
       system (SRS) and produced an error when invoked with
       geometry arguments that specified a geographic SRS.
       ST_Area() now supports geometry arguments having a
       geographic SRS and returns the geodetic area in square
       If spatial data contains geometry values that now are
       interpreted differently by ST_Area(), existing queries
       using this function will return different results,
       compared to previous MySQL versions.

     * The parser for spatial reference system (SRS) definitions
       in CREATE SPATIAL REFERENCE SYSTEM statements now is
       stricter about rejecting invalid constructs, and requires
       an axis clause in geographic SRS definitions. (Bug
       #28186073, Bug #28147723)

     * Previously, ST_Validate() supported only geometry
       arguments having a Cartesian spatial reference system
       (SRS) and produced an error when invoked with geometry
       arguments that specified a geographic SRS. ST_Validate()
       now supports geometry arguments having a geographic SRS.
       If spatial data contains geometry values that now are
       interpreted differently by ST_Validate(), existing
       queries using this function will return different
       results, compared to previous MySQL versions.

     * MySQL now implements the ST_Transform() spatial function
       for use in converting geometry values from one spatial
       reference system (SRS) to another. Currently, it supports
       conversion between geographic SRSs. For details, see
       Spatial Operator Functions

SQL Syntax Notes

     * Incompatible Change: The deprecated ASC or DESC
       qualifiers for GROUP BY clauses have been removed.
       Queries that previously relied on GROUP BY sorting may
       produce results that differ from previous MySQL versions.
       To produce a given sort order, provide an ORDER BY
       Queries and stored program definitions from MySQL 8.0.12
       or lower that use ASC or DESC qualifiers for GROUP BY
       clauses should be amended. Otherwise, upgrading to MySQL
       8.0.13 or higher may fail, as may replicating to MySQL
       8.0.13 or higher slave servers.

XA Transaction Notes

     * Previously, metadata locks for XA transactions in
       PREPARED state could be dropped when the client
       performing the transaction disconnected or the server
       restarted. This could lead to behavior such as one
       session being able to drop tables used by an XA
       transaction in progress for another session. Metadata
       locks for XA transactions in PREPARED state now are
       maintained across client disconnects and server restarts,
       until an XA COMMIT or XA ROLLBACK is executed. (Bug
       #22710164, Bug #79940)

X Plugin Notes

     * Important Change: X Protocol now provides a connection
       pooling option, which can reduce overhead for
       applications that open many connections to MySQL server
       such as small web pages or a REST API endpoint. Use the
       new mysqlx.getClient(connection, options) operation,
       which returns a Client object. By using a Client object,
       executing an open session operation retrieves an existing
       and currently unused network connection from the pool,
       resets it, and uses it. Closing a session marks the
       underlying connection as unused and returns it to the
       Client object's connection pool. The connection pool is
       configured using a options data dictionary, which means
       that a deployed application can switch from using
       connection pooling or not by simply changing the
       connection string.

     * A mutex lock has been added to prevent conflict between
       multiple X Plugin client sessions when a large number of
       sessions are being opened and closed. (Bug #28637947)

     * When an X Plugin client attempted to connect to a MySQL
       server specifying a database that did not exist on the
       server, the error message indicated that access was
       denied rather than that the database was not known. The
       correct error message is now returned. (Bug #28110957)

     * Incorrect copying of an integer value by X Plugin caused
       an error relating to misaligned memory access. The issue
       is now fixed. (Bug #28070946, Bug #90983)

     * Now that X Plugin is loaded and enabled by default, the
       default verbosity setting for the error log meant that no
       message was visible to indicate that X Plugin was
       available on the MySQL server. A message is now issued
       during system startup to confirm that X Plugin has been
       loaded. (Bug #27287340)

     * X Protocol now provides the ability to broadcast
       information to interested clients without the requirement
       to request the information. In addition, changes related
       to Group Replication are also broadcast. As part of this
       work the Mysqlx_notified_by_group_replication and
       Mysqlx_notice_global_sent status variables have been

Functionality Added or Changed

     * Important Change; NDB Cluster; NDB Client Programs:
       Removed the deprecated --ndb option for perror. Use
       ndb_perror to obtain error message information from NDB
       error codes instead. (Bug #81705, Bug #23523957)
       References: See also: Bug #81704, Bug #23523926.

     * Important Change: Setting user variables in statements
       other than SET is now deprecated due to issues that
       included those listed here:

          + The order of evaluation for expressions involving
            user variables was undefined.

          + The default result type of a variable is based on
            its type at the beginning of the statement, which
            could have unintended effects when a variable
            holding a value of one type at the beginning of a
            statement was assigned a new value of a different
            type in the same statement.

          + HAVING, GROUP BY, and ORDER BY clauses, when
            referring to a variable that was assigned a value in
            the select expression list, did not work as expected
            because the expression was evaluated on the client
            and so it was possible for stale column values from
            a previous row to be used.
       Syntax such as SELECT @var, @var:=@var+1 is still
       accepted in MySQL 8.0 for backward compatibility, but is
       subject to removal in a future release.

     * InnoDB: The innodb_fsync_threshold system variable
       permits a threshold size to be defined for the write
       buffer. By default, when InnoDB creates a new data file,
       such as a new log file or tablespace file, it flushes the
       contents of the write buffer to disk only after a file is
       fully written, which can cause a surge in disk write
       activity. The innodb_fsync_threshold system variable can
       be used to force smaller, periodic flushes to help avoid
       such surges in disk write activity. (Bug #27724600)

     * InnoDB: User-created temporary tables and internal
       temporary tables created by the optimizer are now stored
       in session temporary tablespaces that are allocated to a
       session from a pool of temporary tablespaces. When a
       session disconnects, its temporary tablespaces are
       truncated and released back to the pool. In previous
       releases, temporary tables were created in the global
       temporary tablespace (ibtmp1), which did not return disk
       space to the operating system after temporary tables were
       The innodb_temp_tablespaces_dir variable defines the
       location where session temporary tablespaces are created.
       The default location is the #innodb_temp directory in the
       data directory.
       metadata about session temporary tablespaces.
       The global temporary tablespace (ibtmp1) now stores
       rollback segments for changes made to user-created
       temporary tables.

     * InnoDB: The InnoDB tablespace encryption feature now
       supports general tablespaces. Previously, only
       file-per-table tablespaces could be encrypted. To support
       encryption of general tablespaces, CREATE TABLESPACE and
       ALTER TABLESPACE syntax was extended to include an
       ENCRYPTION clause.
       includes an ENCRYPTION column that indicates whether or
       not a tablespace is encrypted.
       The stage/innodb/alter tablespace (encryption)
       Performance Schema stage instrument was added to permit
       monitoring of general tablespace encryption operations.

     * Replication: You can now make changes to the
       configuration of a group while it is running, without
       having to stop all members to make changes. This
       functionality relies on UDFs which are installed with
       this version of the plugin, and all members of a group
       must have these UDFs installed. To use the UDFs, connect
       to an online member and issue SELECT UDF;
       Use the group_replication_set_as_primary() UDF to trigger
       the election of a specific member as the new primary in a
       single-primary group, overriding the usual election
       process. See Changing a Group's Primary Member
       for more information.
       In addition, you can configure the mode which a group is
       using while it is online, changing between single-primary
       mode and multi-primary mode. To change the mode of an
       online group, choose one of these options:

          + Use
            group_replication_switch_to_single_primary_mode() to
            change a group running in multi-primary mode to
            single-primary mode.

          + Use group_replication_switch_to_multi_primary_mode()
            to to change a group running in single-primary mode
            to multi-primary mode.
       See Changing a Group's Mode
       for more information.

     * Replication: You can now inspect and configure the
       maximum number of consensus instances at any time for a
       group. This maximum is referred to as the event horizon
       for a group, and is the maximum number of consensus
       instances that the system can execute in parallel. This
       enables you to fine tune the performance of your Group
       Replication deployment.
       To inspect a group's event horizon value at runtime,
SELECT group_replication_get_write_concurrency()

       To set the maximum number of write consensus instances,
SELECT group_replication_set_write_concurrency(instances);

       where instances is the new number of maximum instances
       used for consensus.
       See Using Group Replication Group Write Consensus
       for more information.

     * Solaris: On Solaris, MySQL can now be built with
       Developer Studio 12.6. (Bug #27055190, Bug #88316, Bug
       #28165246, Bug #91214)

     * Data truncation testing was rewritten to avoid undefined
       behavior. (Bug #28255956, Bug #91445)

     * Out-of-range checking for float values was improved. (Bug

     * The upgrade check that the server runs during the startup
       process now verifies that partitioned InnoDB tables do
       not use shared tablespaces. (Bug #28204431)

     * Previously, file I/O performed in the I/O cache in the
       mysys library was not instrumented, affecting in
       particular file I/O statistics reported by the
       Performance Schema about the binary log index file. Now,
       this I/O is instrumented and Performance Schema
       statistics are accurate. Thanks to Yura Sorokin for the
       contribution. (Bug #27788907, Bug #90264)

     * Performance for locating user account entries in the
       in-memory privilege structures has been improved. Thanks
       to Eric Herman for the contribution. (Bug #27772506, Bug

     * If mysqld --initialize fails to complete but creates an
       unusable data directory, it now displays a message that
       the data directory is unusable and can safely be removed.
       (Bug #27675647)

     * Instrumentation is now provided in the Performance Schema
       for transaction retries by individual applier threads on
       a single-threaded or multithreaded slave. Previously, the
       Performance Schema table
       replication_applier_status_by_worker displayed
       information about errors that stopped the applier thread,
       but not about transient errors that occurred before a
       transaction was eventually applied. With this
       information, you can identify transient errors that are
       causing replication lag on replication slaves or Group
       Replication group members.
       Eight new columns have been added to the Performance
       Schema replication_applier_status_by_worker table:

            of times the last applied transaction was retried by
            the worker after the first attempt. If the
            transaction was applied at the first attempt, this
            number is zero.

            - The error number of the last transient error that
            caused the transaction to be retried.

            E - The message text for the last transient error
            that caused the transaction to be retried.

            AMP - The timestamp in 'YYYY-MM-DD
            HH:MM:SS[.fraction]' format for the last transient
            error that caused the transaction to be retried.

            times the transaction that is currently being
            applied was retried until this moment. If the
            transaction was applied at the first attempt, this
            number is zero.

            The error number of the last transient error that
            caused the current transaction to be retried.

            The message text for the last transient error that
            caused the current transaction to be retried.

            - The timestamp in 'YYYY-MM-DD HH:MM:SS[.fraction]'
            format for the last transient error that caused the
            current transaction to be retried.
       The existing column
       reset each time a transaction is retried. It now retains
       the timestamp from the worker's first attempt to apply
       the transaction.

       TABLE statements were not supported inside transactions,
       procedures, functions, or triggers when using GTIDs (that
       is, when the enforce_gtid_consistency system variable is
       set to ON). It was possible to use these statements with
       GTIDs enabled, but only outside of any transaction, and
       only with autocommit=1.
       From MySQL 8.0.13, this restriction has been removed when
       binlog_format is set to ROW or MIXED. With row-based
       TABLE statements can now be used inside transactions,
       procedures, functions, or triggers when GTIDs are
       enabled. When binlog_format is set to STATEMENT, the
       restriction remains. Because of this difference in
       behavior, some additional restrictions now apply to
       changing the binlog_format setting at runtime:

          + If a session has open temporary tables, the
            replication format cannot be changed for the session
            (SET @@session.binlog_format).

          + If any replication channel has open temporary
            tables, the replication format cannot be changed
            globally (SET @@global.binlog_format or SET

          + If any replication channel applier thread is
            currently running, the replication format cannot be
            changed globally (SET @@global.binlog_format or SET
       Trying to switch the replication format in any of these
       cases (or attempting to set the current replication
       format) results in an error. You can, however, use
       PERSIST_ONLY (SET @@persist_only.binlog_format) to change
       the replication format at any time, because this action
       does not modify the runtime global system variable value,
       and takes effect only after a server restart.
       When binlog_format is set to ROW or MIXED, CREATE
       not written to the binary log and are therefore not
       replicated to slaves. When they are used in transactions,
       if the removal of these statements from the transaction
       results in an empty transaction, the transaction is not
       written to the binary log. If a transaction involving
       these statements is rolled back, a warning message is
       issued stating that the creation or dropping of the
       temporary tables could not be rolled back.

     * The MySQL Server code for binary logging has been
       refactored to create new internal interfaces for
       accessing events in a binary log and relay log. The new
       interfaces separate the write and read processes for
       binary logging into input and output streams, and
       decouple the process of capturing and retrieving binary
       log events from the process of writing them to files. A
       logical binary log file is used to wrapper the storage
       layer operations.
       The new internal interfaces make it possible for MySQL
       Server to use alternative storage methods for binary log
       events besides a standard binary log or relay log file,
       including a binary log cache or memory buffer. For
       example, Group Replication uses the new interfaces to
       serialize events directly to memory buffers and
       transaction messages in order to co-ordinate transactions
       in the group. mysqlbinlog also now uses them to read
       binary log events from standard input.
       The following existing error messages are now marked as
       obsolete due to the new internal interfaces:










     * The TempTable storage engine now supports storage of
       binary large object (BLOB) type columns. This enhancement
       improves performance for queries that use temporary
       tables containing BLOB data. Previously, temporary tables
       that contained BLOB data were stored in the on-disk
       storage engine defined by

     * The MySQL Server code for deserialization of binary log
       events has been refactored to improve the identification
       and resilient handling of corrupted and invalid event
       data during replication, and also during processing with
       mysqlbinlog, whether or not binary log checksums are used
       on the server.

     * Previously, executing RENAME TABLE required that there be
       no tables locked with LOCK TABLES. Now it is possible to
       rename tables that are locked with a WRITE lock or that
       are the product of renaming WRITE-locked tables from
       earlier steps in a multiple-table rename operation.

     * The group_replication_member_expel_timeout option has
       been added to define the time period that the group
       should wait for a non-responding member before evicting
       the member from the group. This enables you to configure
       the eviction process when the connection to members is

MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql

Reply via email to