Functionality added or changed:
Important Change:
mysqlbinlog now supports
--verbose
and
--base64-output=DECODE-ROWS
options to display row events as commented SQL statements. (The
default otherwise is to display row events encoded as base-64
strings using BINLOG
statements.)
See Section 4.6.7.2, “mysqlbinlog Row Event Display”.
(Bug#31455)
MySQL source distributions are now available in Zip format. (Bug#27742)
Added the SHOW PROFILES
and
SHOW PROFILE
statements to
display statement profile data, and the accompanying
INFORMATION_SCHEMA.PROFILING
table.
Profiling is controlled via the
profiling
and
profiling_history_size
session
variables. see Section 12.4.5.33, “SHOW PROFILES
Syntax”, and
Section 20.26, “The INFORMATION_SCHEMA PROFILING
Table”. (Community contribution by
Jeremy Cole)
The profiling feature is enabled via the
--enable-community-features
and --enable-profiling
options
to configure. These options are enabled by
default; to disable them, use
--disable-community-features
and
--disable-profiling
.
(Bug#24795)
Bugs fixed:
Performance: Incompatible Change:
Some performance problems of
SHOW ENGINE INNODB
STATUS
were reduced by removing used
cells
and Total number of lock structs in row
lock hash table
from the output. Now these values are
present only if the UNIV_DEBUG
symbol is
defined at MySQL build time.
(Bug#36941, Bug#36942)
Performance:
Over-aggressive lock acquisition by InnoDB
when calculating free space for tablespaces could result in
performance degradation when multiple threads were executing
statements on multi-core machines.
(Bug#38185)
Important Change: Security Fix: Additional corrections were made for the symlink-related privilege problem originally addressed in MySQL 5.1.24. The original fix did not correctly handle the data directory path name if it contained symlinked directories in its path, and the check was made only at table-creation time, not at table-opening time later.
Additional fixes were made in MySQL 5.1.41.
See also Bug#39277.
Security Enhancement:
The server consumed excess memory while parsing statements with
hundreds or thousands of nested boolean conditions (such as
OR (OR ... (OR ... ))
). This could lead to a
server crash or incorrect statement execution, or cause other
client statements to fail due to lack of memory. The latter
result constitutes a denial of service.
(Bug#38296)
Incompatible Change:
There were some problems using DllMain()
hook functions on Windows that automatically do global and
per-thread initialization for
libmysqld.dll
:
Per-thread initialization: MySQL internally counts the
number of active threads, which causes a delay in
my_end()
if not all threads have
exited. But there are threads that can be started either by
Windows internally (often in TCP/IP scenarios) or by users.
Those threads do not necessarily use
libmysql.dll
functionality but still
contribute to the open-thread count. (One symptom is a
five-second delay in times for PHP scripts to finish.)
Process-initialization:
my_init()
calls
WSAStartup
that itself loads DLLs and
can lead to a deadlock in the Windows loader.
To correct these problems, DLL initialization code now is not
invoked from libmysql.dll
by default. To
obtain the previous behavior (DLL initialization code will be
called), set the LIBMYSQL_DLLINIT
environment
variable to any value. This variable exists only to prevent
breakage of existing Windows-only applications that do not call
mysql_thread_init()
and work
okay today. Use of LIBMYSQL_DLLINIT
is
discouraged and is removed in MySQL 6.0.
(Bug#37226, Bug#33031)
Incompatible Change:
SHOW STATUS
took a lot of CPU
time for calculating the value of the
Innodb_buffer_pool_pages_latched
status variable. Now this variable is calculated and included in
the output of SHOW STATUS
only if
the UNIV_DEBUG
symbol is defined at MySQL
build time.
(Bug#36600)
Incompatible Change:
An additional correction to the original MySQL 5.1.23 fix was
made to normalize directory names before adding them to the list
of directories. This prevents /etc/
and
/etc
from being considered different, for
example.
(Bug#20748)
See also Bug#38180.
Partitioning:
When a partitioned table had a
TIMESTAMP
column defined with
CURRENT_TIMESTAMP
as the default but with no
ON UPDATE
clause, the column's value was
incorrectly set to CURRENT_TIMESTAMP
when
updating across partitions.
(Bug#38272)
Partitioning:
myisamchk failed with an assertion error when
analyzing a partitioned MyISAM
table.
(Bug#37537)
Partitioning:
A LIST
partitioned MyISAM
table returned erroneous results when an index was present on a
column in the WHERE
clause and NOT
IN
was used on that column.
Searches using the index were also much slower then if the index were not present. (Bug#35931)
Partitioning:
SELECT COUNT(*)
was not correct for some
partitioned tables using a storage engine that did not support
HA_STATS_RECORDS_IS_EXACT
. Tables using the
ARCHIVE
storage engine were known to be
affected.
This was because ha_partition::records()
was
not implemented, and so the default
handler::records()
was used in its place.
However, this is not correct behavior if the storage engine does
not support HA_STATS_RECORDS_IS_EXACT
.
The solution was to implement
ha_partition::records()
as a wrapper around
the underlying partition records.
As a result of this fix, the rows column in the output of
EXPLAIN
PARTITIONS
now includes the total number of records in
the partitioned table.
(Bug#35745)
Partitioning:
MyISAM
recovery enabled with the
--myisam-recover
option did not
work for partitioned MyISAM
tables.
(Bug#35161)
Partitioning:
When one user was in the midst of a transaction on a partitioned
table, a second user performing an ALTER
TABLE
on this table caused the server to hang.
(Bug#34604)
Partitioning:
Attempting to execute an INSERT
DELAYED
statement on a partitioned table produced the
error Table storage engine for
'table
' doesn't have this
option, which did not reflect the source of the
error accurately. The error message returned in such cases has
been changed to DELAYED option not supported for
table 'table
'.
(Bug#31210)
Replication: Some kinds of internal errors, such as Out of memory errors, could cause the server to crash when replicating statements with user variables.
certain internal errors. (Bug#37150)
Replication:
Row-based replication did not correctly copy
TIMESTAMP
values from a
big-endian storage engine to a little-endian storage engine.
(Bug#37076)
Replication:
INSTALL PLUGIN
and
UNINSTALL PLUGIN
caused row-based
replication to fail.
These statements are not replicated; however, when using
row-based logging, the changes they introduce in the
mysql
system tables are written to the
binary log.
Server-side cursors were not initialized properly, which could cause a server crash. (Bug#38486)
A server crash or Valgrind warnings could result when a stored procedure selected from a view that referenced a function. (Bug#38291)
A failure to clean up binary log events was corrected (detected by Valgrind). (Bug#38290)
Incorrect handling of aggregate functions when loose index scan was used caused a server crash. (Bug#38195)
Queries containing a subquery with DISTINCT
and ORDER BY
could cause a server crash.
(Bug#38191)
The fix for Bug#20748 caused a problem such that on Unix, MySQL
programs looked for options in ~/my.cnf
rather than the standard location of
~/.my.cnf
.
(Bug#38180)
If the table definition cache contained tables with many
BLOB
columns, much memory could
be allocated to caching BLOB
values. Now a size limit on the cached
BLOB
values is enforced.
(Bug#38002)
For InnoDB
tables, ORDER BY ...
DESC
sometimes returned results in ascending order.
(Bug#37830)
If a table has a BIT NOT NULL
column
c1
with a length shorter than 8 bits and some
additional NOT NULL
columns
c2
, ..., and a
SELECT
query has a
WHERE
clause of the form (c1 =
, the
query could return an unexpected result set.
(Bug#37799)constant
) AND c2 ...
The server returned unexpected results if a right side of the
NOT IN
clause consisted of the
NULL
value and some constants of the same
type. For example, this query might return 3, 4, 5, and so forth
if a table contained those values:
SELECT * FROM t WHERE NOT t.id IN (NULL, 1, 2);
Setting the session value of the
innodb_table_locks
system
variable caused a server crash.
(Bug#37669)
Nesting of IF()
inside of
SUM()
could cause an extreme
server slowdown.
(Bug#37662)
Killing a query that used an EXISTS
subquery
as the argument to SUM()
or
AVG()
caused a server crash.
(Bug#37627)
When using indexed ORDER BY
sorting,
incorrect query results could be produced if the optimizer
switched from a covering index to a noncovering index.
(Bug#37548)
After TRUNCATE TABLE
for an
InnoDB
table, inserting explicit values into
an AUTO_INCREMENT
column could fail to
increment the counter and result in a duplicate-key error for
subsequent insertion of NULL
.
(Bug#37531)
Within stored programs or prepared statements,
REGEXP
could return incorrect
results due to improper initialization.
(Bug#37337)
For a MyISAM
table with CHECKSUM =
1
and ROW_FORMAT = DYNAMIC
table
options, a data consistency check (maximum record length) could
fail and cause the table to be marked as corrupted.
(Bug#37310)
The max_length
result set metadata value was
calculated incorrectly under some circumstances.
(Bug#37301)
If the length of a field was 3, internal
InnoDB
to integer type conversion didn't work
on big-endian machines in the
row_search_autoinc_column()
function.
(Bug#36793)
A query which had an ORDER BY DESC
clause
that is satisfied with a reverse range scan could cause a server
crash for some specific CPU/compiler combinations.
(Bug#36639)
The CSV
storage engine returned success even
when it failed to open a table's data file.
(Bug#36638)
SELECT
DISTINCT
from a simple view on an
InnoDB
table, where all selected columns
belong to the same unique index key, returned incorrect results.
(Bug#36632)
Dumping information about locks in use by sending a
SIGHUP
signal to the server or by invoking
the mysqladmin debug command could lead to a
server crash in debug builds or to undefined behavior in
production builds.
(Bug#36579)
If initialization of an INFORMATION_SCHEMA
plugin failed, INSTALL PLUGIN
freed some internal plugin data twice.
(Bug#36399)
For InnoDB
tables, the
DATA_FREE
column of the
INFORMATION_SCHEMA.TABLES
displayed
free space in kilobytes rather than bytes. Now it displays
bytes.
(Bug#36278)
When the fractional part in a multiplication of
DECIMAL
values overflowed, the
server truncated the first operand rather than the longest. Now
the server truncates so as to produce more precise
multiplications.
(Bug#36270)
The mysql client failed to recognize comment
lines consisting of --
followed by a newline.
(Bug#36244)
The server could crash with an assertion failure (or cause the client to get a “Packets out of order” error) when the expected query result was that it should terminate with a “Subquery returns more than 1 row” error. (Bug#36135)
The UUID()
function returned
UUIDs with the wrong time; this was because the offset for the
time part in UUIDs was miscalculated.
(Bug#35848)
The configure script did not allow
utf8_hungarian_ci
to be specified as the
default collation.
(Bug#35808)
On 64-bit systems, assigning values of 2
63 – 1 or larger to
key_buffer_size
caused memory
overruns.
(Bug#35616)
For InnoDB
tables,
REPLACE
statements used
“traditional” style locking, regardless of the
setting of
innodb_autoinc_lock_mode
. Now
REPLACE
works the same way as
“simple inserts” instead of using the old locking
algorithm. (REPLACE
statements
are treated in the same way as
INSERT
statements.)
(Bug#35602)
Freeing of an internal parser stack during parsing of complex stored programs caused a server crash. (Bug#35577, Bug#37269, Bug#37228)
mysqlbinlog left temporary files on the disk after shutdown, leading to the pollution of the temporary directory, which eventually caused mysqlbinlog to fail. This caused problems in testing and other situations where mysqlbinlog might be invoked many times in a relatively short period of time. (Bug#35543)
Index scans performed with the sort_union()
access method returned wrong results, caused memory to be
leaked, and caused temporary files to be deleted when the limit
set by sort_buffer_size
was
reached.
(Bug#35477, Bug#35478)
Table checksum calculation could cause a server crash for
FEDERATED
tables with
BLOB
columns containing
NULL
values.
(Bug#34779)
A significant slowdown occurred when many
SELECT
statements that return
many rows from InnoDB
tables were running
concurrently.
(Bug#34409)
mysql_install_db failed if the server was
running with an SQL mode of
TRADITIONAL
. This program now
resets the SQL mode internally to avoid this problem.
(Bug#34159)
Changes to build files were made to enable the MySQL distribution to compile on Microsoft Visual C++ Express 2008. (Bug#33907)
Fast ALTER TABLE
operations were
not fast for columns that used multibyte character sets.
(Bug#33873)
The internal functions my_getsystime()
,
my_micro_time()
, and
my_micro_time_and_time()
did not work
correctly on Windows. One symptom was that uniqueness of
UUID()
values could be
compromised.
(Bug#33748)
Cached queries that used 256 or more tables were not properly
cached, so that later query invalidation due to a
TRUNCATE TABLE
for one of the
tables caused the server to hang.
(Bug#33362)
mysql_upgrade attempted to use the
/proc
file system even on systems that do
not have it.
(Bug#31605)
mysql_install_db failed if the default
storage engine was NDB
. Now it
explicitly uses MyISAM
as the storage engine
when running mysqld --bootstrap.
(Bug#31315)
Several MySQL programs could fail if the HOME
environment variable had an empty value.
(Bug#30394)
On NetWare, mysql_install_db could appear to execute normally even if it failed to create the initial databases. (Bug#30129)
The Serbian translation for the
ER_INCORRECT_GLOBAL_LOCAL_VAR
error was corrected.
(Bug#29738)
TRUNCATE TABLE
for
InnoDB
tables returned a count showing too
many rows affected. Now the statement returns 0 for
InnoDB
tables.
(Bug#29507)
The BUILD/check-cpu build script failed if gcc had a different name (such as gcc.real on Debian). (Bug#27526)
In some cases, the parser interpreted the ;
character as the end of input and misinterpreted stored program
definitions.
(Bug#26030)
The FLUSH
PRIVILEGES
statement did not produce an error when it
failed.
(Bug#21226)
After executing a prepared statement that accesses a stored function, the next execution would fail to find the function if the stored function cache was flushed in the meantime. (Bug#12093, Bug#21294)
User Comments
Add your own comment.