[This is part 2 of the announcement]
Bugs Fixed
* Incompatible Change; JSON: If a JSON object contained
multiple members with the same key name, MySQL kept the
first member and discarded the remainder. This
contradicts RFC 7159, which suggests that duplicate key
names can be handled in one of the ways listed here:
+ Report an error (or otherwise fail to parse the
object)
+ Report all of the name-value pairs, including
duplicates
+ Report the last name-value pair only
When a JSON text is evaluated in JavaScript, the last
name-value pair is kept if multiple pairs with the same
name are specified. MySQL now does likewise, and
implements the last of the three options just listed, as
shown here:
mysql> CREATE TABLE t1 (c1 JSON);
mysql> INSERT INTO t1 VALUES ('{"x": 17, "x": "red", "x": [3, 5, 7]}')
;
mysql> SELECT c1 FROM t1;
+------------------+
| c1 |
+------------------+
| {"x": [3, 5, 7]} |
+------------------+
The fix for this issue also corrects a failure in the
MySQL 8.0 server to handle insertion into a JSON column
of data containing JSON arrays as the values for multiple
identical keys. (Bug #86620, Bug #86866, Bug #26238736,
Bug #26369555)
* Performance; JSON: Creating a representation of a JSON
string now optimizes for the most common case---that the
string to be processed contains no special characters
that need to be escaped---scanning for the first special
character in the string, and copying each sequence of
characters which do not require escaping in a single
memcpy() call, rather than checking each character in
turn to determine whether it needed to be escaped,
escaping it if so, and then copying it, one by one, as
was done previously.
This fix also corrects failure to escape the special
character 1F (Unit Separator). (Bug #86898, Bug
#26388690)
References: See also: Bug #25977595.
* InnoDB: A long semaphore wait occurred when executing
ALTER TABLE, DROP TABLE, and DROP DATABASE operations.
(Bug #26779650)
* InnoDB: Invalid error handling code was removed from a
function related to tablespace import. (Bug #26595476)
* InnoDB: File-per-table tablespaces created prior to MySQL
5.6 caused a failure during an in-place upgrade to MySQL
8.0.2. The tablespaces were not registered with the
InnoDB SYS_TABLESPACES system table, as required.
Tables with decimal columns created prior to MySQL 5.5
also caused a failure during an in-place upgrade to MySQL
8.0.2, due to a precision type mismatch. (Bug #26542296,
Bug #87229)
* InnoDB: A segmentation fault occurred when attempting to
open a table that was altered while strict mode was
disabled to include conflicting TABLESPACE and
COMPRESSION attributes. (Bug #26375851)
* InnoDB: A segmentation fault occurred during a DML
operation that used the TempTable storage engine. (Bug
#26363837)
* InnoDB: Implicit row format conversion during an ALTER
TABLE ... REORGANIZE PARTITION operation raised an
invalid assertion. (Bug #26326611)
* InnoDB: An ALTER TABLE operation that rebuilt an
encrypted table did not set the encryption attribute
properly. (Bug #26243264)
* InnoDB: A memory leak was encountered on Windows when
using the TempTable storage engine for in-memory internal
temporary tables. (Bug #26237680)
* InnoDB: Misleading errors were produced when running
Valgrind tests on a server build that was not enabled for
Valgrind testing. (Bug #26037206)
* InnoDB: Problematic code related to dropping orphan
full-text search tables caused an invalid object ID
assertion failure on startup. (Bug #25998362)
* InnoDB: Allocated memory was not initialized before it
was written to a file, resulting in a Valgrind error.
(Bug #25913151, Bug #85986)
* InnoDB: Replication lag occurred on slave instances
during large update operations on tables with many
partitions. (Bug #25687813, Bug #85352)
* InnoDB: A cursor position check by a multiversion
concurrency control row search function raised an
assertion. (Bug #25377592)
* InnoDB: The wrong variable was passed to the
row_mysql_handle_errors routine causing an assertion
failure. (Bug #25183130)
* InnoDB: A long wait for a dictionary operation lock held
by a full-text search synchronization operation caused a
server exit. (Bug #24938374)
* InnoDB: Assertion code was modified to account for the
possibility of a transaction attempting to acquire an
explicit lock on a record while another transaction
converts an implicit lock to an explicit lock on the same
record prior to a commit operation. (Bug #24344131)
* InnoDB: A FLUSH TABLES ... FOR EXPORT operation on an
encrypted or page-compressed table raised an assertion.
(Bug #22916982)
* InnoDB: A CREATE TABLE ... SELECT operation raised an
assertion failure when the newly created table was
dropped before the transaction was committed. (Bug
#22154768)
* Partitioning: In certain cases when fetching heap records
a partition ID could be set to zero. (Bug #86255, Bug
#26034430)
* Partitioning: It was possible for a CREATE TABLE
statement that failed to create a partitioned InnoDB
table not to be rolled back correctly. This was due to an
extraneous commit made while performing a check of
foreign key information. Since partitioned tables do not
presently support foreign keys, this check is
unnecessary, and so is no longer made in such cases. (Bug
#85299, Bug #25667278)
* Replication: On a multi-threaded slave, it was possible
for a deadlock state to occur due to the timing of
updates to the record of disk space used by the relay
log. The timing of the update has now been changed so
that the deadlock cannot occur. (Bug #26729635)
* Replication: With slave_preserve_commit_order=1 set, a
deadlock could occur between a transaction holding a
shared write lock on a table, and a transaction earlier
in the commit order that also required a shared write
lock. (Bug #26666609)
* Replication: The Group Replication flow control variables
now correctly permit you to have some members in a group
that do not affect the minimum throughput of the
flow-control mechanism, effectively ignoring those
members in case they become blocked. (Bug #26537497)
* Replication: It was possible to start the server with
invalid values for the Group Replication flow control
options. Now, the
--group-replication-flow-control-min-quota,
--group-replication-flow-control-max-quota, and
--group-replication-flow-control-min-recovery-quota
options are validated on server startup. (Bug #26531899)
* Replication: The unused variable opt_reckless_slave was
removed. (Bug #26500285)
* Replication: When the Group Replication plugin
Delayed_initialization_thread failed to start due to
unavailable resources, a locked mutex was being kept
behind which would cause issues on
Delayed_initialization_thread destructor. The fix ensures
that the mutex is unlocked when the thread fails to
start. (Bug #26394678)
* Replication: If hostname resolution was not working for a
member in Group Replication, the error returned when
attempting to connect was referring to credentials. The
error message has been improved to describe the problem
with hostname resolution. (Bug #26368004)
* Replication: In the case of delayed initialization of the
Group Replication plugin, deployed in single-primary
mode, secondaries were able to get writes through an
asynchronous replication channel, which is not allowed in
normal initialization of the Group Replication plugin.
(Bug #26314756)
* Replication: If the options file contained Group
Replication related settings the server could stop
unexpectedly on start up. (Bug #26314472)
* Replication: FLUSH LOGS attempted to send an OK message
after having already sent an error response during the
commit phase. (Bug #26272158)
* Replication: With GTIDs generated for incident log
events, MySQL error code 1590 (ER_SLAVE_INCIDENT) could
not be skipped using the --slave-skip-errors=1590 startup
option on a replication slave. (Bug #26266758)
* Replication: The Group Replication plugin no longer sets
auto_increment_increment and auto_increment_offset
variables when single primary mode is active. (Bug
#26263155)
* Replication: Group Replication partition threads were not
visible in the Performance Schema tables. (Bug #26241008)
* Replication: COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE
was set to an incorrect value when
group_replication_recovery_complete_at="transactions_cert
ified" on a recovering member. (Bug #26180350)
* Replication: The values of the
group_replication_recovery_use_ssl and
group_replication_recovery_ssl_verify_server_cert
variables were not being updated when configured for the
Group Replication recovery channel. (Bug #26142801)
* Replication: When replicating a partitioned table with an
index, on a replication slave where HASH_SCAN was
specified as part of the slave_rows_search_algorithms
setting, the slave I/O thread sometimes stopped with an
error HA_ERR_KEY_NOT_FOUND. (Bug #26137159)
* Replication: group_replication_force_members could be
used in situations where the group was working properly,
in other words a majority was reachable. This incorrect
use could cause instability in the group. Therefore, its
use has been restricted to the scenario for which it was
created, for forming a new membership from a subset of a
previous group's membership when a majority of the
members are unreachable. (Bug #26093967)
* Replication: It was possible to set server_uuid to the
same value as group_replication_name. Doing so could
result in unexpected behavior because GTIDs are
identified by a UUID. Now it is not possible to set
server_uuid to the same value as group_replication_name.
(Bug #26035931)
* Replication: The system variable pseudo_slave_mode, which
is for internal server use, sometimes raised an assertion
when it was changed inside a transaction. The server no
longer changes this variable inside a transaction. (Bug
#26034192, Bug #86250)
* Replication: When write sets are used for parallelization
by a replication slave (as specified by the
binlog_transaction_dependency_tracking system variable),
empty transactions are now ignored, and the handling of
relay log rotation has been optimized. (Bug #25982097)
* Replication: The Performance Schema
replication_applier_status_by_worker table sometimes
incorrectly displayed a value for APPLYING_TRANSACTION
for an inactive worker, because the table was being
populated before the worker thread stopped. (Bug
#25896166, Bug #85951)
* Replication: On a member which had both Group Replication
and asynchronous replication running simultaneously,
asynchronous replication was not respecting the
restrictions required by Group Replication, such as only
using InnoDB storage engine, tables requiring primary
keys and so on. This could also be encountered when
running mysqlbinlog against the member. Now, members that
are running Group Replication and asynchronous
replication do not allow Group Replication's requirements
to be broken. (Bug #25609945)
References: See also: Bug #25828806.
* Replication: Joining a member running a lower version to
a group running a higher version resulted in the members
running the higher version becoming unreachable. (Bug
#25568493)
* Replication: Attempting to uninstall the plugin while
START GROUP_REPLICATION executed could result in
unexpected behavior. (Bug #25423650)
* Replication: In case of a failure while creating multiple
slave applier worker threads, some threads would be left
orphaned and their resources would not be collected.
Thanks to Laurynas Biveinis for his contribution to
fixing this bug. (Bug #24679056, Bug #82980)
* JSON: Containers in the internal representations of JSON
objects and arrays (Json_object and Json_array) have been
changed to use smart pointers rather than raw pointers to
Json_dom, so that orphaned DOM objects are now
automatically destroyed. (Bug #26161264)
* JSON: ASCII character 31 (\u001f, the unit separator) in
a string literal within a JSON document was not quoted
when the JSON document was formatted as a string (for
example, by CAST('"\u001f"' AS JSON)). (Bug #25977959)
* JSON: When a path_expression identified a nonarray value,
the JSON_INSERT() and JSON_ARRAY_INSERT() functions
failed to evaluate path_expression[0] as equal to
path_expression. (Bug #86213, Bug #26022576)
* JSON: Searches with JSON_EXTRACT() that used wildcards
took an inordinate amount of time. (Bug #84523, Bug
#25418534)
References: See also: Bug #83959, Bug #25151440.
* Under heavy load, an infinite loop occurred in
Performance Schema buffer container code. (Bug #26666274)
* MySQL-specific typedefs such as uchar and my_bool were
inadvertently reintroduced into the client namespace if
the mysql.h header file was included. (Bug #26588846, Bug
#26582752, Bug #87337)
* uint8korr() and related macros were fixed so that they
explicitly do unaligned accesses, even on x86. (Bug
#26568748)
* The main.mysql_upgrade_grant, main.roles-upgrade, and
auth_sec.secure_file_priv_warnings, test cases mishandled
the error log. The sys_vars.innodb_redo_log_encrypt_basic
test case output was unstable. Thanks to Laurynas
Biveinis for the patches. (Bug #26562401, Bug #87279, Bug
#26575150, Bug #87313, Bug #26575142, Bug #87314, Bug
#26582158, Bug #87303)
* For debug builds, with sql_buffer_result enabled,
recursive common table expressions caused a server exit.
(Bug #26556025)
* Incorrect resolution of a window function as a constant
function could result in a server exit. (Bug #26500442)
* Compiling with -DWITHOUT_SERVER=1 resulted in
my_symlink.c compilation failure due to missing #include
for my_dir.h. Thanks to Christian Hesse for the patch.
(Bug #26495816, Bug #87137)
* Compiling with -DWITH_SSL=system -DWITH_ZLIB=system
assumed that the system openssl zlib command was
available, which might not be the case. Now availability
of that command is checked, and if unavailable, the
zlib_decompress utility is built. (Bug #26494495, Bug
#87123)
* yaSSL could incorrectly perform TLS cipher negotiation.
(Bug #26482173)
* Some thread_stack settings could result in a server exit.
(Bug #26438067)
* REPLACE(UUID(),...) expressions could be cached
(improperly) and return the same value for each row of a
result set. (Bug #26395601)
* When building MySQL within the source tree, make install
installed some CMake files into the mysql-test directory
within the tree. (Bug #26385175, Bug #86905)
* The PROCESS_ID column in the Performance Schema
session_connect_attrs and session_account_connect_attrs
tables was changed from INT to BIGINT UNSIGNED to
accommodate larger process ID values. Thanks to Daniël
van Eeden for the patch. (Bug #26357806, Bug #86835)
* The index on a generated column, whose value was
generated from JSON_EXTRACT(), was sometimes not used by
the optimizer when it should have been. (Bug #26352119)
* Setting the log_error_services system variable to NULL
caused a server exit. (Bug #26331795)
* For tar file packages, some test suite shared libraries
were installed in the server package rather than the test
package. (Bug #26329850)
* SHOW COLUMNS for a valid view could fail. (Bug #26322203,
Bug #86778)
* An operation that caused renaming or removal of histogram
statistics could cause a server exit. (Bug #26303972)
* For a VARCHAR column, sorting using an explicit collation
(ORDER BY col_name COLLATE collation_name) was much
slower than with an implicit collation (no COLLATE
clause), even if the explicit collation was the same as
the implicit collation. (Bug #26286790, Bug #86710)
* SET binlog_format = ROW produced a syntax error because
ROW is now a reserved word. This syntax is now recognized
specially to preserve backward compatibility. (Bug
#26269280)
* SET PERSIST_ONLY, should be permitted only to users who
have the PERSIST_RO_VARIABLES_ADMIN and
SYSTEM_VARIABLES_ADMIN privileges, but was incorrectly
also permitted to users with the SUPER privilege. (Bug
#26247864)
* The information_schema_stats configuration option,
introduced in MySQL 8.0.0, was removed and replaced by
information_schema_stats_expiry.
information_schema_stats_expiry defines an expiration
setting for cached INFORMATION_SCHEMA table statistics.
For more information, see Optimizing INFORMATION_SCHEMA
Queries
(http://dev.mysql.com/doc/refman/8.0/en/information-schema-optimization.html).
The TABLES_DYNAMIC, STATISTICS_DYNAMIC, and SHOW
STATISTICS_DYNAMIC internal system views were removed.
(Bug #26203731, Bug #83957)
* Source packages for Debian platforms contained prebuilt
debug binaries, causing build failures on any
architectures other than the one on which those binaries
were built. (Bug #26186911)
* The UDF registration service did not work if used during
server startup. (Bug #26173244)
* Disabling table instrumentation by changes to the
Performance Schema setup_objects table could cause
incorrect index names in index statistics. (Bug
#26162562)
* A misleading error message was returned when attempting
to drop a nonexistent tablespace file. (Bug #26133507,
Bug #86438)
* When running mysqlbinlog with the
--read-from-remote-server option, rewrite rules specified
using the --rewrite-db option were ignored, so data was
not written to the target database. (Bug #26117735, Bug
#86288)
* Timestamp data copied from the data dictionary cache
during a DDL operation was converted using a time_zone
value that was no longer valid. The resulting timestamp
data was incorrect, causing an error in release builds
and an assertion failure in debug builds. (Bug #26091333,
Bug #86290)
* Successful data dictionary updates but failure to write
the binary log event could result in an inconsistent
state. (Bug #26037355)
* mysqlbinlog now prints the full metadata for the event
type Table_map_log_event. (Bug #26020990)
* For UPDATE or DELETE statements with an ORDER BY ...
LIMIT clause, the optimizer sometimes failed to identify
a cheaper ordering method than filesort. (Bug #25899921)
* The rpl_diff.inc test case file did not find the data
difference between servers. Thanks to Yura Sorokin for
the patch. (Bug #25860138, Bug #85838)
* The combination of an index virtual generated column, a
foreign key, and a trigger could cause an assertion to be
raised. (Bug #25817660)
* Selecting from a view could yield different results with
materialization enabled versus materialization disabled.
(Bug #25782811, Bug #85622)
* After using SET PERSIST to set the event_scheduler system
variable, the server failed to restart if started with
the --skip-grant-tables option. (Bug #25776940)
* An assertion could be raised for MIN()/MAX() access to
system tables. (Bug #25738624)
* A failed DROP VIEW could be written to the binary log.
(Bug #25680097)
* SHOW CREATE VIEW sometimes added a database name prefix
to table names that was not present in the original view
definition. (Bug #25634576, Bug #85176)
* The Performance Schema variables_info table displayed
incorrect VARIABLE_SOURCE and VARIABLE_PATH values for
variables set within option files specified by !include
or !includedir directives. (Bug #25563891)
* mysqlpump displayed incorrect progress information about
the number of tables dumped. (Bug #25432850)
* The mysqlpump progress indicator was incorrect for number
of tables. (Bug #25432850)
* Calculations for UCA 9.0.0 collations were inefficient
for tailoring rules containing contraction characters.
(Bug #25426632, Bug #84577, Bug #25426632, Bug #84577)
* GROUP BY DESC on DECIMAL values could incorrectly group
NULL with non-NULL values. (Bug #25407964)
* Some mysqldump warnings went to the standard output
rather than the standard error output and consequently
were written to the dump file. (Bug #25380000, Bug
#82992)
* NULL values generated as a result of WITH ROLLUP were
replaced with the previous row's value when executing a
prepared statement on a view having the GROUP BY .. WITH
ROLLUP clause. (Bug #25174118)
* A parser refactoring in MySQL 8.0.1 resulted in incorrect
handling of some INSERT ... ON DUPLICATE KEY UPDATE
statements. These problems have been corrected. (Bug
#24716127, Bug #25526439, Bug #25071305)
* For debug builds, a CREATE TABLE statement with a
VARBINARY or BINARY column having a default value in
hexadecimal format caused a server exit. (Bug #24679166,
Bug #83020)
* A mysqldump memory leak was fixed. Thanks to Yura Sorokin
for the patch. (Bug #23531150, Bug #81714)
* If a session rolled back to a savepoint and then was
killed, the statements up to the point of the savepoint
could be committed. (Bug #22350047, Bug #79596)
* MySQL accepted a reference to an alias of an aggregated
expression defined in an outer query block even when the
reference occurred within a GROUP BY subquery where the
reference was meaningless. (Bug #21974346)
* Some SELECT DISTINCT queries with GROUP BY could return
incorrect results. (Bug #20692219)
Thread |
---|
• MySQL Community Server 8.0.3-rc has been released (part 2/2) | Bjorn Munch | 21 Sep |