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.
http://dev.mysql.com/doc/mysql-development-cycle/en/development-milestone-releases.html
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
http://dev.mysql.com/doc/refman/8.0/en/installing.html
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
http://dev.mysql.com/downloads/mysql/
MySQL Server 8.0.2-dmr is also available from our repository for Linux
platforms, go here for details:
http://dev.mysql.com/downloads/repo/
Windows packages are available via the Installer for Windows:
http://dev.mysql.com/downloads/installer/
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
installer.
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.:
http://bugs.mysql.com/report.php
The following link lists the changes in the MySQL 8.0.2-dmr since
the release of MySQL 8.0.1.
https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-2.html
Enjoy!
Changes in MySQL 8.0.2 (2017-07-17, Development Milestone)
Note
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
users.
+ 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
utf8mb4_ja_0900_as_cs.
+ 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
available.
(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
(http://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html).
* These character set changes were made to MySQL client
support:
+ 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
(http://dev.mysql.com/doc/refman/8.0/en/charset-connection.html)).
+ 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
#25957991)
* MySQL now compiles using Visual Studio 2017. (Bug
#25788406)
* The required version of the Boost library for server
builds has been raised to 1.64.0. (Bug #25772329, Bug
#85593)
* These changes were made with respect to client program
development:
+ 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
(http://dev.mysql.com/doc/refman/8.0/en/user-defined-functions-table.html).
* 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
(http://dev.mysql.com/doc/refman/8.0/en/component-plugin-services.html).
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
LOCAL
(http://dev.mysql.com/doc/refman/8.0/en/load-data-local.html).
(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
circumstances.
+ 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
(http://dev.mysql.com/doc/refman/8.0/en/option-files.html),
and SET Syntax for Variable Assignment
(http://dev.mysql.com/doc/refman/8.0/en/set-variable.html).
Use of SET PERSIST_ONLY requires the new
PERSIST_RO_VARIABLES_ADMIN privilege.
* 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
(http://dev.mysql.com/doc/refman/8.0/en/symbolic-links-to-tables.html),
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
dd_properties.
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:
SHOW_STATISTICS, SHOW_STATISTICS_DYNAMIC,
STATISTICS_BASE, STATISTICS_DYNAMIC, TABLES_DYNAMIC. User
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
(http://dev.mysql.com/doc/refman/8.0/en/data-dictionary.html).
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
(http://dev.mysql.com/doc/refman/8.0/en/upgrading.html).
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
tables.
+ 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
dictionary.
* 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
include:
+ 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
(http://dev.mysql.com/doc/refman/8.0/en/create-table-like.html),
and CREATE TEMPORARY TABLE Syntax
(http://dev.mysql.com/doc/refman/8.0/en/create-temporary-table.html).
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
INFORMATION_SCHEMA.COLUMN_STATISTICS table.
+ 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
(http://dev.mysql.com/doc/refman/8.0/en/analyze-table.html),
Optimizer Statistics
(http://dev.mysql.com/doc/refman/8.0/en/optimizer-statistics.html),
and The INFORMATION_SCHEMA COLUMN_STATISTICS
Table
(http://dev.mysql.com/doc/refman/8.0/en/column-statistics-table.html).
* 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
(http://dev.mysql.com/doc/refman/8.0/en/window-functions.html).
Note
Each of the following words now is a reserved word and
cannot be used as an identifier without identifier
quoting: CUME_DIST, DENSE_RANK, FIRST_VALUE, GROUPS, LAG,
LAST_VALUE, LEAD, NTH_VALUE, NTILE, OVER, PERCENT_RANK,
RANK, ROW_NUMBER, WINDOW.
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
systemd
(http://dev.mysql.com/doc/refman/8.0/en/using-systemd.html).
(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
available.
* 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
(http://dev.mysql.com/doc/refman/8.0/en/performance-schema-transaction-tables.html).
+ All memory/% memory instruments are now enabled by
default. See Memory Summary Tables
(http://dev.mysql.com/doc/refman/8.0/en/memory-summary-tables.html).
+ The wait/lock/metadata/sql/mdl metadata lock
instrument is now enabled by default. See The
metadata_locks Table
(http://dev.mysql.com/doc/refman/8.0/en/metadata-locks-table.html).
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
http://www.openssl.org/news/vulnerabilities.html.
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
#17188129)
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
(http://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-object-shapes.html),
and MySQL-Specific Spatial
Relation Functions That Use Minimum Bounding Rectangles
(MBRs)
(http://dev.mysql.com/doc/refman/8.0/en/spatial-relation-functions-mysql-specific.html).
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:
test_name
test_name.test
suite_name.test_name
suite_name.test_name.test
path/to/test/file
(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
mysql-test-run.pl:
+ 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
successfully.
+ 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
#81399)
* 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
#17084918)
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
Binaries
(http://dev.mysql.com/doc/refman/8.0/en/binary-installation.html)
for more details. (Bug #26005558)
Functionality Added or Changed
* Incompatible Change; InnoDB: ADD PARTITION, DROP
PARTITION, COALESCE PARTITION, REORGANIZE PARTITION, and
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
(http://dev.mysql.com/doc/refman/8.0/en/innodb-recovery.html#innodb-recovery-tablespace-discovery).
(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
#25473794)
* 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
(http://dev.mysql.com/doc/refman/8.0/en/json.html#json-paths).
(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
(http://dev.mysql.com/doc/refman/8.0/en/json.html)
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
(http://dev.mysql.com/doc/refman/8.0/en/json-utility-functions.html).
* 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
(http://dev.mysql.com/doc/refman/8.0/en/show-tables.html).
(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
release.
* 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
(http://dev.mysql.com/doc/refman/8.0/en/truncate-undo-tablespace.html).
+ 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
contention.
+ The innodb_undo_logs configuration option is
removed. The innodb_rollback_segments configuration
option performs the same function and should be used
instead.
+ 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
(http://dev.mysql.com/doc/refman/8.0/en/show-columns.html),
and SHOW INDEX Syntax
(http://dev.mysql.com/doc/refman/8.0/en/show-index.html).
[ To be continued...]
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/mysql