Documentation Home
MySQL 5.0 Release Notes
Related Documentation Download these Release Notes
PDF (US Ltr) - 2.1Mb
PDF (A4) - 2.1Mb
EPUB - 0.6Mb

MySQL 5.0 Release Notes  /  Changes in MySQL 5.0.21 (2006-05-02)

Changes in MySQL 5.0.21 (2006-05-02)

This is a bugfix release for the current production release family.

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 (

This MySQL 5.0.21 release includes the patches for recently reported security vulnerabilites in the MySQL client/server protocol. We would like to thank Stefano Di Paola for finding and reporting these to us.

Functionality Added or Changed

  • Security Enhancement: Added the global max_prepared_stmt_count system variable to limit the total number of prepared statements in the server. This limits the potential for denial-of-service attacks based on running the server out of memory by preparing huge numbers of statements. The current number of prepared statements is available through the prepared_stmt_count system variable. (Bug #16365)

  • MySQL Cluster: It is now possible to perform a partial start of a cluster. That is, it is now possible to bring up the cluster without first running ndbd --initial on all configured data nodes. (Bug #18606)

  • MySQL Cluster: It is now possible to install MySQL with Cluster support to a nondefault location and change the search path for font description files using either the --basedir or --character-sets-dir options. (Previously in MySQL 5.0, ndbd searched only the default path for character sets.)

  • MySQL Cluster: Added the --nowait-nodes startup option for ndbd, making it possible to skip specified nodes without waiting for them to start when starting the cluster. See ndbd — The MySQL Cluster Data Node Daemon.

  • Packaging: The MySQL-shared-compat-5.0.X-.i386.rpm shared compatibility RPMs no longer contain libraries for MySQL 5.1. This avoids a conflict because the 5.0 and 5.1 libraries share the same soname number. They now contain libraries for MySQL 3.23, 4.0, 4.1, and 5.0 only. (Bug #19288)

  • The default for the innodb_thread_concurrency system variable was changed to 8. (Bug #15868)

  • Server and clients ignored the --sysconfdir option that was passed to configure. The directory specified by this option, if set, now is used as one of the standard locations in which to look for option files. (Bug #15069)

  • In result set metadata, the MYSQL_FIELD.length value for BIT columns now is reported in number of bits. For example, the value for a BIT(9) column is 9. (Formerly, the value was related to number of bytes.) (Bug #13601)

Bugs Fixed

  • Security Fix: Invalid arguments to DATE_FORMAT() caused a server crash. Thanks to Jean-David Maillefer for discovering and reporting this problem to the Debian project and to Christian Hammers from the Debian Team for notifying us of it. (Bug #20729, CVE-2006-3469)

  • Security Fix: A malicious client, using specially crafted invalid COM_TABLE_DUMP packets was able to trigger an exploitable buffer overflow on the server. Thanks to Stefano Di Paola for finding and reporting this bug. (CVE-2006-1518)

  • Security Fix: A malicious client, using specially crafted invalid login or COM_TABLE_DUMP packets was able to read uninitialized memory, which potentially, though unlikely in MySQL, could have led to an information disclosure. (, ) Thanks to Stefano Di Paola for finding and reporting this bug. (CVE-2006-1516, CVE-2006-1517)

  • MySQL Cluster: A simultaneous DROP TABLE and table update operation utilising a table scan could trigger a node failure. (Bug #18597)

  • MySQL Cluster: When multiple node restarts were attempted without permitting each restart to complete, the error message returned was Array index out of bounds rather than Too many crashed replicas. (Bug #18349)

  • MySQL Cluster: In a 2-node cluster with a node failure, restarting the node with a low value for StartPartialTimeout could cause the cluster to come up partitioned (split-brain issue).

    A similar issue could occur when the cluster was first started with a sufficiently low value for this parameter. (Bug #16447, Bug #18612)

  • MySQL Cluster: On systems with multiple network interfaces, data nodes would get stuck in startup phase 2 if the interface connecting them to the management server was working on node startup while the interface interconnecting the data nodes experienced a temporary outage. (Bug #15695)

  • MySQL Cluster: On slow networks or CPUs, the management client SHOW command could sometimes erroneously show all data nodes as being master nodes belonging to nodegroup 0. (Bug #15530)

  • MySQL Cluster: TRUNCATE TABLE did not reset the AUTO_INCREMENT counter for MyISAM tables when issued inside a stored procedure.


    This bug did not affect InnoDB tables.

    In addition, TRUNCATE TABLE does not reset the AUTO_INCREMENT counter for NDB tables regardless of when it is called.

    (Bug #14945)

    References: See also Bug #18864.

  • MySQL Cluster: Unused open handlers for tables in which the metadata had changed were not properly closed. This could result in stale results from NDB tables following an ALTER TABLE statement. (Bug #13228)

  • MySQL Cluster: Uninitialized internal variables could lead to unexpected results. (Bug #11033, Bug #11034)

  • MySQL Cluster: When attempting to create an index on a BIT or BLOB column, Error 743: Unsupported character set in table or index was returned instead of Error 906: Unsupported attribute type in index.

  • Replication: CREATE VIEW statements would not be replicated to the slave if the --replicate-wild-ignore-table rule was enabled. (Bug #18715)

  • Replication: Updating a field value when also requesting a lock with GET_LOCK() would cause slave servers in a replication environment to terminate. (Bug #17284)

  • InnoDB could read a delete mark from its system tables incorrectly. (Bug #19217)

  • Corrected a syntax error in (Bug #19190)

  • Index corruption could occur in cases when key_cache_block_size was not a multiple of the myisam-block-size value (for example, with --key_cache_block_size=1536 and --myisam-block-size=1024). (Bug #19079)

  • The optimizer could cause a server crash or use a nonoptimal subset of indexes when evaluating whether to use Index Merge/Intersection variant of index_merge optimization. (Bug #19021)

  • A missing DBUG_RETURN() caused the server to emit a spurious error message: missing DBUG_RETURN or DBUG_VOID_RETURN macro in function "open_table". (Bug #18964)

  • Creating a table in an InnoDB database with a column name that matched the name of an internal InnoDB column (including DB_ROW_ID, DB_TRX_ID, DB_ROLL_PTR and DB_MIX_ID) would cause a crash. MySQL now returns Error 1005 Cannot create table with errno set to -1. (Bug #18934)

  • MySQL would not compile on Linux distributions that use the tinfo library. (Bug #18912)

  • mysql_reconnect() sent a SET NAMES statement to the server, even for pre-4.1 servers that do not understand the statement. (Bug #18830)

  • For a reference to a nonexistent stored function in a stored routine that had a CONTINUE handler, the server continued as though a useful result had been returned, possibly resulting in a server crash. (Bug #18787)

  • For single-SELECT union constructs of the form (SELECT ... ORDER BY order_list1 [LIMIT n]) ORDER BY order_list2, the ORDER BY lists were concatenated and the LIMIT clause was ignored. (Bug #18767)

  • Conversion of a number to a CHAR UNICODE string returned an invalid result. (Bug #18691)

  • UNCOMPRESS(NULL) could cause subsequent UNCOMPRESS() calls to return NULL for legal non-NULL arguments. (Bug #18643)

  • If the second or third argument to BETWEEN was a constant expression such as '2005-09-01 - INTERVAL 6 MONTH and the other two arguments were columns, BETWEEN was evaluated incorrectly. (Bug #18618)

  • A LOCK TABLES statement that failed could cause MyISAM not to update table statistics properly, causing a subsequent CHECK TABLE to report table corruption. (Bug #18544)

  • The yaSSL library returned a cipher list in a manner incompatible with OpenSSL. (Bug #18399)

  • InnoDB did not use a consistent read for CREATE ... SELECT when innodb_locks_unsafe_for_binlog was set. (Bug #18350)

  • DROP DATABASE did not drop stored routines associated with the database if the database name was longer than 21 characters. (Bug #18344)

  • The euro sign () was not stored correctly in columns using the latin1_german1_ci or latin1_general_ci collation. (Bug #18321)

  • A recent change caused the mysql client not to display NULL values correctly and to display numeric columns left-justified rather than right-justified. The problems have been corrected. (Bug #18265)

  • COUNT(*) on a MyISAM table could return different results for the base table and a view on the base table. (Bug #18237)

  • EXTRACT(QUARTER FROM date) returned unexpected results. (Bug #18100)

  • Executing SELECT on a large table that had been compressed within myisampack could cause a crash. (Bug #17917)

  • Casting a string to DECIMAL worked, but casting a trimmed string (using LTRIM() or RTRIM()) resulted in loss of decimal digits. (Bug #17043)

  • mysql-test-run could not be run as root. (Bug #17002)

  • Queries of the form SELECT DISTINCT timestamp_column WHERE date_function(timestamp_col) = constant did not return all matching rows. (Bug #16710)

  • IA-64 RPM packages for Red Hat and SuSE Linux that were built with the icc compiler incorrectly depended on icc runtime libraries. (Bug #16662)

  • MySQL-shared-compat-5.0.13-0.i386.rpm, MySQL-shared-compat-5.0.15-0.i386.rpm, MySQL-shared-compat-5.0.18-0.i386.rpm, MySQL-shared-compat-5.0.19-0.i386.rpm, MySQL-shared-compat-5.0.20-0.i386.rpm, and MySQL-shared-compat-5.0.20a-0.i386.rpm incorrectly depended on glibc 2.3 and could not be installed on a glibc 2.2 system. (Bug #16539)

  • The presence of multiple equalities in a condition after reading a constant table could cause the optimizer not to use an index. This resulted in certain queries being much slower than in MySQL 4.1. (Bug #16504)

  • Within a trigger, CONNECTION_ID() did not return the connection ID of the thread that caused the trigger to be activated. (Bug #16461)

  • For tables created in a MySQL 4.1 installation upgraded to MySQL 5.0 and up, multiple-table updates could update only the first matching row. (Bug #16281)

  • A query using WHERE (column_1, column_2) IN ((value_1, value_2)[, (..., ...), ...]) would return incorrect results. (Bug #16248)

  • For mysql.server, if the basedir option was specified after datadir in an option file, the setting for datadir was ignored and assumed to be located under basedir. (Bug #16240)

  • If the first argument to BETWEEN was a DATE or TIME column of a view and the other arguments were constants, BETWEEN did not perform conversion of the constants to the appropriate temporary type, resulting in incorrect evaluation. (Bug #16069)

  • After calling FLUSH STATUS, the max_used_connections variable did not increment for existing connections and connections which use the thread cache. (Bug #15933)

  • Lettercase in database name qualifiers was not consistently handled properly in queries when lower_case_table_names was set to 1. (Bug #15917)

  • DELETE and UPDATE statements that used large NOT IN (value_list) clauses could use large amounts of memory. (Bug #15872)

  • InnoDB failure to release an adaptive hash index latch could cause a server crash if the query cache was enabled. (Bug #15758)

  • LAST_INSERT_ID() in a stored function or trigger returned zero. . (Bug #15728)

  • DELETE with LEFT JOIN for InnoDB tables could crash the server if innodb_locks_unsafe_for_binlog was enabled. (Bug #15650)

  • When running a query that contained a GROUP_CONCAT(SELECT GROUP_CONCAT(...) ), the result was NULL except in the ROLLUP part of the result, if there was one. (Bug #15560)

  • Use of CONVERT_TZ() in a view definition could result in spurious syntax or access errors. (Bug #15153)

  • CAST(double AS SIGNED INT) for large double values outside the signed integer range truncated the result to be within range, but the result sometimes had the wrong sign, and no warning was generated. (Bug #15098)

  • For InnoDB tables, an expression of the form col_name BETWEEN col_name2 - INTERVAL x DAY AND col_name2 + INTERVAL x DAY when used in a join returned incorrect results. (Bug #14360)

  • Prevent recursive views caused by using RENAME TABLE on a view after creating it. (Bug #14308)

  • INSERT DELAYED into a view caused an infinite loop. (Bug #13683)

  • Avoid trying to include <asm/atomic.h> when it doesn't work in C++ code. (Bug #13621)

  • Within stored routines, user names were parsed incorrectly if they were enclosed within quotation marks. (Bug #13310)

  • The server was always built as though --with-extra-charsets=complex had been specified. (Bug #12076)

Download these Release Notes
PDF (US Ltr) - 2.1Mb
PDF (A4) - 2.1Mb
EPUB - 0.6Mb