Released on 26 Feb 2007
MySQL 5.1.16 Changelog

This is a new Beta development release, fixing recently discovered bugs.


This Beta release, as any other pre-production release, should not be installed on production level systems or systems with critical data. It is good practice to back up your data before installing any new version of software. Although MySQL has worked very hard to ensure a high level of quality, protect your data by making a backup as you would for any software beta release. Please refer to our bug database at for more details about the individual bugs fixed in this version.


After release, a trigger failure problem was found to have been introduced. (Bug #27006) Users affected by this issue should upgrade to MySQL 5.1.17, which corrects the problem.

This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Enterprise (a commercial MySQL offering). For more details, please see (

  • Functionality Added or Changed

  • Bugs Fixed

Functionality Added or Changed

  • Incompatible Change; Cluster API: The AbortOption type is now a member of the NdbOperation class; its values and behavior have also changed. NdbTransaction::AbortOption can no longer be used, and applications written against the NDB API may need to be rewritten and recompiled to accommodate these changes. For more information about this change, see The NdbOperation::AbortOption Type.

    This also affects the behavior of the NdbTransaction::execute() method, which now reports failure only if the transaction was actually aborted.

  • MySQL Cluster: Previously, when a data node failed to start more than 8 times in succession, this caused a forced shutdown of the cluster. Now, when a data node fails to start 7 consecutive times, the node does not start again until it is started with the --initial option, and a warning to this effect is written to the error log. (Bug #25984)

  • MySQL Cluster: In the event that all cluster management and API nodes are configured with ArbitrationRank = 0, ndb_mgmd now issues the following warning when starting: Cluster configuration warning: Neither MGM nor API nodes are configured with arbitrator, may cause complete cluster shutdown in case of host failure. (Bug #23546)

  • MySQL Cluster: A number of new and more descriptive error messages covering transporter errors were added. (Bug #22025)

  • MySQL Cluster: A new configuration parameter MemReportFrequency enables additional control of data node memory usage. Previously, only warnings at predetermined percentages of memory allocation were given; setting this parameter enables that behavior to be overridden.

  • Cluster API: A new ndb_mgm_get_clusterlog_loglevel() function was added to the MGM API.

  • The localhost anonymous user account created during MySQL installation on Windows now has no global privileges. Formerly this account had all global privileges. For operations that require global privileges, the root account can be used instead. (Bug #24496)

  • In the INFORMATION_SCHEMA REFERENTIAL_CONSTRAINTS table, the UNIQUE_CONSTRAINT_NAME column incorrectly named the referenced table. Now it names the referenced constraint, and a new column, REFERENCED_TABLE_NAME, names the referenced table. (Bug #21713)

  • RAND() now permits nonconstant initializers (such as a column name) as its argument. In this case, the seed is initialized with the value for each invocation of RAND(). (One implication of this is that for equal argument values, RAND() will return the same value each time.) (Bug #6172)

  • Added the --auto-generate-sql-load-type and --auto-generate-sql-write-number options for mysqlslap.

  • The bundled yaSSL library was upgraded to version 1.5.8.

Bugs Fixed

  • Security Fix: Using an INFORMATION_SCHEMA table with ORDER BY in a subquery could cause a server crash.

    We would like to thank Oren Isacson of Flowgate Security Consulting and Stefan Streichsbier of SEC Consult for informing us of this problem. (Bug #24630, Bug #26556, CVE-2007-1420)

  • MySQL Cluster; Partitioning: A query with an IN clause against an NDB table employing explicit user-defined partitioning did not always return all matching rows. (Bug #25821)

  • MySQL Cluster; Replication: (Replication): Under some circumstances, the binary log thread could shut down while the slave SQL thread was still using it. (Bug #26015, Bug #26019)

  • MySQL Cluster; Replication: (Replication): The error message Last_Errno: 4294967295, Error in Write_rows event now supplies a valid error code. (Bug #19896)

  • MySQL Cluster: An inadvertent use of unaligned data caused ndb_restore to fail on some 64-bit platforms, including Sparc and Itanium-2. (Bug #26739)

  • MySQL Cluster: The InvalidUndoBufferSize error used the same error code (763) as the IncompatibleVersions error. InvalidUndoBufferSize now uses its own error code (779). (Bug #26490)

  • MySQL Cluster: The failure of a data node when restarting it with --initial could lead to failures of subsequent data node restarts. (Bug #26481)

  • MySQL Cluster: Takeover for local checkpointing due to multiple failures of master nodes was sometimes incorrectly handled. (Bug #26457)

  • MySQL Cluster: The LockPagesInMainMemory parameter was not read until after distributed communication had already started between cluster nodes. When the value of this parameter was 1, this could sometimes result in data node failure due to missed heartbeats. (Bug #26454)

  • MySQL Cluster: Under some circumstances, following the restart of a management node, all data nodes would connect to it normally, but some of them subsequently failed to log any events to the management node. (Bug #26293)

  • MySQL Cluster: Condition pushdown did not work with prepared statements. (Bug #26225)

  • MySQL Cluster: A memory leak could cause problems during a node or cluster shutdown or failure. (Bug #25997)

  • MySQL Cluster: No appropriate error message was provided when there was insufficient REDO log file space for the cluster to start. (Bug #25801)

  • MySQL Cluster: An UPDATE using an IN clause on an NDB table on which there was a trigger caused mysqld to crash. (Bug #25522)

  • MySQL Cluster: A memory allocation failure in SUMA (the cluster Subscription Manager) could cause the cluster to crash. (Bug #25239)

  • MySQL Cluster: The ndb_size.tmpl file (necessary for using the script) was missing from binary distributions. (Bug #24191)

  • MySQL Cluster: The message Error 0 in readAutoIncrementValue(): no Error was written to the error log whenever SHOW TABLE STATUS was performed on a Cluster table that did not have an AUTO_INCREMENT column.


    This improves on and supersedes an earlier fix that was made for this issue in MySQL 5.1.12.

    (Bug #21033)

  • MySQL Cluster: When a node failed due to there being insufficient disk space to perform a local checkpoint, there was no indication that this was the source of the problem. Such a condition now produces an appropriate error message. (Bug #20121)

  • MySQL Cluster: In the event that cluster backup parameters such as BackupWriteSize were incorrectly set, no appropriate error was issued to indicate that this was the case. (Bug #19146)

  • Replication: If a slave server closed its relay log (for example, due to an error during log rotation), the I/O thread did not recognize this and still tried to write to the log, causing a server crash. (Bug #10798)

  • Disk Data; Cluster API: A delete and a read performed in the same operation could cause one or more data nodes to crash. This could occur when the operation affected more than 5 columns concurrently, or when one or more of the columns was of the VARCHAR type and was stored on disk. (Bug #25794)

  • Cluster API: After defining a delete operation (using NdbOperation::deleteTuple()) on a nonexistent primary key of a table having a BLOB or TEXT column, invoking NdbTransaction::execute() caused the calling application to enter an endless loop rather than raising an error.

    This issue also affected ndb_restore; when restoring tables containing BLOB or TEXT columns, this could cause it to consume all available memory and then crash. (Bug #24028)

    References: See also Bug #27308, Bug #30177.

  • Cluster API: was not versioned. (Bug #13522)

  • Using ORDER BY or GROUP BY could yield different results when selecting from a view and selecting from the underlying table. (Bug #26209)

  • DISTINCT queries that were executed using a loose scan for an InnoDB table that had been emptied caused a server crash. (Bug #26159)

  • A WHERE clause that used BETWEEN for DATETIME values could be treated differently for a SELECT and a view defined as that SELECT. (Bug #26124)

  • Collation for LEFT JOIN comparisons could be evaluated incorrectly, leading to improper query results. (Bug #26017)

  • The WITH CHECK OPTION clause for views was ignored for updates of multiple-table views when the updates could not be performed on fly and the rows to update had to be put into temporary tables first. (Bug #25931)

  • LOAD DATA INFILE did not work with pipes. (Bug #25807)

  • The SEC_TO_TIME() and QUARTER() functions sometimes did not handle NULL values correctly. (Bug #25643)

  • View definitions that used the ! operator were treated as containing the NOT operator, which has a different precedence and can produce different results. . (Bug #25580)

  • An error in the name resolution of nested JOIN ... USING constructs was corrected. (Bug #25575)

  • GROUP BY and DISTINCT did not group NULL values for columns that have a UNIQUE index. . (Bug #25551)

  • The --with-readline option for configure did not work for commercial source packages, but no error message was printed to that effect. Now a message is printed. (Bug #25530)

  • A yaSSL program named test was installed, causing conflicts with the test system utility. It is no longer installed. (Bug #25417)

  • For a UNIQUE index containing many NULL values, the optimizer would prefer the index for col IS NULL conditions over other more selective indexes. . (Bug #25407)

  • An AFTER UPDATE trigger on an InnoDB table with a composite primary key caused the server to crash. (Bug #25398)

  • Passing a NULL value to a user-defined function from within a stored procedure crashes the server. (Bug #25382)

  • perror crashed on some platforms due to failure to handle a NULL pointer. (Bug #25344)

  • mysql.server stop timed out too quickly (35 seconds) waiting for the server to exit. Now it waits up to 15 minutes, to ensure that the server exits. (Bug #25341)

  • A query that contained an EXIST subquery with a UNION over correlated and uncorrelated SELECT queries could cause the server to crash. (Bug #25219)

  • mysql_kill() caused a server crash when used on an SSL connection. (Bug #25203)

  • yaSSL was sensitive to the presence of whitespace at the ends of lines in PEM-encoded certificates, causing a server crash. (Bug #25189)

  • A query with ORDER BY and GROUP BY clauses where the ORDER BY clause had more elements than the GROUP BY clause caused a memory overrun leading to a crash of the server. (Bug #25172)

  • Use of ON DUPLICATE KEY UPDATE defeated the usual restriction against inserting into a join-based view unless only one of the underlying tables is used. (Bug #25123)

  • ALTER TABLE ... ENABLE KEYS acquired a global lock, preventing concurrent execution of other statements that use tables. . (Bug #25044)

  • OPTIMIZE TABLE caused a race condition in the I/O cache. (Bug #25042)

  • A return value of -1 from user-defined handlers was not handled well and could result in conflicts with server code. (Bug #24987)

  • Certain joins using Range checked for each record in the query execution plan could cause the server to crash. (Bug #24776)

  • ALTER TABLE caused loss of CASCADE clauses for InnoDB tables. (Bug #24741)

  • If an ORDER BY or GROUP BY list included a constant expression being optimized away and, at the same time, containing single-row subselects that returned more that one row, no error was reported. If a query required sorting by expressions containing single-row subselects that returned more than one row, execution of the query could cause a server crash. (Bug #24653)

  • For ALTER TABLE, using ORDER BY expression could cause a server crash. Now the ORDER BY clause permits only column names to be specified as sort criteria (which was the only documented syntax, anyway). (Bug #24562)

  • Within stored routines or prepared statements, inconsistent results occurred with multiple use of INSERT ... SELECT ... ON DUPLICATE KEY UPDATE when the ON DUPLICATE KEY UPDATE clause erroneously tried to assign a value to a column mentioned only in its SELECT part. (Bug #24491)

  • Expressions of the form (a, b) IN (SELECT a, MIN(b) FROM t GROUP BY a) could produce incorrect results when column a of table t contained NULL values while column b did not. (Bug #24420)

  • If a prepared statement accessed a view, access to the tables listed in the query after that view was checked in the security context of the view. (Bug #24404)

  • A nested query on a partitioned table returned fewer records than on the corresponding nonpartitioned table, when the subquery affected more than one partition. (Bug #24186)

  • Expressions of the form (a, b) IN (SELECT c, d ...) could produce incorrect results if a, b, or both were NULL. (Bug #24127)

  • Queries that evaluate NULL IN (SELECT ... UNION SELECT ...) could produce an incorrect result (FALSE instead of NULL). (Bug #24085)

  • Some UPDATE statements were slower than in previous versions when the search key could not be converted to a valid value for the type of the search column. (Bug #24035)

  • ISNULL(DATE(NULL)) and ISNULL(CAST(NULL AS DATE)) erroneously returned false. (Bug #23938)

  • Within a stored routine, accessing a declared routine variable with PROCEDURE ANALYSE() caused a server crash. (Bug #23782)

  • For an InnoDB table with any ON DELETE trigger, TRUNCATE TABLE mapped to DELETE and activated triggers. Now a fast truncation occurs and triggers are not activated. .


    As a result of this fix, TRUNCATE TABLE now requires the DROP privilege rather than the DELETE privilege.

    (Bug #23556)

  • With ONLY_FULL_GROUP_BY enabled, the server was too strict: Some expressions involving only aggregate values were rejected as nonaggregate (for example, MAX(a) - MIN(a)). (Bug #23417)

  • The arguments to the ENCODE() and the DECODE() functions were not printed correctly, causing problems in the output of EXPLAIN EXTENDED and in view definitions. (Bug #23409)

  • Some queries against INFORMATION_SCHEMA that used subqueries failed. . (Bug #23299)

  • readline detection did not work correctly on NetBSD. (Bug #23293)

  • The number of setsockopt() calls performed for reads and writes to the network socket was reduced to decrease system call overhead. (Bug #22943)

  • Storing values specified as hexadecimal values 64 or more bits long in BIT(64), BIGINT, or BIGINT UNSIGNED columns did not raise any warning or error if the value was out of range. (Bug #22533)

  • Type conversion errors during formation of index search conditions were not correctly checked, leading to incorrect query results. (Bug #22344)

  • For the IF() and COALESCE() function and CASE expressions, large unsigned integer values could be mishandled and result in warnings. (Bug #22026)

  • Inserting DEFAULT into a column with no default value could result in garbage in the column. Now the same result occurs as when inserting NULL into a NOT NULL column. (Bug #20691)

  • Indexes disabled with ALTER TABLE ... DISABLE KEYS could in some cases be used by specifying FORCE INDEX. (Bug #20604)

  • If a duplicate key value was present in the table, INSERT ... ON DUPLICATE KEY UPDATE reported a row count indicating that a record was updated, even when no record actually changed due to the old and new values being the same. Now it reports a row count of zero. (Bug #19978)

    References: See also Bug #27006, Bug #27033, Bug #27210.

  • ORDER BY values of the DOUBLE or DECIMAL types could change the result returned by a query. (Bug #19690)

  • The readline library wrote to uninitialized memory, causing mysql to crash. (Bug #19474)

  • Use of already freed memory caused SSL connections to hang forever. (Bug #19209)

  • The server might fail to use an appropriate index for DELETE when ORDER BY, LIMIT, and a nonrestricting WHERE are present. (Bug #17711)

  • The optimizer used a filesort rather than a const table read in some cases when the latter was possible. (Bug #16590)

  • To enable installation of MySQL RPMs on Linux systems running RHEL 4 (which includes SE-Linux) additional information was provided to specify some actions that are permitted to the MySQL binaries. (Bug #12676)

  • CONNECTION is no longer treated as a reserved word. (Bug #12204)

  • The presence of ORDER BY in a view definition prevented the MERGE algorithm from being used to resolve the view even if nothing else in the definition required the TEMPTABLE algorithm. (Bug #12122)