MySQL 5.7 Release Notes
A value of system
is now permitted for the
WITH_BOOST
CMake option. If this option is not set or is
set to system
, it is assumed that the correct
version of Boost is installed on the compilation host in the
standard location. In this case, the installed version of Boost
is used rather than any version included with a MySQL source
distribution.
(Bug #22224313)
In addition to the mysql-5.7.11.tar.gz
source tarball, another tarball named
mysql-boost-5.7.11.tar.gz
is provided. The
new tarball contains everything in the first tarball, but also
contains all the required Boost header files in a subdirectory
named boost
. This is for the benefit of
those who do not have the correct Boost version installed and do
not wish to or cannot download it. To build from this source
distribution, add
-DWITH_BOOST=boost
to the
CMake command line.
Bit functions and operators comprise
BIT_COUNT()
,
BIT_AND()
,
BIT_OR()
,
BIT_XOR()
,
&
,
|
,
^
,
~
,
<<
,
and
>>
.
Currently, bit functions and operators require
BIGINT
(64-bit integer) arguments
and return BIGINT
values, so they
have a maximum range of 64 bits. Arguments of other types are
converted to BIGINT
and
truncation might occur.
An extension for MySQL 8.0 changes this
cast-to-BIGINT
behavior: Bit
functions and operators permit binary string type arguments
(BINARY
,
VARBINARY
, and the
BLOB
types), enabling them to
take arguments and produce return values larger than 64 bits.
Consequently, bit operations on binary string arguments in MySQL
5.7 might produce different results in MySQL 8.0. To provide
advance notice about this potential change in behavior, the
server now produces warnings for bit operations for which binary
string arguments are not converted to integer in MySQL 8.0.
These warnings afford an opportunity to rewrite affected
statements. To explicitly produce MySQL 5.7 behavior in a way
that will not change after an upgrade to 8.0, cast bit-operation
binary string arguments to convert them to integer. For more
information and examples, see Bit Functions and Operators.
Previously, mysqld --initialize required the
data directory to not exist or, if it existed, to be empty. Now
an existing data directory is permitted to be nonempty if every
entry either has a name that begins with a period
(.
) or is named using an
--ignore-db-dir
option.
(Bug #79250, Bug #22213873)
MySQL Server now supports a keyring that enables internal server
components and plugins to securely store sensitive information
for later retrieval. The implementation includes a
keyring_file
plugin that stores keyring data
in a file local to the server host. For more information, see
The MySQL Keyring,
Writing Keyring Plugins, and
The Keyring Service.
yaSSL was upgraded to version 2.3.9. This upgrade corrects an issue in which yaSSL handled only cases of zero or one leading zeros for the key agreement instead of potentially any number, which in rare cases could cause connections to fail when using DHE cipher suites. (Bug #22361038)
The linked OpenSSL library for the MySQL Commercial Server has been updated from version 1.0.1p to version 1.0.1q. For a description of issues fixed in this version, see http://www.openssl.org/news/vulnerabilities.html.
This change does not affect the Oracle-produced MySQL Community build of MySQL Server, which uses the yaSSL library instead. (Bug #22348181)
The default value of the
default_password_lifetime
system variable that controls the global password expiration
policy has been changed from 360 (360 days) to 0 (no password
expiration). The default of 360 sometimes took people by
surprise when account passwords expired a year after upgrading
to MySQL 5.7. To continue to use a value other than 0 as the
password expiration, start the server with an explicit setting
for default_password_lifetime
.
For example, use these lines in an option file:
[mysqld] default_password_lifetime=360
(Bug #77277, Bug #21284761)
MySQL client programs now support an
--ssl-mode
option that enables
you to specify the security state of the connection to the
server. Permitted option values are PREFERRED
(establish an encrypted connection if the server supports the
capability, falling back to an unencrypted connection
otherwise), DISABLED
(establish an
unencrypted connection), REQUIRED
(establish
an encrypted connection, or fail), VERFIFY_CA
(like REQUIRED
, but additionally verify the
server certificate), VERIFY_IDENTITY
(like
VERIFY_CA
, but additionally verify that the
server certificate matches the host name to which the connection
is attempted). For backward compatibility, the default is
PREFERRED
if
--ssl-mode
is not specified.
These clients support
--ssl-mode
:
mysql, mysqladmin,
mysqlbinlog, mysqlcheck,
mysqldump, mysqlimport,
mysqlshow, mysqlpump,
mysqlslap, mysqltest,
mysql_upgrade.
The --ssl-mode
option comprises
the capabilities of the client-side
--ssl
and
--ssl-verify-server-cert
options. Consequently, both of those options are now deprecated
and will be removed in a future MySQL version. Use
--ssl-mode=REQUIRED
instead of
--ssl=1
or
--enable-ssl
.
Use --ssl-mode=DISABLED
instead
of --ssl=0
,
--skip-ssl
, or
--disable-ssl
.
Use --ssl-mode=VERIFY_IDENTITY
instead of
--ssl-verify-server-cert
options. (The server-side --ssl
option is not deprecated.)
For the C API, the new MYSQL_OPT_SSL_MODE
option for mysql_options()
corresponds to the --ssl-mode
option. The
MYSQL_OPT_SSL_ENFORCE
and
MYSQL_OPT_SSL_VERIFY_SERVER_CERT
options for
mysql_options()
correspond to
the client-side --ssl
and
--ssl-verify-server-cert
options. They are now deprecated and will be removed in a future
MySQL version. Use MYSQL_OPT_SSL_MODE
with an
option value of SSL_MODE_REQUIRED
or
SSL_MODE_VERIFY_IDENTITY
instead.
For more information, see Command Options for Encrypted Connections, and mysql_options().
In consequence of this change, the minor C API version number was incremented.
InnoDB:
A new InnoDB
configuration option,
innodb_tmpdir
, allows you to
configure a separate directory for temporary files created
during online ALTER TABLE
operations that rebuild the table. This option was introduced to
help avoid MySQL temporary directory overflows that could occur
as a result of large temporary files created during online
ALTER TABLE
operations.
innodb_tmpdir
can be configured
dynamically using a
SET
statement.
Online ALTER TABLE
operations
that rebuild a table also create an
intermediate table file in the same
directory as the original table. The
innodb_tmpdir
option is not
applicable to intermediate table files.
(Bug #19183565)
InnoDB:
InnoDB
now supports at-rest data encryption
for InnoDB
tables stored in file-per-table
tablespaces. Encryption is enabled by specifying the
ENCRYPTION
option when creating or altering
an InnoDB
table. For more information, see
InnoDB Data-at-Rest Encryption.
Replication:
The
log_statements_unsafe_for_binlog
variable was added to provide control over whether the warnings
generated by error 1592 are added to the binary log or not.
The Valgrind function signature in
mysql-test/valgrind.supp
was upgraded for
Valgrind 3.11.
(Bug #22214867)
The audit_log
plugin now produces events in
the MYSQL_AUDIT_TABLE_ACCESS_CLASS
class.
These events are abortable.
(Bug #21458192)
The format of log output produced by
mysqld_safe now is configurable using the
--mysqld-safe-log-timestamps
option. This option can be used to produce log timestamps in
formats compatible with the server or in formats used by
mysqld_safe in older versions of MySQL. For
more information, see mysqld_safe — MySQL Server Startup Script.
(Bug #78475, Bug #21862951)
The server now supports an
--early-plugin-load
option that
indicates which plugins to load before loading mandatory
built-in plugins and before storage engine initialization. One
use for this option is to load the
keyring_file
plugin: The
InnoDB
storage engine uses the keyring for
data-at-rest encryption, so the keyring_file
plugin must be loaded early to ensure that it is available prior
to InnoDB
initialization.
Storage engines now can request notification about acquisition
and release of exclusive metadata locks. As result, the
LOCK_STATUS
column of the
metadata_locks
Performance Schema
table has two new status values. The
PRE_ACQUIRE_NOTIFY
and
POST_RELEASE_NOTIFY
status values are brief
and signify that the metadata locking subsubsystem is notifying
interested storage engines while entering lock acquisition or
leaving lock release operations.
The mysql_plugin utility is deprecated and
will be removed in a future MySQL version. Alternatives include
loading plugins at server startup using the
--plugin-load
or
--plugin-load-add
option, or at
runtime using the INSTALL PLUGIN
statement.
The mysql_kill()
,
mysql_list_fields()
,
mysql_list_processes()
, and
mysql_refresh()
C API functions
are deprecated and will be removed in a future MySQL version.
The same is true of the corresponding
COM_PROCESS_KILL
,
COM_FIELD_LIST
,
COM_PROCESS_INFO
, and
COM_REFRESH
client/server protocol commands.
Instead, use mysql_query()
to
execute a KILL
,
SHOW COLUMNS
,
SHOW PROCESSLIST
, or
FLUSH
statement, respectively.
InnoDB; Partitioning:
When OPTIMIZE TABLE
rebuilt a
partitioned InnoDB
table, it placed
the resulting partition tablespace files
(*.ibd
files) in the default data directory
instead of the directory specified using the DATA
DIRECTORY
option.
(Bug #75112, Bug #20160327)
InnoDB:
InnoDB
failed to update index statistics when
adding or dropping a virtual column.
(Bug #22469660, Bug #79775)
InnoDB: Server method calls in Information Schema interface code were fixed to avoid unnecessary typecasts. (Bug #22391925)
InnoDB:
A small InnoDB
buffer pool size with a large
innodb_stats_persistent_sample_pages
setting resulted in a Difficult to find free blocks
in the buffer pool warning.
(Bug #22385442)
InnoDB: memcached connections are blocked from accessing tables that contain an indexed virtual column. Accessing an indexed virtual column requires a callback to the server, but a memcached connection does not have access to the server code. (Bug #22384503, Bug #79691)
InnoDB:
InnoDB
did not return an informative message
when refusing an online ALTER
TABLE
operation that attempted to add an index and a
virtual column.
(Bug #22374827)
InnoDB:
An invalid
innodb_saved_page_number_debug
setting caused a server exit.
(Bug #22311319, Bug #79516)
InnoDB:
InnoDB
failed to free a table object when a
compressed table and temporary compressed table were created in
the same shared tablespace.
(Bug #22306581)
InnoDB:
In NUMA-related code, the size information passed to the
mbind()
call in the
buf_chunk_init()
function was incorrect.
(Bug #22293530, Bug #79434)
InnoDB: NUMA support was incomplete for online buffer pool resizing operations. (Bug #22293511, Bug #79354)
InnoDB:
A SELECT COUNT(*)
query that counted the
results of a full-text subquery raised an assertion.
(Bug #22270139)
InnoDB:
InnoDB
passed a buffer with an incorrect
TINYBLOB
data length for a virtual column,
resulting in a purge thread failure.
(Bug #22256752)
InnoDB: A purge failure occurred while deleting data from a table that contained a spatial index. (Bug #22230442, Bug #22366370)
InnoDB: An assertion was raised when purge accessed a freed page while attempting to rebuild virtual column data from the clustered index. (Bug #22204260)
InnoDB: Only prefix bytes were logged for an indexed virtual column, resulting in an a Clustered record for sec rec not found error. (Bug #22202788)
InnoDB:
A small buffer pool with an
innodb_page_size
setting of
64K
could cause startup, bootstrap, and
recovery failures.
(Bug #22179133, Bug #79201)
InnoDB: Unreachable code that checks for 32-bit file offsets was removed. (Bug #22163880, Bug #79150)
InnoDB: A slow shutdown failure was caused by background threads adding undo records to the purge history list during or after purge thread exit. (Bug #22154730)
InnoDB:
The InnoDB
purge thread died attempting to
purge a virtual column index record that was not delete-marked.
(Bug #22141031)
InnoDB:
In debug builds, an ALTER TABLE
operation that increased the column length of a virtual column
raised an assertion.
(Bug #22139917)
InnoDB:
ut_allocator
prepended the allocation payload
with a 12-byte header on 32-bit systems, causing unaligned
memory access. On 32-bit SPARC systems, the unaligned memory
access caused a crash during bootstrap.
(Bug #22131684)
InnoDB:
In debug builds, an ALTER TABLE
operation that added a new virtual column before an existing
virtual column raised an assertion.
(Bug #22123674, Bug #22111464)
InnoDB:
InnoDB
startup messages related to dumping
and loading of the buffer pool were improved.
(Bug #22096661, Bug #78960)
InnoDB:
Support was enabled for ALGORITHM=INPLACE
operations that add an index on an existing virtual column while
dropping another virtual column. Support was also enabled for
ALGORITHM=INPLACE
operations that add a
virtual column and an index. When adding an index on a
newly-added virtual column, purge now skips the uncommitted
virtual index.
(Bug #22082762)
InnoDB: The wrong table object was used to compute virtual column values for a query that accessed multiple instances of the same table. (Bug #22070021)
InnoDB: A purge thread failure occurred when inserting and deleting spatial data. The child page number field was not stored during the R-tree search stage. (Bug #22027053)
InnoDB:
Starting the server with an empty
innodb_data_home_dir
entry in
the configuration file caused InnoDB
to look
for the buffer pool file in the root directory, resulting in a
startup error.
(Bug #22016556, Bug #78831)
InnoDB: A failure to compute virtual column values caused an excessive number of error messages. (Bug #21968375)
InnoDB:
An
INFORMATION_SCHEMA.INNODB_CMP_PER_INDEX
query raised an assertion. A dictionary mutex was taken while
InnoDB
populated an in-memory heap table. The
mutex was not released before InnoDB
attempted to convert the in-memory heap table to an optimized
internal temporary table.
(Bug #21950756, Bug #78714)
InnoDB:
To avoid a potential hang and redo log overwrite, the
innodb_log_file_size
minimum
value has been increased from 1MB to 4MB, and the length
calculation in log_margin_checkpoint_age()
has been revised.
(Bug #21924224, Bug #78647)
InnoDB: A full-text query run under high concurrency caused a server exit due to an invalid memory access. (Bug #21922532)
InnoDB:
An ALTER TABLE
operation on a
table partitioned across multiple tablespaces moved existing
partitions to the table's default tablespace, resulting in an
assertion on SHOW CREATE
TABLE
. Likewise,
ALTER TABLE
moved
existing partitions to the named tablespace. Only
tbl_name
TABLESPACE
tablespace_name
ALTER TABLE ...
REORGANIZE PARTITION
should move existing partitions
to the table's default tablespace or to a named tablespace.
Running ALTER TABLE
on a table
partitioned across multiple tablespaces should only change the
table's default tablespace.
(Bug #21914047, Bug #22124042, Bug #79030)tbl_name
TABLESPACE
tablespace_name
InnoDB:
With a large
innodb_sort_buffer_size
setting, adding an index on an empty table performed more slowly
than expected.
(Bug #21762319, Bug #78262)
InnoDB:
A race condition occurred between
fil_names_write()
and
file_rename_tablespace_in_mem()
.
(Bug #21549928)
InnoDB: Purge attempted to access undo pages that were freed by a preceding undo log truncate operation, resulting in an assertion. (Bug #21508627)
InnoDB:
InnoDB
did not return an informative message
when refusing an online ALTER
TABLE
operation on a table with a spatial index.
(Bug #20111575)
InnoDB:
A compiler barrier was added to
ut_relax_cpu()
. The
ut_always_false
dummy global variable was
removed from ut_delay()
.
(Bug #20045167, Bug #74832)
InnoDB: Incorrect index values were returned while dropping a virtual column. The altered table object was used to evaluate virtual column values. (Bug #79773, Bug #22469459)
References: This issue is a regression of: Bug #22082762.
Partitioning: Subquery scans on partitioned tables with virtual columns could leak memory. (Bug #79145, Bug #22162200)
Replication:
The behavior of SET GTID_PURGED
was not
consistent between version 5.6 and 5.7. The fix ensures that
version 5.7 does not initiate a transaction for SET
GTID_PURGED
statements.
(Bug #21472492)
Replication:
When DML invokes a trigger or a stored function that inserts
into an AUTO_INCREMENT
column, that DML has
to be marked as an unsafe statement. If the tables are locked in
the transaction prior to the DML statement (for example by using
LOCK TABLES
), then the DML
statement was not being marked as an unsafe statement. The fix
ensures that such DML statements are marked correctly as unsafe.
(Bug #17047208)
Replication:
If pseudo_slave_mode
was set to
1 while an XA transaction was in the prepare stage, an assert
was generated. The fix ensures that changes from 0 to 1 can be
made during XA transactions. Note that this variable is solely
for internal use by the server.
(Bug #79416, Bug #22273964, Bug #78695, Bug #21942487)
Replication: When using GTIDs, a GTID-violating statement generates an error in the following cases:
gtid_mode
is either
ON
or ON_PERMISSIVE
and gtid_next=AUTOMATIC
The error prevented the implicit pre-commit, which caused a race condition. This has been fixed by making the error not prevent the implicit pre-commit from happening. This matches the expected behavior for GTID-violating DDL statements to implicitly commit the previous transaction before executing it. (Bug #78543, Bug #21895421)
Replication:
When a slave was configured with
log_bin=OFF
, the applier (SQL)
thread was failing to correctly roll back partial transactions
left in the relay log. The fix ensures that on reconnection, the
applier thread correctly rolls back a partial transaction and
starts applying it again from the next relay log file.
(Bug #78211, Bug #21691396)
Replication:
If the server stopped unexpectedly immediately before committing
an XA transaction which had been prepared, and the transaction
modified the mysql.gtid_executed
table, then
the subsequent recovery aborted due to an
innodb_lock_wait_timeout
error
when it was reading the mysql.gtid_executed
table. To fix the problem, XA transactions are no longer
permitted to modify the mysql.gtid_executed
table.
(Bug #77740, Bug #21452916)
Replication:
As part of the fix for Bug #16290902, when writing a
DROP TEMPORARY TABLE
IF EXISTS
query into the binary log, the query is no
longer preceded by a USE `db`
statement.
Instead the query uses a fully qualified table name, for example
DROP TEMPORARY TABLE
IF EXISTS `db`.`t1`;
. This changed the application of
replicate-rewrite-db
filter
rules, as they work only on the default database specified in a
USE
statement. This caused slaves
to fail when the resulting CREATE TEMPORARY
TABLE
was applied. The fix ensures that at the time of
writing a DROP
TEMPORARY TABLE IF EXISTS
query into the binary log, a
check is made for the default database. If it exists then the
query is written as USE default_db
in the
binary log. If a default database is not present then the query
is logged with the qualified table name.
(Bug #77417, Bug #21317739)
Replication:
If generating a GTID for a transaction fails, the transaction is
not written to the binary log but still gets committed. Although
running out of GTIDs is a rare situation, if it did occur an
error was written to the binary log as a sync stage error. With
binlog_error_action=ABORT_SERVER
,
the server aborts on such an error, avoiding data inconsistency.
When
binlog_error_action=IGNORE_ERROR
,
the server continues binary logging after such an error,
potentially leading to data inconsistency between the master and
the slave. The fix changes the error to be correctly logged as a
flush stage error.
(Bug #77393, Bug #21276561)
Replication:
When using --gtid-mode=ON
,
--enforce-gtid-consistency
,
and --binlog-format=row
, if a
user defined function with multiple
DROP TEMPORARY
TABLE
statements was executed on a master, the
resulting binary log caused an error on slaves. The fix ensures
that stored functions and triggers are also considered
multi-statement transactions, and that when
--enforce-gtid-consistency
is
enabled, functions with
CREATE TEMPORARY
TABLE
or
DROP TEMPORARY
TABLE
statements generate an
ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION
error.
(Bug #77354, Bug #21253415)
Replication:
Stored procedure local variables that were used in an
ALTER EVENT
statement were not
being replicated correctly. This was related to the fact that
CALL
statements are not written
into the binary log. Instead each statement executed in a stored
procedure is binary logged separately, with the exception that
the statement string is modified so that uses of stored
procedure local variables are replaced with
NAME_CONST('spvar_name',
'spvar-value')
calls. DDL statements (which are always
binary logged in statement binary log mode irrespective of the
current binary log format) can also use stored procedure local
variables and a clash could cause them to not be replicated
correctly. The fix ensures that any stored procedure local
variables used in a statement are replaced with
NAME_CONST(...)
, except for the
case when it is a DML statement and the binary log format is
ROW
.
(Bug #77288, Bug #21229951)
Replication:
DROP TABLE
statements are
regenerated by the server before being written to the binary
log. If a table or database name contained a non-regular
character, such as non-latin characters, the regenerated
statement was using the wrong name, breaking replication. The
fix ensures that in such a case the regenerated name is
correctly converted back to the original character set. Also
during work on this bug, it was discovered that in the rare case
that a table or database name contained 64 characters, the
server was throwing an assert(M_TBLLEN <
128)
assertion. The assertion has been corrected to be
less than or equal 128.
(Bug #77249, Bug #21205695)
References: See also: Bug #78036, Bug #22261585, Bug #21619371.
Replication:
Irrespective of the current
binlog_format
setting, DDL that
changes metadata on a master is always identified and written to
the binary log in STATEMENT
format. Such DDL
could occur from event based SQL statements, such as
CREATE EVENT
or
DROP EVENT
, or transactions that
had unsafe functions such as
sysdate()
. When
binlog_format=MIXED
and
attempting to replicate such DDL, it was not being correctly
identified and therefore was not being correctly replicated.
(Bug #71859, Bug #19286708)
Microsoft Windows: Thread handle resource leakage could occur when creating threads for handling connections on Windows, which could lead to Windows servers eventually running out of handles. (Bug #79714, Bug #22455198)
JSON:
Syntax checks were not always performed when an
ALTER TABLE
statement changed a
column's type from TEXT
to
JSON
. This could lead to
JSON
columns containing invalid JSON data.
This issue was observed when the original
TEXT
column used the
utf8mb4_bin
collation.
(Bug #79432, Bug #22278524)
The System-V initialization script for RHEL6 or older failed to
enable the mysqld
service by default.
(Bug #22600974)
Some activations of triggers that referenced a
NEW
value inside a query might cause a server
exit.
(Bug #22377554)
Parsing the output of
ST_GeometryType()
as a
DATETIME
value with a default
character set of utf32
caused a server exit.
(Bug #22340858)
For a character set loaded from an XML file, the server could fail to properly initialize its state map, leading to a server exit. (Bug #22338946)
Inserting a token of 84 4-byte characters into a full-text index raised an assertion. The maximum token length was 84 characters up to a maximum of 252 bytes, which did not account for 4-byte characters. The maximum byte length is now 336 bytes. (Bug #22291765, Bug #79475)
For some combination of consumers, the Performance Schema prepared statement instrumentation could cause a server exit. (Bug #22291560)
If a client attempted to use an unsupported client character set
(ucs2
, utf16
,
utf32
), the error message reported to the
client differed for SSL and non-SSL connections.
(Bug #22216715)
Data corruption or a server exit could occur if a stored
procedure had a variable declared as
TEXT
or
BLOB
and data was copied to that
variable using SELECT ... INTO syntax from a
TEXT
or
BLOB
column.
(Bug #22203532, Bug #22232332, Bug #21941152)
For debug builds, with the
ONLY_FULL_GROUP_BY
SQL mode
disabled, the optimizer could attempt to sort on outer
references, causing an assertion to be raised.
(Bug #22200984)
Different handling of YEAR
values
for INSERT
and
SELECT
could raise an assertion
when such values were used in a generated-column expression.
(Bug #22195458)
For debug builds, for queries involving
MIN()
or
MAX()
on an indexed column and a
reference to an unindexed datetime column, the optimizer could
attempt to access unread values, causing an assertion to be
raised.
(Bug #22186926)
Geohash decoding (for example, for
ST_LongFromGeoHash()
,
ST_LatFromGeoHash()
, and
ST_PointFromGeoHash()
) could
yield incorrect results due to the rounding algorithm being too
aggressive.
(Bug #22165582)
In debug builds, with READ
UNCOMMITTED
transaction isolation level, a
SELECT
reading a generated column
using an index could raise an assertion.
(Bug #22133710)
For generated columns, the optimizer could fail to establish the proper table reference, resulting in a server exit. (Bug #22132822)
For some combination of consumers, the Performance Schema file
instrumentation could fail due to an attempt to use a
NULL
pointer while instrumenting temporary
file I/O.
(Bug #22130453)
The Performance Schema could raise an assertion based on the (incorrect) assumption that instrumenting a temporary file open operation always resulted in an instrumented file. (Bug #22118669)
An ALTER TABLE
statement that
added an index on a virtual generated column using the
INPLACE
algorithm did not properly report
warnings (or errors in strict SQL mode) for problems with
virtual column values. Any subsequent ALTER
TABLE
on the same table using the
COPY
algorithm produced such warnings (or
failures in strict SQL mode) due to evaluating the problematic
value, but left the connection in a state that made further
INPLACE
alterations on the table fail for the
same reason.
(Bug #22095783)
If the left expression of an IN
expression
was a row subquery that accesses no tables, an assertion could
be raised (in debug builds), or incorrect results could be
returned (in release builds).
(Bug #22089623)
Expressions that match an indexed generated column may be replaced with the generated column by the optimizer to enable use of the associated index. However, this optimization was not performed for single-table update and delete statements. The optimizer now extends this replacement optimization to such statements. (Bug #22077611)
ANSI
SQL mode could cause
inconsistencies in processing of generated column expressions.
(Bug #22018979)
Removal of server session plugins was faulty and could cause a server exit. (Bug #21983102)
For some queries, if the optimizer used Disk-Sweep Multi-Range Read optimization on generated columns, the server could exit. (Bug #21980430)
mysqlpump tries to do as much work in
parallel as possible, but the dump threads lacked a
synchronization point before backing up the data, resulting in
inconsistent backup. mysqlpump now locks the
server and flushes all the tables using
FLUSH TABLES WITH READ LOCK
to
ensure that any further connections view the same state of all
the databases.
This change lifts the restriction aginst the
--single-transaction
option
being mutually exclusive with parallelism. When using
--single-transaction
, it is no
longer necessary to disable parallelism by setting
--default-parallelism
to 0 and
not using any instances of
--parallel-schemas
.
(Bug #21980284)
A fault in pthread_rwlock_unlock()
wherein it
decremented the lock counter even for already unlocked objects
could result in deadlock.
(Bug #21966621)
The Performance Schema could acquire a double lock on session system variables, causing a server hang or (in debug builds) an assertion to be raised. (Bug #21935106)
Certain queries containing WHERE 0
of the
following form could cause a server exit due to uninitialized
reads: SELECT (SELECT
.
(Bug #21922202)col
AND constant
FROM t WHERE 0) IN
(SELECT constant
FROM t1)
CREATE TEMPORARY TABLE .. SELECT
statements
involving BIT
columns that
resulted in a column type redefinition could cause a server exit
or an improperly created table.
(Bug #21902059)
For UPDATE
operations on
InnoDB
tables, there could be a mismatch
between the value of a virtual generated column in the index and
the value in the “before” buffer, resulting in a
server exit.
(Bug #21875520)
With
character_set_server=utf16le
,
some values of
ft_boolean_syntax
could cause a
server exit for full-text searches.
(Bug #21631855)
With gtid_mode=ON
, concurrent
execution of SHOW TABLE STATUS
and REVOKE ALL
PRIVILEGES
could lead to deadlock in there was a view
in the database and
REVOKE ALL
PRIVILEGES
failed for some but not all of the named
users.
(Bug #21463167)
mysqlpump could exit due to incorrect synchronization of view-handling threads during dump processing. (Bug #21399236, Bug #21447753)
With LOCK TABLES
in force, an
attempt to open a temporary MERGE
table
consisting of a view in its list of tables (not the last table
in the list) caused a server exit.
(Bug #20691429)
For certain prepared statements, the optimizer could transform join conditions such that it used a pointer to a temporary table field that was no longer available after the initial execution. Subsequent executions caused a server exit. (Bug #19941403)
Repeated execution of ALTER TABLE v1 CHECK
PARTITION
as a prepared statement, where
v1
is a view, led to a server exit.
In addition, output for some administrative operations, when
they are attempted on a view, changes from
“Corrupt” to “Operation failed”. These
include ANALYZE TABLE
,
OPTIMIZE TABLE
, and
REPAIR TABLE
, and
ALTER TABLE
statements that
perform ANALYZE PARTITION
, CHECK
PARTITION
, OPTIMIZE PARTITION
, and
REPAIR PARTITION
operations.
(Bug #19817021)
Valgrind detected some possibly unsafe use of string functions in code used for asymmetric encryption. (Bug #19688135)
An out-of-memory failure in join buffer allocation could lead to incorrect results for multiple-table queries. (Bug #19031409)
SSL connections ignored any change made by passing the
MYSQL_OPT_READ_TIMEOUT
option to the
mysql_options()
C API function.
(Bug #17618162)
For ALTER TABLE
statements, the
parser did not support the ALGORITHM
clause
for some operations involving tablespaces or partitions.
(Bug #17400320)
Debian packages create the root
user account
using the auth_socket
authentication plugin
to achieve secure-by-default installation if installation was
done with a blank root
password. However,
auth_socket
was being used even if the
password was not blank.
(Bug #80137, Bug #22594846, Bug #23321113, Bug #81518)
Solaris packages failed to note the dependency of the MySQL
client library on the libstlport
library.
(Bug #79778, Bug #22504264)
Using systemd to start mysqld failed if
configuration files contained multiple
datadir
lines. Now the last
datadir
line is used.
(Bug #79613, Bug #22361702)
A derived table contained in the SET
clause
of an UPDATE
statement should be
materialized to avoid an error about updating a table that is
also read in the same statement. Materialization did not occur
for some statements, leading to that error.
(Bug #79590, Bug #22343301)
MySQL 5.7.8 prohibited references to select list columns of the
outer query from the HAVING
clause of a
correlated subquery in the inner query because they are not
permitted by standard SQL. However, because this is a frequently
used extension, it is once again permitted.
(Bug #79549, Bug #22328395)
References: This issue is a regression of: Bug #19823076.
Installing just shared libraries, clients, and development
support files failed to install everything needed to build
client applications because the
binary_log_types.h
header file was not
installed.
(Bug #79531, Bug #22321338)
SHOW CREATE TRIGGER
could fail to
display all applicable SQL modes.
(Bug #79526, Bug #22313133)
References: This issue is a regression of: Bug #18311187.
On SELinux, mysqld --initialize with an
init_file
system variable could
fail to initialize the data directory.
(Bug #79442, Bug #22314098, Bug #79458, Bug #22286481)
Hexadecimal and bit literals written to saved view definitions
could be truncated. This could also affect extended
EXPLAIN
output.
(Bug #79398, Bug #22268110)
ST_Buffer()
returned an error for
geometries with an SRID different from 0. Nonzero SRID values
now are permitted but ignored (calculations are still done using
Cartesian coordinates).
(Bug #79394, Bug #22306745)
A regression caused failure of the workaround at
Restrictions on Subqueries for avoiding
ER_UPDATE_TABLE_USED
errors when
referencing the same table in a subquery as was used as target
for an UPDATE
or
DELETE
statement.
(Bug #79333, Bug #22239474)
Statements causing multiple parse errors could cause an assertion to be raised. (Bug #79303, Bug #22222013)
Some queries with derived tables perform better with materialization than when merged into the outer query. The optimizer no longer uses merging by default for derived tables containing dependent subqueries in the select list. (Bug #79294, Bug #22223202)
ALTER USER
and
SET PASSWORD
did not work at
server startup when invoked in the file named using the
init_file
system variable.
(Bug #79277, Bug #22205360)
When not in strict SQL mode, attempts to implicitly insert
NULL
into a NOT NULL
column resulted in different behavior depending on whether the
table had a trigger.
(Bug #79266, Bug #22202665)
Some replication-only code was not protected with
#ifdef
and failed to compile with the
WITH_UBSAN
CMake option enabled.
(Bug #79236, Bug #22190632)
Configuring MySQL with the
-DWITH_UBSAN=ON
CMake option resulted in spurious runtime
warnings from comp_err. These are now
suppressed. Also, a CMake warning was added
that undefined behavior address sanitizer support is currently
experimental.
(Bug #79230, Bug #22190656)
INSERT INTO ... SELECT
statements could
insert values other than DEFAULT
into
generated columns.
(Bug #79204, Bug #22179637)
With the derived_merge
flag of
the optimizer_switch
system
variable enabled, queries that used a derived table on the inner
side of an outer join could return incorrect results.
(Bug #79194, Bug #22176604)
References: See also: Bug #80526, Bug #22833364.
Memory leaks in libmysqld
were corrected.
(Bug #79187, Bug #22174219)
FOUND_ROWS()
could return a
negative value if the preceding query was a
UNION
involving
SQL_CALC_FOUND_ROWS
and LIMIT ...
OFFSET
.
(Bug #79131, Bug #22155786)
IN
-to-EXISTS
subquery
transformation could cause SELECT NULL IN
(
to return 0
rather than subquery
)NULL
.
IN
-to-EXISTS
subquery
transformation could yield incorrect results for queries for
which the table was nonempty, the subquery on the left side of
the IN
predicate produced an empty result,
and semijoin optimization was disabled.
(Bug #78946, Bug #22090717, Bug #74403, Bug #19822406)
The result from WEIGHT_STRING()
could be incorrect when used in a view.
(Bug #78783, Bug #21974321)
For connections made using a Unix socket file, specifying the
--ssl-ca
option caused the
connection to fail.
(Bug #78509, Bug #21878661)
If server was started with
--thread-handling=no-threads
, no
foreground thread was created for a client connection. The
Performance Schema did not account for the possibility of no
foreground threads for queries on the
session_connect_attrs
table,
causing an assertion to be raised.
(Bug #78292, Bug #21765843)
mysqlpump generated incorrect
INSERT
statements for tables that
had generated columns.
(Bug #78082, Bug #21650559)
ALTER TABLE ...
CONVERT TO CHARACTER SET
operations that used the
INPLACE
algorithm were ineffective if the
table contained only numeric data types. Also, such operations
failed to clean up their temporary .frm
file.
(Bug #77554, Bug #21345391)
Heavy SHOW PROCESSLIST
or
SELECT ... FROM
INFORMATION_SCHEMA.PROCESSLIST
activity could result
in the server accepting more than
max_connections
connections.
(Bug #75155, Bug #20201006)
When used with the libmysqld
embedded server,
the mysql_stmt_execute()
C API
function failed with a malformed communication
packet
error, even for simple prepared statements.
(Bug #70664, Bug #17883203)
Queries using SUM(DISTINCT)
could
produce incorrect results when there were many distinct values.
(Bug #56927, Bug #11764126, Bug #79648, Bug #22370382)