Dear MySQL users,

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

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

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

MySQL Server 5.7.17 is available in source and binary form for a number of
platforms from our download pages at

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

Windows packages are available via the Installer for Windows or .ZIP
(no-install) packages for more advanced needs. The point and click
configuration wizards and all MySQL products are available in the
unified Installer for Windows:

5.7.17 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 section lists the changes in MySQL 5.7 since
the release of MySQL 5.7.16. It may also be viewed online at


Changes in MySQL 5.7.17 (2016-12-12)

   Compilation Notes

     * For GCC versions higher than 4.4,
       -fno-expensive-optimizations was replaced with
       -ffp-contract=off, which has the effect of enabling more
       optimizations. Thanks to Alexey Kopytov for the patch.
       (Bug #24571672, Bug #82760)

   MySQL Enterprise Notes

     * Enterprise Encryption for MySQL Enterprise Edition now
       enables server administrators to impose limits on maximum
       key length by setting environment variables. These can be
       used to prevent clients from using excessive CPU
       resources by passing very long key lengths to
       key-generation operations. For more information, see
       Enterprise Encryption Usage and Examples

( (Bug #19687742)

   Packaging Notes

     * RPM packages now are built with -DWITH_NUMA=ON for
       platforms with NUMA support: OEL higher than EL5, Fedora,
       SLES, Docker. (Bug #24689078)

   Security Notes

     * Incompatible Change: These changes were made to

          + Unsafe use of rm and chown in mysqld_safe could
            result in privilege escalation. chown now can be
            used only when the target directory is /var/log. An
            incompatible change is that if the directory for the
            Unix socket file is missing, it is no longer
            created; instead, an error occurs. Due to these
            changes, /bin/bash is required to run mysqld_safe on
            Solaris. /bin/sh is still used on other Unix/Linux

          + The --ledir option now is accepted only on the
            command line, not in option files.

          + mysqld_safe ignores the current working directory.
       Other related changes:

          + Initialization scripts that invoke mysqld_safe pass
            --basedir explicitly.

          + Initialization scripts create the error log file
            only if the base directory is /var/log or /var/lib.

          + Unused systemd files for SLES were removed.
       (Bug #24483092, Bug #25088048)
       References: See also: Bug #24464380, Bug #24388753.

     * MySQL Server now includes a plugin library that enables
       administrators to introduce an increasing delay in server
       response to clients after a certain number of consecutive
       failed connection attempts. This capability provides a
       deterrent that slows down brute force attacks that
       attempt to access MySQL user accounts. For more
       information, see The Connection-Control Plugin


     * OpenSSL is ending support for version 1.0.1 in December
       2016; see
       Consequently, MySQL Commercial Server builds now use
       version 1.0.2 rather than version 1.0.1, and the linked
       OpenSSL library for the MySQL Commercial Server has been
       updated from version 1.0.1 to version 1.0.2j. For a
       description of issues fixed in this version, see
       This change does not affect the Oracle-produced MySQL
       Community build of MySQL Server, which uses the yaSSL
       library instead.

   Test Suite Notes

     * could not be run with
       --valgrind-option=--tool=custom_tool, for values of
       custom_tool such as massif or helgrind, because it added
       the options for memcheck that might not be understood by
       other tools. Also, the --callgrind
       option did not work because it supplied an invalid --base
       option to callgrind. Thanks to Daniel Black for the patch
       on which the fixes were based. (Bug #23713613, Bug

   Functionality Added or Changed

     * Incompatible Change; Partitioning: The generic
       partitioning handler in the MySQL server is deprecated,
       and will be removed in MySQL 8.0. As part of this change,
       the mysqld --partition and --skip-partition options as
       well as the -DWITH_PARTITION_STORAGE_ENGINE build option
       are also deprecated, and will later be removed;
       partitioning will no longer be shown in the
       INFORMATION_SCHEMA.PLUGINS table or in the output of SHOW
       Following the removal of the generic partitioning
       handler, the storage engine used for a given table will
       be expected to provide its own ("native") partitioning
       handler as the InnoDB and NDB storage engines currently
       do. Currently, no other MySQL storage engines provide
       native partitioning support, nor is any planned for any
       other storage engines in current or development versions
       of MySQL.
       Use of tables with nonnative partitioning now results in
       an ER_WARN_DEPRECATED_SYNTAX warning. Also, the server
       performs a check at startup to identify tables that use
       nonnative partitioning; for any found, the server writes
       a message to its error log. To disable this check, use
       the --disable-partition-engine-check option.
       To prepare for migration to MySQL 8.0, any table with
       nonnative partitioning should be changed to use an engine
       that provides native partitioning, or be made
       nonpartitioned. For example, to change a table to InnoDB,
       execute this statement:
       ALTER TABLE table_name ENGINE = INNODB;

     * InnoDB: By default, InnoDB reads uncommitted data when
       calculating statistics. In the case of an uncommitted
       transaction that deletes rows from a table, InnoDB
       excludes records that are delete-marked when calculating
       row estimates and index statistics, which can lead to
       non-optimal execution plans for other transactions that
       are operating on the table concurrently using a
       transaction isolation level other than READ UNCOMMITTED.
       To avoid this scenario, a new configuration option,
       innodb_stats_include_delete_marked, can be enabled to
       ensure that InnoDB includes delete-marked records when
       calculating persistent optimizer statistics. (Bug

     * The systemd service file for mysqld now includes a
       Documentation value in the [Unit] section to provide a
       link to the systemd documentation in the MySQL Reference
       Manual. (Bug #24735762)

     * Unit testing now uses Google Mock 1.8. (Bug #24572381,
       Bug #82823)

     * If mysqld is invoked with --daemonize, stdout and stderr
       are redirected to /dev/null if connected to a terminal
       type device, so that mysqld can behave as a true daemon.
       (Bug #21627629)

     * The libmysqld embedded server library is deprecated and
       will be removed in a future version of MySQL.

     * MySQL Group Replication is a new MySQL plugin that
       enables you to create a highly available distributed
       MySQL service across a group of MySQL server instances,
       with data consistency, conflict detection and resolution,
       and group membership services all built-in. By using a
       powerful new group communication service, which provides
       an implementation of the popular Paxos algorithm, the
       group of MySQL Server instances automatically coordinates
       on data replication, consistency, and membership. This
       provides all of the built-in mechanisms necessary for
       making your MySQL databases highly available.
       By default Group Replication operates in single-primary
       mode where a single server instance, called the primary,
       accepts write requests. The remaining server instances in
       the group, called secondaries, function as replicas of
       the primary. In the event of an unexpected failure of the
       primary, an automatic primary election process takes
       place and one of the secondaries is elected as the new
       primary. Group Replication also supports virtually
       synchronous multi-primary replication, with certain
       considerations and restrictions, which offers update
       everywhere functionality. In this mode all members are
       equal and you can distribute your reads and writes across
       all MySQL Server instances in the group.
       Regardless of the operating mode, Group Replication
       provides a dynamic membership service that relies on
       distributed failure detection. Server instances can join
       and leave the group dynamically, and you can query the
       group's membership list at any point through Performance
       Schema tables. Server instances that join the group
       automatically synchronize their state with the group by
       doing an automatic point-in-time recovery which ensures
       that they reach synchrony with the group.
       MySQL Group Replication's virtually synchronous
       replication is also a fully integrated part of MySQL,
       using the InnoDB storage engine, the Performance Schema
       tables, standard GTIDs and the well known replication
       infrastructure (binary and relay logs, multi-source
       replication, multi-threaded slave execution, etc.), which
       makes it a familiar and intuitive experience for existing
       MySQL users and makes it very easy to integrate with
       MySQL's standard asynchronous and semisynchronous
       replication, allowing you to mix and match as needed to
       create varied and complex replication topologies.

   Bugs Fixed

     * Incompatible Change: A change made in MySQL 5.7.8 for
       handling of multibyte character sets by LOAD DATA was
       reverted due to the replication incompatibility (Bug
       #24487120, Bug #82641)
       References: See also: Bug #23080148.

     * NDB Cluster: MySQL Cluster encountered race conditions
       compiling lex_hash.h. (Bug #24931655, Bug #83477)

       table reported NULL for a foreign key constraint name
       (UNIQUE_CONSTRAINT_NAME) after restarting the server.
       (Bug #25126722)

     * InnoDB: A prepared XA transaction was rolled back by a
       high priority transaction. The high priority transaction
       should wait if the blocking transaction is in a prepared
       state. (Bug #25032066)

     * InnoDB: InnoDB passed an invalid argument to
       syscall(SYS_futex). (Bug #24923840, Bug #83375)

     * InnoDB: On a MySQL 64-bit build on Windows, a file I/O
       retry result was misinterpreted due to a missing cast
       necessary for the correct operation of the retry path,
       resulting in a failing assertion and operating system
       error. (Bug #24711351)

     * InnoDB: The GCC mach_parse_compressed function should
       load one to five bytes depending on the value of the
       first byte. Due to a GCC bug, GCC 5 and 6 emit code to
       load four bytes before the first byte value is checked
       (GCC Bug #77673). A workaround prevents this behavior.
       Thanks to Laurynas Biveinis for the patch. (Bug
       #24707869, Bug #83073)

     * InnoDB: Due to a glibc bug, short-lived detached threads
       could exit before the caller had returned from
       pthread_create(), causing a server exit.
       Thanks to Laurynas Biveinis for the patch. (Bug
       #24605956, Bug #82886)

     * InnoDB: After increasing the value of innodb_undo_logs
       and restarting the server, the number of active undo
       tablespaces was not increased when assigning undo
       tablespaces to newly allocated rollback segments. (Bug

     * InnoDB: InnoDB incorrectly reported an error about
       missing encryption when restoring pages from the
       doublewrite buffer during recovery. (Bug #24471076)

     * InnoDB: A cached undo segment was not removed from the
       rollback segment history during a slow shutdown. (Bug

     * InnoDB: An error during a table-rebuilding operation on a
       table with only a generated clustered index
       (GEN_CLUST_INDEX) raised and assertion due to an error
       called with an invalid key name. (Bug #24444831)

     * InnoDB: Rotating the tablespace encryption master key
       while the server is in read-only mode raised an assertion
       instead of displaying an error message. (Bug #24404091)

     * InnoDB: On a table without an explicitly defined primary
       key, InnoDB did not replace the implicit clustered index
       (GEN_CLUST_INDEX) when a unique key was defined on a NOT
       NULL column. (Bug #24397406)

     * InnoDB: A high priority transaction involving a foreign
       key constraint check was not able to kill a lower
       priority blocking transaction. (Bug #24347476)

     * InnoDB: Page cleaner threads asserted due to a regression
       related to the adaptive hash index feature. (Bug
       References: This issue is a regression of: Bug #21407023.

     * InnoDB: InnoDB failed to free memory used by the
       full-text optimizer thread. (Bug #24331265)

     * InnoDB: When adding a new index, the server dropped an
       internally defined foreign key index and attempted to use
       a secondary index defined on a generated virtual column
       as the foreign key index, causing a server exit. InnoDB
       now permits a foreign key constraint to reference a
       secondary index defined on a generated virtual column.
       (Bug #23533396)

     * InnoDB: An INFORMATION_SCHEMA.FILES query resulted in a
       server exit due to a race condition with a concurrent
       tablespace creation operation. (Bug #23477214)

     * InnoDB: A table-copying online ALTER TABLE operation on a
       ROW_FORMAT=REDUNDANT table with indexed virtual columns
       raised an assertion. (Bug #22018745)

     * InnoDB: SHOW ENGINE INNODB STATUS output showed a
       "cleaning up" state for an idle thread. Thread state
       information was not reset after statement execution. (Bug
       #21974225, Bug #78777)

     * InnoDB: After a server restart, concurrent INSERT
       operations a table with an auto-increment primary key
       resulted in a duplicate entry error. The current
       auto-increment value was not changed after
       auto_increment_increment and auto_increment_offset
       settings were modified. (Bug #20989615, Bug #76872)

     * Replication: When using XA transactions, if a lock wait
       timeout or deadlock occurred for the applier (SQL) thread
       on a replication slave, the automatic retry did not work.
       The cause was that while the SQL thread would do a
       rollback, it would not roll the XA transaction back. This
       meant that when the transaction was retried, the first
       event was XA START which was invalid as the XA
       transaction was already in progress, leading to an
       XAER_RMFAIL error. (Bug #24764800)
       References: See also: Bug #24923091, Bug #24966941.

     * Replication: The group commit update of GTIDs has been
       refactored to improve performance on workloads with many
       small transactions. (Bug #24398760)

     * Replication: If the relay_log option was not specified in
       a configuration file, the relay_log_basename variable was
       being internally constructed on the fly using hostname
       but the relay_log_basename variable was not set. When a
       slave tried to access this uninitialized variable it
       resulted in an unexpected halt of the server. (Bug

     * Replication: For servers built with yaSSL, using group
       replication with secure connections could result in
       timeout failures waiting for view delivery. (Bug

     * Replication: Tables with special DEFAULT columns, such as
       DEFAULT CURRENT_TIMESTAMP, that existed only on a slave
       were not being updated when using row-based replication
       (binlog_format=ROW). (Bug #22916743)

     * Replication: An XA PREPARE statement that failed during
       the intermediate steps could lead to an inconsistent XA
       transaction state, where ID = -1 but the binlogged flag
       was set to true. This caused asserts while executing XA
       COMMIT and XA ROLLBACK queries. (Bug #22915670)

     * Replication: Enabling semisynchronous replication when a
       server was during the commit stage could cause the master
       to stop unexpectedly. This was related to the patch for
       Bug# 75570. (Bug #22202516)

     * Replication: The number of generated unwanted fseeks into
       the binary log file being replicated to a slave has been
       reduced. (Bug #83226, Bug #24763579)

     * Replication: The rpl.rpl_binlog_errors test was failing
       sporadically on Windows. (Bug #82302, Bug #24330138)

     * Replication: When binlog_group_commit_sync_delay was set
       to a value between 1 and 9, if
       binlog_group_commit_sync_no_delay_count was set to a
       value greater than 1, and the number of transaction
       commits was less than
       binlog_group_commit_sync_no_delay_count, these commits
       hung forever if no more commits were received; and if
       binlog_group_commit_sync_no_delay_count was set to 0, all
       transaction commits hung forever. (Bug #80652, Bug

     * Replication: Using semisynchronous replication was not
       possible with more than 1024 simultaneous connections.
       (Bug #79865, Bug #23581389)

     * Some Linux startup scripts did not process the datadir
       setting correctly. (Bug #25159791)

     * CREATE TABLE with a DATA DIRECTORY clause could be used
       to gain extra privileges. (Bug #25092566)

     * CMake now avoids configuring the
       -fexpensive-optimizations option for GCC versions for
       which the option triggers faulty shift-or optimizations.
       (Bug #24947597, Bug #83517)

     * OEL RPM packages now better detect which platforms have
       multilib support (for which 32-bit and 64-bit libraries
       can be installed). Thanks to Alexey Kopytov for the
       patch. (Bug #24925181, Bug #83457)

     * OEL RPM packages now better detect which platforms do not
       have multilib support (for which 32-bit and 64-bit
       libraries can be installed). Thanks to Alexey Kopytov for
       the patch. (Bug #24916428, Bug #83428)

     * Information about building MySQL 5.6 compatibility
       libraries in the MySQL 5.7 and higher .spec file is
       needed only for building libmysqlclient and libmysqld.
       Information about building the InnoDB memcached plugin
       was removed. (Bug #24908345, Bug #83409)

     * Compiling MySQL using Microsoft Visual Studio 2015
       Version 14.0.25420.1 in relwithdebinfo mode failed with
       linking errors. (Bug #24748505)

     * To better provide atomic file creation, Debian packaging
       scripts now use the coreutils install command rather than
       touch, chmod, and chown. (Bug #24688682)

     * For SLES packages, a typo in the installation script
       postamble prevented some cleanup from occurring. (Bug
       #24605300, Bug #82389)

     * Warnings occurring during CREATE TABLE ... SELECT could
       cause a server exit. (Bug #24595992)

     * For LOAD DATA statements, input data with too many column
       values produced only a warning, rather than an error as
       in MySQL 5.6. An error now occurs. (Bug #24577194, Bug

     * For segmentation faults on FreeBSD, the server did not
       generate a stack trace. (Bug #24566529, Bug #23575445,
       Bug #81827)

     * The .mylogin.cnf option file is intended for use by
       client programs, but the server was reading it as well.
       The server no longer reads it. (Bug #24557925)

     * The X Plugin was built with compilation options different
       from other plugins. (Bug #24555770, Bug #82777)

     * If mysqladmin shutdown encountered an error determining
       the server process ID file, it displayed an error message
       that did not clearly indicate the error was nonfatal. It
       now indicates that execution continues. (Bug #24496214)

     * The data structure used for ZEROFILL columns could
       experience memory corruption, leading eventually to a
       server exit. (Bug #24489302)

     * Operation of the script was based
       on my.cnf in the data directory. That option file is no
       longer used, so has been removed.
       (Bug #24487870)

     * Use of very long subpartition names could result in a
       server exit. Now partition or subpartition names larger
       than 64 characters produce an ER_TOO_LONG_IDENT error.
       (Bug #24400628, Bug #82429)

     * The Gis_wkb_vector<Gis_point> copy constructor was not
       explicitly instantiated, causing build problems for the
       Intel compiler. (Bug #24397833, Bug #82358)

     * Upgrading from MySQL 5.6 to 5.7.13 and then to 5.7.14
       resulted in an incorrect column order in the
       mysql.slave_master_info system table. (Bug #24384561, Bug

     * The AppArmor profile installed by Unbuntu packages was
       missing an entry permitting libnuma to read a /sys
       hierarchy path, resulting in server startup failure. (Bug

     * For an INSERT statement for which the VALUES list
       produced values for the second or later row using a
       subquery containing a join, the server could exit after
       failing to resolve the required privileges. (Bug

     * Infinite recursion could occur if the audit_log plugin
       signalled an error while handling an error. (Bug
       #23717558, Bug #82052)

     * MySQL now uses readdir() rather than readdir_r(). The
       latter has been deprecated since glibc 2.24 and caused
       debug builds of MySQL and builds using GCC 6.1 to fail.
       Additionally, several problems resulting in GCC 6.1
       compiler warnings were corrected. (Bug #23708395, Bug
       #24437737, Bug #82515, Bug #24459890, Bug #25103242)

     * For audit log events in the connection class, the
       connection_type value was available only for connect
       events. The value is now available in connect,
       disconnect, and change-user events. (Bug #23541550)

     * On Solaris, gettimeofday() could return an invalid value
       and cause a server shutdown. (Bug #23499695)

     * The keyring_file plugin could attempt to write keys to
       its storage file when the file did not exist. To ensure
       that keys are flushed only when the correct storage file
       exists, keyring_file now stores a SHA-256 checksum of the
       keyring in the file. Before updating the file, the plugin
       verifies that it contains the expected checksum. (Bug

     * START GROUP REPLICATION uses stacked Srv_session and did
       not return to the correct thread. START GROUP REPLICATION
       and STOP GROUP REPLICATION are now removed from the list
       of permitted commands. (Bug #23337984)

     * A union query resulting in tuples larger than
       max_join_size could result in a server exit. (Bug

     * The optimizer could choose ref access on a secondary
       index rather than range access on the primary key, even
       when the cost was higher. (Bug #23259872, Bug #81341)

     * For a query with ORDER BY and LIMIT, an optimizer trace
       did not record the optimizer's switch to a different
       index. (Bug #23227428, Bug #81250)

     * For some deeply nested expressions, the optimizer failed
       to detect stack overflow, resulting in a server exit.
       (Bug #23135667)

     * The sys schema ps_truncate_all_tables() function did not
       work with read_only enabled or for users with the SUPER
       privilege with super_read_only enabled, due to errors
       attempting to truncate Performance Schema tables. The
       server now skips the read_only/super_read_only check for
       Performance Schema tables, with the result that
       ps_truncate_all_tables() will work under such
       configurations. (Bug #23103937, Bug #81009)

     * For sessions created through the X Plugin, incorrect
       thread attachment/detachment could cause a server exit.
       (Bug #23057045)

     * When a JSON value consisted of a large sub-document
       wrapped in many levels of JSON arrays, objects, or both,
       serialization of the JSON value sometimes required an
       excessive amount time to complete. (Bug #23031146)

     * A binary (in-place) upgrade from MySQL 5.6 to 5.7
       followed by a data export performed using mysqlpump
       resulted in an Invalid default value for date_column
       error for attempts to reload the dump file. (Bug
       #22919028, Bug #80706)

     * SQL statements executed through the X Plugin were not
       instrumented in the Performance Schema. (Bug #22859462)

     * DROP INDEX operations could fail due to inconsistent
       handling of index prefix lengths for TEXT-type columns
       (TINYTEXT and so forth). (Bug #22740093, Bug #80392)

     * The innodb_numa_interleave system variable was
       erroneously available on some systems that were not
       NUMA-enabled. Thanks to Tomislav Plavcic for the patch.
       CMake now sets the default WITH_NUMA value based on
       whether the current platform has NUMA support. For
       platforms without NUMA support, CMake behaves as follows:

          + With no NUMA option (the normal case), CMake
            continues normally, producing only this warning:
            NUMA library missing or required version not

          + With -DWITH_NUMA=ON, CMake aborts with this error:
            NUMA library missing or required version not
       (Bug #22678436, Bug #80288)

     * When taking the server offline, a race condition within
       the Performance Schema could lead to a server exit. (Bug

     * On macOS, if a table with an associated trigger was
       renamed to a new name containing both lowercase and
       uppercase characters, DROP TRIGGER for the trigger
       resulted in an ER_NO_SUCH_TABLE error for the table. (Bug
       #22512899, Bug #79873)

     * In the MYSQL_FIELD C API structure, the org_table value
       for derived tables was *, which could cause failure for
       queries that depend on this value. The org_table value
       for views and derived tables now is set as follows: If
       the column is selected from a view, org_table names the
       view. If the column is selected from a derived table,
       org_table names the base table. If a derived table wraps
       a view, org_table still names the base table. If the
       column is an expression, org_table is the empty string.
       (Bug #22364401, Bug #79641)

     * The Performance Schema
       events_statements_summary_by_digest table could contain
       multiple rows for the same statement digest and schema
       combination, rather than the expected single (unique)
       row. (Bug #22320066, Bug #79533)

     * For Performance Schema system and status variable tables,
       variable values expressed in a character set different
       from utf8 could be truncated or incorrect. (Bug

     * Queries that were grouped on a column of a BLOB-based
       type, and that were ordered on the result of the AVG(),
       VAR_POP(), or STDDEV_POP() aggregate function, returned
       results in the wrong order if InnoDB temporary tables
       were used. (Bug #22275357, Bug #79366)

     * On Ubuntu, error messages were displayed during upgrades
       from Community to Commercial packages that made it appear
       as though mysqld and my_print_defaults had not been
       installed. Those messages were spurious and have been
       silenced. (Bug #21807248)

     * An invalid string value in the WHERE clause of an UPDATE
       statement, caused an index scan rather than a range scan
       to be used. For values not present in the index, this
       could be much slower. Now the optimizer determines this
       to be an "impossible WHERE" condition. (Bug #21032418,
       Bug #76933)

     * The return value from an fread() call was not checked.
       (Bug #20671150)

     * An in-place ALTER TABLE operation failed to report an
       error when adding a DATE or DATETIME column under these
       conditions: a) the column was NOT NULL and no default
       value was supplied; b) strict and NO_ZERO_DATE SQL modes
       were enabled; c) the table was not empty.
       An ALTER TABLE operation failed with an error rather than
       a warning when adding a DATE or DATETIME column under
       these conditions: a) the column was NOT NULL and no
       default value was supplied; b) strict SQL mode was
       enabled and NO_ZERO_DATE SQL mode was not enabled; c) the
       table was not empty. (Bug #16888677)

On Behalf of the MySQL/ORACLE RE Team
Hery Ramilison

MySQL General Mailing List
For list archives:
To unsubscribe:

Reply via email to