Web lists-archives.com

MySQL Community Server 8.0.2-dmr has been released (part 1/2)

Dear MySQL users,

[Due to file size limitations, the announcement is split in 2
  parts. This is part 1.]

MySQL Server 8.0.2-dmr (Milestone Release) is a new version of the world's
most popular open source database. This is the first public milestone
release of MySQL 8.0.


As with any other pre-production release, caution should be taken when
installing on production level systems or systems with critical data.

For information on installing MySQL 8.0.2-dmr on new servers, please see
the MySQL installation documentation at


MySQL Server 8.0.2-dmr 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.2-dmr 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.2-dmr 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.2-dmr since
the release of MySQL 8.0.1.



Changes in MySQL 8.0.2 (2017-07-17, Development Milestone)


   This is a milestone release, for use at your own risk.
   Significant development changes take place in milestone
   releases and you may encounter compatibility issues, such as
   data format changes that require attention in addition to the
   usual procedure of running mysql_upgrade. For example, you
   may find it necessary to dump your data with mysqldump before
   the upgrade and reload it afterward.

   Account Management Notes

     * During data directory initialization or upgrade, MySQL
       now creates a 'mysql.session'@'localhost' reserved
       account. This account is used internally by plugins to
       access the server. It is locked so that it cannot be used
       for client conections. (Bug #25642343)

     * These system variables now are available to permit
       automatic assignment of roles and to permit granted roles
       to be automatically activated at client connection time:

          + mandatory_roles takes a value listing roles that the
            server should treat as automatically granted to all

          + activate_all_roles_on_login, if enabled, causes all
            roles granted to users to be made active at client
            connection time.

   Character Set Support

     * For Unicode data that uses NO PAD collations, sorting of
       multibyte and variable-length values has been improved:

          + NO PAD collations are those based on UCA 9.0.0 and
            higher, such as utf8mb4_0900_ai_ci or

          + The performance improvement is greatest for sparse
            key values; that is, strings that do not fill their
            entire permitted length. For a VARCHAR(10) column
            that uses the utf8mb4_0900_ai_ci collation, values
            may take up to 40 bytes. The string 'a' is more
            sparse than 'abcdefghij'. But even 'abcdefghij' uses
            only 10 bytes of a possible 40 and is more sparse
            than a string of 10 emojis. The emoji string is
            dense because each character uses 4 bytes for a
            resulting string that requires the entire 40 bytes
       (Bug #25750527, Bug #85546)

     * MySQL now supports a new collation, utf8mb4_0900_as_ci,
       for the utf8mb4 Unicode character set. This collation is
       accent sensitive and case insensitive. It is similar to
       the default utf8mb4 collation (utf8mb4_0900_ai_ci) except
       that the default collation is accent insensitive.
       MySQL also now supports a new Japanese collation,
       utf8mb4_ja_0900_as_cs_ks, for the utf8mb4 Unicode
       character set. This collation is like
       utf8mb4_ja_0900_as_cs in that it is accent sensitive and
       case sensitive, but utf8mb4_ja_0900_as_cs_ks is also kana
       sensitive and distinguishes Katakana characters from
       Hiragana characters. utf8mb4_ja_0900_as_cs treats
       Katakana and Hiragana characters as equal for sorting.
       Applications that require a Japanese collation but not
       kana sensitivity may use utf8mb4_ja_0900_as_cs for better
       sort performance. utf8mb4_ja_0900_as_cs uses three weight
       levels for sorting; utf8mb4_ja_0900_as_cs_ks uses four.
       utf8mb4_ja_0900_as_cs_ks is the first collation to use
       the _ks collation suffix. Japanese collations without
       this suffix are not kana sensitive.
       For more information, see Unicode Character Sets

     * These character set changes were made to MySQL client

          + These clients use a default character set of utf8mb4
            rather than latin1: mysql, mysql_upgrade,
            mysqladmin, mysqlcheck, mysqldump, mysqlimport,
            mysqlpump, mysqlslap, mysqlshow, and mysqltest.
            (This change does not affect character set
            autodetection performed by mysql, mysqladmin,
            mysqlcheck, mysqlimport, and mysqlshow, as described
            at Connection Character Sets and Collations

          + Client connections created using the libmysqlclient
            library use a default character set of utf8mb4
            rather than latin1.

          + The mysqltest program supports a
            --default-character-set option for specifying the
            character set explicitly.

   Compilation Notes

     * Performance: The strict aliasing optimization for GCC is
       no longer disabled, which results in a minor improvement
       for MySQL single-threaded performance.

     * Linux: MySQL now compiles on Alpine Linux. (Bug
       #25945568, Bug #80322)

     * Solaris: On Solaris, server builds now use std::atomic,
       so they must be linked against libstatomic. (Bug

     * MySQL now compiles using Visual Studio 2017. (Bug

     * The required version of the Boost library for server
       builds has been raised to 1.64.0. (Bug #25772329, Bug

     * These changes were made with respect to client program

          + Client programs should only need to #include the
            <mysql.h> header file. In particular, <my_config.h>
            should not be needed, and is no longer installed.

          + The my_init() function is no longer included in the
            list of symbols exported from libmysqlclient. It
            need not be called explicitly by client programs
            because it is called implicitly by other C API
            initialization functions.
       (Bug #25732787)

     * For the Xcode IDE, header files are added to MySQL
       project sources so they can be searched. (Bug #25636986)

     * Work was done to clean up the source code base,
       including: Removing unneeded CMake checks; removing
       unused macros from source files; reorganizing header
       files to reduce the number of dependencies and make them
       more modular, removing function declarations without
       definitions, replacing locally written functions with
       equivalent functions from industry-standard libraries.

   Component Notes

     * Two new services are available to enable server
       components and plugins to register and unregister
       user-defined-functions (UDFs):
       mysql_service_udf_registration and
       mysql_service_udf_registration_aggregate provide
       registration services for scalar and aggregate UDFs,
       respectively. These services enable components and
       plugins to manage UDFs for themselves, without the need
       for CREATE FUNCTION and DROP FUNCTION statements.
       UDFs registered using either these services or CREATE
       FUNCTION now are listed in the new Performance Schema
       user_defined_functions table. See The
       user_defined_functions Table

     * The mysql_string string-manipulation service has been
       converted from a plugin service to a component service: a
       set of string service APIs for use by server components.
       The password validation component has been updated to use
       the revised service implementation. For information about
       services, see MySQL Services for Components and Plugins

   Configuration Notes

     * Previously, LOCAL capability for LOAD DATA operations was
       enabled by default in some contexts: The client library
       in MySQL binary distributions was compiled with
       client-side LOCAL capability enabled, and the
       local_infile system variable was enabled on the server
       side. LOCAL capability is now disabled by default in all
       contexts. Client programs must be configured explicitly
       to enable LOCAL, and the server must be run with
       local_infile enabled. See Security Issues with LOAD DATA
       (Bug #24511108)

     * mysqld startup behavior has been modified as follows. In
       general, these changes enable more consistent or easier
       server startup when not using mysqld_safe.

          + The server executable determines its own full path
            name at startup and uses the parent of the directory
            in which it is located as the default basedir value.
            This in turn enables the server to use that basedir
            when searching for server-related information such
            as the share directory containing error messages.

          + If error log output cannot be redirected to the
            --log-error option value, error output could be
            lost. This is now less likely.

          + If the server is started using the --daemonize
            option and is not connected to a tty device, a
            default error logging option of --log-error="" is
            used in the absence of an explicit logging option,
            to direct error output to the default log file.
            Previously, an error could occur under these

          + The -D and -I options now are synonyms for
            --daemonize and --initialize, respectively.
       (Bug #20398088, Bug #75343)

     * MySQL now supports a SET PERSIST_ONLY variant of SET
       statement syntax, for making configuration changes at
       runtime that also persist across server restarts. Like
       SET PERSIST, SET PERSIST_ONLY writes the variable setting
       to an option file named mysqld-auto.cnf in the data
       directory. However, unlike PERSIST, PERSIST_ONLY does not
       modify the runtime global system variable value. This
       makes PERSIST_ONLY suitable for configuring read-only
       system variables that only be set can at server startup.
       For more information, see Using Option Files
       and SET Syntax for Variable Assignment
       Use of SET PERSIST_ONLY requires the new

     * The explicit_defaults_for_timestamp system variable is
       now enabled by default (previously disabled by default),
       and a warning occurs if you disable it. This means that
       the nonstandard (and deprecated) behaviors for default
       values and NULL-value handling in TIMESTAMP columns are
       now disabled by default.

     * Symbolic link support as described at Using Symbolic
       Links for MyISAM Tables on Unix
       along with the --symbolic-links option
       that controls it, is now deprecated and will be removed
       in a future version of MySQL. In addition, the option is
       now disabled by default. The related have_symlink system
       variable also is deprecated and will be removed in a
       future version of MySQL.

   Data Dictionary Notes

     * The column_stats system table has been removed and
       replaced by the column_statistics data dictionary table.

     * The version data dictionary table was renamed to
       Metadata for INFORMATION_SCHEMA tables created by dynamic
       plugins now is recorded in the data dictionary and
       visible through the INFORMATION_SCHEMA TABLES table.
       These tables are no longer visible in INFORMATION_SCHEMA:
       impact is minimal because these tables are for internal
       use by server components.

     * The InnoDB storage engine now uses the global MySQL data
       dictionary rather than its own storage engine-specific
       data dictionary. For information about the data
       dictionary, see MySQL Data Dictionary
       The following list briefly describes the main
       implications of this change:

          + Upgrade and downgrade implications:
               o To upgrade from MySQL 5.7 to MySQL 8.0, you
                 must perform the upgrade procedure described at
                 Upgrading MySQL
               o Downgrading from MySQL 8.0 to MySQL 5.7 is only
                 supported using the logical downgrade method (a
                 mysqldump downgrade). In-place downgrades are
                 not supported.

          + Metadata updates associated with exporting and
            importing tablespaces using the transportable
            tablespace feature are now performed on global data
            dictionary tables instead of InnoDB data dictionary

          + InnoDB in-memory metadata is now instantiated from
            global data dictionary objects. This metadata was
            previously read from InnoDB system tables.

          + Table options that signify tablespace encryption and
            transparent page compression are now retrieved from
            the global data dictionary.

          + Data dictionary support was added for InnoDB
            FULLTEXT indexes. Auxiliary index table names were
            changed to lowercase.

          + InnoDB metadata created or modified during DDL
            operations is now written to the global data

     * mysql system tables and data dictionary tables are now
       created in a single InnoDB tablespace file named
       mysql.ibd in the MySQL data directory. Previously, these
       tables were created in individual InnoDB tablespace files
       in the mysql database directory. Associated changes

          + The InnoDB data dictionary buffer table, which
            stores fast changing InnoDB metadata, was renamed to
            innodb_dynamic_metadata and moved from the InnoDB
            system tablespace to the data dictionary tablespace.

          + Undo tablespace metadata now resides in the data
            dictionary tablespace, which allows InnoDB to locate
            undo tablespaces at startup.

          + Temporary tablespace metadata now resides in the
            data dictionary tablespace.

          + Undo tablespace and temporary tablespace metadata is
            found the mysql.tablespaces data dictionary table,
            which makes the data visible to other data
            dictionary tables.

          + Table definitions for tables created in the mysql
            tablespace, the InnoDB system tablespace
            (innodb_system), or general tablespaces now include
            a TABLESPACE attribute. This change has the
            following implications:
               o You cannot use CREATE TEMPORY TABLE ... LIKE to
                 create an empty table based on the definition
                 of a table that resides in any of the
                 aforementioned tablespaces, as these
                 tablespaces do not support temporary tables.
               o CREATE TABLE ... LIKE preserves the TABLESPACE
                 attribute of the original table and creates a
                 new table in the defined tablespace regardless
                 of the innodb_file_per_table setting. This is a
                 temporary regression.
            For more information and workarounds, see CREATE
            TABLE ... LIKE Syntax
            and CREATE TEMPORARY TABLE Syntax

   Optimizer Notes

     * MySQL now enables management of histogram statistics for
       table column values:

          + The ANALYZE TABLE statement supports UPDATE
            HISTOGRAM and DROP HISTOGRAM clauses for generating
            and removing column histogram statistics.

          + The server stores histogram information in the
            column_statistics data dictionary table. Histograms
            are viewable using the

          + The histogram_generation_max_mem_size system
            variable controls the amount of memory available for
            histogram generation.

          + The Performance Schema has a memory/sql/histograms
            instrument for monitoring memory allocations
            performed for histogram generation.

          + mysqldump and mysqlpump have a --column-statistics
            option to add ANALYZE TABLE statements to the output
            to generate histogram statistics for dumped tables
            when the dump file is reloaded.
       For more information, see ANALYZE TABLE Syntax
       Optimizer Statistics

     * MySQL now supports window functions that, for each row
       from a query, perform a calculation using rows related to
       that row. These include functions such as RANK(), LAG(),
       and NTILE(). In addition, several existing aggregate
       functions now can be used as window functions; for
       example, SUM() and AVG(). For more information, see
       Window Functions
       Each of the following words now is a reserved word and
       cannot be used as an identifier without identifier

   Packaging Notes

     * mysqladmin was added to Docker/Minimal packages because
       it is needed by InnoDB Cluster. (Bug #25998285)

     * Debian/Ubuntu packages now support multiple MySQL
       instances with systemd. See Managing MySQL Server with
       (Bug #24559588, Bug #82785)

   Parser Notes

     * The parser rules for ALTER TABLE were refactored to be
       context independent and improve maintainability and
       extensibility. A resulting effect is that some previously
       accepted undocumented syntax variants are no longer
       accepted. For example, CREATE TABLE statements were
       permitted with column names qualified by the table name,
       or by the current database and table name. Such
       statements now produce an error.

     * Support for these deprecated syntax constructs for table
       and column references has been removed and their use now
       results in an error. Instances of these constructs should
       be changed to remove the leading period.

          + .col_name

          + .tbl_name

          + .tbl_name.col_name

   Performance Schema Notes

     * The Performance Schema now supports versioning, and
       maintains the current definitions for its tables
       internally. At startup, the server compares its supported
       Performance Schema version with the Performance Schema
       version stored in the data dictionary. If the versions
       differ, the server drops any old Performance Schema
       tables and recreates them using the current definitions.
       In consequence of this change:

          + For MySQL upgrades, it is no longer necessary to run
            mysql_upgrade to incorporate changes to Performance
            Schema tables because they are recreated
            automatically as necessary at server startup.

          + The mysql_system_tables.sql support script no longer
            includes SQL statements for Performance Schema table
            creation because these table definitions are
            maintained internally.
       To support dynamic Performance Schema table manipulation,
       a new component service named pfs_table_service is now

     * The Performance Schema default instrumentation settings
       have changed:

          + The transaction instrument and the
            events_transactions_current and
            events_transactions_history consumers are now
            enabled by default. See Performance Schema
            Transaction Tables

          + All memory/% memory instruments are now enabled by
            default. See Memory Summary Tables

          + The wait/lock/metadata/sql/mdl metadata lock
            instrument is now enabled by default. See The
            metadata_locks Table

   Security Notes

     * Security Fix: The linked OpenSSL library for the MySQL
       Commercial Server has been updated to version 1.0.2l.
       Issues fixed in the new OpenSSL version are described at
       This change does not affect the Oracle-produced MySQL
       Community build of MySQL Server, which uses the yaSSL
       library instead. (Bug #26160962)

     * Previously, any user could execute the XA RECOVER
       statement to discover the XID values for outstanding
       prepared XA transactions, possibly leading to commit or
       rollback of an XA transaction by a user other than the
       one who started it. Now XA RECOVER is permitted only to
       users who have the new XA_RECOVER_ADMIN privilege, which
       is expected to be granted only to administrative users
       who have need for it. This might be the case, for
       example, for administrators of an XA application if it
       has crashed and it is necessary to find outstanding
       transactions started by the application so they can be
       rolled back. This privilege requirement does not affect
       normal commit or rollback of an XA transaction because
       the user who started it knows its XID.
       For MySQL uprades, mysql_upgrade grants XA_RECOVER_ADMIN
       to users who have the SUPER privilege, unless some
       account is found that already has XA_RECOVER_ADMIN. (Bug

   Spatial Data Support

     * Argument suitability checking was improved for these
       spatial functions: ST_Contains(), ST_Crosses(),
       ST_Disjoint(), ST_Equals(), ST_Intersects(),
       ST_Overlaps(), ST_Touches(), ST_Within(), MBRContains(),
       MBRCoveredBy(), MBRCovers(), MBRDisjoint(), MBREquals(),
       MBRIntersects(), MBROverlaps(), MBRTouches(),
       MBRWithin(). For more information, see Spatial Relation
       Functions That Use Object Shapes
       and MySQL-Specific Spatial
       Relation Functions That Use Minimum Bounding Rectangles

   Test Suite Notes

     * The --do-test-list option for mysql-test-run.pl accepts
       an argument for a file containing tests one per line.
       Lines in the file are now accepted in any of the
       following formats:

       (Bug #25700362)

     * mysql-test-run.pl and mysqltest are now more restrictive
       about permitted test case and result file names. Names
       must consist only of alphanumeric characters (A-Z, a-z,
       0-9), dash (-), or underscore (_), and cannot start with
       dash or underscore. An error occurs for nonconforming
       file names. (Bug #25487471)

     * These changes were made to the --xml-report option for

          + A <failure> tag identifies any test failing on a
            retry attempt.

          + Separate statistics and fields are included for
            skipped and disabled tests.

          + The XML report is created in the build directory if
            no absolute path is given for out-of-source builds.

          + For combination runs, a field named variation is
            included in the <testcase> tag.

          + Results for all tests belonging to a suite are
            aggregated within a single <testsuite> tag.

          + Information regarding failures is reported with a
            brief reason in an attribute named message, along
            with other details within the tag.
       (Bug #25349924)

     * mysql-test-run.pl now supports a --report-unstable-tests
       option that has these effects:

          + Reports any test that has passed using at least one
            retry attempt in a separate category called
            "Unstable tests" in the summary.

          + If all failures are due to unstable tests,
            mysql-test-run.pl produces a warning but exits

          + Adds a new XML tag to report unstable tests, if the
            --xml-report option is also specified.
       (Bug #24473420, Bug #25984429)

     * mysqltest now supports a replace_numeric_round command
       that takes an argument value from 0 to 16 indicating the
       number of decimals to round numeric values to. This can
       be used to help prevent result content mismatch errors
       for tests in which slightly different results are
       obtained across platforms due to precision differences.
       Thanks to Daniel Black for the patch. (Bug #23280117, Bug

     * mysql-test-run.pl now looks for a testname-client.opt
       file, which is analogous to the testname-master.opt file
       but for specifying test-specific client options. (Bug

   Platform-Specific Notes

     * Linux: The generic Linux build for MySQL 8.0 now supports
       Non-Uniform Memory Access (NUMA) on its host system.
       Systems that use the build need to have libnuma installed
       on them. See Installing MySQL on Unix/Linux Using Generic
       for more details. (Bug #26005558)

   Functionality Added or Changed

     * Incompatible Change; InnoDB: ADD PARTITION, DROP
       REBUILD PARTITION ALTER TABLE options are now supported
       by native partitioning in-place APIs and may be used with
       ALGORITHM={COPY|INPLACE} and LOCK clauses.
       EXCHANGE PARTITION, which previously supported ALGORITHM
       and LOCK clauses, is performed by a new server layer API
       for compatibility with the MySQL data dictionary.
       Partition and table exchange is performed internally by
       the native partition handler.
       DROP PARTITION with ALGORITHM=INPLACE deletes data stored
       in the partition and drops the partition. However, DROP
       PARTITION with ALGORITHM=COPY or old_alter_table=ON
       rebuilds the partitioned table and attempts to move data
       from the dropped partition to another partition with a
       compatible PARTITION ... VALUES definition. Data that
       cannot be moved to another partition is deleted.

     * InnoDB: InnoDB now uses tablespace map files during
       recovery to identify tablespaces that require redo log
       application. This is a change from redo log tablespace
       discovery that was used previously.
       If tablespace map files are lost or corrupted, the
       innodb_scan_directories startup option may be used to
       specify tablespace directories when starting MySQL after
       a server outage.
       For more information, see Tablespace Discovery During
       Crash Recovery
       (Bug #24793413)

     * Replication: In previous versions issuing STOP
       GROUP_REPLICATION stopped the plugin but there was a
       period during this process when the server still accepted
       transactions. This meant the transactions were not
       transmitted to the group, and if the plugin failed to
       stop correctly further transactions were accepted. To
       make STOP GROUP_REPLICATION safer, now super_read_only is
       set to ON immediately upon issuing STOP
       GROUP_REPLICATION, which ensures no transactions are
       accepted. (Bug #25495067, Bug #84795)

     * Replication: When there was a network partition and a
       member was in a minority all queries to that member
       blocked. To improve this situation, the
       group_replication_unreachable_majority_timeout variable
       has been added which enables you to configure how long
       members in a minority wait to regain contact with a
       member in the majority before leaving the group. (Bug

     * Replication: The group_replication_transaction_size_limit
       variable was added to enable you to protect a group
       against large transactions causing a failure. (Bug
       #84785, Bug #25510757)

     * Replication: Support for binary log files created by
       versions earlier than MySQL 5.0 has been removed, and
       binary log Version 1 and Version 3 formats are no longer
       supported by slaves or mysqlbinlog.

     * Replication: The replication_group_members and
       replication_group_member_stats Performance Schema tables
       have been extended to provide more monitoring information
       for Group Replication. The replication_group_members
       table now includes information about member's roles, and
       the versions of MySQL running on a member. The
       replication_group_member_stats table now includes
       information about all members in the group, the applier
       and local queues, and rolled back transactions.

     * Replication: The receiver thread has been improved to no
       longer block other thread's activities when waiting for
       disk space. This improves the monitoring of replication
       ensuring that it reports correctly when the receiver
       thread is waiting for disk space. If you are not able to
       free disk space to allow the receiver thread to continue
       its activity, it can be forcefully stopped without side
       effects in most cases.

     * Replication: A new transaction length field has been
       added to the Gtid_log_event which stores the transaction
       length in bytes.

     * Replication: The following variables have had their
       defaults changed to ensure replication is as robust and
       efficient as possible by default:

          + master_info_repository=TABLE and
            relay_log_info_repository=TABLE ensure that binary
            log information is stored in InnoDB tables, making
            replication resilient to unexpected halts.

          + transaction_write_set_extraction=XXHASH64 enables
            the optimal method for generating write set hashes.

          + slave_rows_search_algorithms='INDEX_SCAN,HASH_SCAN'
            enables the use of a hash table to avoid repeated
            table scans when no Primary Key or Primary Key
            Equivalent (non-null unique secondary index) exists
            for a table

          + expire_logs_days=30 causes unused binary logs that
            are older than 30 days to be purged, ensuring
            storage space is used efficiently.

     * Replication: The Group Replication plugin now notifies
       other components in the server that some relevant events
       have happened. Upon view changes, recovery state updates,
       network partitioning and primary election, the plugin
       informs listeners registered in the service registry and
       notifies them that an event has occurred. These
       listeners, which could even be other plugins, can then
       react to these events.

     * Replication: The group_replication_member_weight variable
       has been added which enables you to control the election
       of new primaries in single-primary mode. In previous
       versions primary election was based on the member's UUID,
       with the lowest UUID elected as the new primary in the
       event of fail over. Use this variable to assign numeric
       weights to members to ensure that specific members are
       elected, for example during scheduled maintenance of the
       primary or to ensure certain hardware is prioritised.

     * Replication: The following new system variables have been
       added to configure Group Replication:

          + group_replication_flow_control_hold_percent

          + group_replication_flow_control_max_commit_quota

          + group_replication_flow_control_member_quota_percent

          + group_replication_flow_control_min_quota

          + group_replication_flow_control_min_recovery_quota

          + group_replication_flow_control_period

          + group_replication_flow_control_release_percent
       These variables enable you to fine tune flow control of
       individual group members, adjusting the quota depending
       on the task the member performs in the group.

     * JSON: Added support for ranges in the XPath expressions
       used with many MySQL JSON functions, including
       JSON_EXTRACT() and JSON_REMOVE(). Such a range is
       specified using the syntax start to end, where start and
       end are, respectively, the first and last indexes of a
       range of elements from a JSON array (always numbered
       starting with 0). For example, $[1 to 3] includes the
       second, third, and fourth elements, as shown here:
mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]');
| JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]') |
| [2, 3, 4]                                    |
1 row in set (0.00 sec)

       This work also provides support in such expressions for
       the last keyword, which you can use to represent the
       index of the last (rightmost) element in the current
       array, like this:
mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last]');
| JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last]') |
| 5                                          |
1 row in set (0.00 sec)

       Indexes relative to the end of the array are also
       supported, as shown here:
mysql> SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-4 to last-2]');
| JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[last-4 to last-2]') |
| [1, 2, 3]                                              |
1 row in set (0.00 sec)

       For further information and examples, see Searching and
       Modifying JSON Values
       (Bug #79052, Bug #22285926)

     * JSON: The optimizer now supports partial (in-place)
       updates of JSON documents when using JSON_SET(),
       JSON_REPLACE(), or JSON_REMOVE(). (Previously, all
       updates of JSON column values were done by completely
       removing the previous document and writing the new one in
       its place.) In general, this optimization can be
       performed when the replacement value is less than or
       equal in size to the column's original value, and no new
       elements are added to the original value. It cannot be
       performed for a simple replacement of the column value of
       the form UPDATE tbl SET json_col = json_val.
       The JSON Data Type
       provides more information about the requirements for an
       update to be optimized in this way.
       This work includes the addition of two JSON utility
       functions, JSON_STORAGE_SIZE() and JSON_STORAGE_FREE(),
       in the MySQL Server. JSON_STORAGE_SIZE() returns the
       number of bytes used to store the binary representation
       of a JSON document, whether the document is presented as
       a column value in a table, as the value of a user
       variable, or as a JSON literal. In the case of a JSON
       column, this is the space used to store the JSON document
       as it was inserted into the column, prior to any partial
       updates that may have been performed on it since then.
       JSON_STORAGE_FREE() shows the number of bytes in the
       binary representation of a JSON column value that were
       freed by the most recent partial update of the column.
       For a user variable storing a JSON document,
       JSON_STORAGE_FREE() always returns 0; it also returns 0
       if the argument is a JSON literal.
       Each of these functions, like many other MySQL functions
       that act on JSON values, also accepts a string that can
       be successfully parsed as a JSON document. For more
       information and examples, see JSON Utility Functions

     * RPM .spec files now include support for running unit
       tests. (Bug #25814143, Bug #85743)

     * For Windows, MSI installer packages now include a check
       for the required Visual Studio redistributable package,
       and produce a message asking the user to install it if it
       is missing. (Bug #25658832)

     * The mysql client now supports a --binary-as-hex option
       that causes display of binary data using hexadecimal
       notation (0xvalue). Thanks to Daniël van Eeden for the
       patch. (Bug #25340722, Bug #84391)

     * The SHOW TABLES statement now supports an optional
       EXTENDED keyword that causes statement output to list
       hidden tables created by failed ALTER TABLE statements.
       (These temporary tables have names beginning with #sql.)
       For more information, see SHOW TABLES Syntax
       (Bug #24786075, Bug #83241)

     * The mysql client by default strips comments in statements
       sent to the server, and this behavior is controlled using
       --skip-comments (strip comments), and --comments
       (preserve comments).
       Comment stripping is now deprecated. This feature and the
       options to control it will be removed in a future MySQL

     * The TempTable storage engine replaces the MEMORY storage
       engine as the default engine for in-memory internal
       temporary tables. The TempTable storage engine provides
       efficient storage for VARCHAR and VARBINARY columns. The
       internal_tmp_mem_storage_engine session variable defines
       the storage engine for in-memory internal temporary
       tables. Permitted values are TempTable (the default) and
       MEMORY. The temptable_max_ram configuration option
       defines the maximum amount of memory that the TempTable
       storage engine can use before data is stored to disk.
       The memory/temptable/physical_ram and
       memory/temptable/physical_disk Performance Schema
       instruments may be used to monitor TempTable memory
       allocation and disk storage.

     * The MySQL 8.0.2 release introduces a number of undo
       related changes:

          + The number of undo tablespaces may be modified at
            runtime or when the server is restarted using the
            existing innodb_undo_tablespaces configuration
            option. Previously, the number of undo tablespaces
            could only be configured when initializing the MySQL
            instance and could not be changed afterward. This
            change permits the addition of undo tablespaces and
            rollback segments as a database installation grows.

          + innodb_undo_log_truncate is enabled by default. When
            enabled, any undo tablespace that exceeds the
            threshold value defined by innodb_max_undo_log_size
            is marked for truncation. See Truncating Undo Logs
            That Reside in Undo Tablespaces

          + The innodb_undo_tablespaces default value was
            changed from 0 to 2, which means that rollback
            segments are created in two separate undo
            tablespaces instead of the InnoDB system tablespace
            by default. A minimum of two undo tablespaces is
            required to permit truncation of undo logs.
            Setting innodb_undo_tablespaces to 0 is deprecated
            and will not be supported in a future release.

          + The naming convention used for undo tablespace files
            is changed from undoNNN to undo_NNN, where NNN is
            the undo space number.

          + The innodb_rollback_segments configuration option
            defines the number of rollback segments per undo
            tablespace. Previously, innodb_rollback_segments was
            a global setting that specified the total number of
            rollback segments for the MySQL instance. This
            change increases the number of rollback segments
            available for concurrent transactions, and more
            rollback segments increases the likelihood that
            concurrent transactions use separate rollback
            segments for undo logs resulting in less resource

          + The innodb_undo_logs configuration option is
            removed. The innodb_rollback_segments configuration
            option performs the same function and should be used

          + The Innodb_available_undo_logs status variable is
            removed. The number of available rollback segments
            per tablespace may be retrieved using SHOW VARIABLES
            LIKE 'innodb_rollback_segments';

     * The SHOW COLUMNS and SHOW INDEX statements now support an
       optional EXTENDED keyword that causes statement output to
       include information about hidden columns and indexes that
       MySQL uses internally and are not accessible by users.
       For more information, see SHOW COLUMNS Syntax
       and SHOW INDEX Syntax

[ To be continued...]

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