Dear MySQL users,
MySQL Server 8.0.1-dmr (Milestone Release) is a new version of the world's
most popular open source database. This is the second public milestone
release of MySQL 8.0.
[Due to file size limitations, the announcement is split in 3
parts. This is part 1.]
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.1-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.1-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.1-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.1-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 section lists the changes in MySQL 8.0.1-dmr since 8.0.
http://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-1.html
Enjoy!
=============================================================================Changes in MySQL 8.0.1 (2017-04-10, 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.
Note
This release makes several important changes in Unicode
character set support. In particular, the default character
set has changed from latin1 to utf8mb4.
C API Notes
* The C API implemented by libmysqlclient now includes a
client interface for reading a stream of replication
events from a MySQL server binary log. For more
information, see C API Binary Log Interface
(http://dev.mysql.com/doc/refman/8.0/en/c-api-binary-log-interface.html)
Character Set Support
* Important Change: The default character set has changed
from latin1 to utf8mb4. These system variables are
affected:
+ The default value of the character_set_server and
character_set_database system variables has changed
from latin1 to utf8mb4.
+ The default value of the collation_server and
collation_database system variables has changed from
latin1_swedish_ci to utf8mb4_0900_ai_ci.
As a result, the default character set and collation for
new objects differ from previously unless an explicit
character set and collation are specified. This includes
databases and objects within them, such as tables, views,
and stored programs. One way to preserve the previous
defaults is to start the server with these lines in the
my.cnf file:
[mysqld]
character_set_server=latin1
collation_server=latin1_swedish_ci
* Performance of UCA 9.0.0-based collations (for example,
utf8mb4_0900_ai_ci) was improved. These collations are
now faster than any other UCA collations. (Bug #24823885,
Bug #83319)
* The default collation for the utf8mb4 character set has
changed from utf8mb4_general_ci to utf8mb4_0900_ai_ci;
utf8mb4_general_ci does not handle characters outside the
Basic Multilingual Plane (BMP) correctly. (Bug #24742157)
* The pad attribute for Unicode 9.0.0 collations was
changed from PAD SPACE to NO PAD. Consequently, these
collations now treat spaces at the end of strings like
any other character. The affected collations have names
that contain the string _0900_.
Comparisons of VARCHAR columns that have a 9.0.0
collation differ from other collations with respect to
trailing spaces. For example, 'a' and 'a ' compare as
different strings, not the same string. Example:
mysql> SET NAMES 'latin1' COLLATE 'latin1_swedish_ci';
mysql> SELECT 'a' = 'a ';
+------------+
| 'a' = 'a ' |
+------------+
| 1 |
+------------+
mysql> SET NAMES 'utf8mb4' COLLATE 'utf8mb4_0900_ai_ci';
mysql> SELECT 'a' = 'a ';
+------------+
| 'a' = 'a ' |
+------------+
| 0 |
+------------+
The INFORMATION_SCHEMA COLLATIONS table now has a
PAD_ATTRIBUTE column that indicates the pad attribute for
each collation.
A problem with the latin1_de collation involving early
weight string truncation has been corrected. The only
likely effect is for WEIGHT_STRING() function results.
* Complementing earlier work in MySQL 8.0.0 to add
case-insensitive and accent-insensitive collations for
the utf8mb4 Unicode character set, new case-sensitive and
accent-sensitive collations have been added. The general
collation is named utf8mb4_0900_as_cs, and there are
language-specific collations with characteristics similar
to utf8mb4_0900_as_cs except that language-specific rules
take precedence where applicable. The language-specific
collations are indicated by ISO 639-1 language codes in
the collation name, as shown in the following table. In
two cases the language code has an additional item that
denotes a variant (German phone book order, Traditional
Spanish).
Note
utf8mb4_ja_0900_as_cs is the first Japanese
language-specific collation available for Unicode in
MySQL.
Table 1 utf8mb4 UCA 9.0.0 Language-Specific Collations
Language Collation
Croatian utf8mb4_hr_0900_as_cs
Czech utf8mb4_cs_0900_as_cs
Danish utf8mb4_da_0900_as_cs
Esperanto utf8mb4_eo_0900_as_cs
Estonian utf8mb4_et_0900_as_cs
German phone book order utf8mb4_de_pb_0900_as_cs
Hungarian utf8mb4_hu_0900_as_cs
Icelandic utf8mb4_is_0900_as_cs
Japanese utf8mb4_ja_0900_as_cs
Latvian utf8mb4_lv_0900_as_cs
Lithuanian utf8mb4_lt_0900_as_cs
Polish utf8mb4_pl_0900_as_cs
Classical Latin utf8mb4_la_0900_as_cs
Romanian utf8mb4_ro_0900_as_cs
Slovak utf8mb4_sk_0900_as_cs
Slovenian utf8mb4_sl_0900_as_cs
Modern Spanish utf8mb4_es_0900_as_cs
Traditional Spanish utf8mb4_es_trad_0900_as_cs
Swedish utf8mb4_sv_0900_as_cs
Turkish utf8mb4_tr_0900_as_cs
Vietnamese utf8mb4_vi_0900_as_cs
utf8mb4_0900_as_cs also works as an accent-sensitive,
case-sensitive collation for the languages in the
following table.
Table 2 Languages for Which utf8mb4_0900_as_cs is
Suitable
Language Name Language Code
German (dictionary order) de
English en
French (locale fr_FR) fr
Irish Gaelic ga
Indonesian id
Italian it
Luxembourgian lb
Malay ms
Dutch nl
Portuguese pt
Swahili sw
Zulu zu
utf8mb4_0900_as_cs is suitable for French French (locale
fr_FR) but not for Canadian French (locale fr_CA). For
Canadian French, utf8mb4_0900_ai_ci is suitable. The
reason for the difference between ai_ci and as_cs
collations is that Canadian French has a different order
of accented characters than French French.
utf8mb4_da_0900_as_cs also works as an accent-sensitive,
case-sensitive collation for the languages in the
following table.
Table 3 Languages for Which utf8mb4_da_0900_as_cs is
Suitable
Language Name Language Code
Norwegian no
Norwegian Bokmål nb
Norwegian Nynorsk nn
The nonlanguage-specific utf8mb4_0900_as_cs and
language-specific utf8mb4_LANG_0900_as_cs Unicode
collations each have these characteristics:
+ The collation is based on Unicode Collation
Algorithm (UCA) 9.0.0 and Common Locale Data
Repository (CLDR) v30, is accent sensitive, and case
sensitive. These characteristics are indicated by
_0900, _as, and _cs in the collation name.
Exception: utf8mb4_la_0900_as_cs is not based on
CLDR because Classical Latin is not defined in CLDR.
+ The collation works for all characters in the range
[U+0, U+10FFFF].
+ If the collation is not language specific, it sorts
all characters, including supplemental characters,
in default order (described following). If the
collation is language specific, it sorts characters
of the language correctly according to
language-specific rules, and characters not in the
language in default order.
+ By default, the collation sorts characters having a
code point listed in the DUCET table (Default
Unicode Collation Element Table) according to the
weight value assigned in the table. The collation
sorts characters not having a code point listed in
the DUCET table using their implicit weight value,
which is constructed according to the UCA.
The collation sorts on all three DUCET weight
levels, including the tertiary level. This compares
with accent-insensitive, case-insensitive
collations, which sort only on the primary and
secondary levels.
+ For non-language-specific collations, characters in
contraction sequences are treated as separate
characters. For language-specific collations,
contractions might change character sorting order.
Compilation Notes
* Incompatible Change: The mysql.h header file now requires
a C++ or C99 compiler to compile.
The my_bool type is no longer used in MySQL source code.
Any third-party code that used this type to represent C
boolean variables should use the bool or int C type
instead. (Bug #25597667)
* InnoDB: A LOB page deletion function failed to delete LOB
pages. (Bug #24480254)
* Windows builds now use the default runtime libraries
(builds use the /MD flag). (Bug #25611609)
* CMake support was added for compiling with Developer
Studio 12.6. (Bug #25384295)
* The rapidjson library included in MySQL distributions was
upgraded to version 1.1.0. (Bug #24947436)
* The required version of the Boost library for server
builds has been raised to 1.63.0. (Bug #24579061, Bug
#82834, Bug #25126144, Bug #83905)
* For GCC versions higher than 4.4,
-fno-expensive-optimizations was replaced with
-ffp-contract=off, which has the effect of enabling more
optimizations. Thanks to Alexey Kopytov for the patch.
(Bug #24571672, Bug #82760)
* For building MySQL 8.0, the minimum required version of
CMake is now 3.2.3 on Windows, 3.4.0 on Solaris, and
2.8.12 otherwise. (Bug #24481181, Bug #82628)
References: See also: Bug #24687701.
Configuration Notes
* In source distributions, several utilities previously in
the extra directory have been moved to the new utilities
directory. (Bug #25416084)
* Two new CMake options are available for debugging.
LINK_RANDOMIZE indicates whether to randomize the order
of symbols in the mysqld binary (default OFF), and
LINK_RANDOMIZE_SEED specifies a seed value for
LINK_RANDOMIZE. (Bug #25336715)
* MySQL failed to compile if -DENABLE_DEBUG_SYNC=OFF AND
-DWITH_DEBUG=ON were both given. The ENABLE_DEBUG_SYNC
option has been removed and enabling WITH_DEBUG enables
Debug Sync. (Bug #18374703)
* These changes were made with respect to persisted system
variables:
+ A new statement, RESET PERSIST, enables removal of
variable settings that were persisted with SET
PERSIST to the mysqld-auto.cnf file that stores
persisted global system variable settings.
+ Using SET PERSIST (or @@persist.) to set a global
variable to DEFAULT or to the variable literal
default value previously also added a setting for
the variable to the mysqld-auto.cnf file if was is
not present, or removed it from mysqld-auto.cnf if
it was present. Now the assignment always adds a
setting for the variable to the mysqld-auto.cnf
file; to remove the setting from the file, use RESET
PERSIST.
+ A new Performance Schema table, persisted_variables,
provides an SQL interface to the mysqld-auto.cnf
file, enabling the file contents to be inspected at
runtime using SELECT statements.
+ The Performance Schema variables_info table has new
columns showing when and by which user each system
variable was most recently set.
For more information, see Using System Variables
(http://dev.mysql.com/doc/refman/8.0/en/using-system-variables.html),
and RESET PERSIST Syntax
(http://dev.mysql.com/doc/refman/8.0/en/reset-persist.html).
If you upgrade to this MySQL release from an earlier
version, you must run mysql_upgrade (and restart the
server) to incorporate these changes into the Performance
Schema.
References: See also: Bug #24522064.
* The default value of the query_cache_size system variable
has been reduced from 1M to 0. Consequently no query
cache buffer is allocated by default.
* The --temp-pool server option has been removed.
Data Dictionary Notes
* These INFORMATION_SCHEMA tables have been reimplemented
as views on data dictionary tables:
EVENTS
PARAMETERS
ROUTINES
TRIGGERS
Queries on those tables are now more efficient because
they obtain information from data dictionary tables
rather than by other, slower means. For example, the
server no longer must create a temporary table for each
query of the INFORMATION_SCHEMA table.
Improvements for those tables also apply to SHOW
statements that display information corresponding to the
INFORMATION_SCHEMA tables. For example, SHOW TRIGGERS
displays the same information as the TRIGGERS table.
If you upgrade to this MySQL release from an earlier
version, you must run mysql_upgrade (and restart the
server) to incorporate these changes.
DTrace Support
* Support for DTrace has been removed.
Installation Notes
* On Solaris, MySQL is now built with Developer Studio 12.5
instead of gcc. The binaries require the Developer Studio
C/C++ runtime libraries to be installed. See here for how to
install only the libraries:
https://docs.oracle.com/cd/E60778_01/html/E60743/gozsu.html
* The minimum required version of Solaris is now Solaris 11
update 3, due to a dependency on system runtime libraries.
Optimizer Notes
* InnoDB: MySQL now supports descending indexes: DESC in an
index definition is no longer ignored but causes storage
of key values in descending order. Previously, indexes
could be scanned in reverse order but at a performance
penalty. A descending index can be scanned in forward
order, which is more efficient. Descending indexes also
make it possible for the optimizer to use multiple-column
indexes when the most efficient scan order mixes
ascending order for some columns and descending order for
others. For more information, see Descending Indexes
(http://dev.mysql.com/doc/refman/8.0/en/descending-indexes.html).
Note
Previously, relying on implicit GROUP BY sorting was
deprecated but GROUP BY did sort. GROUP BY no longer
sorts by default, so query results may differ from
previous MySQL versions. To produce a given sort order,
use explicit ASC or DESC designators for GROUP BY columns
or provide an ORDER BY clause.
* Optimizer trace output now includes more information
about filesort operations, such as key and payload size
and why addon fields are not packed. (Bug #25246184, Bug
#84180)
* Previously, invisible indexes were supported only for the
InnoDB storage engine. Invisible indexes are now storage
engine neutral (supported for any engine). (Bug
#23541244)
* A GROUPING() function has been introduced for use in
GROUP BY queries that include a WITH ROLLUP modifier.
This function enables you to distinguish NULL values for
super-aggregate rows in the query result from NULL values
in regular grouped rows. For more information, see
Miscellaneous Functions
(http://dev.mysql.com/doc/refman/8.0/en/miscellaneous-functions.html),
and GROUP BY Modifiers
(http://dev.mysql.com/doc/refman/8.0/en/group-by-modifiers.html).
Thanks to Zhe Dong for a patch that was
partially used to implement this feature.
Note
GROUPING is now a reserved word and cannot be used as an
identifier without identifier quoting.
(Bug #11754449, Bug #46053)
* The optimizer now supports INDEX_MERGE and NO_INDEX_MERGE
hints to affect use of the Index Merge access method.
Examples:
SELECT /*+ INDEX_MERGE(t1 f1, f2, f3) */ f2 FROM t1
WHERE f1 = 'o' AND f2 = f3 AND f3 <= 4;
SELECT /*+ NO_INDEX_MERGE(t1 f2, f3) */ f1 FROM t1
WHERE (f2 = 5 OR f3 = 'c') AND (f1 = 4 OR f4 = 'f');
For more information, see Index Merge Optimization
(http://dev.mysql.com/doc/refman/8.0/en/index-merge-optimization.html),
and Optimizer Hints
(http://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html).
* The server_cost and engine_cost optimizer cost model
tables in the mysql system database now include a
default_value column that contains the default value for
each cost table estimate. This column is a read-only
generated column that retains its value even if the
associated cost estimate is changed. For more
information, see The Optimizer Cost Model
(http://dev.mysql.com/doc/refman/8.0/en/cost-model.html).
If you upgrade to this MySQL release from an earlier
version, you must run mysql_upgrade (and restart the
server) to incorporate these changes into the mysql
system database.
* In the optimizer cost model engine_cost table, the cost
for memory access was decreased relative to the cost for
disk access. An implication of this change is that the
execution plan may change between two runs of the same
query. For example, at server startup before data has
been read into the buffer pool, you may get a different
plan than after the query has been run because then the
data will be in memory.
* MySQL now supports common table expressions, both
nonrecursive and recursive. Common table expressions
enable use of named temporary result sets, implemented by
permitting a WITH clause preceding SELECT statements and
certain other statements. For more information, see WITH
Syntax (Common Table Expressions)
(http://dev.mysql.com/doc/refman/8.0/en/with.html).
Note
RECURSIVE is now a reserved word and cannot be used as an
identifier without identifier quoting.
* The optimizer now supports hints that enable specifying
the order in which to join tables. For more information,
see Optimizer Hints
(http://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html).
Packaging Notes
* Changes in RPM package structure require a larger set of
packages to be removed to install MySQL Server cleanly.
(Bug #25603087)
* To avoid potential race conditions, Debian packages now
use the GNU install utility rather than a combination of
mkdir, touch, and chown. (Bug #25258829)
* scripts/mysql_security_commands.sql and
support-files/mysql.server-sys5.sh are no longer used and
have been removed from MySQL distributions. (Bug
#24756400, Bug #24756442)
* RPM packages now are built with -DWITH_NUMA=ON for
platforms with NUMA support: OEL higher than EL5, Fedora,
SLES, Docker. (Bug #24689078)
* The my-default.cnf.sh file (used to produce a default
my-default.cnf or my-default.ini file) is no longer
included in source distributions and my-default.cnf and
my-default.ini are no longer included in or installed by
distribution packages. (Bug #22525354)
* The unused and undocumented archive_reader and
archive_test utilities have been removed from MySQL
source distributions. (Bug #12818207, Bug #62014)
* Reminder: MySQL 8.0 requires the Microsoft Visual C++
2015 Redistributable Package to run on Windows platforms.
Users should make sure the package has been installed on
the system before starting the server. The package is
available at the Microsoft Download Center
(http://www.microsoft.com/en-us/download/default.aspx).
Parser Notes
* The deprecated PROCEDURE ANALYSE() syntax has been
removed.
* The parser no longer considers \N as a synonym for NULL
in SQL statements. Use NULL instead.
This change does not affect text file import or export
operations performed with LOAD DATA INFILE or SELECT ...
INTO OUTFILE, for which NULL continues to be represented
by \N. See LOAD DATA INFILE Syntax
(http://dev.mysql.com/doc/refman/8.0/en/load-data.html).
Performance Schema Notes
* The Performance Schema maintains statement event summary
tables that contain information about minimum, maximum,
and average statement latency. Those tables permit
high-level assessment of system performance. To permit
assessment at a more fine-grained level, the Performance
Schema now also collects histogram data for statement
latencies. These histograms provide additional insight
into latency distributions and are available in these
tables:
+ events_statements_histogram_by_digest: Statement
histograms per schema and digest value
+ events_statements_histogram_global: Statement
histogram summarized globally
For more information, see Statement Histogram Summary
Tables
(http://dev.mysql.com/doc/refman/8.0/en/statement-histogram-summary-tables.html).
In addition, the events_statements_summary_by_digest
table now has columns that provide percentile information
about statement latencies. For more information, see
Statement Summary Tables
(http://dev.mysql.com/doc/refman/8.0/en/statement-summary-tables.html).
If you upgrade to this MySQL release from an earlier
version, you must run mysql_upgrade (and restart the
server) to incorporate these changes into the Performance
Schema.
* System and status variable information is no longer
maintained in the INFORMATION_SCHEMA. These tables have
been removed: GLOBAL_VARIABLES, SESSION_VARIABLES,
GLOBAL_STATUS, SESSION_STATUS. Use the corresponding
Performance Schema tables instead. See Performance Schema
System Variable Tables
(http://dev.mysql.com/doc/refman/8.0/en/performance-schema-system-variable-tables.html),
and Performance Schema Status Variable Tables
(http://dev.mysql.com/doc/refman/8.0/en/performance-schema-status-variable-tables.html).
In addition, the
show_compatibility_56 system variable has been removed.
It was used in the transition period during which system
and status variable information in INFORMATION_SCHEMA
tables was moved to Performance Schema tables, and is no
longer needed. These status variables have been removed:
Slave_heartbeat_period, Slave_last_heartbeat,
Slave_received_heartbeats, Slave_retried_transactions,
Slave_running. The information they provided is available
in Performance Schema tables; see Migrating to
Performance Schema System and Status Variable Tables
(http://dev.mysql.com/doc/refman/5.7/en/performance-schema-variable-table-migration.html).
* The deprecated INFORMATION_SCHEMA INNODB_LOCKS and
INNODB_LOCK_WAITS tables have been removed. To obtain
InnoDB data lock information, use the Performance Schema
data_locks and data_lock_waits tables instead.
Alternatively, use the sys schema innodb_lock_waits and
x$innodb_lock_waits views, which have been reimplemented
to use the new Performance Schema tables rather than the
removed INFORMATION_SCHEMA tables.
The Performance Schema tables expose what data locks
exist, which transaction holds each lock, and which
transaction lock requests are blocked by other locks. For
InnoDB, the data_locks table reports all data locks, in
contrast to the INNODB_LOCKS table, which reported only
waited-for data locks, For more information, see The
data_locks Table
(http://dev.mysql.com/doc/refman/8.0/en/data-locks-table.html),
and The data_lock_waits Table
(http://dev.mysql.com/doc/refman/8.0/en/data-lock-waits-table.html).
For information about mapping old table
columns to new table columns, see The INFORMATION_SCHEMA
INNODB_LOCKS Table
(http://dev.mysql.com/doc/refman/8.0/en/innodb-locks-table.html),
and The INFORMATION_SCHEMA INNODB_LOCK_WAITS Table
(http://dev.mysql.com/doc/refman/8.0/en/innodb-lock-waits-table.html).
The tables differ in the privileges required: The
INFORMATION_SCHEMA tables require the global PROCESS
privilege. The Performance Schema tables require the
usual Performance Schema privilege of SELECT on the table
to be selected from.
The sys schema innodb_lock_waits and x$innodb_lock_waits
views can be used without change, with the exception that
the locked_table column containing combined schema/table
name values has been removed and replaced with
locked_table_schema and locked_table_name columns that
contain separate schema and table name values. In
addition, these views now contain locked_table_partition
and locked_table_subpartition columns. For more
information, see The innodb_lock_waits and
x$innodb_lock_waits Views
(http://dev.mysql.com/doc/refman/8.0/en/sys-innodb-lock-waits.html),
If you upgrade to this MySQL release from an earlier
version, you must run mysql_upgrade (and restart the
server) to incorporate these changes into the Performance
Schema and the sys schema.
Plugin Service Notes
* MySQL Server 8.0 includes a component-based
infrastructure for improving server extensibility; see
MySQL Server Components
(http://dev.mysql.com/doc/refman/8.0/en/server-components.html).
However, MySQL plugins use an interface that
predates the component interface. A new plugin service,
plugin_registry_service, enables plugins to access the
component registry and its services.
Security Notes
* Incompatible Change: For STANDALONE and WIN builds, the
default secure_file_priv value has changed from the empty
string to NULL. This is a secure-by-default setting
because it disables import and export operations. To
permit those operations, set secure_file_priv to the path
name of the directory to use for those operations. (Bug
#24679907, Bug #24695274, Bug #24707666)
* Incompatible Change: These changes were made to
mysqld_safe:
+ Unsafe use of rm and chown in mysqld_safe could
result in privilege escalation. chown now can be
used only when the target directory is /var/log. An
incompatible change is that if the directory for the
Unix socket file is missing, it is no longer
created; instead, an error occurs. Due to these
changes, /bin/bash is required to run mysqld_safe on
Solaris. /bin/sh is still used on other Unix/Linux
platforms.
+ The --ledir option now is accepted only on the
command line, not in option files.
+ mysqld_safe ignores the current working directory.
Other related changes:
+ Initialization scripts that invoke mysqld_safe pass
--basedir explicitly.
+ Initialization scripts create the error log file
only if the base directory is /var/log or /var/lib.
+ Unused systemd files for SLES were removed.
(Bug #24483092, Bug #25088048, Bug #25378439, Bug
#25378565)
References: See also: Bug #24464380, Bug #24388753, Bug
#24619033, Bug #82920.
* Incompatible Change: Server components and plugins now
can define privileges dynamically (at runtime), which
enables them to create privileges specifically associated
with the capabilities they implement.
Implementation of dynamic privileges enables DBAs to
begin migrating away from the SUPER privilege. In the
past, SUPER has been associated with a wide and growing
variety of operations, not all related to each other.
Many operations covered by SUPER now are also associated
with a dynamic privilege of more limited scope, and that
privilege is registered by the server component or plugin
that implements the operation. Each such operation that
previously required the SUPER privilege can be permitted
to an account by granting the associated dynamic
privilege rather than SUPER. For example, a user who must
be able to modify global system variables can be granted
SYSTEM_VARIABLES_ADMIN rather than SUPER.
This change improves security by enabling DBAs to avoid
granting SUPER and tailor user privileges more closely to
the operations permitted. SUPER is now deprecated and
will be removed in a future version of MySQL.
Dynamic privileges apply only at the global level. The
server stores information about current assignments of
dynamic privileges to user accounts in
mysql.global_grants, a new table in the mysql system
database.
For more information, see Static Versus Dynamic
Privileges
(http://dev.mysql.com/doc/refman/8.0/en/static-dynamic-privileges.html).
That discussion includes instructions for
migrating accounts away from SUPER to dynamic privileges.
Incompatibility: SHOW GRANTS no longer displays ALL
PRIVILEGES in its global-privileges output because the
meaning of ALL PRIVILEGES at the global level varies
depending on which dynamic privileges are defined.
Instead, SHOW GRANTS explictly lists each granted global
privilege. For details, see SHOW GRANTS Syntax
(http://dev.mysql.com/doc/refman/8.0/en/show-grants.html)
. Applications that process SHOW GRANTS output should be
adjusted accordingly.
If you upgrade to this MySQL release from an earlier
version, you must run mysql_upgrade (and restart the
server) to incorporate these changes into the mysql
system database.
* yaSSL was upgraded to version 2.4.2. This upgrade
corrects issues with: Potential AES side channel leaks;
DSA padding for unusual sizes; the
SSL_CTX_load_verify_locations() OpenSSL compatibility
function failing to handle long path directory names.
(Bug #24512715, Bug #24740291)
* MySQL Server now includes a plugin library that enables
administrators to introduce an increasing delay in server
response to clients after a certain number of consecutive
failed connection attempts. This capability provides a
deterrent that slows down brute force attacks that
attempt to access MySQL user accounts. For more
information, see The Connection-Control Plugin
(http://dev.mysql.com/doc/refman/8.0/en/connection-control-plugin.html).
* OpenSSL is ending support for version 1.0.1 in December
2016; see
https://www.openssl.org/policies/releasestrat.html.
Consequently, MySQL Commercial Server builds now use
version 1.0.2 rather than version 1.0.1, and the linked
OpenSSL library for the MySQL Commercial Server has been
updated from version 1.0.1 to version 1.0.2j. For a
description of issues fixed in this version, see
https://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.
Spatial Data Support
* Incompatible Change: Previously, ST_Distance() supported
only Cartesian spatial reference systems (SRSs).
ST_Distance() now detects geometry arguments in a
geographic (ellipsoidal) SRS and returns the geodetic
distance on the ellipsoid in meters. The only permitted
geographic argument types are Point and Point, or Point
and MultiPoint (in any argument order). Calculations for
projected SRSs and SRID 0 remain the same. 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).
Note
If spatial data contains SRID values that refer to a
geographic spatial reference system, existing queries
will return different results, compared to previous MySQL
versions.
* Incompatible Change: These functions previously accepted
either WKB strings or geometry arguments. Geometry
arguments are no longer permitted and produce an error.
+ ST_GeomCollFromWKB(), ST_GeometryCollectionFromWKB()
+ ST_GeomFromWKB(), ST_GeometryFromWKB()
+ ST_LineFromWKB(), ST_LinestringFromWKB()
+ ST_MLineFromWKB(), ST_MultiLinestringFromWKB()
+ ST_MPointFromWKB(), ST_MultiPointFromWKB()
+ ST_MPolyFromWKB(), ST_MultiPolygonFromWKB()
+ ST_PointFromWKB()
+ ST_PolyFromWKB(), ST_PolygonFromWKB()
For information about migrating queries that refer to
those functions away from using geometry arguments to
using WKB arguments, see Functions That Create Geometry
Values from WKB Values
(http://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html).
* Incompatible Change: These functions now return latitude
and longitude coordinates in the order specified by the
spatial reference system that applies to the geometry
value argument. The functions also accept an optional
argument to override the default axis order.
+ ST_AsBinary(), ST_AsWKB()
+ ST_AsText(), ST_AsWKT()
For more information, see Geometry Format Conversion
Functions
(http://dev.mysql.com/doc/refman/8.0/en/gis-format-conversion-functions.html).
Note
If spatial data contains SRID values that refer to a
geographic spatial reference system, existing queries
will return different results, compared to previous MySQL
versions.
* MySQL now stores information about spatial reference
systems other than SRID 0, for use with spatial data.
This information is stored in the
st_spatial_reference_systems data dictionary table and is
based on EPSG Dataset 9.0. The table contents are exposed
through the INFORMATION_SCHEMA
ST_SPATIAL_REFERENCE_SYSTEMS table, which is implemented
as a view on the data dictionary For more information,
see The INFORMATION_SCHEMA ST_SPATIAL_REFERENCE_SYSTEMS
Table
(http://dev.mysql.com/doc/refman/8.0/en/st-spatial-reference-systems-table.html).
MySQL now has an INFORMATION_SCHEMA ST_GEOMETRY_COLUMNS
table that provides information about table columns that
store spatial data. The new table is implemented as a
view on the existing INFORMATION_SCHEMA COLUMNS table.
For more information, see The INFORMATION_SCHEMA
ST_GEOMETRY_COLUMNS Table
(http://dev.mysql.com/doc/refman/8.0/en/st-geometry-columns-table.html).
If you upgrade to this MySQL release from an earlier
version, you must run mysql_upgrade (and restart the
server) to incorporate these INFORMATION_SCHEMA changes.
(Bug #25337054, Bug #84384)
* A new spatial function, ST_SwapXY(), accepts a geometry
argument and swaps the X and Y values of each coordinate
pair within the geometry. For more information, see
Geometry Format Conversion Functions
(http://dev.mysql.com/doc/refman/8.0/en/gis-format-conversion-functions.html).
* These functions now interpret latitude and longitude
coordinates as in the order specified by the spatial
reference system. The functions also accept an optional
argument to override the default axis order.
+ ST_GeomCollFromText(),
ST_GeometryCollectionFromText(),
ST_GeomCollFromTxt()
+ ST_GeomFromText(), ST_GeometryFromText()
+ ST_LineFromText(), ST_LinestringFromText()
+ ST_MLineFromText(), ST_MultiLinestringFromText()
+ ST_MPointFromText(), ST_MultiPointFromText()
+ ST_MPolyFromText(), ST_MultiPolygonFromText()
+ ST_PointFromText()
+ ST_PolyFromText(), ST_PolygonFromText()
+ ST_GeomCollFromWKB(), ST_GeometryCollectionFromWKB()
+ ST_GeomFromWKB(), ST_GeometryFromWKB()
+ ST_LineFromWKB(), ST_LinestringFromWKB()
+ ST_MLineFromWKB(), ST_MultiLinestringFromWKB()
+ ST_MPointFromWKB(), ST_MultiPointFromWKB()
+ ST_MPolyFromWKB(), ST_MultiPolygonFromWKB()
+ ST_PointFromWKB()
+ ST_PolyFromWKB(), ST_PolygonFromWKB()
For more information, see Functions That Create Geometry
Values from WKT Values
(http://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html),
and Functions That Create Geometry Values from WKB Values
(http://dev.mysql.com/doc/refman/8.0/en/gis-wkb-functions.html).
SQL Syntax Notes
* Derived table syntax now permits a list of explicit
column names following the table name, to override the
default column names taken from the select list. For
example, the column names for this derived table come
from its select list:
mysql> SELECT * FROM (SELECT 1, 2, 3, 4) AS dt;
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
To provide column names, follow the derived table name
with a parenthesized list of column names:
mysql> SELECT * FROM (SELECT 1, 2, 3, 4) AS dt (a, b, c, d);
+---+---+---+---+
| a | b | c | d |
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
Test Suite Notes
* mysql-test-run.pl now has a
--charset-for-testdb=charset_name option for specifying
the default character set for the test database. The
default value is latin1. (Bug #25494068)
* mysql-test-run.pl now has an --only-big-tests option,
which causes only big tests to run. Normal (non-big)
tests are skipped. If both --big-test and
--only-big-tests are given, --only-big-tests is ignored.
(Bug #25182306)
* mysql-test-run.pl has a new --discover option. When
given, mysql-test-run.pl attempts to preload discover,
the Developer Studio Memory Error Discovery Tool when
starting mysqld. Reports from discover may be found in
log/mysqld.%p.txt under the directory given by --vardir.
This option is supported only on SPARC-M7 systems. (Bug
#25048971)
* mysqltest now supports an expr command that enables an
expression to be evaluated and assigned to a variable.
For details, see the command description in mysqltest
Commands
(http://dev.mysql.com/doc/mysqltest/2.0/en/mysqltest-commands.html).
(Bug #24806741)
* mysqltest now supports a force-cpdir command that copies
a source directory to a destination directory recursively
(that is, it copies subdirectories). (Bug #24806681)
* mysql-test-run.pl has a new --summary-report option. When
given, mysql-test-run.pl generates a plain text version
of the test summary only and writes it to the file named
as the option argument. The file is suitable for sending
by email. (Bug #24512357, Bug #82708)
* mysql-test-run.pl could not be run with
--valgrind-option=--tool=custom_tool, for values of
custom_tool such as massif or helgrind, because it added
the options for memcheck that might not be understood by
other tools. Also, the mysql-test-run.pl --callgrind
option did not work because it supplied an invalid --base
option to callgrind. Thanks to Daniel Black for the patch
on which the fixes were based. (Bug #23713613, Bug
#82039)
* The mysqltest connect() function now permits SOCKET and
TCP values for the options argument, to specify using the
socket-file and TCP/IP connection protocols.
In addition, connection protocols now must match the
current system. Previously, passing PIPE or SHM on
non-Windows systems caused the default (socket-file)
connection protocol to be used. Now this causes an error,
and, similarly, passing SOCKET on Windows systems causes
an error. (Bug #21046241)
* mysql-test-run.pl now supports a --bootstrap option that
enables mysqld options to be designated as bootstrap
options. When mysql-test-run.pl finds --bootstrap options
in a master.opt file, it removes and reinitializes the
data directory and restarts the server with the new
option settings. (Bug #18184868)
Transaction Notes
* These improvements were made to the crash safety of DDL
statements:
+ Crash safety of DROP DATABASE is such that the
discrepancy between storage engines, the data
dictionary, and the binary log is now limited to one
table at most.
+ Crash safety of multiple-table DROP TABLE is such
that the discrepancy between storage engines, the
data dictionary, and the binary log is now limited
to one table at most.
X Plugin Notes
* The MYSQLX_TCP_PORT CMake option was ignored. (Bug
#25493867, Bug #84804)
* The protobuf compiler emitted "unused import" warnings
for mysqlx.proto. (Bug #25444009, Bug #84641)
* Connections were released which were not initialized when
validation occurred. (Bug #25392280)
* Incrementing of the Mysqlx_on_notice_other_send status
variable was handled incorrectly. (Bug #25290001, Bug
#84260)
* The Mysqlx_notice_warning_sent and
Mysqlx_on_notice_other_send status variable values did
not increment as expected. (Bug #25289949, Bug #84258)
* The manual definition of the MYSQL_DYNAMIC_PLUGIN macro
was redundant. (Bug #25162590, Bug #83988)
* IPv6 connectivity support defined a new system variable
Mysqlx-bind-address with the default value of '0.0.0.0',
but the default value should have been '*' so that
connections to X Plugin may be made using an IPv6
address, an IPv4 address, or a hostname. (Bug #25047909,
Bug #83688)
* The stmt field was marked as required in the message:
message Mysqlx.Crud.ModifyView {
required Collection collection = 1;
optional string definer = 2;
optional ViewAlgorithm algorithm = 3;
optional ViewSqlSecurity security = 4;
optional ViewCheckOption check = 5;
repeated string column = 6;
required Mysqlx.Crud.Find stmt = 7;
}
(Bug #24968735, Bug #83595)
* For a table created with CREATE TABLE foo (doc JSON), the
statement list_objects incorrectly reported the table as
a collection. (Bug #24963952)
* Sending Expect.Open to a connected socket before
authentication led to the following error messages:
.... Plugin mysqlx reported: '10: Invalid message 24 received during cl
ient initialization'
.... Plugin mysqlx reported: '10: ERROR reading from socket Bad file de
scriptor (9) 2'
(Bug #24940144, Bug #83494)
* On Linux, MySQL Shell in JavaScript and Python
interactive mode hid collections if the letter case in
the collection name was not uniform. (Bug #24848125)
* If multiple user accounts exist that match the
authenticating user, the X Plugin would attempt to
authenticate all matching accounts instead of the best
matching account. (Bug #24847537)
* Boost classes with corresponding functionality in C++ 11
were moved or wrapped. (Bug #24680856)
* When two X Plugin instances were started on the same
port, the resulting error message was split over two
lines and contained duplicate information. (Bug
#24679018, Bug #83008)
* The performance_schema.threads table did not show
processlist statistics for the X Plugin. (Bug #24638038)
* If the client sent an unknown message type to the server,
the server would send back an error message and then
disconnect the client. (Bug #24611754, Bug #82868)
* When the client sent a zero length message, the X Plugin
did not send a response. For a subsequent message the
client received an error E_X_BAD_MESSAGE and was
disconnected, depending on the header content. (Bug
#24595459, Bug #82862)
* X Plugin displayed its version to any connected user,
including those not authenticated. (Bug #24562707, Bug
#82784)
* X Plugin generated an incorrect query when a duplicate
field name existed in an Update statement. (Bug
#24510083)
* The statement list_objects returned incorrect information
for some views in sys database. (Bug #24472325)
* X Plugin was trying to send result sets to a client, even
where the connection had been closed. The plugin now
stops execution of a stored procedure if the connection
is reset. (Bug #24440344)
* Attempting to list objects using the list_objects
statement without explicitly setting the database name
resulted in the collection being incorrectly classified
as a table. (Bug #23205895, Bug #81248)
[ To be continued...]
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/mysql