Version Historie vonMySQL Server 5.1.19 (x64)

Functionality added or changed:

  • Incompatible Change: INSERT DELAYED is now downgraded to a normal INSERT if the statement uses functions that access tables or triggers, or that is called from a function or a trigger.

This was done to resolve the following interrelated issues:

    • The server could abort or deadlock for INSERT DELAYED statements for which another insert was performed implicitly (for example, using a stored function that inserted a row).
    • A trigger using an INSERT DELAYED caused the error INSERT DELAYED can't be used with table ... because it is locked with LOCK TABLES although the target table was not actually locked.
    • INSERT DELAYED into a table with a BEFORE INSERT or AFTER INSERT trigger gave an incorrect NEW pseudocolumn value and caused the server to deadlock or abort.

(Bug #21483)
See also Bug #20497, Bug #21714.

  • MySQL Cluster: Formerly, restoring a cluster backup made on a MySQL 5.0 Cluster to a 5.1 cluster using a 5.1 version of ndb_restore did not resize VARCHAR columns as might be expected; now, the default behavior of ndb_restore in such cases is to resize the VARCHAR columns. This changed default behavior can be overridden using the --no-upgrade (or -u) option when invoking ndb_restore. (Bug #22240)
  • The BLACKHOLE storage engine now supports INSERT DELAYED. Previously, INSERT DELAYED statements for BLACKHOLE tables were not supported, and caused the server to crash. (Bug #27998)
  • A new status variable, Com_call_procedure, indicates the number of calls to stored procedures. (Bug #27994)
  • The BLACKHOLE storage engine now supports LOCK TABLES and UNLOCK TABLES. (Bug #26241)
  • The data type used for the VARIABLE_VALUE column of the following INFORMATION_SCHEMA tables has been changed to VARCHAR:

For more information, see Section 19.24, “The INFORMATION_SCHEMA GLOBAL_STATUS and SESSION_STATUS Tables”, and Section 19.25, “The INFORMATION_SCHEMA GLOBAL_VARIABLES and SESSION_VARIABLES Tables”.
See also Bug #26994.


Bugs fixed:

  • Security Fix: UDFs are supposed to be loadable only from the plugin directory, but this restriction was not being enforced. (Bug #28341)
  • Security Fix: Use of a view could enable a user to gain update privileges for tables in other databases. (Bug #27878, CVE-2007-3782)
  • MySQL Cluster: When an API node sent more than 1024 signals in a single batch, NDB would process only the first 1024 of these, and then hang. (Bug #28443)
  • MySQL Cluster: A delay in obtaining AUTO_INCREMENT IDs could lead to excess temporary errors. (Bug #28410)
  • MySQL Cluster: Local checkpoint files relating to dropped NDB tables were not removed. (Bug #28348)
  • MySQL Cluster: Multiple operations involving deletes followed by reads were not handled correctly.

This issue could also affect MySQL Cluster Replication.
(Bug #28276)

  • MySQL Cluster: Repeated insertion of data generated by mysqldump into NDB tables could eventually lead to failure of the cluster. (Bug #27437)
  • MySQL Cluster: Restarting a data node caused SQL nodes to log repeatedly and unnecessarily the status of the event buffer, causing a memory leak of approximately 4 MB for each mysqld process each time this occurred.

(This issue was known to occur in MySQL 5.1.16 and later only.) (Bug #27292)

  • MySQL Cluster: ndb_mgmd failed silently when the cluster configuration file contained invalid [tcp] entries. (Bug #27207)
  • MySQL Cluster: ndb_connectstring did not appear in the output of SHOW VARIABLES. (Bug #26675)
  • MySQL Cluster: A failure to release internal resources following an error could lead to problems with single user mode. (Bug #25818)
  • MySQL Cluster: DDL operations were not supported on a partially started cluster. (Bug #24631)
  • Disk Data: Extremely large inserts into Disk Data tables could lead to data node failure in some circumstances. (Bug #27942)
  • Cluster API: In a multi-operation transaction, a delete operation followed by the insertion of an implicit NULL failed to overwrite an existing value. (Bug #20535)
  • Some ALTER TABLE statements that worked in MySQL 5.0 did not work in 5.1. (Bug #28415)
  • mysql_upgrade failed if certain SQL modes were set. Now it sets the mode itself to avoid this problem. (Bug #28401)
  • A query with a NOT IN subquery predicate could cause a crash when the left operand of the predicate evaluated to NULL. (Bug #28375)
  • A buffer overflow could occur when using DECIMAL columns on Windows operating systems. (Bug #28361)
  • libmysql.dll could not be dynamically loaded on Windows. (Bug #28358)
  • Grouping queries with correlated subqueries in WHERE conditions could produce incorrect results. (Bug #28337)
  • EXPLAIN for a query on an empty table immediately after its creation could result in a server crash. (Bug #28272)
  • Comparing a DATETIME column value with a user variable yielded incorrect results. (Bug #28261)
  • Portability problems caused by use of isinf() were corrected. (Bug #28240)
  • When dumping procedures, mysqldump --compact generated output that restored the session variable sql_mode without first capturing it. When dumping routines, mysqldump --compact neither set nor retrieved the value of sql_mode. (Bug #28223)
  • Comparison of the string value of a date showed as unequal to CURTIME(). Similar behavior was exhibited for DATETIME values. (Bug #28208)
  • For InnoDB, in some rare cases the optimizer preferred a more expensive ref access to a less expensive range access. (Bug #28189)
  • Comparisons of DATE or DATETIME values for the IN() function could yield incorrect results. (Bug #28133)
  • It was not possible to use the value –9223372036854775808 (that is, –MAXVALUE + 1) when specifying a LIST partition. (Bug #28005)
  • The server could hang for INSERT IGNORE ... ON DUPLICATE KEY UPDATE if an update failed. (Bug #28000)
  • CAST() to DECIMAL did not check for overflow. (Bug #27957)
  • The second execution of a prepared statement from a UNION query with ORDER BY RAND() caused the server to crash. This problem could also occur when invoking a stored procedure containing such a query. (Bug #27937)
  • Views ignored precision for CAST() operations. (Bug #27921)
  • Changes to some system variables should invalidate statements in the query cache, but invalidation did not happen. (Bug #27792)
  • LOAD DATA did not use CURRENT_TIMESTAMP as the default value for a TIMESTAMP column for which no value was provided. (Bug #27670)
  • Selecting MIN() on an indexed column that contained only NULL values caused NULL to be returned for other result columns. (Bug #27573)
  • Using a TEXT local variable in a stored routine in an expression such as SET var = SUBSTRING(var, 3) produced an incorrect result. (Bug #27415)
  • The error message for error number 137 did not report which database/table combination reported the problem. (Bug #27173)
  • A large filesort could result in a division by zero error and a server crash. (Bug #27119)
  • Some InnoDB variables were missing from the output of mysqld --verbose --help. (Bug #26987)
  • Flow control optimization in stored routines could cause exception handlers to never return or execute incorrect logic. (Bug #26977)
  • Some test suite files were missing from some MySQL-test packages. (Bug #26609)
  • Running CHECK TABLE concurrently with a SELECT, INSERT or other statement on Windows could corrupt a MyISAM table. (Bug #25712)
  • Concurrent execution of CREATE TABLE ... SELECT and other statements involving the target table suffered from various race conditions, some of which might have led to deadlocks. (Bug #24738)
  • An attempt to execute CREATE TABLE ... SELECT when a temporary table with the same name already existed led to the insertion of data into the temporary table and creation of an empty nontemporary table. (Bug #24508)
  • A statement of the form CREATE TABLE IF NOT EXISTS t1 SELECT f1() AS i failed with a deadlock error if the stored function f1() referred to a table with the same name as the to-be-created table. Now it correctly produces a message that the table already exists. (Bug #22427)
  • Quoted labels in stored routines were mishandled, rendering the routines unusable. (Bug #21513)
  • CURDATE() is less than NOW(), either when comparing CURDATE() directly (CURDATE() < NOW() is true) or when casting CURDATE() to DATE (CAST(CURDATE() AS DATE) < NOW() is true). However, storing CURDATE() in a DATE column and comparing col_name < NOW() incorrectly yielded false. This is fixed by comparing a DATE column as DATETIME for comparisons to a DATETIME constant. (Bug #21103)
  • CREATE TABLE IF NOT EXISTS ... SELECT caused a server crash if the target table already existed and had a BEFORE INSERT trigger. (Bug #20903)
  • Deadlock occurred for attempts to execute CREATE TABLE IF NOT EXISTS ... SELECT when LOCK TABLES had been used to acquire a read lock on the target table. (Bug #20662, Bug #15522)
  • For dates with 4-digit year parts less than 200, an incorrect implicit conversion to add a century was applied for date arithmetic performed with DATE_ADD(), DATE_SUB(), + INTERVAL, and - INTERVAL. (For example, DATE_ADD('0050-01-01 00:00:00', INTERVAL 0 SECOND) became '2050-01-01 00:00:00'.) (Bug #18997)
  • Changing the size of a key buffer that is under heavy use could cause a server crash. The fix partially removes the limitation that LOAD INDEX INTO CACHE fails unless all indexes in a table have the same block size. Now the statement fails only if IGNORE LEAVES is specified. (Bug #17332)