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

MySQL 5.1 Release Notes  /  Changes in MySQL 5.1.10 (Not released)

Changes in MySQL 5.1.10 (Not released)


This was an internal release only, and no binaries were published.

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

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

  • 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 restore a MySQL Cluster backup between big-endian and little-endian machines. (Bug #19255)

  • 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.1, ndbd searched only the default path for character sets.)

  • Packaging: The MySQL-shared-compat-5.1.X-.i386.rpm shared compatibility RPMs no longer contain libraries for MySQL 5.0. 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.1. (Bug #19288)

  • SQL syntax for prepared statements now supports ANALYZE TABLE, OPTIMIZE TABLE, and REPAIR TABLE. (Bug #19308)

  • The ONLY_FULL_GROUP_BY SQL mode now also applies to the HAVING clause. That is, columns not named in the GROUP BY clause cannot be used in the HAVING clause if not used in an aggregate function. (Bug #18739)

  • XPath expressions passed to the ExtractValue() and UpdateXML() functions can now include the colon character (:). This enables use of these functions with XML which employs namespaces. (Bug #18170)

  • On Windows, some names such as nul, prn, and aux could not be used as file names because they are reserved as device names. These are now permissible names in MySQL. They are encoded by appending @@@ to the name when the server creates the corresponding file or directory. This occurs on all platforms for portability of the corresponding database object between platforms. (Bug #17870)

  • The bundled yaSSL library was upgraded to version 1.3.5. This improves handling of certain problems with SSL-related command options. (Bug #17737)

  • You must now have the DROP privilege to drop table partitions. (Bug #17139)

  • 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)

  • Added the have_dynamic_loading system variable that indicates whether the server supports dynamic loading of plugins.

  • The mysql_upgrade command has been converted from a shell script to a C program, so it is available on non-Unix systems such as Windows. This program should be run for each MySQL upgrade. See mysql_upgrade — Check and Upgrade MySQL Tables.

  • Added the KEY_BLOCK_SIZE table option and index option. This can be used in CREATE TABLE, ALTER TABLE, and CREATE INDEX statements to provide a hint to the storage engine about the size to use for index key blocks. The engine is permitted to change the value if necessary.

  • Added the REFERENTIAL_CONSTRAINTS table to INFORMATION_SCHEMA. It provides information about foreign keys.

  • The following statements now cause an implicit commit: ANALYZE TABLE, CHECK TABLE, OPTIMIZE TABLE, and REPAIR TABLE.

  • Binary distributions that include SSL support now are built using yaSSL when possible.

  • Added --debug option to Instance Manager.

  • Added the sql_big_selects system variable to the output of SHOW VARIABLES.

Bugs Fixed

  • Security Fix: A NUL byte within a comment in a statement string caused the rest of the string not to be written to the query log, permitting logging to be bypassed. (Bug #17667, CVE-2006-0903)

  • 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; Replication: (Replication): Delete and update of rows in a table without a primary key failed on the slave. (Bug #17400)

  • MySQL Cluster: A 5.1.6 or newer server did not read local checkpoints recorded by any other 5.1 version, thus preventing a system restart following an upgrade. (Bug #19333)

  • MySQL Cluster: Concurrent INSERT and ROLLBACK statements from different connections could cause node failures. (Bug #19245)

  • MySQL Cluster: (Disk Data): Running an INSERT and a DELETE on a Disk Data table in the same transaction could cause a deadlock. (Bug #19244)

  • MySQL Cluster: Starting mysqld without --log-bin caused DDL statements on NDB tables to time out. (Bug #19214)

  • MySQL Cluster: started NDB even for test cases that did not need it. (Bug #19083)

  • MySQL Cluster: Stopping multiple nodes could cause node failure handling not to be completed. (Bug #19039)

  • MySQL Cluster: The Cluster binlog mysqld accepted updates even though the binary log was not set up, which could lead to updates missing from the binary log. (Bug #18932)

  • MySQL Cluster: mysqld could crash when attempting an update if the cluster had failed previously. (Bug #18798)

  • MySQL Cluster: An INSERT or UPDATE of more than 128 bytes of data in a 4-replica cluster could cause data nodes to crash. (Bug #18622)

  • MySQL Cluster: (Disk Data): CREATE LOGFILE GROUP accepted values other than NDB or NDBCLUSTER in the ENGINE clause. (Bug #18604)

  • MySQL Cluster: (Disk Data): Omitting the required ENGINE clause from a CREATE LOGFILE GROUP or CREATE TABLESPACE statement caused the server to crash. An appropriate error message is now returned instead. (Bug #18603)

  • MySQL Cluster: Queries using ORDER BY pkN failed against a LIST-partitioned Cluster table having a multi-column primary key, where pkN represents one of the columns making up the primary key. (Bug #18598)

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

  • MySQL Cluster: Fragment IDs were not logged correctly, causing ndb_restore_log to fail. (Bug #18594)

  • MySQL Cluster: Repeated use of the SHOW and ALL STATUS commands in the ndb_mgm client could cause the mgmd process to crash. (Bug #18591)

  • MySQL Cluster: ndbd sometimes failed to start with the error Node failure handling not completed following a graceful restart. (Bug #18550)

  • MySQL Cluster: ndb_restore failed to restore a backup made from a 5.0 cluster to a 5.1 cluster. (Bug #18210)

  • MySQL Cluster: Adding an index to an unsigned integer column did not work correctly. (Bug #18133)

  • MySQL Cluster: A SELECT from an NDB table with ORDER BY indexed_column and a LIMIT clause failed following ALTER TABLE. (Bug #18094)

  • MySQL Cluster: mysqldump included in its output data from the internal cluster database. (Bug #17840)

  • MySQL Cluster: Backups could fail for large clusters with many tables, where the number of tables approached MaxNoOfTables. (Bug #17607)

  • MySQL Cluster: Some queries having a WHERE clause of the form c1=val1 OR c2 LIKE 'val2' were not evaluated correctly. (Bug #17421)

  • MySQL Cluster: An issue with ndb_mgmd prevented more than 27 mysqld processes from connecting to a single cluster at one time. (Bug #17150)

  • 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: Performing multiple ALTER TABLE operations on the same NDB table from different mysqld processes in the same cluster led to schema versioning errors when trying to access the table again following the restart of one of the mysqld processes. (Bug #16445)

  • 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: 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.

  • Partitioning; Cluster Replication: Attempting to create an index using multiple columns on an explicitly partitioned table in a replicated Cluster database could cause the master mysqld process to crash. (Bug #18284)

  • Replication; Cluster Replication: An issue with replication caused a mysqld connected to a replicated cluster to crash when entering single user mode. (Bug #18535)

  • 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)

  • Replication: The binary log would create an incorrect DROP query when creating temporary tables during replication. (Bug #17263)

  • Disk Data: Issuing a CREATE LOGFILE GROUP statement during the drop of an NDB table would cause database corruption. (Bug #19141)

  • Disk Data: Concurrent table schema operations and operations on log file groups, tablespaces, data files, or undo files could lead to data node failures. (Bug #18575)

  • Cluster Replication: Using the --binlog-do-db option caused problems with CREATE TABLE on the cluster acting as the replication master. (Bug #19492)

  • Cluster Replication: When taking part in Cluster replication of tables containing BLOB columns, mysqld falsely reported a large memory leak in the replication buffers when there was none. (Bug #19247)

  • Cluster Replication: Trying to restore the apply_status table from a 5.0 cluster backup failed on a 5.1 server. (Bug #18935)

  • Cluster API: Passing a nonexistent index name to NdbIndexScanOperation::setBound() caused a segmentation fault. (Bug #19088)

  • A compatibility issue with NPTL (Native POSIX Thread Library) on Linux could result in a deadlock with FLUSH TABLES WITH READ LOCK under some conditions. (Bug #20048)

  • Some outer joins were incorrectly converted to inner joins. (Bug #19816)

    References: This bug was introduced by Bug #17146.

  • A view definition that referred to an alias in the HAVING clause could be saved in the .frm file with the alias replaced by the expression that it referred to, causing failure of subsequent SELECT * FROM view_name statements. (Bug #19573)

  • mysql displayed NULL for strings that are empty or contain only spaces. (Bug #19564)

  • Selecting from a view that used GROUP BY on a nonconstant temporal interval (such as DATE(col) + INTERVAL TIME_TO_SEC(col) SECOND could cause a server crash. (Bug #19490)

  • An outer join of two views that was written using { OJ ... } syntax could cause a server crash. (Bug #19396)

  • An issue with file handling in the partitioning code could cause mysqld to crash when started and then stopped within a very short period of time. (Bug #19313)

  • myisamchk and myisam_ftdump should permit either table names or .MYI file names as arguments, but permitted only table names. (Bug #19220)

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

  • Executing a CREATE EVENT statement could cause 100% CPU usage. (Bug #19170)

  • Eliminated some memory corruption problems that resultsd in double free or corruption errors and a server crash. (Bug #19154)

  • Attempting to set the default value of an ENUM or SET column to NULL caused a server crash. (Bug #19145)

  • 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)

  • Instance Manager now finds the version numbers, so that it works properly when the executable name isn't the same as what the Instance Manager launched (such as when wrapping a libtool-wrapped executable from the source tree). (Bug #19059)

  • Some fast ALTER TABLE operations (requiring no temporary table) did not work for all tables. (Bug #19011)

  • Successive ALTER TABLE ... DROP PARTITION statements on the same subpartitioned table could eventually cause the server to crash. (Bug #18962)

  • 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)

  • The parser leaked memory when its stack needed to be extended. (Bug #18930)

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

  • The server attempted to flush uninitialized log tables during SIGHUP processing, causing a crash. (Bug #18848)

  • 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)

  • Inserts failed with duplicate key errors on a table partitioned using an AUTO_INCREMENT column for the partitioning key. (Bug #18753, Bug #18552)

  • It was possible to create a RANGE-partitioned table with a partition defined using the clause VALUES LESS THAN (NULL), even though such a partition could never contain any values whatsoever. (Bug #18752)

  • Delimited identifiers for partitions were not being treated the same as delimited identifiers for other database objects (such as tables and columns) with regard to permitted characters. (Bug #18750)

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

  • 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)

  • LOAD DATA FROM MASTER failed when trying to load the INFORMATION_SCHEMA database from the master, because the INFORMATION_SCHEMA system database would already exist on the slave. (Bug #18607)

  • Running an ALTER TABLE on a partitioned table simultaneously experiencing a high number of concurrent DML statements could crash the server. (Bug #18572)

  • 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)

  • mysqltest incorrectly interpreted some ER_xxx error names given in the error command. (Bug #18495)

  • InnoDB: ALTER TABLE to add or drop a foreign key for an InnoDB table had no effect. (Bug #18477)

  • 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)

  • A query on a table partitioned or subpartitioned by HASH did not display all results when using a WHERE condition involving a column used in the hashing expression. (Bug #18329, Bug #18423)

  • In mysqltest, --sleep=0 had no effect. Now it correctly causes sleep commands in test case files to sleep for 0 seconds. (Bug #18312)

  • The ExtractValue() function did not return character data within <![CDATA[]]> as expected. (Bug #18285)

  • 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)

  • Updates to a MEMORY table caused the size of BTREE indexes for the table to increase. (Bug #18160)

  • A failed ALTER TABLE operation could fail to clean up a temporary .frm file. (Bug #18129)

  • Event-creation statements enclosed in multi-line comments using /*!version_number ... */ syntax were not parsed correctly. (Bug #18078)

  • SELECT DISTINCT queries sometimes returned only the last row. (Bug #18068)

  • InnoDB: A DELETE followed by an INSERT and then by an UPDATE on a partitioned InnoDB table caused subsequent queries to return incorrect results. (Bug #17992)

  • It was possible to use trailing spaces in the names of partitions and subpartitions. Attempting to do so now raises the error Incorrect partition name. (Bug #17973)

  • LIKE searches failed on a CHAR column used as the partitioning column of a table partitioned by KEY. (Bug #17946)

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

  • The sql_big_selects system variable was not displayed by SHOW VARIABLES. (Bug #17849)

  • REPAIR TABLE did not restore the length for packed keys in tables created under MySQL 4.x, which caused them to appear corrupt to CHECK TABLE but not to REPAIR TABLE. (Bug #17810)

  • A range access optimizer heuristic was invalid, causing some queries to be much slower in MySQL 5.0 than in 4.0. (Bug #17379, Bug #18940)

  • Logging to the mysql.general_log and mysql.slow_log tables did not work for Windows builds because the CSV storage engine was unavailable. The CSV engine now is enabled in Windows builds. (Bug #17368)

  • If the WHERE condition of a query contained an OR-ed FALSE term, the set of tables whose rows cannot serve for null-complements in outer joins was determined incorrectly. This resulted in blocking possible conversions of outer joins into joins by the optimizer for such queries. (Bug #17164)

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

  • MyISAM table deadlock was possible if one thread issued a LOCK TABLES request for write locks and then an administrative statement such as OPTIMIZE TABLE, if between the two statements another client meanwhile issued a multiple-table SELECT for some of the locked tables. (Bug #16986)

  • ALTER TABLE ... REBUILD PARTITION returned an inaccurate error message. (Bug #16819)

  • Use of --default-storage-engine=innodb resulted in an error with the server reporting that InnoDB was an unknown table type. (Bug #16691)

  • MySQL-shared-compat-5.1.9-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)

  • The XPath string-length() function was not implemented for use with ExtractValue(). (Bug #16319)

  • The ExtractValue() function failed with a syntax error when the XPath expression used special characters such as Ñ (N-tilde). (Bug #16233)

  • The sql_notes and sql_warnings system variables were not always displayed correctly by SHOW VARIABLES (for example, they were displayed as ON after being set to OFF). (Bug #16195)

  • 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)

  • 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)

  • The system_time_zone and version_* system variables could not be accessed using SELECT @@var_name syntax. (Bug #15684, Bug #12792)

  • If the server were built without partition support, it was possible to run partitioning-related statements with no errors or warnings, even though these statements would have no effect. Now such statements are not permitted unless the server has been compiled using the --with-partition option. (Bug #15561)

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

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

  • Some queries were slower in 5.0 than in 4.1 because some 4.1 cost-evaluation code had not been merged into 5.0. (Bug #14292)

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

  • Running myisampack followed by myisamchk with the --unpack option would corrupt the AUTO_INCREMENT key. (Bug #12633)

  • Use of CONVERT_TZ() in a stored function or trigger (or in a stored procedure called from a stored function or trigger) caused an error. (Bug #11081)

  • When myisamchk needed to rebuild a table, AUTO_INCREMENT information was lost. (Bug #10405)

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