The MySQL Development team is very happy to announce that MySQL 5.7.7, the first 5.7 Release Candidate (RC1), is now available for download at dev.mysql.com (use the “Development Releases” tab). You can find the full list of changes and bug fixes in the 5.7.7 release notes. Here are some highlights. Enjoy!

SYS Schema

Include SYS Schema in MySQL 5.7 (WL#8159) — This work by Mark Leith integrates the SYS Schema (formerly ps_helper) within the MySQL Server by default. The MySQL SYS schema project has become increasingly popular within our user base over the last year. Many DBAs and developers within our user base noted that it brought some needed simplicity to configuring and querying the Performance Schema, integrating it with Information_Schema, and more. For example, see a community post here. The works also implements the feature request from Bug#71207.

Scalability

Improve scalability by partitioning LOCK_grant lock (WL#8355) — After we improved scalability by not using THR_LOCK locks for InnoDB tables (WL#6671), the LOCK_grant lock then became more visible as the next scalability bottleneck in some workloads; for example, the single table InnoDB POINT_SELECT Sysbench tests (see also Bug#72829). This work by Dmitry Lenev addresses this issue and further improves scalability by partitioning the LOCK_grant lock.

Improve scalability by not acquiring unnecessary locks for internal temp tables (WL#8356) — This work by Dmitry Lenev removes bottlenecks around LOCK_plugin and THR_LOCK_lock in workloads which involve the creation of internal memory based temporary tables; for example, like Sysbench’s SELECT_DISTINCT test for InnoDB. There is no real reason why we should acquire these locks for internal temporary tables, so we removed this unnecessary overhead.

Replication

Binlogging XA-prepared transactions (WL#6860) — This work by Andrei Elkin adds full support for XA-transactions within replication. An XA-transaction allows the client to participate in a two-phase commit protocol. The state of the XA-transaction being prepared is persisted in the database; this means that a prepared XA-transaction will survive client reconnects and server restarts. This work fixes Bug#12161.

Deprecate @@session.gtid_executed (WL#7518) — This work by Shivji Jha causes deprecation warnings to be generated when a user accesses the @@session.gtid_executed Server status variable. We plan to remove the session variable completely in MySQL 5.8 (leaving only the globally scoped variable).

Security

Support SSL by default in libmysql (WL#7712) — This work by Yashwant Sahu ensures the use of SSL whenever it has been enabled within the Server. If none of the SSL options are specified, libmysql client will attempt an SSL connection if it is supported by the Server. If an SSL connection is not possible, however, then libmysql client will fall back to an unencrypted connection.

Expand proxy user capabilities for built-in authentication plugins (WL#7724) — This work by Todd Farmer extends the built-in authentication plugins to support proxy users. MySQL Server had an existing concept of proxy users which can support a major use case that is typically met by SQL Roles: the ability to abstract user credentials/identity from the privileges assigned. This allows multiple users–identified, logged, and audited in a distinct manner—to share a single set of managed privileges. For deployments with many users having identical privileges, this can provide major operational benefits, but until now, proxy users could only be leveraged by external authentication plugins. This work removes that previous limitation.

Extend Secure Deployment work to all Unix variants (WL#7787) — This work by Surya Narayana extends the work previously done for Oracle Linux to all other Unix variants and Unix like operating systems. 1) For all Unix packages which do not prompt the user for an initial password, a random password should be generated by default. 2) For all supported Unix platforms, a package without the Test/Demo database(s), the Test/Demo libraries, and the Test/Demo scripts or binaries will be provided. 3) For all supported Unix platforms, no anonymous users or accounts will be created by default.

Upgrade

Ensure 5.7 supports smooth “live” upgrades from 5.6 (WL#8350) — This work by Robert Golebiowski ensures that during the upgrade process the 5.7 binaries will work with the 5.6 data directory layout, and without having to specify the --skip-grant-tables or other non-standard options. This work seamlessly and automatically handles all changes made to the MySQL system tables between 5.6 and 5.7 (most notably, in 5.7 the plugin field cannot be null and password field has been removed).

GIS

Implement ST_Buffer and ST_Distance with Boost.Geometry (WL#7929) — This work by David Zhao replaces the current ST_Buffer() implementation with the Boost.Geometry buffer implementation. This work also replaces the old ST_Distance() implementation with the Boost.Geometry algorithms.

Geometry Set Operations Depending on Boost Geometry Extensions (WL#7225) — This work by Norvald Ryeng replaces the old GIS implementation with calls to Boost.Geometry for the following functions: ST_Intersects() , ST_Union() , ST_Difference() , ST_SymDifference() , and ST_IsSimple() . This work fixes Bug#73850.

Parser

Parser for Optimizer Hints (WL#8016) — This work by Gleb Shchepa adds parser rules to support a new hint syntax for optimizer hints. Hints can now be specified directly after the SELECT|INSERT|REPLACE|UPDATE|DELETE keywords in an SQL statement, and they must be enclosed in /*+ */ style comments. Not only does this provide the end-user with a more consistent and easy to use method of managing hints, but the internal refactoring done makes it far easier to add Server side support for additional hints moving forward (see WL#8241 and WL#8243 below).

Optimizer

Infrastructure for Optimizer Hints (WL#8017) — This work by Sergey Glukhov implements the general infrastructure common to all hints given the new syntax (see WL#8016). This includes: 1. a data structure for associating hints with the relevant query block during parsing 2. utility functions for resolving the names of database objects (e.g. table names, index names, etc.) and associating the hints with the relevant objects 3. a data structure that the Optimizer can use to look up hints within the current query.

Hints for Join Buffering and Batched Key Access (WL#8241) — This work by Sergey Glukhov adds new hints that allow the user to influence the Optimizer as it decides whether to use join buffering or batched key access during the execution of the query against the given set of tables.

Index Level Hints for MySQL 5.7 (WL#8243) — This work by Sergey Glukhov adds new hints that allow the user to control which indexes should be candidates for index condition pushdown (ICP), multi-range read (MMR), and range optimization.

Server Defaults

Enable multiple page cleaners and purge threads by default (WL#8316) — This work by Bin Su changes the defaults values of innodb_page_cleaners to 4 (was: 1) and innodb_purge_threads to 4 (was: 1). This offers better “out-of-the-box” performance on modern systems.

Make innodb_checksum_algorithm=CRC32 the default (WL#8315) — This work by Vasil Dimov changes the default of innodb_checksum_algorithm to ‘CRC32’ (was: innodb). This offers better performance due to the commonly available hardware acceleration on modern systems.

Enable InnoDB Buffer Pool dumps by default (WL#8317) — This work by Shaohua Wang changes the server to use the buffer pool dump by default and changes the default percentage to 25%. This work changes the default values of innodb_buffer_pool_dump_at_shutdown to TRUE (was: FALSE), innodb_buffer_pool_dump_pct to 25 (was: 100), and innodb_buffer_pool_load_at_startup to ‘TRUE’ (was: FALSE). This offers a good default balance between 1. supporting a “hot” working data set and 2. shutdown and startup times.

Enable Simplified GTID recovery by default (WL#8318) — This work by Namit Sharma changes the default of binlog_gtid_simple_recovery to ‘ON’ (was: OFF). This offers improved recovery performance by default.

Make NO_AUTO_CREATE_USER sql_mode behavior the default (WL#8326) — This work by Marek Szymczak changes the default of sql_mode to include NO_AUTO_CREATE_USER . This is to prevent the GRANT statement from unintentionally and automatically creating new user accounts without any authentication information having been specified/provided. This is part of our larger effort around making MySQL safer by default (improved security and data safety), as well as offering more standards compliant behavior by default.

Set ROW based binary log format by default (WL#8313) — This work by Joao Gramacho changes the default of binlog-format to ‘ROW’ (was: STATEMENT). ROW format provides safe and reliable logging/replication in all cases, and it also allows for improved InnoDB locking semantics by safely allowing the optional use of the READ-COMMITTED isolation level and the interleaved auto increment mode ( innodb_autoinc_lock_mode=2 ).

Make binlog_error_action=ABORT_SERVER the default (WL#8314) — This work by Narendra Chauhan changes the default value of binlog_error_action to ‘ABORT_SERVER’ (was: IGNORE_ERROR). This makes data safety the default priority.

Enable crash safe binary logs by default (WL#8319) — This work by Joao Gramacho changes the default value of sync_binlog to 1 (was: 0). This enables crash safe replication by default, again making data safety the default priority.

Lower the default slave_net_timeout (WL#8320) — This work by Joao Gramacho changes the default value of slave_net_timeout to 60 (was: 3600). This avoids long replication delays due to periodic network failures. See also, Bug#74607.

Enable the statements_history and transactions_history consumers by default (WL#8321) — This work by Mayank Prasad changes the default values of performance-schema-consumer-events-statements-history and performance-schema-consumer-events-transactions-history to ‘ON’ (was: OFF). Together, these produce information that is extremely helpful in debugging a wide variety of query related issues.

Improve InnoDB defaults and deprecate settings that are no longer applicable (WL#7703) — This work by Marko Mäkelä changes the default value of innodb_strict_mode to ‘ON’ (was: OFF). This is to ensure that InnoDB returns errors rather than warnings for certain conditions (again, making data safety the default behavior). It also changes the default value of innodb_file_format to ‘Barracuda’ (was: Antelope). The Barracuda file format is required for support of the new DYNAMIC and COMPRESSED row formats (the Antelope based row formats of REDUNDANT and COMPACT are still supported). Lastly, it also changes the default value for innodb_large_prefix to ‘ON’ (was: OFF). This allows index key prefixes larger than 767 bytes (up to 3072 bytes) for InnoDB tables that use the DYNAMIC and COMPRESSED row formats.

Bug Fixes

We have received a lot of valuable feedback from the MySQL community throughout the 5.7 DMR cycle. This input is invaluable, and our community members deserve a large THANK YOU! Here are just a few highlights of some of the community reported bugs that are now fixed in 5.7.7 RC1:

Bug #76344: mysql_install_db does not wait for forked mysqld to finish bootstrap — reported by Roel Van de Paar

Bug #76262: Crash when running mysql_upgrade after binary upgrade — reported by Simon Mudd

Bug#34124: EXPLAIN EXTENDED shows bogus value for ‘filtered’ column for LIMIT query — reported by Sergey Petrunya

Bug#75833: InnoDB Failing assertion: found in buf0buf.cc line 3856 — reported by Roel Van de Paar

Bug#71892: Missing information in slow query log for slow HANDLER statements — reported by Davi Arnaut

Bug#74182: mysql --quick causes segmentation fault — reported by Bill Karwin

causes segmentation fault — reported by Bill Karwin Bug#68713: create_duplicate_weedout_tmp_table() leaves key_part_flag uninitialized — reported by Alexey Kopytov

leaves uninitialized — reported by Alexey Kopytov Bug#72829: LOCK_grant is major contention point, leaves 30-40% idle CPU — reported by Stewart Smith

Bug#60417: Slow VIEWS by using subselect as column — reported by Richard Teubel

Bug#12755: Subquery in FROM clause of views — reported by Kay Doebl

Bug#73008: “ check table .. for upgrade ” fails to report old datetime format — reported by Shane Bester

” fails to report old datetime format — reported by Shane Bester Bug#76509: Use atomics to avoid mutex contention on LOCK_plugin due to Query Rewrite framework — reported by Sergey Vojtovich

You can also learn about the work that we did in 5.7, leading up to this first release candidate, through this series of milestone blog posts: 5.7.1, 5.7.2, 5.7.3, 5.7.4, 5.7.5, 5.7.6.

That’s it for now, and thanks for using MySQL!