This is a Monthly Rapid Update release of the MySQL Enterprise Server 5.0.
This section documents all changes and bug fixes that have been applied since the last MySQL Enterprise Server release (5.0.38).
Functionality Added or Changed
MySQL Cluster: The behavior of the ndb_restore utility has been changed as follows:
It is now possible to restore selected databases or tables using ndb_restore.
Several options have been added for use with
facilitate the creation of structured data dump files. These
options can be used to make dumps made using
ndb_restore more like those produced by
For details of these changes, see ndb_restore — Restore a MySQL Cluster Backup. (Bug #26899, Bug #26900)
option for mysql.server to specify how long
to wait for the server to start. If the server does not start
within the timeout period, mysql.server exits
with an error.
Prefix lengths for columns in
are no longer displayed in
TABLE output. mysqldump uses that
statement, so if a table with
containing prefixed columns is dumped and reloaded, the index is
created with no prefixes. (The full column width of each column
The syntax for index hints has been extended to enable explicit specification that the hint applies only to join processing. See Index Hint Syntax.
This is a new fix for this issue, and replaces the fix made in MySQL 5.0.25 and reverted in 5.0.26. (Bug #21174)
The mysql_create_system_tables script was removed because mysql_install_db no longer uses it.
If a set function
S with an outer
ANSI SQL mode is enabled.
If you use SSL for a client connection, you can tell the client
not to authenticate the server certificate by specifying neither
--ssl-capath. The server still
verifies the client according to any applicable requirements
statements for the client, and it still uses any
values that were passed to server at startup time.
Important Note: The parser accepted invalid code in SQL condition handlers, leading to server crashes or unexpected execution behavior in stored programs. Specifically, the parser permitted a condition handler to refer to labels for blocks that enclose the handler declaration. This was incorrect because block label scope does not include the code for handlers declared within the labeled block.
The parser now rejects this invalid construct, but if you perform a binary upgrade (without dumping and reloading your databases), existing handlers that contain the construct are still invalid and should be rewritten even if they appear to function as you expect.
To find affected handlers, use mysqldump to dump all stored procedures and functions, triggers, and events. Then attempt to reload them into an upgraded server. Handlers that contain illegal label references will be rejected.
For more information about condition handlers and writing them
to avoid invalid jumps, see
DECLARE ... HANDLER Syntax.
NDB tables with indexes whose names
contained space characters were not restored correctly by
ndb_restore (the index names were truncated).
On Solaris, the value of an
table column declared as
BIT(33) was always
Joins on multiple tables containing
BLOB columns could cause data
nodes run out of memory, and to crash with the error
NdbObjectIdMap::expand unable to expand.
MySQL Cluster: Error messages displayed when running in single user mode were inconsistent. (Bug #27021)
When trying to create tables on an SQL node not connected to the
cluster, a misleading error message Table
tbl_name' already exists
was generated. The error now generated is Could not
connect to storage engine.
(Bug #11217, Bug #18676)
MySQL Cluster: mysqld processes would sometimes crash under high load. (Bug #26825)
NDB tables having
MEDIUMINT AUTO_INCREMENT columns were not
restored correctly by ndb_restore, causing
spurious duplicate key errors. This issue did not affect
BIGINT columns with
Some values of
MaxNoOfTables caused the
error Job buffer congestion to occur.
The management client command
was not the node ID of a data node.
ALL STATUS command in the cluster
management client still displays status information for data
nodes only. This is by design. See
Commands in the MySQL Cluster Management Client, for more
MySQL Cluster: When a data node was taking over as the master node, a race condition could sometimes occur as the node was assuming responsibility for handling of global checkpoints. (Bug #27283)
In some cases,
AFTER UPDATE and
AFTER DELETE triggers on
NDB tables that referenced subject
table did not see the results of operation which caused
invocation of the trigger, but rather saw the row as it was
prior to the update or delete operation.
This was most noticeable when an update operation used a
subquery to obtain the rows to be updated. An example would be
UPDATE tbl1 SET col2 = val1 WHERE tbl1.col1 IN (SELECT
col3 FROM tbl2 WHERE c4 = val2) where there was an
AFTER UPDATE trigger on table
tbl1. In such cases, the trigger would fail
The problem occurred because the actual update or delete
operations were deferred to be able to perform them later as one
batch. The fix for this bug solves the problem by disabling this
optimization for a given update or delete if the table has an
AFTER trigger defined for this operation.
It was not possible to set
MySQL Cluster: A race condition could sometimes occur if the node acting as master failed while node IDs were still being allocated during startup. (Bug #27286)
After entering single user mode it was not possible to alter
NDB tables on any SQL nodes
other than the one having sole access to the cluster.
MySQL Cluster: When a cluster data node suffered a “hard” failure (such as a power failure or loss of a network connection) TCP sockets to the missing node were maintained indefinitely. Now socket-based transporters check for a response and terminate the socket if there is no activity on the socket after 2 hours. (Bug #24793)
MySQL Cluster: The failure of a data node while restarting could cause other data nodes to hang or crash. (Bug #27003)
MySQL Cluster: Memory usage of a mysqld process grew even while idle. (Bug #27560)
MySQL Cluster: Condition pushdown did not work with prepared statements. (Bug #26225)
RAND() was called multiple
times inside a stored procedure, the server did not write the
correct random seed values to the binary log, resulting in
Replication: Out-of-memory errors were not reported. Now they are written to the error log. (Bug #26844)
Replication: Improved out-of-memory detection when sending logs from a master server to slaves, and log a message when allocation fails. (Bug #26837)
Replication between master and slave would infinitely retry
binary log transmission where the
max_allowed_packet on the master was larger
than that on the slave if the size of the transfer was between
these two values.
Cluster Replication: Some queries that updated multiple tables were not backed up correctly. (Bug #27748)
write data in the middle of an existing blob value (that is,
updating the value) could overwrite some data past the end of
the data to be changed.
After defining a delete operation (using
a nonexistent primary key of a table having a
TEXT column, invoking
caused the calling application to enter an endless loop rather
than raising an error.
References: See also Bug #27308, Bug #30177.
On Windows, debug builds of mysqlbinlog could fail with a memory error. (Bug #23736)
InnoDB: The first read statement, if served
from the query cache, was not consistent with the
READ COMMITTED isolation
INSERT statement that
should fail due to a column with no default value not being
assigned a value, the statement succeeded with no error if the
column was assigned a value in an
ON DUPLICATE KEY
UPDATE clause, even if that clause was not used.
When using the result of
SEC_TO_TIME() for time value
greater than 24 hours in an
ORDER BY clause,
either directly or through a column alias, the rows were sorted
incorrectly as strings.
GROUP BY on a
caused a server crash when there was at least one empty string
in the column.
DISTINCT could return incorrect results if the select
list contained duplicated columns.
SHOW CREATE VIEW qualified
references to stored functions in the view definition with the
function's database name, even when the database was the default
database. This affected mysqldump (which uses
SHOW CREATE VIEW to dump views)
because the resulting dump file could not be used to reload the
database into a different database.
CREATE VIEW now suppresses the database name for
references to stored functions in the default database.
Duplicate entries were not assessed correctly in a
MEMORY table with a
primary key on a
SQL mode enabled,
LAST_INSERT_ID() could return 0
ON DUPLICATE KEY UPDATE. Additionally, the next rows
inserted (by the same
INSERT with or
ON DUPLICATE KEY UPDATE), would
insert 0 for the auto-generated value if the value for the
AUTO_INCREMENT column was
NULL or missing.
SOUNDEX() returned an invalid
string for international characters in multi-byte character
decimal.h header file was incorrectly
omitted from binary distributions.
OPTIMIZE TABLE might fail on
Windows when it attempts to rename a temporary file to the
original name if the original file had been opened, resulting in
loss of the
A problem in handling of aggregate functions in subqueries caused predicates containing aggregate functions to be ignored during query execution. (Bug #24484)
Evaluation of an
IN() predicate containing a
decimal-valued argument caused a server crash.
(Bug #27513, Bug #27362, CVE-2007-2583)
Passing nested row expressions with different structures to an
IN predicate caused a server crash.
Invalid optimization of pushdown conditions for queries where an outer join was guaranteed to read only one row from the outer table led to results with too few rows. (Bug #26963)
COUNT(*) could return an
incorrect value if the
WHERE clause compared
TEXT column to the
empty string (
''). This happened if the
column contained empty strings and also strings starting with
control characters such as tab or newline.
A result set column formed by concatenation of string literals
was incomplete when the column was produced by a subquery in the
mysql_install_db could terminate with an error after failing to determine that a system table already existed. (Bug #27022)
MBROverlaps() returned incorrect values in
In a view, a column that was defined using a
GEOMETRY function was treated as having the
LONGBLOB data type rather than
In some cases, the optimizer preferred a range or full index scan access method over lookup access methods when the latter were much cheaper. (Bug #19372)
The test for the
MYSQL_OPT_SSL_VERIFY_SERVER_CERT option for
mysql_options() was performed
incorrectly. Also changed as a result of this bug fix: The
arg option for the
mysql_options() C API function
was changed from
char * to
The temporary file-creation code was cleaned up on Windows to improve server stability. (Bug #26233)
mysql_stmt_fetch() did an
invalid memory deallocation when used with the embedded server.
Use of an aggregate function from an outer context as an
a server crash.
Queries containing subqueries with
COUNT(*) aggregated in an outer
context returned incorrect results. This happened only if the
subquery did not contain any references to outer columns.
Row equalities in
WHERE clauses could cause
Some equi-joins containing a
that included a
NOT IN subquery caused a
For a stored procedure containing a
SELECT statement that used a
complicated join with an
ON expression, the
expression could be ignored during re-execution of the
procedure, yielding an incorrect result.
The server did not shut down cleanly. (Bug #27310)
... SELECT where index searches used column prefixes,
insert errors could occur when key value type conversion was
If the server was started with
INFORMATION_SCHEMA tables caused a
On Windows, debug builds of mysqld could fail with heap assertions. (Bug #25765)
enabled, attempting to rename an
to a nonexistent database caused the server to exit.
In out-of-memory conditions, the server might crash or otherwise not report an error to the Windows event log. (Bug #27490)
Incorrect results could be returned for some queries that
contained a select list expression with
BETWEEN together with an
ORDER BY or
GROUP BY on
the same expression using
NOT IN or
Setting a column to
NOT NULL with an
ON DELETE SET NULL clause foreign key crashes
... ON DUPLICATE KEY UPDATE statements on tables
LAST_INSERT_ID() was reset to 0
if no rows were successfully inserted or changed. “Not
changed” includes the case where a row was updated to its
current values, but in that case,
LAST_INSERT_ID() should not be
reset to 0. Now
is reset to 0 only if no rows were successfully inserted or
touched, whether or not touched rows were changed.
References: See also Bug #27210, Bug #27006. This bug was introduced by Bug #19978.
The range optimizer could consume a combinatorial amount of
memory for certain classes of
NULL values in spatial fields caused
excessive memory allocation and crashes on some systems.
A subquery could get incorrect values for references to outer query columns when it contained aggregate functions that were aggregated in outer context. (Bug #27321)
MEMORY table, using a
BTREE index to scan for updatable rows could
lead to an infinite loop.
DELETE FROM (with no
tbl_name ORDER BY
the server did not check whether
col_name was a valid column in the
mysqldump crashed for
MERGE tables if the
-c) option was given.
The range optimizer could cause the server to run out of memory. (Bug #26625)
String truncation upon insertion into an integer or year column did not generate a warning (or an error in strict mode). (Bug #27176, Bug #26359)
In certain situations,
MATCH ... AGAINST
returned false hits for
NULL values produced
LEFT JOIN when no full-text index was
Difficult repair or optimization operations could cause an assertion failure, resulting in a server crash. (Bug #25289)
InnoDB tables having a clustered index
that began with a
VARCHAR column, deleting a record
and then inserting another before the deleted record was purged
could result in table corruption.
Increasing the width of a
column could cause column values to be changed.
INNODB STATUS, the
INFORMATION was not always cleared properly.
DATETIME values in
numeric contexts sometimes did not produce a double
Windows binaries contained no debug symbol file. Now
.pdb files are
included in 32-bit builds for mysqld-nt.exe,
sometimes generated a spurious truncation warning.
Duplicates were not properly identified among (potentially) long
strings used as arguments for
REPAIR TABLE ... USE_FRM with an
ARCHIVE table deleted all records from the
mysqldump could crash or exhibit incorrect
behavior when some options were given very long values, such as
--fields-terminated-by=". The code has been cleaned up to
remove a number of fixed-sized buffers and to be more careful
about error conditions in memory allocation.
some very long