MySQL 8.0 Release Notes
For general information about upgrades, downgrades, platform support, etc., please visit https://docs.oracle.com/cd/E17952_01/mysql-8.0-relnotes-en/.
This is a milestone release, for use at your own risk. Upgrades between milestone releases (or from a milestone release to a GA release) are not supported. 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. (Making a backup before the upgrade is a prudent precaution in any case.)
This release makes several important changes in Unicode
character set support. In particular, the default character
set has changed from latin1
to
utf8mb4
.
Incompatible Change: 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 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 MySQL version.
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. 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
explicitly lists each
granted global privilege. For details, see
SHOW GRANTS Statement. 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.
(WL #8131)
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
(WL #7672)
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
(WL #7554)
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.
Additionally, the
max_length_for_sort_data
system
variable default value has been increased from 1024 to 4096.
(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 as significant, like any other character. The affected
collations have names that contain the string
_0900_
.
Comparisons of nonbinary strings (CHAR
,
VARCHAR
, and TEXT
strings)
that have a 9.0.0 (NO PAD
) collation differ
from PAD SPACE
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 | +------------+
See also Trailing Space Handling in Comparisons.
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.
(WL #10354)
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).
utf8mb4_ja_0900_as_cs
is the first Japanese
language-specific collation available for Unicode in MySQL.
Table 2 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 3 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 4 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_
Unicode collations each have these characteristics:
LANG
_0900_as_cs
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.
For more information, see Unicode Character Sets. (WL #9109, WL #9751)
Incompatible Change:
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.
The change from my_bool
to
bool
means that the
mysql.h
header file now requires a C++ or
C99 compiler to compile.
(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, Bug #83515)
The minimum version of the Boost library for server builds is now 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.
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.
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 Persisted System Variables, and RESET PERSIST Statement.
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. (WL #9720, WL #9763)
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.
(WL #9817)
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 Plugins. (WL #8885)
SQL-layer code and the storage engine API were extended to provide data dictionary support for:
Storing information about auxiliary columns and keys that
InnoDB
adds to tables implicitly, storage
engine-private data and object identifiers for tables and
tablespaces, and InnoDB
full-text search
auxiliary tables and other similar, implicitly created
objects.
Combining data dictionary updates, storage engine changes, and binary log writes for DDL operations into atomic transactions.
A behavior change for DROP TABLE
occurs if any named tables do not exist. Previously, the
statement returned an error indicating which tables did not
exist and it was unable to drop, but also dropped the tables
that did exist. Now the statement still indicates which tables
did not exist, but fails with an error and no changes are made.
For more information, see Atomic Data Definition Statement Support, and WL#7743. (WL #7743)
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. (WL #9494)
Incompatible Change; InnoDB; Partitioning:
The ALTER TABLE ... UPGRADE PARTITIONING
statement is no longer supported.
The deprecated PROCEDURE ANALYSE()
syntax has
been removed.
(WL #4745)
The deprecated libmysqld
embedded server
library has been removed, along with:
The mysql_config
--libmysqld-libs
,
--embedded-libs
, and
--embedded
options
The CMake
WITH_EMBEDDED_SERVER
,
WITH_EMBEDDED_SHARED_LIBRARY
, and
INSTALL_SECURE_FILE_PRIV_EMBEDDEDDIR
options
The (undocumented) mysql
--server-arg
option
The mysqltest
--embedded-server
,
--server-arg
, and
--server-file
options
The mysqltest_embedded and mysql_client_test_embedded test programs
(WL #9721, WL #9722, WL #9816)
The deprecated --temp-pool
server option has
been removed.
(WL #8396)
The deprecated replace utility has been removed. If you wish to continue using this utility, be sure to retain a copy from an installed version of MySQL before upgrading to the current version. (WL #9874)
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
or
SELECT ... INTO
OUTFILE
, for which NULL
continues
to be represented by \N
. See
LOAD DATA Statement.
(WL #7247)
Support for DTrace has been removed. (WL #9581)
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.
Previously, GROUP BY
implicitly sorted by
default (that is, in the absence of ASC
or
DESC
designators for GROUP
BY
columns), but relying on implicit GROUP
BY
sorting was deprecated. 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.
(WL #1074, WL #7737)
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, and
GROUP BY Modifiers. Thanks to Zhe Dong for a
patch that was partially used to implement this feature.
GROUPING
now is a reserved word and cannot
be used as an identifier without identifier quoting.
(Bug #11754449, Bug #46053, Bug #11745963, Bug #21728, WL #1979)
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, and Optimizer Hints. (WL #9167)
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.
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.
(WL #10128)
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.
(WL #8737)
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 (Common Table Expressions).
RECURSIVE
now is a reserved word and cannot
be used as an identifier without identifier quoting.
(WL #883, WL #3634)
The optimizer now supports hints that enable specifying the order in which to join tables. For more information, see Optimizer Hints. (WL #9158)
Microsoft Windows: 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.
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)
New Debian/Ubuntu packages named server-core
and client-core
are now available. These
packages contain binaries only, without configuration or service
scripts, directory setup, man pages, and so forth. They are
installed automatically with the standard packages, but when
installed by themselves do not result in a functioning MySQL
setup. They may be of interest for user which wish to customize
their own installation setup.
(Bug #25146364)
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)
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.
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.
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. (WL #5384)
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, and
Performance Schema Status Variable Tables. 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.
(WL #8057)
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, and
The data_lock_waits Table. For
information about mapping old table columns to new table
columns, see
The INFORMATION_SCHEMA INNODB_LOCKS Table, and
The INFORMATION_SCHEMA INNODB_LOCK_WAITS Table.
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,
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.
(WL #9275, WL #6657)
MySQL Server 8.0 includes a component-based infrastructure for
improving server extensibility; see
MySQL Components. 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.
(WL #4989)
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, WL #6782)
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.
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)
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. (WL #9136)
Incompatible Change:
Previously, ST_Distance()
supported only Cartesian spatial reference systems (SRSs).
ST_Distance()
now detects
geometry arguments in a geographic 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.
If spatial data contains SRID values that refer to a geographic spatial reference system, existing queries using these functions will return different results, compared to previous MySQL versions.
(WL #9347)
Incompatible Change: These functions previously accepted either WKB strings or geometry arguments. Geometry arguments are no longer permitted and produce an error.
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. (WL #10166)
Incompatible Change: 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.
For more information, see Functions That Create Geometry Values from WKT Values, and Functions That Create Geometry Values from WKB Values.
If spatial data contains SRID values that refer to a geographic spatial reference system, existing queries using these functions will return different results, compared to previous MySQL versions.
(WL #9434, WL #9435)
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.
For more information, see Geometry Format Conversion Functions.
If spatial data contains SRID values that refer to a geographic spatial reference system, existing queries using these functions will return different results, compared to previous MySQL versions.
(WL #9432, WL #9433)
The st_spatial_reference_systems
data
dictionary table that stores information about spatial reference
systems other than SRID 0 has been upgraded from EPSG Dataset
8.7 to 9.0. Also, the table contents are now 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.
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.
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, WL #9348, WL #8582)
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.
(WL #9436)
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 |
+---+---+---+---+
(WL #883)
mysql-test-run.pl now has a
--charset-for-testdb=
option for specifying the default character set for the
charset_name
test
database. The default value is
latin1
.
(Bug #25494068, Bug #84806)
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 the MySQL Server Doxygen documentation,
available at
https://dev.mysql.com/doc/index-other.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, transport protocols now must match the current
system. Previously, passing PIPE
or
SHM
on non-Windows systems caused the default
(socket-file) transport 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)
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)
The Mysqlx_notice_warning_sent
and Mysqlx_notice_other_sent
status variable values did not increment as expected.
(Bug #25289949, Bug #84258, Bug #25290001, Bug #84260)
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 client initialization' ... Plugin mysqlx reported: '10: ERROR reading from socket Bad file descriptor (9) 2'
(Bug #24940144, Bug #83494)
On Linux, MySQL Shell in JavaScript and Python interactive mode hid collections if the lettercase 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)
X Plugin now supports the sha256_password
plugin.
(WL #9271)
Incompatible Change:
Previously, for INSERT ... SELECT ... ON DUPLICATE KEY
UPDATE
statements for which the
UPDATE
referred to SELECT
columns, the results could be incorrect if the
SELECT
was a UNION
. Now
such statements are prohibited and produce an error. To work
around this restriction, write the
UNION
as a derived table so that
its rows can be treated as a single-table result set, which is
permitted. See INSERT ... ON DUPLICATE KEY UPDATE Statement.
(WL #5094)
InnoDB:
By default, InnoDB
reads uncommitted data
when calculating statistics. In the case of an uncommitted
transaction that deletes rows from a table,
InnoDB
excludes records that are
delete-marked when calculating row estimates and index
statistics, which can lead to non-optimal execution plans for
other transactions that are operating on the table concurrently
using a transaction isolation level other than
READ UNCOMMITTED
. To avoid
this scenario, a new configuration option,
innodb_stats_include_delete_marked
,
can be enabled to ensure that InnoDB
includes
delete-marked records when calculating persistent optimizer
statistics.
(Bug #23333990)
InnoDB:
Geometry parsing and bounding box computational code for R-trees
was moved from InnoDB
to the server.
(WL #9439)
InnoDB:
InnoDB
now supports NOWAIT
and SKIP LOCKED
options with SELECT
... FOR SHARE
and SELECT ... FOR
UPDATE
locking read statements.
NOWAIT
causes the statement to return
immediately if a requested row is locked by another transaction.
SKIP LOCKED
removes locked rows from the
result set. See
Locking Read Concurrency with NOWAIT and SKIP LOCKED.
SELECT ... FOR SHARE
replaces SELECT
... LOCK IN SHARE MODE
, but LOCK IN SHARE
MODE
remains available for backward compatibility. The
statements are equivalent. However, FOR SHARE
supports NOWAIT
, SKIP
LOCKED
, and OF
options. See
SELECT Statement.
tbl_name
OF
applies locking queries to named tables.
tbl_name
OF
now is a reserved word and cannot be
used as an identifier without identifier quoting.
SELECT ... FOR SHARE
and SELECT ...
FOR UPDATE
statements now require the
SELECT
privilege and at least one
of the DELETE
,
LOCK TABLES
, or
UPDATE
privileges. Previously,
only the SELECT
privilege was
required.
(WL #8919, WL #3597)
InnoDB:
The InnoDB
data-at-rest encryption feature
now supports encryption of redo log and undo log data,
controlled by the
innodb_redo_log_encrypt
and
innodb_undo_log_encrypt
configuration options. See
Redo Log Encryption, and
Undo Log Encryption.
(WL #9290, WL #9289)
InnoDB:
InnoDB
internal temporary tables that are
stored on disk now support multiple cursor positions, permitting
single writer and multiple reader access within the same thread.
The purpose of this enhancement is to provide support for
recursive and non-recursive common table expressions (CTEs).
Additionally, consistent-read access to
InnoDB
on-disk internal temporary tables is
replaced by a dirty-read scheme, and row counts for
InnoDB
on-disk internal temporary tables now
use row count statistics instead of slower table scans.
(WL #9248)
InnoDB:
InnoDB
now compresses large objects into a
sequence of smaller zlib
streams for tables
that use ROW_FORMAT=COMPRESSED
. Previously,
large object data was compressed into a single
zlib
stream.
(WL #9263)
Replication:
When a negative or fractional timeout parameter was supplied to
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS()
, the
server behaved in unexpected ways. With this fix:
A fractional timeout value is read as-is, with no round-off.
A negative timeout value is rejected with an error if the server is on a strict SQL mode; if the server is not on a strict SQL mode, the value makes the function return NULL immediately without any waiting and then issue a warning.
(Bug #24976304, Bug #83537)
Replication: Work has been done to reduce contention between receiver (I/O) and applier (SQL) replication threads. This ensures slaves keep up with a higher insert load on their master. (Bug #78246, Bug #21753696, WL #8599)
Replication:
Added the
binlog_expire_logs_seconds
system variable, which sets an interval in seconds for purging
of the binary log. The effects of this variable and
expire_logs_days
are
cumulative, making it possible to set a period such as 1.5 days.
To completely disable automatic binary log purging, set both
variables equal to 0, which is the default value for both of
them.
(Bug #71697, Bug #18260088, WL #9237)
Replication:
Performance schema tables have been added to monitor replication
lags and queues. The
replication_connection_status
table
has updated information on the last transaction queued in the
relay log, as well as the transaction currently being queued in
the relay log. The
replication_applier_status_by_coordinator
table has updated information on the last transaction written to
the buffer of a worker, as well as the transaction currently
being processed by the coordinator. The
replication_applier_status_by_worker
table has updated information on the last transaction applied by
the worker, as well as on the transaction currently being
applied. The information presented in each of these tables
contains the transaction's GTID, commit timestamps, processing
stage timestamp, and the timestamp of the completion.
In the
replication_applier_status_by_worker
table, the LAST_SEEN_TRANSACTION
column is
replaced by the APPLYING_TRANSACTION
column.
(WL #7374)
Replication: The new binlog_expire_logs_seconds variable is a global server variable in addition to the existing expire_logs_days variable. The purpose is to facilitate finer grained retention policies of binary logs than the current day granularity. (WL #9237)
Replication: Correct recovery of DDL statements or transactions by binary log implements support for correct recovery of DDL transactions based on the binary log data. In the context of the new data-dictionary it becomes possible to make metadata changes and write them to the binary log as a single transaction by using the 2-phase commit protocol. (WL #9175)
Replication: Multi-source replication now supports per-channel replication filters. This makes it possible to filter out the execution of selected replicated data from a specific channel. Until now replication filters have been global, and only applicable to all channels. (WL #7361)
Replication: Row-based replication now uses extended table metadata in the binary log. The extended metadata serves two major purposes: slaves use the metadata to transfer data smoothly when its table structure is different from master's, and external software can use the metadata to decode row events and store the data into external databases. (WL #4618)
Replication: An infrastructure for GTID based delayed replication and replication lag monitoring has been added to enable you to properly monitor replication lag. Two new timestamps that are associated with each transaction (not each event or statement) in the binary log have been introduced. The original_commit_timestamp is in microseconds since the epoch when the transaction was committed on the original master, and the immediate_commit_timestamp is in microseconds since the epoch when the transaction was committed on the immediate master. (WL #7319)
Replication:
The RESET MASTER
statement has
been extended to allow specification of a binary log file
number. The RESET MASTER TO
statement accepts
an argument which specifies the index of the new binary log file
to use. The purpose is to simplify failover procedures by
replacing the FLUSH BINARY LOGS
and
PURGE BINARY LOGS TO
statements with a single
RESET MASTER
statement.
(WL #9110)
Replication: The process used for how delay is defined and calculated for delayed replication have been improved. This relies on a new timestamp in the binary log, the immediate_commit_timestamp, which is the number of microseconds since epoch when the transaction was written to the binary log of the immediate master. This means that the delay is no longer computed per-event, it is now applied per-transaction. (WL #7318)
Replication: It is now possible to specify whether information written into the binary log enables replication slaves to parallelize based on commit timestamps, or on transaction write sets.
Using write sets has a the potential for greater parallelism than using commit timestamps since it does not depend on the commit history. When applying binary logs in this fashion on a replication slave, it may be able to leverage capabilities of the underlying computing hardware (such as CPU cores) and thus speed up this process.
The interface for choosing the source of parallelization is
implemented as a new server system variable
binlog_transaction_dependency_tracking
which can take any one of the values
COMMIT_ORDER
, WRITESET
, or
WRITESET_SESSION
.
COMMIT_ORDER
(the default) causes
parallelization information to be logged using commit
timestamps; WRITESET
causes this information
to be logged using write sets in such a way that any
transactions not updating the same row can be parallelized; and
WRITESET_SESSION
acts in the same fashion as
WRITESET
, except that updates originating
with the same session cannot be reordered. The size of the row
hash history that is kept in memory for tracking transaction
dependencies can be set using
binlog_transaction_dependency_history_size
,
also introduced in this release.
(WL #9556, WL #10750)
Group Replication:
View change events from a group can now be replicated to an
external multithreaded slave (MTS) of type
DATABASE
.
(Bug #25170698, Bug #84008)
Group Replication:
Group Replication now supports SAVEPOINT
SQL
transactions.
(WL #9837, WL #10520)
JSON:
Added the JSON utility function
JSON_PRETTY()
, which prints an
existing JSON
value, or any
string that can successfully be parsed as a JSON document, in a
format that can be easily read by humans. Each JSON object
member or array value is displayed on a separate line of the
output; each child object or array is intended 2 spaces with
respect to its parent.
Examples:
mysql>SELECT JSON_PRETTY('123');
+--------------------+ | JSON_PRETTY('123') | +--------------------+ | 123 | +--------------------+ mysql>SELECT JSON_PRETTY("[1,3,5]");
+------------------------+ | JSON_PRETTY("[1,3,5]") | +------------------------+ | [ 1, 3, 5 ] | +------------------------+ mysql>SELECT JSON_PRETTY('{"a":"10","b":"15","x":"25"}');
+---------------------------------------------+ | JSON_PRETTY('{"a":"10","b":"15","x":"25"}') | +---------------------------------------------+ | { "a": "10", "b": "15", "x": "25" } | +---------------------------------------------+
(WL #9191)
JSON:
Previously, when sorting JSON
values in a query using ORDER BY
, each value
was represented by a part having a fixed length in the sort key,
each such part requiring 1K of memory. In many cases this usage
was excessive—for example, an integer scalar value
requires only a relatively very few bytes, so that the remainder
of the 1K (90% or more) was taken up by padding.
Variable length parts for JSON sort keys have been introduced to address this issue, with each key part now taking up only the space that is needed to store the value. This has the following benefits for performance:
Because sort buffer space is used more effectively, filesorts need not flush to disk as early or often, which means that more data can be sorted in memory.
Shorter keys can be compared more quickly than longer ones, providing a noticeable improvement in performance for in-memory sorts as well as sorts requiring disk usage.
(WL #8741)
The WEIGHT_STRING()
debugging
function no longer supports the LEVEL
clause.
(Bug #25469683, Bug #84723)
For Developer Studio 12.5, 32-bit builds are now disabled unless
the FORCE_UNSUPPORTED_COMPILER
option is given.
(Bug #25267157, Bug #84230)
Several foreign key constraint checks that were storage engine
agnostic were being done inside InnoDB
. These
are now done at the SQL layer.
(Bug #25252847)
Some GIS out-of-bounds checking was simplified. Thanks to Daniel Black for the contribution. (Bug #25202470, Bug #84062)
The set of compiler flags used for Developer Studio 12.5 was improved. (Bug #25148549, Bug #83955)
CMake now uses
CMAKE_POLICY
of CMP0022
NEW
rather than CMP0022 OLD
.
(Bug #25090147, Bug #83804)
If MySQL was configured to build with the
-Wno-error
option,
mysql_config produced incorrect output for
its --cflags
option.
The set of compiler options that mysql_config and pkg-config produce now is determined by whitelisting rather than blacklisting. (Bug #25040566, Bug #22898475, Bug #80662)
The performance of UTF-8 binary collations was improved. (Bug #24788778, Bug #83247, Bug #25076862)
The systemd service file for mysqld now
includes a Documentation
value in the
[Unit]
section to provide a link to the
systemd documentation in the MySQL Reference Manual.
(Bug #24735762)
Unit testing now uses Google Mock 1.8. (Bug #24572381, Bug #82823)
The unimplemented and nonstandard WITH CUBE
clause for GROUP BY
is no longer supported.
CUBE
now is a reserved word and cannot be
used as an identifier without identifier quoting.
(Bug #24572048, Bug #82821)
These outdated build scripts were removed from MySQL source
distributions: BUILD/SETUP.sh
,
BUILD/autorun.sh
,
BUILD/cmake_configure.sh
,
BUILD/compile-dist
, and
cmake/configure.pl
.
(Bug #24512933)
The removal of the mysql_shutdown()
C API
function in MySQL 8.0.0 has been reverted. It is still to be
removed in a future MySQL version, but that removal has been
deferred.
(Bug #24496976, Bug #82681, WL #9014)
Consistency and maintainability of Debian/Ubuntu packaging maintainer scripts was improved. (Bug #23588977)
In-place ALTER TABLE
operations
are now possible for column modifications of tables containing
generated columns that depend on columns with a
DEFAULT
value if the modified columns are not
involved in the generated column expressions. For example,
changing the NULL
property of a separate
column can be done in place without a table rebuild.
(Bug #22987899, Bug #80832)
For dumps of the mysql
system database,
mysqldump no longer generates DDL statements
for the innodb_index_stats
and
innodb_table_stats
tables. Such statements
fail at dump reload time because those tables are not user
accessible.
(Bug #22655287)
If mysqld is invoked with
--daemonize
, stdout
and
stderr
are redirected to
/dev/null
if connected to a terminal type
device, so that mysqld can behave as a true
daemon.
(Bug #21627629)
mysql_secure_installation is more strict about what it considers valid yes and no responses. (Bug #13344753, Bug #62925)
MySQL client and utility programs reported their own
program-specific version number when invoked with the
--version
option, and the version strings did
not follow a consistent format. Now these programs print the
MySQL version number (same as mysqld) in a
consistent format.
(Bug #11763201, Bug #55885)
A new mysqldump
option,
--network-timeout
, enables
large tables to be dumped by setting
max-allowed-packet
to its
maximum value and network read and write timeouts to a large
value. This option is enabled by default. To disable it, use
--skip-network-timeout
.
(Bug #11754493, Bug #46103)
Added two JSON aggregation functions
JSON_ARRAYAGG()
and
JSON_OBJECTAGG()
. The
JSON_ARRAYAGG()
function takes a
column or column expression as an argument, and aggregates the
result set as a single JSON
array, as shown here:
mysql>SELECT col FROM t1;
+--------------------------------------+ | col | +--------------------------------------+ | {"key1": "value1", "key2": "value2"} | | {"keyA": "valueA", "keyB": "valueB"} | +--------------------------------------+ 2 rows in set (0.00 sec) mysql>SELECT JSON_ARRAYAGG(col) FROM t1;
+------------------------------------------------------------------------------+ | JSON_ARRAYAGG(col) | +------------------------------------------------------------------------------+ | [{"key1": "value1", "key2": "value2"}, {"keyA": "valueA", "keyB": "valueB"}] | +------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
The order of the array elements is unspecified.
JSON_OBJECTAGG()
takes two columns or
expressions which it interprets as a key and a value,
respectively; it returns the result as a single
JSON
object, as shown here:
mysql>SELECT id, col FROM t1;
+------+--------------------------------------+ | id | col | +------+--------------------------------------+ | 1 | {"key1": "value1", "key2": "value2"} | | 2 | {"keyA": "valueA", "keyB": "valueB"} | +------+--------------------------------------+ 2 rows in set (0.00 sec) mysql>SELECT JSON_OBJECTAGG(id, col) FROM t1;
+----------------------------------------------------------------------------------------+ | JSON_OBJECTAGG(id, col) | +----------------------------------------------------------------------------------------+ | {"1": {"key1": "value1", "key2": "value2"}, "2": {"keyA": "valueA", "keyB": "valueB"}} | +----------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
A NULL
key causes an error; duplicate keys
are ignored.
For more information, see Aggregate Functions. (Bug #78117, Bug #21647417, WL #7987)
MySQL now supports an IMPORT
TABLE
statement that imports MyISAM
tables based on information contained in
.SDI
(serialized dictionary information)
metadata files. This statement is useful for exporting
“raw” table files from one server and importing
them into another, and provides a faster alternative to dumping
tables as a file of SQL statements using
mysqldump and processing the dump file using
mysql. For more information, see
IMPORT TABLE Statement.
(WL #7524)
Incompatible Change: The stored definition of a view for which an explicit column name list was provided could be invalid. For example, for this statement:
CREATE VIEW v1 (name2) AS SELECT 1 AS name1 UNION SELECT 2 ORDER BY name1;
The stored definition looked like this, which is invalid:
CREATE VIEW v1 AS SELECT 1 AS name2 UNION SELECT 2 AS 2 ORDER BY name1;
Now column names within the stored definition are not replaced by the column name list:
CREATE VIEW v1 (name2) AS SELECT 1 AS name1 UNION SELECT 2 AS 2 ORDER BY name1;
An incompatibility resulting from this change is that the
CREATE VIEW
statement can no
longer be recreated solely from the
INFORMATION_SCHEMA
VIEWS
table, because the
VIEW_DEFINITION
value does not show the
column name list. Instead, you must also consult the
COLUMNS
table to get the column
name list. Alternatively (and more simply), use
SHOW CREATE VIEW
.
(Bug #23265335, Bug #81377)
InnoDB; Microsoft Windows: On a MySQL 64-bit build on Windows, a file I/O retry result was misinterpreted due to a missing cast necessary for the correct operation of the retry path, resulting in a failing assertion and operating system error. (Bug #24711351)
InnoDB: In debug builds, a call that initialized latch debugging raised an assertion due to a race condition. (Bug #25700405)
InnoDB: The restriction that required the first undo tablespace to use space ID 1 was removed. The first undo tablespace may now be assigned a space ID other than 1. Space ID values for undo tablespaces are still assigned in a consecutive sequence. (Bug #25551311)
InnoDB:
A DROP TABLE
operation raised an
assertion on a server with an
innodb_force_recovery
setting
of 5 or 6. DROP TABLE
is no
longer permitted with these
innodb_force_recovery
settings.
(Bug #25385590)
References: This issue is a regression of: Bug #19779113.
InnoDB: Compiling the server without the Performance Schema caused a build failure. (Bug #25348787)
InnoDB: During read-ahead, the wrong page size was used to calculate the tablespace size. (Bug #25330449)
InnoDB:
Compiling on Fedora 25 using
DWITH_LZ4=system
resulted in a
build failure due to a deprecated
LZ4_COMPRESS_LIMITEDOUTPUT
function.
(Bug #25297593)
InnoDB:
Disabling macros such as UNIV_PFS_MUTEX
,
UNIV_PFS_RWLOCK
, and
UNIV_PFS_THREAD
caused compilation errors.
(Bug #25251082)
InnoDB: A NULL virtual column field name in a virtual index caused a server exit during a field name comparison that occurs while populating virtual columns affected by a foreign key constraint. (Bug #25222337)
InnoDB:
The file handle type name for InnoDB
file I/O
Performance Schema instrumentation was changed from
os_pfs_file_t
to
pfs_os_file_t
.
(Bug #25220118)
InnoDB:
Transactions with subqueries on
INFORMATION_SCHEMA
tables could block
concurrent DDL operations.
(Bug #25200952)
InnoDB: During a range comparison, a secondary index field number was passed instead of clustered index field number, eventually causing the retrieval of an incorrect field. (Bug #25175249)
InnoDB:
A server exit on restart was caused by missing
my_thread_init()
and
my_thread_exit()
functions for background
threads that initialize the st_my_thread_var
structure.
(Bug #25167032)
InnoDB: A memcached read operation with a non-default read batch size configuration resulted in a server exit. (Bug #25147515)
InnoDB:
The
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
table reported NULL
for a foreign key
constraint name (UNIQUE_CONSTRAINT_NAME
)
after restarting the server.
(Bug #25126722)
InnoDB:
A gap lock was taken unnecessarily during foreign key validation
while using the READ
COMMITTED
isolation level.
(Bug #25082593)
InnoDB:
Loading InnoDB
tables required more memory in
MySQL 5.7 due primarily to the addition of in-memory structure
members introduced with temporary table optimizations. The
in-memory structure members, only used for temporary tables, are
now only allocated as needed.
(Bug #25080442)
InnoDB:
After a TRUNCATE TABLE
operation
on a table with a FULLTEXT
index, space size
was incorrectly calculated resulting in an invalid read.
(Bug #25053705)
InnoDB: A prepared XA transaction was rolled back by a high priority transaction. The high priority transaction should wait if the blocking transaction is in a prepared state. (Bug #25032066)
InnoDB:
InnoDB
passed an invalid argument to
syscall(SYS_futex)
.
(Bug #24923840, Bug #83375)
InnoDB: After redo log recovery, the node size of an undo tablespace object could sporadically be zero, eventually causing an error. Additionally, the undo tablespace object was incorrectly placed on the LRU list, and the header page of the undo tablespace could be present the buffer cache when the tablespace object is freed, causing a file-open failure on the first page read. (Bug #24916359)
InnoDB:
During a checkpoint, all MLOG_FILE_NAME
redo
log records were written in a single mini-transaction (mtr),
causing a log parsing buffer overflow.
(Bug #24793413, Bug #83245)
InnoDB:
The GCC mach_parse_compressed
function should
load one to five bytes depending on the value of the first byte.
Due to a GCC bug, GCC 5 and 6 emit code to load four bytes
before the first byte value is checked (GCC Bug #77673). A
workaround prevents this behavior. Thanks to Laurynas Biveinis
for the patch.
(Bug #24707869, Bug #83073)
InnoDB: Code related to tablespace type functions was improved to address issues with naming consistency, function distribution, and function usage. (Bug #24706739, Bug #83092)
InnoDB:
A mechanism was added to debug builds to ensure that keys for
InnoDB
Performance Schema instrumentation are
registered with Performance Schema. The mechanism causes startup
to fail on debug builds if the number of Performance Schema keys
does not match the number of registered Performance Schema keys.
(Bug #24686908)
InnoDB: A race condition while updating table statistics could result in an estimated row count of 1 and an incorrect query execution plan. (Bug #24666839, Bug #82968)
InnoDB:
Due to a glibc
bug, short-lived detached
threads could exit before the caller had returned from
pthread_create()
, causing a server exit.
Thanks to Laurynas Biveinis for the patch.
(Bug #24605956, Bug #82886)
InnoDB:
An error in code related to table statistics raised an assertion
in the dict0stats.cc
source file.
(Bug #24585978)
InnoDB:
The list of module base names representing modules in the
InnoDB
code base that allocate memory using
ut_malloc
or ut_new
was
incomplete. The list is used by the Performance Schema for
reporting of InnoDB
memory allocation event
data.
(Bug #24571816)
InnoDB:
Some InnoDB
rw-lock and mutex keys were not
registered for use with the Performance Schema.
(Bug #24571597)
InnoDB:
After increasing the value of
innodb_undo_logs
and restarting
the server, the number of active undo tablespaces was not
increased when assigning undo tablespaces to newly allocated
rollback segments.
(Bug #24488141)
InnoDB:
The unused MLOG_UNDO_HDR_DISCARD
redo log
record type and related functions were removed.
(Bug #24482001)
InnoDB: An assertion was raised when the purge thread started due to the server not recognizing a tablespace ID as an undo tablespace ID. (Bug #24479773)
References: This issue is a regression of: Bug #23517560.
InnoDB:
InnoDB
incorrectly reported an error about
missing encryption when restoring pages from the doublewrite
buffer during recovery.
(Bug #24471076)
InnoDB:
InnoDB
reported an incorrect estimate for the
number of pages in the buffer pool for a table. The number of
pages was not decremented correctly when pages were removed.
(Bug #24464147)
References: This issue is a regression of: Bug #21747906.
InnoDB: The following code changes related to undo tablespace management were implemented:
An in-memory array for temporary tablespace rollback
segments was added, freeing 32 slots in the
TRX_SYS
page for use by redo-enabled
rollback segments.
As a result of this change, you no longer need to consider
temporary tablespace rollback segments when setting the
innodb_rollback_segments
configuration option during configuration of separate undo
tablespaces.
Code comments related to undo logs and rollback segments were revised.
Fixed arrays that list rollback segments and undo tablespaces were replaced by dynamic size arrays.
The function that initializes undo tablespaces was refactored.
A class was added for managing just-in-time creation of undo and undo file names.
(Bug #24462978)
InnoDB: A cached undo segment was not removed from the rollback segment history during a slow shutdown. (Bug #24450908)
InnoDB:
An error during a table-rebuilding operation on a table with
only a generated clustered index
(GEN_CLUST_INDEX
) raised and assertion due to
an error called with an invalid key name.
(Bug #24444831)
InnoDB: MySQL did not build with GCC 6.1.1. (Bug #24438752)
InnoDB: Rotating the tablespace encryption master key while the server is in read-only mode raised an assertion instead of displaying an error message. (Bug #24404091)
InnoDB:
On a table without an explicitly defined primary key,
InnoDB
did not replace the implicit clustered
index (GEN_CLUST_INDEX
) when a unique key was
defined on a NOT NULL
column.
(Bug #24397406)
InnoDB:
handler::keys_to_use_for_scanning()
was
removed from the handler API. The function was no longer used.
The HA_READ_ORDER
index flag provides the
same information for each index.
(Bug #24364448)
InnoDB: Page cleaner threads asserted due to a regression related to the adaptive hash index feature. (Bug #24346574)
References: This issue is a regression of: Bug #21407023.
InnoDB:
InnoDB
failed to free memory used by the
full-text optimizer thread.
(Bug #24331265)
InnoDB:
During recovery, InnoDB
attempted to fetch
LOB pages using a null reference.
(Bug #23615208)
InnoDB:
When adding a new index, the server dropped an internally
defined foreign key index and attempted to use a secondary index
defined on a virtual generated column as the foreign key index,
causing a server exit. InnoDB
now permits a
foreign key constraint to reference a secondary index defined on
a virtual generated column.
(Bug #23533396)
InnoDB:
An INFORMATION_SCHEMA.FILES
query
resulted in a server exit due to a race condition with a
concurrent tablespace creation operation.
(Bug #23477214, Bug #81614)
InnoDB:
A concurrent DML operation during an in-place
ALTER TABLE
operation that
rebuilt the table did not update a virtual index, resulting in a
mismatch between the virtual index and clustered index.
(Bug #23219499)
InnoDB:
A TRUNCATE TABLE
operation held
the dict_sys
mutex while scanning for and
removing pages from the buffer pool, causing concurrent DDL
operations to stall. The mutex is now released during the scan
and acquired again when the scan is completed.
(Bug #23070734, Bug #80060)
InnoDB: Inserting GIS data into an R-tree raised an assertion due to a missing page number field that was encountered when storing the B-tree cursor. (Bug #23044098, Bug #80939)
InnoDB:
Writing to an InnoDB
internal temporary table
did not increment the
Handler_write
counter.
(Bug #23024178)
InnoDB:
Changes to the InnoDB
recovery process in
MySQL 5.7 could require up to three scans of the redo log during
recovery. To reduce the number of scans, the first and second
scans were merged. With this change, there is only one scan
unless the redo log record hash table that is populated by the
scan reaches its memory threshold. In this case, a second scan
is initiated that performs a simultaneous scan and apply.
(Bug #22963951, Bug #80788)
InnoDB:
A table-copying online ALTER
TABLE
operation on a
ROW_FORMAT=REDUNDANT
table with indexed
virtual columns raised an assertion.
(Bug #22018745)
InnoDB:
After a server restart, concurrent
INSERT
operations a table with an
auto-increment primary key resulted in a duplicate entry error.
The current auto-increment value was not changed after
auto_increment_increment
and
auto_increment_offset
settings
were modified.
(Bug #20989615, Bug #76872)
InnoDB:
Performance Schema instrumentation for InnoDB
file I/O was disabled on Windows.
(Bug #14025581)
InnoDB:
An automatically generated foreign key constraint identifier
that exceeded the 64 character limit appeared truncated in the
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
CONSTRAINT_NAME
column. Automatically
generated foreign key constraint identifiers can no longer
exceed the 64 character limit.
(Bug #11745347, Bug #13942)
InnoDB:
The row_search_mvcc()
function unnecessarily
traversed the entire table for a range query, which occurred
when the record was not in the transaction read view.
(Bug #84202, Bug #23481444, Bug #25251375)
Packaging: The my_create_minidump function in the mysys library called the Windows API function MiniDumpWriteDump with an incorrect value (NULL) for the ExceptionParam parameter. This resulted in exception information being omitted from the minidump file. (Bug #24505650, Bug #82695)
Partitioning: For a partitioned table, dropping a partition dropped triggers for the table as well. (Bug #24449174)
Partitioning: Updating a row of a table that had partitioning on a generated column could raise an assertion failure for debug builds, and return incorrect results in nondebug builds. (Bug #22574695, Bug #80080)
Replication:
MySQL 8.0.1 adds the original commit timestamp related
statements, but mysqlbinlog was wrongly
reporting that these statements have been present since MySQL
8.0.0 because they were written to the log with the incorrect
version number 80000
. The fix changes the
version to 80001
in
mysqlbinlog dumps.
(Bug #25710507)
Replication: Lock contention impeded binary relay performance during processing of the relay log file on the slave. (Bug #25321231, Bug #77778)
Replication: A failed node that was removed from the cluster could be expelled upon rejoining the cluster. (Bug #25311008)
Replication: When using a multithreaded slave, applier errors displayed worker ID data that was inconsistent with data externalized in Performance Schema replication tables. (Bug #25231367)
Replication: Compiling MySQL 5.7.17 failed with a variable length array error. (Bug #25163241, Bug #83994)
Replication:
In row-based replication, a message that incorrectly displayed
field lengths was returned when replicating from a table with a
utf8mb3
column to a table of the same
definition where the column was defined with a
utf8mb4
character set.
(Bug #25135304, Bug #83918)
Replication: If the binary log on a master server was rotated and a full disk condition occurred on the partition where the binary log file was being stored, the server could stop unexpectedly. The fix adds a check for the existence of the binary log when the dump thread switches to next binary log file. If the binary log is disabled, all binary logs up to the current active log are transmitted to slave and an error is returned to the receiver thread. (Bug #25076007)
Replication: The GTID transaction skipping mechanism that silently skips a GTID transaction that was previously executed did not work properly for XA transactions. (Bug #25041920)
Replication:
If a relay log index file named relay log files that did not
exist, RESET SLAVE ALL
sometimes did not
fully clean up properly.
(Bug #24901077)
Replication: When the MTS slave applier stopped because of an (injected) error, it reported no useful information for troubleshooting. (Bug #24822686)
Replication:
FLUSH BINARY LOGS
could become
slow with data replicated from many servers.
(Bug #24806259, Bug #83270)
Replication:
When using XA transactions, if a lock wait timeout or deadlock
occurred for the applier (SQL) thread on a replication slave,
the automatic retry did not work. The cause was that while the
SQL thread would do a rollback, it would not roll the XA
transaction back. This meant that when the transaction was
retried, the first event was XA START
which
was invalid as the XA transaction was already in progress,
leading to an XAER_RMFAIL
error.
(Bug #24764800)
References: See also: Bug #83588, Bug #24923091, Bug #24966941.
Replication:
A partially failed CREATE USER
,
RENAME USER
, or
ALTER USER
statement was not
correctly consuming an auto-generated or specified GTID when
binary logging was disabled.
(Bug #24693798)
Replication:
Binlog_sender
, which writes events from the
binary log to a packet buffer and then sends the packet to the
slave, did not reduce the size of the send buffer as expected.
(Bug #24643036)
Replication: The group commit update of GTIDs has been refactored to improve performance on workloads with many small transactions. (Bug #24398760)
Replication:
If the relay_log
option was not
specified in a configuration file, the
relay_log_basename
variable was
being internally constructed on the fly using
hostname
but the
relay_log_basename
variable was
not set. When a slave tried to access this uninitialized
variable it resulted in an unexpected halt of the server.
(Bug #24352667)
Replication:
When using a multithreaded slave
(slave_parallel_workers
greater
than 0) the value of Seconds_Behind_Master
was incorrect when rotating a relay log.
(Bug #23532304)
Replication:
An XA PREPARE
statement that failed during
the intermediate steps could lead to an inconsistent
XA
transaction state, where
ID
= -1 but the binlogged
flag was set to true
. This caused asserts
while executing XA COMMIT
and XA
ROLLBACK
queries.
(Bug #22915670)
Replication:
The server prevented several replication-related administrative
statements from working if the
read_only
system variable was
enabled.
(Bug #22857926, Bug #25363745, Bug #25326058, Bug #84350, Bug #84437)
Replication:
CHANGE MASTER TO
for a channel
that did not exist could raise an assertion.
(Bug #22255698)
Replication:
The delay specified by the
binlog_group_commit_sync_delay
system
variable was applied to too many binary log commit groups.
(Bug #21420180)
Replication: The number of generated unwanted fseeks into the binary log file being replicated to a slave has been reduced. (Bug #83226, Bug #24763579)
Replication: The fix for Bug #81657 was not correctly merged into MySQL 8.0. Thanks to Laurynas Biveinis for alerting us. (Bug #83124, Bug #24715790)
Replication:
The rpl.rpl_binlog_errors
test was failing
sporadically on Windows.
(Bug #82302, Bug #24330138)
Replication:
When
binlog_group_commit_sync_delay
was set to a value between 1 and 9, if
binlog_group_commit_sync_no_delay_count
was set to a value greater than 1, and the number of transaction
commits was less than
binlog_group_commit_sync_no_delay_count
,
these commits hung forever if no more commits were received; and
if
binlog_group_commit_sync_no_delay_count
was set to 0, all transaction commits hung forever.
(Bug #80652, Bug #22891628)
Replication:
Concurrent CREATE TRIGGER
and
DROP TRIGGER
statements were not
being binary logged in the correct order, causing slaves to
fail.
(Bug #77095, Bug #21114768)
Group Replication; Microsoft Windows: Removed unnecessary warnings raised when the Group Replication plugin was compiled on Windows platforms. (Bug #25119288)
Group Replication; Microsoft Windows: Building Group Replication support on Windows now requires CMake version 2.8.12 or later. (Bug #24964522)
Group Replication:
The MEMBER_STATE
of a group replication
member did not change from ERROR
to
OFFLINE
when the STOP
GROUP_REPLICATION
command was executed when the error
was
ER_GROUP_REPLICATION_CONFIGURATION
.
(Bug #25674926)
Group Replication: With flow control enabled, reaching a minimum flow control quota of 1 caused Group Replication not to stop throttling when the reason for throttling was no longer in effect. (Bug #25461354)
Group Replication:
Using an unresolvable host name in
group_replication_group_seeds
caused START GROUP_REPLICATION
to
fail. This fix ensures that host names in
group_replication_group_seeds
are validated when starting Group Replication and that the list
contains at least one valid address. Invalid addresses are
ignored.
(Bug #25460324, Bug #84674)
Group Replication:
The _gr_user
account created by Group
Replication plugin installation was not reliably removed when
the plugin was uninstalled.
(Bug #25298987)
Group Replication: When starting Group Replication on an offline node, it was possible for the node to be configured for replication, but but be unable to recover. (Bug #25256910)
Group Replication: Group Replication GCS did not discard messages from an inactive member of the group. (Bug #25134074)
Group Replication: An attempt by the Group Replication plugin to contact the server that was no longer possible led to an assertion. (Bug #25071492)
Group Replication: After executing restarts on the group replication applier SQL thread, the plugin could no longer detect failure of the thread. (Bug #24969065)
Group Replication:
Enabling the group replication plugin caused the
performance_schema_max_mutex_classes
default value of 200 to be exceeded. As a result, some group
replication mutex instruments did not appear in the
performance_schema.setup_instruments
table.
(Bug #24746530)
Group Replication: For servers built with yaSSL, using group replication with encrypted connections could result in timeout failures waiting for view delivery. (Bug #23592214)
Microsoft Windows:
On Windows, SHOW
TABLES FROM
hung if
db_name
db_name
was given in uppercase.
(Bug #24800048, Bug #83262)
Microsoft Windows:
32-bit builds are no longer supported on Windows, but
CMake
failed to detect when a 32-built build
would be attempted, resulting in compilation errors later. Now
CMake
detects 32-bit build attempts and
produces an appropriate error message.
(Bug #24487483, Bug #82645)
Solaris:
When the WITH_INNODB_MEMCACHED
CMake option is enabled,
memcached now can be built on Solaris 11 and
12 using the Developer Studio 12.5 compiler.
(Bug #24504155, Bug #82692)
Solaris: Library search path handling on Solaris was incorrect. (Bug #24487934, Bug #82646)
Solaris: The minimum required version of Solaris is now Solaris 11 update 3, due to a dependency on system runtime libraries.
Solaris: 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
JSON:
When a JSON
value consisted of a
large sub-document wrapped in many levels of JSON arrays,
objects, or both, serialization of the JSON
value sometimes required an excessive amount time to complete.
(Bug #23031146)
JSON:
When a NULL
value existed in a
JSON
column, the result from a
query using GROUP_CONCAT()
together with the ORDER BY
clause was not
always correct.
(Bug #22992666)
JSON:
The internal rapid_json_handler
used its own
data structures to represent a partially-built DOM; these had to
be converted into a Json_dom
graph before
returning the result. Now this handler builds the graph
directly, which reduces the amount of work required to build it,
and thus to parse a JSON document.
(Bug #22900110)
JSON:
The internal function
Item_func_case::val_json()
did not always set
the null value flag as expected when a
CASE
expression evaluated to
NULL
, leading to an assertion in debug builds
of the server.
(Bug #22887227)
JSON:
The SUM()
function truncated
decimal values extracted from JSON documents, producing an
integer result.
(Bug #84935, Bug #25530204)
JSON: A JSON document that contained a double value slightly greater than the maximum value that can be represented by a double silently replaced it with zero instead of rejecting the value and raising an error. Such values are now handled correctly in MySQL JSON documents.
The underlying issue was traced to a problem with RapidJSON, which has been reported to that library's developers as Issue #849. (Bug #84891, Bug #25518504)
JSON:
The JSON_SEARCH()
and
JSON_CONTAINS_PATH()
functions
did not work when the one_or_all
argument was specified using UTF-16 encoding. For both of these
functions, this argument is now converted to
utfmb4
if need be before its value is
checked.
(Bug #84880, Bug #22516960)
JSON:
The JSON_UNQUOTE()
function did
not work with strings that used UTF-16 encoding. Now these
strings are converted to utfmb4
internally
before being processed.
(Bug #84878, Bug #25516881)
JSON:
Updating the same JSON
column in
a single statement could cause incorrect values to be written
into the table. This occurred when the second update overwrote
the column value with a subset of itself. An example of such a
statement is shown here:
UPDATE t SET col = JSON_ARRAY(value
), col = col->'$[0]';
(Bug #84694, Bug #25461627)
JSON:
The functions JSON_QUOTE()
and
JSON_UNQUOTE()
did not work
correctly with multibyte character sets such as
utf8mb4
.
(Bug #84680, Bug #25455065)
References: See also: Bug #77234, Bug #21193273.
JSON:
The error message for Error 3152
ER_JSON_USED_AS_KEY
has been
changed from JSON column '%s' cannot be used in key
specification to the less confusing and more
accurate JSON column '%s' supports indexing only via
generated columns on a specified JSON path.
(Bug #81364, Bug #23274244)
JSON: Internal tests for MySQL JSON functionality ran out of stack space on some platforms when run against a debug-enabled server. Because timely checks were not made for stack usage, the server did not detect this situation, leading to a server exit.
The fix for this issue is twofold:
Stack overrun checks are now made before attempting to serialize a nested array or object, so that the operation fails gracefully when processing deeply nested JSON documents, rather than causing an exit.
Serialization of JSON documents has been reorganized so that it requires less use of the stack when compiled without optimization.
(Bug #81083, Bug #23106330, Bug #26399306)
BIN()
could produce incorrect
truncation with multibyte character sets when used within
UNION
.
(Bug #27511490, Bug #89581)
MySQL did not compile with GCC 7. (Bug #25643811, Bug #26825211)
The (undocumented) WINDOWS_RUNTIME_MD
CMake option has been removed.
(Bug #25611359)
If
--skip-innodb
or one of its variants was used, a spurious warning about
avoid_temporal_upgrade
was
generated.
(Bug #25573578)
mysqld_safe failed to restart the server if a
file was present.
(Bug #25572504)PID_FILE
.shutdown
References: This issue is a regression of: Bug #11751149.
For Debian/Ubuntu packages, user-defined collation files could be overwritten during MySQL upgrades. Charset files are now marked as conffiles so that user customizations generate a prompt during upgrades whether to overwrite them. (Bug #25525628, Bug #84761)
For CREATE TABLE
statements that
specified the table name with a database qualifier and included
a DATA DIRECTORY
or INDEX
DIRECTORY
option, an error occurred if there was no
default database.
(Bug #25514146, Bug #84861)
referenced_table_schema
and
referenced_table_name
field values in the
mysql.foreign_keys
data dictionary table were
not stored in lowercase when
lower_case_table_names
was
enabled.
(Bug #25495714)
Starting the server with
performance_schema_digests_size=1
caused an abnormal exit.
(Bug #25492129, Bug #84786)
For clients linked against yaSSL, connections became invalid when a read timeout occurred, rather than retrying the read. (Bug #25444075)
MySQL compilation in different directories produced different
builds to leakage of absolute paths into debug information and
__FILE__
.
(Bug #25436469, Bug #84608, Bug #25859274, Bug #85855)
Calculations for UCA 9.0.0 collations were inefficient for tailoring rules containing contraction characters. (Bug #25426632, Bug #84577, Bug #25426632, Bug #84577)
A negative internal connection timeout value caused the connection to go idle and abort. A negative value now causes the connection to block indefinitely in the absence of I/O. (Bug #25408557)
A mutex Performance Schema name was too long and produced a warning at server startup. (Bug #25406915)
MySQL failed to compile on some platforms with
-DWITH_LIBWRAP=ON
.
CMake support now checks whether
tcpd.h
has proper function prototypes.
(Bug #25395543, Bug #84495)
An index defined on a data dictionary table column exceeded the
maximum index key length when the instance was initiated with
innodb_page_size=4k
.
(Bug #25384527)
mysqld_safe did not check whether the
directory named by the --basedir
option
existed.
(Bug #25365194)
Configuring CMake with -G
ninja
resulted in build output that was inappropriate
for build platforms other than Xcode or Visual Studio.
(Bug #25358460)
mysqld_safe failed if the error log file
named by the --log-error
option was a FIFO.
(Bug #25356221, Bug #84427)
For prepared statements, an alias within a subquery or derived table might cause incorrect behavior during statement execution if another alias depended on it. (Bug #25343335, Bug #84398, Bug #25171608)
mysqld_safe could fail if the
--datadir
option value ended with a
/
character.
(Bug #25319457)
A recent change to mysqld_safe caused the mysql.server script to be unable to start it if the base directory was specified as an absolute path that differed from the compiled-in default absolute path. (Bug #25319392, Bug #84263)
The CONNECTION_CONTROL
plugin failed to
compile if the Performance Schema was disabled.
(Bug #25308357, Bug #84304)
Passwords did not expire correctly for accounts created using MySQL Workbench. (Bug #25299309)
For System V init scripts for RPMs, the
[mysqld]
option-file section was being
ignored for some options, such as pid-file
.
(Bug #25287707, Bug #84172)
Init scripts failed to launch mysqld_safe if a non-default base directory was used. (Bug #25261472, Bug #84219)
CMake
now detects whether a GCC 5.3.0 loop
optimization bug occurs and attempts a workaround if so.
(Bug #25253540)
mysqld_safe --no-defaults did not work (inadvertent consequence of an earlier bug fix). (Bug #25244898, Bug #84173)
Semicolon (;
) characters within or between
statements could cause distinct digests to be generated from
identical statements.
(Bug #25244533, Bug #83253)
Components could not register services without referring to
their private implementation. A
SERVICE_IMPLEMENTATION(
macro now enables this to be avoided.
(Bug #25238906)component
,service
)
Certain stored functions, if used in a query
WHERE
clause, could be handled using Index
Condition Pushdown (which should not happen), resulting in a
server exit.
(Bug #25196653, Bug #25174454)
For ai_ci
collations based on Unicode
Collation Algorithm 9.0.0, accented characters that compare
equal were treated as different by
LIKE
comparisons.
(Bug #25167284, Bug #83999)
For a client linked against libmysqlclient
,
invalid memory access could occur during use of prepared
statements.
(Bug #25164932)
Some Linux startup scripts did not process the
datadir
setting correctly.
(Bug #25159791)
If a character set is specified for a column of a partitioned table, a segmentation fault could occur while upgrading. (Bug #25153261)
LOAD DATA
failed to accept
multibyte characters that followed an escape sequence.
(Bug #25147988, Bug #83950, Bug #25865525)
The fix for Bug #25088048 caused the command used by mysqld_safe to start the MySQL server to no longer include the mysqld path. (Bug #25144379)
References: This issue is a regression of: Bug #25088048.
For UCA collations, LIKE
comparisons against a pattern that ended with the escape
character returned incorrect results.
(Bug #25140629, Bug #83930)
The default character set and collation were used instead of the
character set and collation defined in
db.opt
file when upgrading the schema from
MySQL 5.7 to MySQL 8.0.
(Bug #25139901)
Instead of updating the data dictionary cache at the end of DDL statements using separate function calls, the data dictionary cache is now updated as part of transaction commit. (Bug #25095798, Bug #83818)
CREATE TABLE
now requires the
FILE
privilege if DATA
DIRECTORY
or INDEX DIRECTORY
is
specified explicitly as a table or partition option.
ALTER TABLE
requires the
FILE
privilege if either option
is specified explicitly as a partition option (it ignores them
if specified as table options).
(Bug #25092566)
There were some differences between ICU order and MySQL Unicode collations for Hungarian contractions and ligatures. MySQL now follows ICU order. (Bug #25090543)
The data dictionary failed to initialize and start when using a binary collation. The query string generated to create the data dictionary schema did not add quotes to the binary collation name. (Bug #25054104, Bug #83706)
Executing a stored procedure containing a query that accessed a view could allocate memory that was not freed until the session ended. (Bug #25053286)
Compilation on FreeBSD 11 failed attempting to check
MAP_NORESERVE
, which is no longer defined.
(Bug #25048128, Bug #83689)
mysql-test-run.pl now checks whether the
TSAN_OPTIONS
environment variable is set. If
so, the value is taken as the path name of a file containing
ThreadSanitizer suppressions (errors to be ignored during test
runs). Additionally, the --sanitize
option now
causes mysql-test-run.pl to scan the server
error logs for ThreadSanizer messages.
(Bug #24970905, Bug #83601)
After starting the server with a nonzero
--lower-case-table-names
setting, an assertion was raised when USE
INFORMATION_SCHEMA;
was the first instruction from the
first client.
(Bug #24963580)
For case-insensitive Unicode collations, the various space characters did not hash to the same value, resulting in incorrect comparisons between them. (Bug #24956750, Bug #83549)
Dictionary clients now track uncommitted dictionary objects that are being modified by DDL statements, making uncommitted changes by the same session visible to a dictionary client without affecting the dictionary object cache prior to commit time. (Bug #24956365, Bug #83548)
Simultaneous dictionary object cache misses were not handled correctly. An object retrieved by one thread could be evicted from the cache before a waiting thread attempted to access it. (Bug #24949179)
CMake
now avoids configuring the
-fexpensive-optimizations
option for GCC
versions for which the option triggers faulty shift-or
optimizations.
(Bug #24947597, Bug #83517)
CMake
support was added for compiling using
the -std=c++03
option under Developer Studio
12.5. This is now used rather than stlport
by
default.
(Bug #24947136, Bug #83512, Bug #25229424)
NCHAR
and NATIONAL CHAR
are synonyms, but
CAST(
succeeded, whereas
expr
AS
NCHAR)CAST(
did not. Now both work.
(Bug #24934161)expr
AS
NATIONAL CHAR)
OEL RPM packages now better detect which platforms have multilib support (for which 32-bit and 64-bit libraries can be installed). Thanks to Alexey Kopytov for the patch. (Bug #24925181, Bug #83457)
OEL RPM packages now better detect which platforms do not have multilib support (for which 32-bit and 64-bit libraries can be installed). Thanks to Alexey Kopytov for the patch. (Bug #24916428, Bug #83428)
The LOCATE()
function returned
NULL
if the substr
or str
argument was
NULL
, but not if the
pos
argument was
NULL
. Now it returns NULL
if any argument is NULL
.
(Bug #24911350, Bug #83427)
Bit operations could cause a server exit to occur if argument nullability was mishandled. (Bug #24910958, Bug #24930038, Bug #24930829)
The Block Nested Loop algorithm could allocate too much memory during query execution. (Bug #24909223)
Information about building MySQL 5.6 compatibility libraries in
the MySQL 5.7 and higher .spec
file is
needed only for building libmysqlclient
and
libmysqld
. Information about building the
InnoDB
memcached plugin was removed.
(Bug #24908345, Bug #83409)
Incorrect updating of view metadata could raise an assertion. (Bug #24834622)
Initialization of the keyring_okv
plugin
failed if the STANDBY_SERVER
setting was
missing from the okvclient.ora
configuration file, effectively making this a mandatory setting.
STANDBY_SERVER
is now optional.
(Bug #24816271)
Data dictionary objects acquired by
Dictionary_client::acquire_uncached()
are now
owned by the current auto-releaser instead of the caller. Also,
acquisition of TABLE_SHARE
view objects is
performed by acquire() and
clone() instead of
acquire_uncached()
.
(Bug #24813358, Bug #83296)
Privilege checking could be incorrect for a derived table used
within a multiple-table UPDATE
invoked within a stored procedure or view object, for the second
or subsequent execution of the object, if the derived table was
merged into the outer query.
(Bug #24810564)
The Created_tmp_tables
status
variable was incremented in some cases when no temporary table
was created.
(Bug #24808970, Bug #83287)
An in-place upgrade from MySQL 5.7 to MySQL 8.0 failed if parsing of a stored routine body failed while migrating the routine. Now a warning is reported and the routine is created without parsing its body. Also, warnings are now reported when dependency resolution fails for a view during view migration. (Bug #24805140, Bug #83275)
For compilation, mysql_upgrade is dependent
on the dynamically generated
sql_commands_system_tables_data_fix.h
file,
but a missing dependency could cause that file not to be
generated.
(Bug #24802377, Bug #83272)
A race condition between transactions accessing the
access-control list (ACL) cache and use of the ACL cache to
populate INFORMATION_SCHEMA
tables could
cause a server exit.
(Bug #24786029)
For debug builds, EXPLAIN
or
DESCRIBE
for a table with a
database or table name longer than the maximum permitted length
raised an assertion rather than displaying an appropriate error.
(Bug #24751177, Bug #83114)
The implementation of several
INFORMATION_SCHEMA
tables as views on data
dictionary tables introduced a number of native SQL functions
intended only for internal use by the server, but they could be
invoked by users. Those functions now produce an error if
invoked by users.
(Bug #24749248, Bug #83189)
CASE
,
COALESCE()
,
IF()
and
IFNULL()
could merge a mix of
signed and unsigned arguments incorrectly and produce an
incorrect result type.
(Bug #24733658, Bug #83148)
Connections from a client to a server with SSL enabled succeeded
even if --ssl-mode
had a value
of VERIFY_CA
or
VERIFY_IDENTITY
and the client did not
provide a CA certificate.
(Bug #24732452, Bug #23189252, Bug #25397416, Bug #84508)
Manual creation of a directory in the data directory resulted in
USE
succeeding even though the directory was not registered as a
database in the data dictionary.
(Bug #24732194, Bug #83140)dir_name
If InnoDB
statistics were incorrect,
FOUND_ROWS()
could return 1 even
when the previous SELECT
returned no rows.
(Bug #24714857, Bug #83110)
ALTER TABLE
on a temporary table
could raise an assertion if a nontemporary table with the same
name existed.
(Bug #24713918, Bug #83117)
CMake now sets
-DWITH_NUMA=ON
for Debian
platforms where possible.
(Bug #24689101)
To better provide atomic file creation, Debian packaging scripts now use the coreutils install command rather than touch, chmod, and chown. (Bug #24688682)
Enabling the DISABLE_SHARED
CMake option caused compilation failure.
(Bug #24687701, Bug #83039)
References: This issue is a regression of: Bug #24481181.
The BIN()
,
OCT()
, and
HEX()
functions could mishandle
values of the BIT
data type.
(Bug #24686658, Bug #83031)
For debug builds, an invalid utf8
character
in the comment of a CREATE EVENT
or ALTER EVENT
statement raised
an assertion. This now produces an
ER_INVALID_CHARACTER_STRING
error.
(Bug #24679962)
The encoding for the utf8
character set
permitted characters between U+D800 and U+DFFF as valid, though
they are reserved for surrogate pairs and do not directly
represent characters. They are now considered invalid.
(Bug #24672415)
A query could produce incorrect results if the
WHERE
clause contained a dependent subquery,
the table had a secondary index on the columns in the select
list followed by the columns in the subquery, and GROUP
BY
or DISTINCT
permitted the query
to use a Loose Index Scan.
(Bug #24671968, Bug #83005)
After a RENAME TABLE
operation on
a table with a foreign key, the generated constraint name was
not updated in TABLE_CONSTRAINTS
.
(Bug #24666169)
On macOS, CMake
AddressSanitizer support did
not work.
(Bug #24661626, Bug #82976)
References: This issue is a regression of: Bug #23759968.
Compilation failed on macOS 10.11 with Xcode 8.0. (Bug #24661523, Bug #82975)
Index hints applied to invisible indexes produced no error. (Bug #24660093, Bug #82960)
In some cases,
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
did not report data for all foreign key constraints.
(Bug #24655803, Bug #82961)
REPLACE()
on large strings could
be slow and unkillable.
(Bug #24652792)
The DebugPrintTest
and
DebugPrintDeathTest
unit tests did not handle
divide-by-zero testing properly on the Aarch64 platform. Thanks
to Alexey Kopytov for the patch.
(Bug #24624555, Bug #82889)
Compilation on FreeBSD using GCC 6 did not work. (Bug #24619561, Bug #82922)
Changes made to mysqld_safe in recent MySQL
releases require the
--ledir
,
--mysqld
,
--mysqld-version
options to
be specified on the command line; they can no longer be
specified in option files. This could cause failure of init
scripts that invoke mysqld_safe. Such scripts
now pass the value of the MYSQLD_OPTS
environment variable as the first command-line argument to
mysqld_safe, with the value set to such
command line-only mysqld_safe option values
as may be required. On platforms that use systemd, the
MYSQLD_OPTS
value can be set in
/etc/sysconfig/mysqld
with a line such as
this:
MYSQLD_OPTS=" --ledir=/mysqld_ledir --mysqld=my_wrapper "
The value of MYSQLD_OPTS
can also include
mysqld options for
mysqld_safe to pass to
mysqld.
(Bug #24619033, Bug #82920)
References: This issue is a regression of: Bug #24464380, Bug #24483092, Bug #25088048, Bug #25378439, Bug #25378565.
SET PERSIST innodb_buffer_pool_size =
stored the original
value of
value
innodb_buffer_pool_size
to
mysqld-auto.cnf
, not the new value.
(Bug #24613005, Bug #82905)
For SLES packages, a typo in the installation script postamble prevented some cleanup from occurring. (Bug #24605300, Bug #82389)
Some messages written by the server to the error log while upgrading the data directory were missing the standard timestamp and process ID information. (Bug #24600054, Bug #82874)
It was possible for the session values of the
Last_query_cost
and
Last_query_partial_plans
status variables to be accessed before they had been
initialized.
(Bug #24596263)
Warnings occurring during CREATE TABLE ...
SELECT
could cause a server exit.
(Bug #24595992)
For LOAD DATA
used to insert data
into an updateable view, the check to verify whether a column is
actually updatable was missing.
(Bug #24595937)
The server could dereference a null pointer when a deterministic
function returning LONGTEXT
was used in a
subquery.
(Bug #24595581)
A view altered with ALTER VIEW
might be dropped if the statement failed with an error.
(Bug #24594140)
Conversion of JSON
documents to
string could be slow if the document was large and contained
many signed integers.
(Bug #24586888)
The data dictionary can contain entries for temporary tables
(names beginning with #sql
). These tables
were exposed to INFORMATION_SCHEMA
queries
and through SHOW
statements. This
could cause mysqldump and
mysqlpump to fail when they attempted to dump
such tables. Temporary tables are now hidden to
INFORMATION_SCHEMA
queries and
SHOW
statements.
(Bug #24580599, Bug #24571427)
When a view was defined, the character set of the definition was not considered. If this differed from the default character set, table names used in the view might not be recognized, causing the view to be marked invalid.
For debug builds, an assertion could be raised if an error
occurred while parsing an ALTER
VIEW
statement and the diagnostics area was empty.
(Bug #24580586)
For LOAD DATA
statements, input
data with too many column values produced only a warning, rather
than an error as in MySQL 5.6. An error now occurs.
(Bug #24577194, Bug #82830)
Using SET
PERSIST
with the global_log
system
variable was ineffective.
(Bug #24569624, Bug #82807)
In the Performance Schema
variables_info
table, the
VARIABLE_SOURCE
column was not set properly
for some boolean options specified in option files without a
variable.
(Bug #24567960)
The .mylogin.cnf
option file is intended
for use by client programs, but the server was reading it as
well. The server no longer reads it.
(Bug #24557925)
Use of boost::chrono
was replaced with
std::chrono
because the former was causing
link errors.
(Bug #24556808, Bug #82781)
The X Plugin was built with compilation options different from other plugins. (Bug #24555770, Bug #82777)
When populating the
variables_by_thread
table, the
Performance Schema could attempt to access session variables of
other threads that were being deinitialized.
(Bug #24555658)
Users without proper privileges could load and unload server components. (Bug #24528148)
Concurrent execution of INSTALL
COMPONENT
and UNINSTALL
COMPONENT
statements could cause a server exit.
(Bug #24527148)
On Debian/Ubuntu platforms, the systemd startup script for MySQL
ignored datadir
settings in
/etc/mysql/my.cnf
.
(Bug #24517024, Bug #82709)
With a LOCK TABLES
statement in
effect, DML statements on a table that had triggers could cause
a server exit.
(Bug #24506766)
Parallel slave threads running account-management statements could fail due to a race condition in handling privilege cache locks. (Bug #24503606)
Executing ALTER TABLE
on a table
that has triggers concurrently with other DDL operations could
result in a corrupted data dictionary.
(Bug #24497803)
If mysqladmin shutdown encountered an error determining the server process ID file, it displayed an error message that did not clearly indicate the error was nonfatal. It now indicates that execution continues. (Bug #24496214)
For the null_audit
plugin, setting the
null_audit_event_record
system variable
improperly could cause a server exit. This variable should be
set only from within the null_audit
plugin,
so it is now read only.
(Bug #24493829, Bug #82670)
In certain contexts, an expression such as IF(col_name
> 5000, (1 / col_name), 5000)
could get a type of
DECIMAL(6,4)
, which would truncate results.
(Bug #24492965, Bug #82668)
The data structure used for ZEROFILL
columns
could experience memory corruption, leading eventually to a
server exit.
(Bug #24489302)
Operation of the mysql-multi.server.sh script
was based on my.cnf
in the data directory.
That option file is no longer used, so
mysql-multi.server.sh has been removed.
(Bug #24487870)
A query could produce incorrect results if
MIN()
or
MAX()
in a subquery referred to
an indexed column.
(Bug #24484060, Bug #82638, Bug #24657798, Bug #82965)
SHOW TRIGGERS
output order could
differ on Linux and Windows.
(Bug #24482919, Bug #82637)
mysqld_safe attempted to read
my.cnf
in the data directory, although that
is no longer a standard option file location.
(Bug #24482156)
After running mysql_upgrade, executing an
INSTALL COMPONENT
statement could
cause a server exit.
(Bug #24453571)
A regular expression pattern match into a large string could result in a server exit due to memory allocation failure or integer overflow. (Bug #24449076, Bug #24449090)
Starting the server with a MySQL 5.7 data directory resulted in
failure due to absence of the default_roles
and role_edges
system tables.
(Bug #24447771)
An incorrect error was reported for CREATE
TABLE
statements with a large value for the
CONNECTION
table option. The value is now
limited to 1024 bytes.
(Bug #24437124)
An assertion could be raised if an
ER_LOCK_WAIT_TIMEOUT
error
occurred during execution of SHOW CREATE
TRIGGER
.
(Bug #24420809, Bug #82483)
Constant folding could produce incorrect results for large unsigned integers. (Bug #24401273, Bug #82425)
Use of very long subpartition names could result in a server
exit. Now partition or subpartition names larger than 64
characters produce an
ER_TOO_LONG_IDENT
error.
(Bug #24400628, Bug #82429)
The Gis_wkb_vector<Gis_point>
copy
constructor was not explicitly instantiated, causing build
problems for the Intel compiler.
(Bug #24397833, Bug #82358)
Privilege escalation was possible by exploiting the way
REPAIR TABLE
used temporary
files.
(Bug #24388746)
A race condition between UNINSTALL
PLUGIN
and SHOW PLUGINS
could result in a server exit.
(Bug #24344026)
With ROW
mode binary logging, component
installation raised an assertion.
(Bug #24343582)
A potential memory leak related to roles was fixed. (Bug #24337928)
Subqueries that were converted to semijoins and programmatically
generated an INFORMATION_SCHEMA
table could
incorrectly treat the INFORMATION_SCHEMA
table as empty.
A workaround for this problem prior to the bug fix: SET
optimizer_switch='semijoin=off';
(Bug #24287772, Bug #82214)
mysqldumpslow failed to parse timestamps in the slow query log; it had not been updated to track a change in log timestamp format. (Bug #24007040)
The AppArmor profile installed by Ubuntu packages was missing an
entry permitting libnuma
to read a
/sys
hierarchy path, resulting in server
startup failure.
(Bug #23854929)
The optimizer could incorrectly treat
RAND()
as a constant for queries
subjected to semijoin transformation.
(Bug #23854015)
For debug builds, unequal-length binary operands for bit operators could raise an assertion. (Bug #23853628)
If a transaction rollback request rolled back only a statement and not the whole transaction, any attempt at attaching another operation to the transaction raised an assertion. (Bug #23753319, Bug #82143)
STRCMP()
for arguments with the
utf8mb4_unicode_ci
collation could return
results different from ORDER BY
.
STRCMP()
has been corrected.
(Bug #23752284, Bug #82132)
Complete logical backups made with mysqlpump could not be restored if GTIDs were enabled.
To enable control over GTID information written to the dump
file, mysqlpump now has a
--set-gtid-purged
option that
indicates whether to add a
SET
@@GLOBAL.
gtid_purged
statement to the output.
(Bug #23748432)
Infinite recursion could occur if the
audit_log
plugin signalled an error while
handling an error.
(Bug #23717558, Bug #82052)
Messages written by the audit_log
plugin to
the error log regarding MYSQL_AUDIT_CONNECT
event failures now print the underlying error cause as well to
aid debugging.
(Bug #23710632)
MySQL now uses readdir()
rather than
readdir_r()
. The latter has been deprecated
since glibc
2.24 and caused debug builds of
MySQL and builds using GCC 6.1 to fail.
Additionally, several problems resulting in GCC 6.1 compiler warnings were corrected. (Bug #23708395, Bug #24437737, Bug #82515, Bug #24459890, Bug #82583, Bug #25103242)
FORCE INDEX
was ineffective for
SELECT COUNT(*)
queries.
(Bug #23596760, Bug #81854)
During startup, the server creates a lock file for the Unix
socket file (for example, mysql.sock.lock
as a lock file for mysql.sock
). If the
server failed to write the process ID to the lock file, it
failed to remove that file, which could cause subsequent server
startups to fail until the file was removed manually.
(Bug #23582603, Bug #81838)
For debug builds, queries executed using
Item_func_spatial_collection::val_str()
could
raise an assertion.
(Bug #23573720)
For audit log events in the connection class, the
connection_type
value was available only for
connect events. The value is now available in connect,
disconnect, and change-user events.
(Bug #23541550)
The audit_log
plugin
audit_log_filter_remove_filter()
function
caused a server exit if given a NULL
argument.
(Bug #23522793)
Attempts to configure MySQL without the
FEDERATED
storage engine failed
(the CMake
-DWITH_FEDERATED_STORAGE_ENGINE=0
option did
not work).
(Bug #23508203, Bug #81665)
On Solaris, gettimeofday()
could return an
invalid value and cause a server shutdown.
(Bug #23499695)
The keyring_file
plugin could attempt to
write keys to its storage file when the file did not exist. To
ensure that keys are flushed only when the correct storage file
exists, keyring_file
now stores a SHA-256
checksum of the keyring in the file. Before updating the file,
the plugin verifies that it contains the expected checksum.
(Bug #23498254)
A union query resulting in tuples larger than
max_join_size
could result in a
server exit.
(Bug #23303485)
Grant tables with incorrect structure may cause problems in user management operations. As a consequence of the fix for this, for any operation that modifies a grant table, the server now checks whether the table has the expected structure and produces an error if not. mysql_upgrade must be run to update the tables to the expected structure. (Bug #23295423, Bug #25095876, Bug #25448037)
ST_ExteriorRing()
could cause a
server exit due to being passed an invalid WKB string believed
to be valid.
(Bug #23280574)
For debug builds, failure to prepare a branch of an XA transaction could lead to a server exit. (Bug #23264552, Bug #81375)
The optimizer could choose
ref
access on a secondary
index rather than range
access on the primary key, even when the cost was higher.
(Bug #23259872, Bug #81341)
An instance of the disk-full error message contained the wrong error code. (Bug #23247332, Bug #81346)
For a query with ORDER BY
and
LIMIT
, an optimizer trace did not record the
optimizer's switch to a different index.
(Bug #23227428, Bug #81250)
Improper handling of a lock used by the
version_tokens
plugin and functions could
result in a server exit if one of the functions was called while
version_tokens
was being uninstalled.
(Bug #23210850)
Certain errors in DML statements executed within stored programs could be mishandled and result in a server exit. (Bug #23209989)
The QUOTE()
function could
allocate excessive memory. A limit of
max_allowed_packet
bytes is now
imposed and returns NULL
with a warning for
attempts to allocate more.
(Bug #23195404)
For some deeply nested expressions, the optimizer failed to detect stack overflow, resulting in a server exit. (Bug #23135667)
For sessions created through the X Plugin, incorrect thread attachment/detachment could cause a server exit. (Bug #23057045)
When attempting to locate the data directory,
mysqld_safe incorrectly considered
$MY_BASEDIR_VERSION/var
as one of the
possible locations.
(Bug #23013510, Bug #80866)
For some generated columns, character set conversion of the column definition for table rebuilds could change column values. (Bug #22991924)
The OS X DMG installer did not properly set up keyring plugin installation. (Bug #22991650)
If a query performed a GROUP BY
on a column
of a derived table and the select list contained an expression
mixing an aggregate function and the group column, an error was
raised if the
ONLY_FULL_GROUP_BY
SQL mode
was enabled.
(Bug #22924183, Bug #80726)
A binary (in-place) upgrade from MySQL 5.6 to 5.7 followed by a
data export performed using mysqlpump
resulted in an Invalid default value for
error for
attempts to reload the dump file.
(Bug #22919028, Bug #80706)date_column
A failed cast of a long float to integer could cause a server exit. (Bug #22907691)
On Unix and Unix-like systems, the error log file resulting from
specifying --log-error
without an
option value was incorrectly created in the directory of the PID
file if the --pid-file
option was
also given.
(Bug #22900354)
The main.log_tables-big
test case could be
unstable on highly loaded hosts. Thanks to Laurynas Biveinis for
the patch.
(Bug #22874167, Bug #80607)
SQL statements executed through the X Plugin were not instrumented in the Performance Schema. (Bug #22859462)
The rpl.rpl_key_rotation
test case did not
synchronize properly with the master server. Thanks to Laurynas
Biveinis for the patch.
(Bug #22838596, Bug #80531)
DROP INDEX
operations could fail
due to inconsistent handling of index prefix lengths for
TEXT
-type columns
(TINYTEXT
and so forth).
A consequence of this fix is more restrictive behavior for
CREATE TABLE
and
CREATE INDEX
statements for which
a specified index prefix exceeds the maximum column data type
size:
For a nonunique index, either an error occurs (if strict SQL mode is enabled), or the index length is reduced to lie within the maximum column data type size and a warning is produced (if strict mode is not enabled).
For a unique index, an error occurs regardless of SQL mode because reducing the index length might enable insertion of nonunique entries that do not meet the specified uniqueness requirement.
(Bug #22740093, Bug #80392)
Metadata locking on stored routine names was performed on a case-sensitive basis, but routine names are not case sensitive. (Bug #22700385)
Queries that used an aggregate function with
DISTINCT
could produce incorrect results.
(Bug #22686994, Bug #80310)
The innodb_numa_interleave
system variable was erroneously available on some systems that
were not NUMA-enabled. Thanks to Tomislav Plavcic for the patch.
CMake now sets the default
WITH_NUMA
value based on whether
the current platform has NUMA
support. For
platforms without NUMA support, CMake behaves
as follows:
With no NUMA option (the normal case), CMake continues normally, producing only this warning: NUMA library missing or required version not available
With -DWITH_NUMA=ON
,
CMake aborts with this error: NUMA
library missing or required version not available
(Bug #22678436, Bug #80288)
Certain SQL queries involving complex WHERE
conditions could cause warnings, memory corruption, or a server
exit.
(Bug #22671573)
When taking the server offline, a race condition within the Performance Schema could lead to a server exit. (Bug #22551677)
On macOS, if a table with an associated trigger was renamed to a
new name containing both lowercase and uppercase characters,
DROP TRIGGER
for the trigger
resulted in an ER_NO_SUCH_TABLE
error for the table.
(Bug #22512899, Bug #79873)
In the MYSQL_FIELD
C API structure, the
org_table
value for derived tables was
*
, which could cause failure for queries that
depend on this value. The org_table
value for
views and derived tables now is set as follows: If the column is
selected from a view, org_table
names the
view. If the column is selected from a derived table,
org_table
names the base table. If a derived
table wraps a view, org_table
still names the
base table. If the column is an expression,
org_table
is the empty string.
(Bug #22364401, Bug #79641)
For RPM packages, the default error-log
location in the deployed /etc/my.cnf
file
differed from the location in the installed
logrotate script, causing
logrotate to fail.
(Bug #22322685)
The Performance Schema
events_statements_summary_by_digest
table could contain multiple rows for the same statement digest
and schema combination, rather than the expected single (unique)
row.
(Bug #22320066, Bug #79533)
For Performance Schema system and status variable tables,
variable values expressed in a character set different from
utf8
could be truncated or incorrect.
(Bug #22313205)
For debug builds, altering a table partitioning expression using an expression attribute with an invalid UTF-8 name caused an assertion to be raised. (Bug #22152229)
After performing inserts in a table containing an
AUTO_INCREMENT
column and then performing a
SELECT
operation, the
LAST_INSERT_ID()
returns the
correct value, but the value of the
mysql_insert_id()
C API function
was being reset to 0.
(Bug #22028117, Bug #78778)
On Ubuntu, error messages were displayed during upgrades from Community to Commercial packages that made it appear as though mysqld and my_print_defaults had not been installed. Those messages were spurious and have been silenced. (Bug #21807248)
With the use_index_extensions
flag of the optimizer_switch
system variable disabled, some SELECT
DISTINCT
queries could return incorrect results.
(Bug #21749123, Bug #78244)
An invalid string value in the WHERE
clause
of an UPDATE
statement, caused an index scan
rather than a range scan to be used. For values not present in
the index, this could be much slower. Now the optimizer
determines this to be an “impossible
WHERE
” condition.
(Bug #21032418, Bug #76933)
Debian packages were missing an AppArmor-related include file and incorrectly were marked dependent on AppArmor (making it impossible to disable AppArmor by uninstalling it). (Bug #20768958)
When the
automatic_sp_privileges
system
variable was enabled, it did not have the expected effect for
anonymous users.
(Bug #20266641)
In a replication environment, SET
PASSWORD
or ALTER USER
could fail to execute on the slave due to failure to parse the
hash string correctly.
(Bug #20228478)
The optimizer resolve_const_item()
function
called Item_decimal()
with the last two
arguments in the wrong order.
(Bug #19062566)
An in-place ALTER TABLE
operation
failed to report an error when adding a DATE
or DATETIME
column under these conditions: a)
the column was NOT NULL
and no default value
was supplied; b) strict and NO_ZERO_DATE
SQL
modes were enabled; c) the table was not empty.
An ALTER TABLE
operation failed
with an error rather than a warning when adding a
DATE
or DATETIME
column
under these conditions: a) the column was NOT
NULL
and no default value was supplied; b) strict SQL
mode was enabled and NO_ZERO_DATE
SQL mode
was not enabled; c) the table was not empty.
(Bug #16888677)
Inserting a TIME
,
DATE
, or
TIMESTAMP
value with a fractional
seconds part into a column having the same type but fewer
fractional digits resulted in rounding. This differs from MySQL
5.5, which used truncation rather than rounding. To enable
control over this behavior, a new
TIME_TRUNCATE_FRACTIONAL
SQL
mode is available. The default is to use rounding. If this mode
is enabled, truncation occurs instead.
(Bug #16583910, Bug #68760)
NOT IN
subqueries could produce incorrect
results when an index prefix of an inner table was used.
(Bug #13915291)
On non-Linux Unix systems, the mysql.server startup script used the Linux command pidof rather than pgrep. (Bug #13788154, Bug #64342)
Starting multiple instances of mysqld_safe
after an abnormal server exit could result in one
mysqld_safe instance killing another. As a
consequence of the bug fix, the
mysqld_safe.pid
file is no longer used.
(Bug #11751149, Bug #41908)
The --help
message for
mysqld_safe was corrected to mention that the
--no-defaults
,
--defaults-file
, and
--defaults-extra-file
options, if given, must be the first argument.
(Bug #11745176, Bug #11192)
The bounds check for the XML parser position stack for each level (which has a fixed depth) used the size of the array as the upper limit, and so was off by one. This is fixed by decreasing the allowable depth by one, which actually matches the maximum number of elements in the position stack. (Bug #83871, Bug #25111907)
References: See also: Bug #14040071, Bug #15948580.