The world's most popular open source database
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)
Falcon builds on AMD64 platforms now.
(Bug#38535)
mysqltest now installs signal handlers and generates a stack trace if it crashes. (Bug#37003)
A new system variable, backupdir, enables the
default directory to be specified for
BACKUP DATABASE and
RESTORE operations when the image
file pathname is not a full pathname. The default value for this
variable is the data directory.
(Bug#35230)
The mysql.online_backup and
mysql.online_backup_progress tables now have
a default character set of utf8 rather than
latin1.
(Bug#33836)
mysqltest was changed to be more robust in the case of a race condition that can occur for rapid disconnect/connect sequences with the server. The account used by mysqltest could reach its allowed simultaneous-sessions user limit if the connect attempt occurred before the server had fully processed the preceding disconnect. mysqltest now checks specificaly for a user-limits error when it connects; if that error occurs, it delays briefly before retrying. (Bug#23921)
Previously, BACKUP DATABASE did
not back up privileges and
RESTORE did not restore them. Now
privileges for backed-up databases are saved. This includes
privileges at the database level and below (table, column,
routine). Global privileges are not saved. For additional
information about how privileges are backed up, see
Section 6.3.1, “Quick Guide to MySQL Backup”.
A new session system variable,
backup_wait_timeout, controls
the number of seconds a BACKUP
DATABASE or RESTORE
operation waits for a blocked DDL statements before aborting
with an error.
The CREATE TABLESPACE privilege
has been introduced. This privilege exists at the global
(superuser) level and enables you to create, alter, and drop
tablespaces and logfile groups.
Improvements made to MySQL Backup (the
BACKUP DATABASE and
RESTORE statements):
A native driver for the MyISAM storage
engine is included. This results in faster times for backup
and restore operations, although the size of backup image
files is larger.
Bugs fixed:
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.
(Bug#37226, Bug#33031)
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. These values are now
present only if UNIV_DEBUG is defined at
MySQL build time.
(Bug#36941, Bug#36942)
Important Change:
The INFORMATION_SCHEMA.FALCON_TABLES table
has been removed.
(Bug#29211, Bug#34705, Bug#34706)
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:
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)
Replication: Server code used in binary logging could in some cases be invoked even though binary logging was not actually enabled, leading to asserts and other server errors. (Bug#38798)
Replication:
Row-based replication broke for utf8
CHAR columns longer than 85
characters.
(Bug#37426)
Replication:
When autocommit was set equal
to 1 after starting a transaction, the binary
log did not commit the outstanding transaction. The reason this
happened was that the binary log commit function saw only the
values of the new settings, and decided that there was nothing
to commit.
This issue was first observed when using the
Falcon storage engine, but it is possible
that it affected other storage engines as well.
(Bug#37221)
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:
Performing an insert on a table having an
AUTO_INCREMENT column and an
INSERT trigger that was being
replicated from a master running MySQL 5.0 or any version of
MySQL 5.1 up to and including MySQL 5.1.11 to a slave running
MySQL 5.1.12 or later caused the replication slave to crash.
(Bug#36443)
See also Bug#33029.
Hostname lookup failure could lead to a server crash. (Bug#39153)
When recovering from a serial log containing many
CREATE TABLESPACE and DROP
TABLESPACE statements, Falcon could
lose data from tablespaces not referenced by these statements.
(Bug#39138)
See also Bug#39789.
Falcon key pages were written to the serial
log in the wrong order. This had the potential to cause problems
if a failure of the server occurred during recovery.
(Bug#39025)
Falcon could hang trying to perform an
UPDATE in one transaction while
waiting for another transaction to be committed or rolled back.
(Bug#38947)
It was not possible to build the server with
Falcon support on SPARC when using the Sun
Studio compiler.
(Bug#38891)
On Solaris platforms, when the server was built with
Falcon support and the data directory set in
user's home directory, mysql_install_db
failed.
(Bug#38843)
Falcon did not honor the
--datadir option and created its files in the
current directory instead. This error was apparent only when
running the embedded version of MySQL.
(Bug#38770)
When built with Falcon support on 64-bit
SPARC platforms, mysqld hung on startup. This
occurred whether Sun Studio or gcc was used
to compile the server.
(Bug#38766)
Falcon did not build on Linux with Valgrind
enabled.
(Bug#38746)
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)
Queries containing a subquery with DISTINCT
and ORDER BY could cause a server crash.
(Bug#38191)
CREATE TABLESPACE failed when invoked
immediately following a DROP TABLESPACE
statement that used the same tablespace name.
(Bug#38186, Bug#38743)
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)
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)
UUID() values could have hyphens
in the wrong place.
(Bug#38160)
Queries with a HAVING clause could return a
spurious row.
(Bug#38072)
MyISAM tables with non-ASCII characters in
their names could not be backed up because the
MyISAM native backup driver did not handle
them properly.
(Bug#38045)
Dropping and re-creating a Falcon table, then
adding indexes to the re-created table, could cause spurious
errors or possibly a crash of the server.
(Bug#38039)
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)
The server returned incorrect results for WHERE ... OR
... GROUP BY queries against InnoDB
tables.
(Bug#37977)
SUM(DISTINCT) and
AVG(DISTINCT) for an empty result
set in a subquery were not properly handled as being able to
return NULL.
(Bug#37891)
For InnoDB tables, ORDER BY ...
DESC sometimes returned results in ascending order.
(Bug#37830)
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);
Executing large numbers of SQL statements using
LIMIT on Falcon tables
eventually led to a crash of the server.
(Bug#37726)
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)
For BACKUP DATABASE, if the
WITH COMPRESSION clause was not used, an
uninitialized variable could cause unpredictable results.
(Bug#37654)
Killing a query that used an EXISTS subquery
as the argument to SUM() or
AVG() caused a server crash.
(Bug#37627)
mysqld failed to build using the Sun Studio compiler. (Bug#37603)
When using indexed ORDER BY sorting,
incorrect query results could be produced if the optimizer
switched from a covering index to a non-covering 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)
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)
The optimizer_switch system
variable takes a comma-separated list of values, but only the
first value in the list was used.
(Bug#37120)
Executing ALTER TABLE ADD PARTITION followed
by ALTER TABLE DROP PARTITION on a Falcon
table, and then killing the thread performing these statements
could cause the server to crash.
(Bug#37072)
NOT IN subqueries that selected
MIN() or
MAX() values but produced an
empty result could cause a server crash.
(Bug#37004)
A server crash resulted from attempts at semi-join and
materialization optimizations for subqueries with a parent of
SELECT ... FROM DUAL.
(Bug#36896)
Server crashed when starting a new BACKUP
DATABASE or RESTORE
statement while a BACKUP DATABASE
or RESTORE was ongoing.
(Bug#36795)
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)
RESTORE could fail if the server
on which the restore operation took place had enabled triggers
or events.
(Bug#36530)
The parser incorrectly allowed MySQL error code 0 to be specified for a condition handler. (This is incorrect because the condition must be a failure condition and 0 indicates success.) (Bug#36510)
CHAR(256 USING utf32) could
generate a result with an incorrect length and result in a
server crash.
(Bug#36418)
If initialization of an INFORMATION_SCHEMA
plugin failed, INSTALL PLUGIN
freed some internal plugin data twice.
(Bug#36399)
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 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)
Executing TRUNCATE statements
with interleaving transactions could cause
mysqld to crash.
(Bug#35991)
See also Bug#22165.
Multiple threads executing repeated queries on the same
Falcon table led eventually to a crash of the
server.
(Bug#35932, Bug#36410)
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)
For CREATE TABLE, the parser did
not enforce that parentheses were present in a CHECK
( clause; now it does.
The parser did not enforce that expr)CONSTRAINT
[ without a
following symbol]CHECK clause was illegal; now it
does.
(Bug#35578, Bug#11714, Bug#38696)
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)
The code for detecting a byte order mark (BOM) caused mysql to crash for empty input. (Bug#35480)
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)
For uncorrelated subqueries without a WHERE
clause, use of semi-join or materialization options could result
in slow performance, or use of the LooseScan strategy could
produce incorrect results.
(Bug#35468)
CSV tables with
CHAR columns caused
BACKUP DATABASE to produce a
server crash.
(Bug#35117)
If a view depended on a base table that had been dropped,
BACKUP DATABASE caused a server
crash.
(Bug#34902)
If a view was altered before backing up a database,
BACKUP DATABASE caused a server
crash.
(Bug#34867)
Table checksum calculation could cause a server crash for
FEDERATED tables with
BLOB columns containing
NULL values.
(Bug#34779)
BACKUP DATABASE caused a server
crash if it attempted to back up a view that depended on another
view.
(Bug#34758, Bug#35347)
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)
ORDER BY failed to take into account accents
and lettercases in multi-level collations
(latin2_czech_cs and
cp1250_czech_cs).
(Bug#33791, Bug#30462)
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)
The SHOW FUNCTION CODE and
SHOW PROCEDURE CODE statements
are not present in non-debug builds, but attempting to use them
resulted in a “syntax error” message. Now the error
message indicates that the statements are disabled and that you
must use a debug build.
(Bug#33637)
If a large number of databases were named in the
BACKUP DATABASE statement, the
server crashed.
(Bug#33568)
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)
BACKUP DATABASE did not properly
set the flags in the first two bytes of the backup image.
(Bug#33120)
Unindexed ORDER BY did not work on short
utf32 columns, or on utf16
columns with a short
max_sort_length value.
(Bug#33073)
BACKUP DATABASE followed by
RESTORE could mangle object names
if a non-standard charset was used.
(Bug#33023)
After an upgrade to MySQL 6.0.4 or higher, columns that used the
old 3-byte Unicode utf8 character set are
treated as having the utf8mb3 character set.
mysql_upgrade did not convert all system
tables in the mysql database to use the new
4-byte Unicode utf8 character set rather than
utf8mb3. This caused problems such as that
the event scheduler would not start.
mysql_upgrade now performs the
utf8mb3 to utf8 conversion
for system tables.
(Bug#33002, Bug#33053)
It was possible to insert invalid Unicode characters (with code
point values greater than U+10FFFF) into utf8
and utf32 columns.
(Bug#32914)
UNION constructs cannot contain
SELECT ... INTO except in the final
SELECT. However, if a
UNION was used in a subquery and an
INTO clause appeared in the top-level query,
the parser interpreted it as having appeared in the
UNION and raised an error.
(Bug#32858)
Inserting CURRENT_TIME,
CURRENT_DATE, or
CURRENT_TIMESTAMP into a
VARCHAR column didn't work for
non-ASCII character sets such as ucs2,
utf16, or utf32.
(Bug#32390)
mysql_upgrade attempted to use the
/proc filesystem even on systems that do
not have it.
(Bug#31605)
mysql_install_db failed if run with the
default table type set to NDB.
(Bug#31315)
Making INFORMATION_SCHEMA the default
database caused the DROP TABLESPACE statement
to be disabled.
(Bug#31302)
Several MySQL programs could fail if the HOME
environment variable had an empty value.
(Bug#30394)
The Serbian translation for the
ER_INCORRECT_GLOBAL_LOCAL_VAR error was
corrected.
(Bug#29738)
The BUILD/check-cpu build script failed if gcc had a different name (such as gcc.real on Debian). (Bug#27526)
ALTER TABLE could not be used to
add columns to a table if the table had an index on a
utf8 column with a
TEXT data type.
(Bug#26180)
The XPath boolean() function did not cast
string and nodeset values correctly in some cases. It now
returns TRUE for any non-empty string or
nodeset and 0 for a NULL string, as specified
in the XPath standard..
(Bug#26051)
Using ALTER TABLE with
interleaving transactions could cause mysqld
to crash.
(Bug#22165)
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)
perror did not work for errors described in
the sql/share/errmsg.txt file.
(Bug#10143)


User Comments
Add your own comment.