Released on 7 Feb 2011
MySQL 5.1.55 Changelog
  • Functionality Added or Changed

  • Bugs Fixed

Functionality Added or Changed

  • The time zone tables available at have been updated. These tables can be used on systems such as Windows or HP-UX that do not include zoneinfo files. (Bug #40230)

Bugs Fixed

  • Security Fix: A security bug was fixed. (Bug #57952)

  • Performance; InnoDB: An UPDATE statement for an InnoDB table could be slower than necessary if it changed a column covered by a prefix index, but did not change the prefix portion of the value. The fix improves performance for InnoDB 1.1 in MySQL 5.5 and higher, and the InnoDB Plugin for MySQL 5.1. (Bug #58912, Bug #11765900)

  • Performance: Queries involving InnoDB tables in the INFORMATION_SCHEMA tables TABLE_CONSTRAINTS, KEY_COLUMN_USAGE, or REFERENTIAL_CONSTRAINTS were slower than necessary because statistics were rechecked more often than required, even more so when many foreign keys were present. The improvement to this may be of particular benefit to users of MySQL Enterprise Monitor with many monitored servers or tens of thousands of tables. (Bug #43818, Bug #11752585)

  • Incompatible Change: When auto_increment_increment is greater than one, values generated by a bulk insert that reaches the maximum column value could wrap around rather producing an overflow error.

    As a consequence of the fix, it is no longer possible for an auto-generated value to be equal to the maximum BIGINT UNSIGNED value. It is still possible to store that value manually, if the column can accept it. (Bug #39828, Bug #11749800)

  • Important Change; Partitioning: Date and time functions used as partitioning functions now have the types of their operands checked; use of a value of the wrong type is now disallowed in such cases. In addition, EXTRACT(WEEK FROM col_name), where col_name is a DATE or DATETIME column, is now disallowed altogether because its return value depends on the value of the default_week_format system variable. (Bug #54483, Bug #11761948)

    References: See also Bug #57071, Bug #11764255.

  • InnoDB: A compilation problem affected the InnoDB source code on NetBSD/sparc64. (Bug #59327)

    References: See also Bug #53916.

  • InnoDB: The presence of a double quotation mark inside the COMMENT field for a column could prevent a foreign key constraint from being created properly. (Bug #59197, Bug #11766154)

  • InnoDB: In InnoDB status output, the value for I/O sum[] could be incorrect, displayed as a very large number. (Bug #57600)

  • InnoDB: The server could crash with an assertion error, if a stored procedure, stored function, or trigger modified one InnoDB table containing an auto-increment column, and dropped another InnoDB table containing an auto-increment column. (Bug #56228)

  • InnoDB: It was not possible to query the information_schema.INNODB_TRX table while other connections were running queries involving BLOB types. (Bug #55397, Bug #11762763)

  • InnoDB: The OPTIMIZE TABLE statement reset the auto-increment counter for an InnoDB table. Now the auto-increment value is preserved across this operation. (Bug #18274)

  • Partitioning: Failed ALTER TABLE ... PARTITION statements could cause memory leaks. (Bug #56380, Bug #11763641)

    References: See also Bug #46949, Bug #11755209, Bug #56996, Bug #11764187.

  • Replication: When closing a session that used temporary tables, binary logging could sometimes fail with a spurious Failed to write the DROP statement for temporary tables to binary log. (Bug #57288)

  • Replication: By default, a value is generated for an AUTO_INCREMENT column by inserting either NULL or 0 into the column. Setting the NO_AUTO_VALUE_ON_ZERO server SQL mode suppresses this behavior for 0, so that it occurs only when NULL is inserted into the column.

    This behavior is also followed on a replication slave (by the slave SQL thread) when applying events that have been logged on the master using the statement-based format. However, when applying events that had been logged using the row-based format, NO_AUTO_VALUE_ON_ZERO was ignored, which could lead to an assertion.

    To fix this issue, the value of an AUTO_INCREMENT column is no longer generated when applying an event that was logged using the row-based row format, as this value is already contained in the changes applied on the slave. (Bug #56662)

  • Replication: The BINLOG statement modified the values of session variables, which could lead to problems with operations such as point-in-time recovery. One such case occurred when replaying a row-based binary log which relied on setting foreign_key_checks = OFF at the session level to create and populate a set of InnoDB tables having foreign key constraints. (Bug #54903)

  • Replication: mysqlbinlog printed USE statements to its output only when the default database changed between events. To illustrate how this could cause problems, suppose that a user issued the following sequence of statements:

    CREATE DATABASE mydb;USE mydb;CREATE TABLE mytable (column_definitions);DROP DATABASE mydb;CREATE DATABASE mydb;USE mydb;CREATE TABLE mytable (column_definitions);

    When played back using mysqlbinlog, the second CREATE TABLE statement failed with Error: No Database Selected because the second USE statement was not played back, due to the fact that a database other than mydb was never selected.

    This fix ensures that mysqlbinlog outputs a USE statement whenever it reads one from the binary log. (Bug #50914, Bug #11758677)

  • Replication: Previously, when a statement failed with a different error on the slave than on the master, the slave SQL thread displayed a message containing:

    • The error message for the master error code

    • The master error code

    • The error message for the slaves error code

    • The slave error code

    However, the slave has no information with which to fill in any print format specifiers for the master message, so it actually displayed the message format string. To make it clearer that the slave is not displaying the actual message as it appears on the master, the slave now indicates that the master part of the output is the message format, not the actual message. For example, previously the slave displayed information like this:

    Error: "Query caused different errors on master and slave. Erroron master: 'Duplicate entry '%-.192s' for key %d' (1062), Error onslave: 'no error' (0). Default database: 'test'. Query: 'insertinto t1 values(1),(2)'" (expected different error codes on masterand slave)

    Now the slave displays this:

    Error: "Query caused different errors on master and slave. Erroron master: message format='Duplicate entry '%-.192s' for key %d'error code=1062 ; Error on slave: actual message='no error', errorcode=0. Default database: 'test'. Query: 'insert into t1 values(1),(2)'"(expected different error codes on master and slave)

    (Bug #46697)

  • Replication: When an error occurred in the generation of the name for a new binary log file, the error was logged but not shown to the user. (Bug #46166)

    References: See also Bug #37148, Bug #11748696, Bug #40611, Bug #11750196, Bug #43929, Bug #51019.

  • MIN(year_col) could return an incorrect result in some cases. (Bug #59211, Bug #11766165)

  • If max_allowed_packet was set larger than 16MB, the server failed to reject too-large packets with Packet too large errors. (Bug #58887, Bug #11765878)

  • Issuing EXPLAIN EXTENDED for a query that would use condition pushdown could cause mysqld to crash. (Bug #58553, Bug #11765570)

  • EXPLAIN could crash for queries that used GROUP_CONCAT(). (Bug #58396)

  • Configuration with maintainer mode enabled resulted in errors when compiling with icc. (Bug #57991, Bug #58871)

  • Unnecessary subquery evaluation in contexts such as statement preparation or view creation could cause a server crash. (Bug #57703)

  • View creation could produce Valgrind warnings. (Bug #57352)

  • NULL geometry values could cause a crash in Item_func_spatial_collection::fix_length_and_dec. (Bug #57321)

  • The cp1251 character set did not properly support the Euro sign (0x88). For example, converting a string containing this character to utf8 resulted in '?' rather than the utf8 Euro sign. (Bug #56639)

  • Some unsigned system variables could be displayed with negative values. (Bug #55794)

  • CREATE DATABASE and DROP DATABASE caused mysql --one-database to lose track of the statement-filtering context. (Bug #54899)

  • An assertion could be raised during concurrent execution of DROP DATABASE and REPAIR TABLE if the drop deleted a table's .TMD file at the same time the repair tried to read details from the old file that was just removed.

    A problem could also occur when DROP TABLE tried to remove all files belonging to a table at the same time REPAIR TABLE had just deleted the table's .TMD file. (Bug #54486)

  • When mysqld printed crash dump information, it incorrectly indicated that some valid pointers were invalid. (Bug #51817)

  • On FreeBSD, if mysqld was killed with a SIGHUP signal, it could corrupt InnoDB .ibd files. (Bug #51023, Bug #11758773)

  • An assertion could be raised if -1 was inserted into an AUTO_INCREMENT column by a statement writing more than one row. (Bug #50619, Bug #11758417)

  • If a client supplied a user name longer than the maximum 16 characters permitted for names stored in the MySQL grant tables, all characters were being considered significant when checking for a match. Historically, only the first 16 characters were used for matching; this behavior was restored. (Bug #49752)

  • The my_seek() and my_tell() functions ignored the MY_WME flag when they returned an error, which could cause client programs to hang. (Bug #48451)

  • During assignment of values to system variables, legality checks on the value range occurred too late, preventing proper error checking. (Bug #43233)

  • On Solaris, time-related functions such as NOW() or SYSDATE() could return a constant value. (Bug #42054)

  • If the remote server for a FEDERATED table could not be accessed, queries for the INFORMATION_SCHEMA.TABLES table failed. (Bug #35333)