[ This is part 2 of the announcement ]
Functionality Added or Changed
* 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.
* 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
(http://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html#innodb-locking-reads-nowait-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
tbl_name options. See SELECT Syntax
(http://dev.mysql.com/doc/refman/8.0/en/select.html).
OF tbl_name applies locking queries to named tables.
Note
OF is now a reserved word and cannot be used as an
identifier without identifier quoting.
* InnoDB: The InnoDB tablespace 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 Data Encryption
(http://dev.mysql.com/doc/refman/8.0/en/innodb-tablespace-encryption.html#innodb-tablespace-encryption-redo-log),
and Undo Log Data Encryption
(http://dev.mysql.com/doc/refman/8.0/en/innodb-tablespace-encryption.html#innodb-tablespace-encryption-undo-log).
* 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.
* 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.
* Replication: View change events from a Group Replication
group can now be replicated to an external multithreaded
slave (MTS) of type DATABASE. (Bug #25170698)
* 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: 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)
* 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.
* 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.
* 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.
* Replication: The binlog-transaction-dependency-tracking
variable has been added to improve writeset-based
multi-threaded slave dependency tracking on masters. This
enables you to choose whether to put information in the
binary log that allows the slave to parallelize based on
commit timestamps or transaction write sets.
Parallelizing on write sets has potentially much more
parallelism since it does not depend on the commit
history, and as such, applying binary logs on a slave may
explore better the underlying computing hardware (cpu
cores) and ultimately this means that replication can
become a lot faster. Our testing shows that we can apply
binlog on the slave about 4 times faster, even for a
single-threaded workload, which is the most difficult
workloads for multi-threaded slaves.
* 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.
* 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.
* 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.
* Replication: Group Replication now supports SQL
transaction SAVEPOINT.
* 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.
* 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.
* 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.
* 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_size, also introduced in
this release.
* 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"
} |
+---------------------------------------------+
* 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.
* The WEIGHT_STRING() debugging function no longer supports
the LEVEL clause. (Bug #25469683)
* 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.
Note
CUBE is now 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)
* 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": "v
alueB"}] |
+---------------------------------------------------------------------
---------+
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 (GROUP BY) Functions
(http://dev.mysql.com/doc/refman/8.0/en/group-by-functions-and-modifiers.html).
(Bug #78117, Bug #21647417)
* MySQL now supports an IMPORT TABLE statement that imports
nontransactional tables based on information contained in
.SDI (Serialized Dictionary Information) files. For more
information, see IMPORT TABLE Syntax
(http://dev.mysql.com/doc/refman/8.0/en/import-table.html).
* 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
* 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.
* 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 release, but that removal has been
deferred.
* Work was done to clean up the source code base,
including: Removal of unneeded CMake checks; removing
unused macros from source files; reorganizing header
files to reduce the number of dependencies and make them
more modular, removal of function declarations without
definitions.
Bugs Fixed
* 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 na
me1;
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: In debug builds, a call that initialized latch
debugging raised an assertion due to a race condition.
(Bug #25700405)
* InnoDB: InnoDB did not set the compression algorithm when
opening a partitioned table. (Bug #25685868)
* 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: 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: 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.
+ 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 generated virtual 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 generated virtual 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)
* InnoDB: A concurrent DML operation during an in 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)
* 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 are 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: 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: MEMBER_STATE of a group replication member
did not go from ERROR to OFFLINE when the STOP
GROUP_REPLICATION command was executed if the error state
was due to ER3092. (Bug #25674926)
* Replication: With flow control enabled, reaching a
minimum flow control quota of 1 will made Group
Replication not stop throttling when the cause of
throttling was no longer in effect. (Bug #25461354)
* Replication: Using an unresolvable host name in
group_replication_group_seeds caused START
GROUP_REPLICATION to fail. The fix ensures that host
names in group_replication_group_seeds are validated when
starting Group Replication and the list must contain at
least one valid address. Invalid addresses are ignored.
(Bug #25460324, Bug #84674)
* 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: The _gr_user account created by Group
Replication plugin installation was not reliably removed
when the plugin was uninstalled. (Bug #25298987)
* Replication: When starting Group Replication on an
offline node, the node could be configured for
replication, but fail for recovery. (Bug #25256910)
* Replication: When using a multi-threaded slave, applier
errors displayed worker ID data that was inconsistent
with data externalized in Performance Schema replication
tables. (Bug #25231367)
* Replication: Not all Group Replication GCS debug and
trace messages were enabled in debug mode. (Bug
#25209109)
* Replication: Compiling MySQL 5.7.17 failed with a
variable length array error. (Bug #25163241)
* 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: Group Replication GCS was not discarding
messages when a member within the group was inactive.
(Bug #25134074)
* Replication: Some unnecessary warnings were given when
the Group Replication plugin was compiled on Windows
platforms. (Bug #25119288)
* Replication: If the binary log on a master server was
rotated and a full disk condition occured 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: As assertion could be raised if the Group
Replication plugin attempted to contact the server when
that was no longer possible. (Bug #25071492)
* 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: After executing restarts on the group
replication applier SQL thread, the plugin could no
longer detect failure of the thread. (Bug #24969065)
* Replication: Building Group Replication on Windows
requires a minimum CMAKE version of 2.8.12. (Bug
#24964522)
* 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 LOG 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 #24923091, Bug #24966941.
* 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)
* 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: For servers built with yaSSL, using group
replication with secure connections could result in
timeout failures waiting for view delivery. (Bug
#23592214)
* Replication: When using a multi-threaded 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)
* 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)
* Microsoft Windows: On Windows, SHOW TABLES FROM db_name
hung if 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)
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/mysql