Functionality Added or Changed
The mysqladmin and
mysqldump clients now have
--default-auth and
--plugin-dir options for specifying which
authentication plugin and plugin directory to use.
(Bug #58139, Bug #11765201)
sql_priv.h now includes an
OPTION_ALLOW_BATCH flag for the
transaction_allow_batching
feature of MySQL Cluster.
(Bug #57604)
Boolean system variables can be enabled at run time by setting
them to the value ON or
OFF, but previously this did not work at
server startup. Now at startup such variables can be enabled by
setting them to ON or
TRUE. Any other nonnumeric value is
interpreted as OFF. (Bug #46393 improves on
this such that ON, TRUE,
OFF, and FALSE are
recognized, and other values are invalid.)
(Bug #51631, Bug #11759326)
References: See also Bug #11754743.
In the audit plugin interface, the
MYSQL_AUDIT_CONNECTION_CLASS event class was
added, and the MYSQL_AUDIT_GENERAL_STATUS
subclass was added to the
MYSQL_AUDIT_GENERAL_CLASS event class. The
new symbol definitions can be found in the
plugin_audit.h header file.
Bugs Fixed
Security Fix: A security bug was fixed. (Bug #57952)
Performance; InnoDB:
InnoDB now uses the
PAUSE instruction on all platforms where it
is available. Previously, InnoDB
used the PAUSE instruction only on Windows
systems.
(Bug #58666)
Performance; InnoDB:
An UPDATE statement for an
InnoDB table could be slower than
necessary if it changed a column covered by a prefix index, but
did not change the prefix portion of the value. The fix improves
performance for InnoDB 1.1 in MySQL 5.5 and higher, and the
InnoDB Plugin for MySQL 5.1.
(Bug #58912, Bug #11765900)
Performance:
Queries involving InnoDB tables in
the INFORMATION_SCHEMA tables
TABLE_CONSTRAINTS,
KEY_COLUMN_USAGE, or
REFERENTIAL_CONSTRAINTS were slower
than necessary because statistics were rechecked more often than
required, even more so when many foreign keys were present. The
improvement to this may be of particular benefit to users of
MySQL Enterprise Monitor with many monitored servers or tens of
thousands of tables.
(Bug #43818, Bug #11752585)
Incompatible Change:
When auto_increment_increment is greater than
one, values generated by a bulk insert that reaches the maximum
column value could wrap around rather producing an overflow
error.
As a consequence of the fix, it is no longer possible for an
auto-generated value to be equal to the maximum BIGINT
UNSIGNED value. It is still possible to store that
value manually, if the column can accept it.
(Bug #39828, Bug #11749800)
Important Change; Partitioning:
Date and time functions used as partitioning functions now have
the types of their operands checked; use of a value of the wrong
type is now disallowed in such cases. In addition,
EXTRACT(WEEK FROM
, where
col_name)col_name is a
DATE or
DATETIME column, is now
disallowed altogether because its return value depends on the
value of the
default_week_format system
variable.
(Bug #54483, Bug #11761948)
References: See also Bug #57071, Bug #11764255.
InnoDB; Partitioning:
The partitioning handler did not pass locking information to a
table's storage engine handler. This caused high contention
and thus slower performance when working with partitioned
InnoDB tables.
(Bug #59013)
InnoDB:
The server could crash with an assertion error, if a stored
procedure, stored function, or trigger modified one
InnoDB table containing an
auto-increment
column, and dropped another InnoDB
table containing an auto-increment column.
(Bug #56228)
InnoDB:
In InnoDB status output, the value
for I/O sum[] could be incorrect, displayed
as a very large number.
(Bug #57600)
InnoDB:
The command to create a debug build (cmake -DWITH_DEBUG
...) now automatically sets the
InnoDB debugging flag
UNIV_DEBUG on all platforms. Formerly, the
UNIV_DEBUG flag might not be set for Windows
platforms with Visual Studio and not on OS X with Xcode.
(Bug #58279)
InnoDB:
When multiple InnoDB buffer pools
were enabled, SHOW
ENGINE INNODB statements displayed information about
each one, but not summary information combining statistics for
the entire buffer pool subsystem. Now, the aggregated
information is displayed in the BUFFER POOL AND
MEMORY section, and information about individual
buffer pool instances is displayed in a new INDIVIDUAL
BUFFER POOL INFO section.
(Bug #58461)
InnoDB:
When the lower_case_table_names
variable was set to 2, InnoDB could
fail to restore a mysqldump dump of a table
with foreign key constraints involving case-sensitive names.
(Bug #55222)
InnoDB:
It was not possible to query the
information_schema.INNODB_TRX table
while other connections were running queries involving
BLOB types.
(Bug #55397, Bug #11762763)
InnoDB:
The presence of a double quotation mark inside the
COMMENT field for a column could prevent a
foreign key constraint from being created properly.
(Bug #59197, Bug #11766154)
InnoDB:
The OPTIMIZE TABLE statement
reset the auto-increment counter for an
InnoDB table. Now the
auto-increment value is preserved across this operation.
(Bug #18274)
Partitioning:
Failed ALTER TABLE
... PARTITION statements could cause memory leaks.
(Bug #56380, Bug #11763641)
References: See also Bug #46949, Bug #11755209, Bug #56996, Bug #11764187.
Partitioning:
Failed ALTER TABLE
... TRUNCATE PARTITION statements were written to the
binary log.
(Bug #58147)
Replication:
mysqlbinlog printed
USE statements to its output only
when the default database changed between events. To illustrate
how this could cause problems, suppose that a user issued the
following sequence of statements:
CREATE DATABASE mydb; USE mydb; CREATE TABLE mytable (column_definitions); DROP DATABASE mydb; CREATE DATABASE mydb; USE mydb; CREATE TABLE mytable (column_definitions);
When played back using mysqlbinlog, the
second CREATE TABLE statement
failed with Error: No Database Selected
because the second USE statement
was not played back, due to the fact that a database other than
mydb was never selected.
This fix ensures that mysqlbinlog outputs a
USE statement whenever it reads
one from the binary log.
(Bug #50914, Bug #11758677)
Replication:
While an INSERT DELAYED statement
with a single inserted value does not return any visible
warnings, such a warning could be still written into the error
log.
(Bug #57666, Bug #11764793)
References: See also Bug #49567.
Replication: When closing a session that used temporary tables, binary logging could sometimes fail with a spurious Failed to write the DROP statement for temporary tables to binary log. (Bug #57288)
Replication:
Due to changes made in MySQL 5.5.3, settings made in the
binlog_cache_size and
max_binlog_cache_size server
system variables affected both the binary log statement cache
(also introduced in that version) and the binary log
transactional cache (formerly known simply as the binary log
cache). This meant that the resources used as a result of
setting either or both of these variables were double the amount
expected. To rectify this problem, these variables now affect
only the transactional cache. The fix for this issue also
introduces two new system variables
binlog_stmt_cache_size and
max_binlog_stmt_cache_size,
which affect only the binary log statement cache.
In addition, the
Binlog_cache_use status
variable was incremented whenever either cache was used, and
Binlog_cache_disk_use was
incremented whenever the disk space from either cache was used,
which caused problems with performance tuning of the statement
and transactional caches, because it was not possible to
determine which of these was being exceeded when attempting to
troubleshoot excessive disk seeks and related problems. This
issue is solved by changing the behavior of these two status
variables such that they are incremented only in response to
usage of the binary log transactional cache, as well as by
introducing two new status variables
Binlog_stmt_cache_use and
Binlog_stmt_cache_disk_use,
which are incremented only by usage of the binary log statement
cache.
The behavior of the
max_binlog_cache_size system
variable with regard to active sessions has also been changed to
match that of the
binlog_cache_size system
variable: Previously, a change in
max_binlog_cache_size took
effect in existing sessions; now, as with a change in
binlog_cache_size, a change in
max_binlog_cache_size takes
effect only in sessions begun after the value was changed.
For more information, see System variables used with the binary log, and Server Status Variables. (Bug #57275, Bug #11764443)
Replication:
By default, a value is generated for an
AUTO_INCREMENT column by inserting either
NULL or 0 into the column. Setting the
NO_AUTO_VALUE_ON_ZERO server
SQL mode suppresses this behavior for 0, so that it occurs only
when NULL is inserted into the column.
This behavior is also followed on a replication slave (by the
slave SQL thread) when applying events that have been logged on
the master using the statement-based format. However, when
applying events that had been logged using the row-based format,
NO_AUTO_VALUE_ON_ZERO was
ignored, which could lead to an assertion.
To fix this issue, the value of an
AUTO_INCREMENT column is no longer generated
when applying an event that was logged using the row-based row
format, as this value is already contained in the changes
applied on the slave.
(Bug #56662)
Replication:
The Binlog_cache_use and
Binlog_cache_disk_use status
variables were incremented twice by a change to a table using a
transactional storage engine.
(Bug #56343, Bug #11763611)
References: This bug is a regression of Bug #50038.
Replication:
The BINLOG statement modified the
values of session variables, which could lead to problems with
operations such as point-in-time recovery. One such case
occurred when replaying a row-based binary log which relied on
setting foreign_key_checks =
OFF at the session level to create and populate a set
of InnoDB tables having foreign key
constraints.
(Bug #54903)
Replication: When an error occurred in the generation of the name for a new binary log file, the error was logged but not shown to the user. (Bug #46166)
References: See also Bug #37148, Bug #11748696, Bug #40611, Bug #11750196, Bug #43929, Bug #51019.
Replication: Previously, when a statement failed with a different error on the slave than on the master, the slave SQL thread displayed a message containing:
The error message for the master error code
The master error code
The error message for the slaves error code
The slave error code
However, the slave has no information with which to fill in any print format specifiers for the master message, so it actually displayed the message format string. To make it clearer that the slave is not displaying the actual message as it appears on the master, the slave now indicates that the master part of the output is the message format, not the actual message. For example, previously the slave displayed information like this:
Error: "Query caused different errors on master and slave. Error on master: 'Duplicate entry '%-.192s' for key %d' (1062), Error on slave: 'no error' (0). Default database: 'test'. Query: 'insert into t1 values(1),(2)'" (expected different error codes on master and slave)
Now the slave displays this:
Error: "Query caused different errors on master and slave. Error on master: message format='Duplicate entry '%-.192s' for key %d' error code=1062 ; Error on slave: actual message='no error', error code=0. Default database: 'test'. Query: 'insert into t1 values(1),(2)'" (expected different error codes on master and slave)
(Bug #46697)
A Valgrind failure occurred in fn_format when
called from archive_discover.
(Bug #58205, Bug #11765259)
Issuing EXPLAIN EXTENDED for a
query that would use condition pushdown could cause
mysqld to crash.
(Bug #58553, Bug #11765570)
It was possible to compile mysqld with Performance Schema support but with a dummy atomic-operations implementation, which caused a server crash. This problem does not affect binary distributions. It is helpful as a safety measure for users who build MySQL from source. (Bug #56769)
CMake polluted the source tree by writing installation-related temporary files there. (Bug #58372)
CMake did not add
LINK_LIBRARIES for
MYSQL_ADD_PLUGIN for
libmysqld.
(Bug #58158)
CREATE DATABASE and
DROP DATABASE caused
mysql --one-database to lose track of the
statement-filtering context.
(Bug #54899)
Configuration with maintainer mode enabled resulted in errors when compiling with icc. (Bug #57991, Bug #58871)
Configuring MySQL with
-DWITHOUT_PERFSCHEMA_STORAGE_ENGINE=1 caused
build failures.
(Bug #58953)
Security context references in sp_head.cc
were rewritten for improved DTrace compatibility.
(Bug #58350)
The cp1251 character set did not properly
support the Euro sign (0x88). For example,
converting a string containing this character to
utf8 resulted in '?'
rather than the utf8 Euro sign.
(Bug #56639)
The ucs2 character set does not support
characters outside the Basic Multilingual Plane (BMP), but
converting to ucs2 a string containing such
characters did not produce a conversion-failure warning.
(Bug #58321)
On Solaris, the MySQL build failed if it was configured with debugging enabled. (Bug #58699)
Several Valgrind warnings were fixed. (Bug #58948, Bug #59021)
View creation could produce Valgrind warnings. (Bug #57352)
During assignment of values to system variables, legality checks on the value range occurred too late, preventing proper error checking. (Bug #43233)
Some unsigned system variables could be displayed with negative values. (Bug #55794)
The BIT_AND() function could
return incorrect results when a join returned no matching rows.
(Bug #57954)
If MySQL was built with Visual Studio Express, the project wixca was not built. (Bug #58411)
An assertion could be raised during concurrent execution of
DROP DATABASE and
REPAIR TABLE if the drop deleted
a table's .TMD file at the same time the
repair tried to read details from the old file that was just
removed.
A problem could also occur when DROP
TABLE tried to remove all files belonging to a table
at the same time REPAIR TABLE had
just deleted the table's .TMD file.
(Bug #54486)
If a client supplied a user name longer than the maximum 16 characters permitted for names stored in the MySQL grant tables, all characters were being considered significant when checking for a match. Historically, only the first 16 characters were used for matching; this behavior was restored. (Bug #49752)
If the set of values aggregated with
AVG(DISTINCT) contained a
NULL value, the function result could be
incorrect.
(Bug #57932)
An assertion could be raised if –1 was inserted into an
AUTO_INCREMENT column by a statement writing
more than one row.
(Bug #50619, Bug #11758417)
When mysqld printed crash dump information, it incorrectly indicated that some valid pointers were invalid. (Bug #51817)
EXPLAIN could crash for queries
that used GROUP_CONCAT().
(Bug #58396)
On FreeBSD, if mysqld was killed with a
SIGHUP signal, it could corrupt
InnoDB .ibd
files.
(Bug #51023, Bug #11758773)
An assertion could be raised for queries for which the optimizer could choose between Index Merge range access or const ref access methods. (Bug #58456)
Unnecessary subquery evaluation in contexts such as statement preparation or view creation could cause a server crash. (Bug #57703)
An assertion could be raised if the server was closing a session at the same time the session was being killed by another thread. (Bug #58136)
EXPLAIN could crash for queries
that accessed two derived tables.
(Bug #58730)
If the remote server for a
FEDERATED table could not be
accessed, queries for the
INFORMATION_SCHEMA.TABLES table
failed.
(Bug #35333)
The my_seek() and
my_tell() functions ignored the
MY_WME flag when they returned an error,
which could cause client programs to hang.
(Bug #48451)
In rare cases, LIKE expressions
failed for an indexed column that used a collation containing
contractions.
(Bug #57737)
An ORDER BY clause was bound to the incorrect
substatement when used in UNION
context.
(Bug #57986)
In a subquery, a UNION with no
referenced tables (or only a reference to the
DUAL virtual table) did not permit an
ORDER BY clause.
(Bug #58970, Bug #11765950)
MIN(
could return an incorrect result in some cases.
(Bug #59211, Bug #11766165)year_col)
On Solaris, time-related functions such as
NOW() or
SYSDATE() could return a constant
value.
(Bug #42054)
Comparisons of aggregate values with
TIMESTAMP values were incorrect.
(Bug #59330, Bug #11766259)
If max_allowed_packet was set larger than
16MB, the server failed to reject too-large packets with
“Packet too large” errors.
(Bug #58887, Bug #11765878)
OPTIMIZE TABLE for an
InnoDB table could raise an
assertion if the operation failed because it had been killed.
(Bug #58933, Bug #11765920)
NULL geometry values could cause a crash in
Item_func_spatial_collection::fix_length_and_dec.
(Bug #57321)
After compilation from source, all header files were installed in the same directory, even those that should be installed into subdirectories of the installation include directory. (Bug #51925)
On Mac OS X, a configuration error caused the preference pane to fail. (Bug #51264)
mysqlslap failed to check for a
NULL return from
mysql_store_result() and crashed
trying to process the result set.
(Bug #59109, Bug #11766074)
For DIV expressions, assignment of
the result to multiple variables could cause a server crash.
(Bug #59241, Bug #11766191)
References: See also Bug #8457.
A NOT IN predicate with a subquery containing
a HAVING clause could retrieve too many rows,
when the subquery itself returned NULL.
(Bug #58818, Bug #11765815)
Condition pushdown optimization could push down conditions with incorrect column references. (Bug #58134, Bug #11765196)
cmake -DBUILD_CONFIG=mysql_release on Linux
previously required libaio to be linked in.
Now it is possible to specify
-DIGNORE_AIO_CHECK to build without
libaio.
(Bug #58955, Bug #11765940)
