Released on 1 May 2009
MySQL 5.0.81 Changelog

This is a bugfix release for the current MySQL Community Server production release family. It replaces MySQL 5.0.77.

  • Functionality Added or Changed

  • Bugs Fixed

Functionality Added or Changed

  • Performance: The query cache now checks whether a SELECT statement begins with SQL_NO_CACHE to determine whether it can skip checking for the query result in the query cache. This is not supported when SQL_NO_CACHE occurs within a comment. (Bug #37416)

  • The MD5 algorithm now uses the Xfree implementation. (Bug #42434)

  • The libedit library was upgraded to version 2.11. (Bug #42433)

Bugs Fixed

  • Performance: For an InnoDB table, DROP TABLE or ALTER TABLE ... DISCARD TABLESPACE could take a long time or cause a server crash. (Bug #39939)

  • Important Change: When installing MySQL on Windows, it was possible to install multiple editions (Complete, and Essential, for example) of the same version of MySQL, leading to two separate entries in the installed packages which were impossible to isolate. This could lead to problems with installation and uninstallation. The MySQL installer on Windows no longers permits multiple installations of the same version of MySQL on a single machine. (Bug #4217)

  • MySQL Cluster; Packaging: Packages for MySQL Cluster were missing the and libndbclient.a files. (Bug #42278)

  • Replication: An INSERT DELAYED into a TIMESTAMP column issued concurrently with an insert on the same column not using DELAYED, but applied after the other insert, was logged using the same timestamp as generated by the other (non-DELAYED) insert. (Bug #41719)

  • Replication: Server IDs greater than 2147483647 (232 - 1) were represented by negative numbers in the binary log. (Bug #37313)

  • Replication: The --replicate-*-table options were not evaluated correctly when replicating multi-table updates.

    As a result of this fix, replication of multi-table updates no longer fails when an update references a missing table but does not update any of its columns. (Bug #37051)

  • Replication: When its disk becomes full, a replication slave may wait while writing the binary log, relay log or MyISAM tables, continuing after space has been made available. The error message provided in such cases was not clear about the frequency with which checking for free space is done (once every 60 seconds), and how long the server waits after space has been freed before continuing (also 60 seconds); this caused users to think that the server had hung.

    These issues have been addressed by making the error message clearer, and dividing it into two separate messages:

    1. The error message Disk is full writing 'filename' (Errcode: error_code). Waiting for someone to free space... (Expect up to 60 secs delay for server to continue after freeing disk space) is printed only once.

    2. The warning Retry in 60 secs, Message reprinted in 600 secs is printed once every for every 10 times that the check for free space is made; that is, the check is performed once each 60 seconds, but the reminder that space needs to be freed is printed only once every 10 minutes (600 seconds).

    (Bug #22082)

  • An attempt by a user who did not have the SUPER privilege to kill a system thread could cause a server crash. (Bug #43748)

  • Use of USE INDEX hints could cause EXPLAIN EXTENDED to crash. (Bug #43354)

  • mysql crashed if a request for the current database name returned an empty result, such as after the client has executed a preceding SET sql_select_limit=0 statement. (Bug #43254)

  • On 32-bit Windows, mysqld could not use large buffers due to a 2GB user mode address limit. (Bug #43082)

  • The strings/CHARSET_INFO.txt file was not included in source distributions. (Bug #42937)

  • The use by libedit of the __weak_reference() macro caused compilation failure on FreeBSD. (Bug #42817)

  • mysqldump included views that were excluded with the --ignore-table option. (Bug #42635)

  • An optimization introduced for Bug #37553 required an explicit cast to be added for some uses of TIMEDIFF() because automatic casting could produce incorrect results. (It was necessary to use TIME(TIMEDIFF(...)).) (Bug #42525)

  • Passing an unknown time zone specification to CONVERT_TZ() resulted in a memory leak. (Bug #42502)

  • Tables could enter open table cache for a thread without being properly cleaned up, leading to a server crash. (Bug #42419)

  • The MySQL Instance Configuration Wizard failed to start correctly on Windows Vista. (Bug #42386)

  • The SSL certificates included with MySQL distributions were regenerated because the previous ones had expired. (Bug #42366)

  • Dependent subqueries such as the following caused a memory leak proportional to the number of outer rows:

    SELECT COUNT(*) FROM t1, t2 WHERE t2.b  IN (SELECT DISTINCT t2.b FROM t2 WHERE t2.b = t1.a);

    (Bug #42037)

  • mysqldumpslow parsed the --debug and --verbose options incorrectly. (Bug #42027)

  • Some queries using NAME_CONST(.. COLLATE ...) led to a server crash due to a failed type cast. (Bug #42014)

  • On Mac OS X, some of the universal client libraries were not actually universal and were missing code for one or more architectures. (Bug #41940)

  • String reallocation could cause memory overruns. (Bug #41868)

  • With more than two arguments, LEAST(), GREATEST(), and CASE could unnecessarily return Illegal mix of collations errors. (Bug #41627)

  • Queries that used the loose index scan access method could return no rows. (Bug #41610)

  • In InnoDB recovery after a server crash, rollback of a transaction that updated a column from NULL to NULL could cause another crash. (Bug #41571)

  • If InnoDB reached its limit on the number of concurrent transactions (1023), it wrote a descriptive message to the error log but returned a misleading error message to the client, or an assertion failure occurred. (Bug #41529)

  • The mysql client could misinterpret its input if a line was longer than an internal buffer. (Bug #41486)

  • DATE_FORMAT() could cause a server crash for year-zero dates. (Bug #41470)

  • When substituting system constant functions with a constant result, the server was not expecting NULL function return values and could crash. (Bug #41437)

  • For a TIMESTAMP NOT NULL DEFAULT ... column, storing NULL as the return value from some functions caused a cannot be NULL error. NULL returns now correctly cause the column default value to be stored. (Bug #41370)

  • Use of SELECT * permitted users with rights to only some columns of a view to access all columns. (Bug #41354)

  • In the help command output displayed by mysql, the description for the \c (clear) command was misleading. (Bug #41268)

  • The server did not robustly handle problems hang if a table opened with HANDLER needed to be re-opened because it had been altered to use a different storage engine that does not support HANDLER. The server also failed to set an error if the re-open attempt failed. These problems could cause the server to crash or hang. (Bug #41110, Bug #41112)

  • For prepared statements, multibyte character sets were not taking into account when calculating max_length for string values and mysql_stmt_fetch() could return truncated strings. (Bug #41078)

  • The Windows installer displayed incorrect product names in some images. (Bug #40845)

  • The mysql_change_user() C API function changed the value of the sql_big_selects session variable. (Bug #40363)

    References: See also Bug #20023.

  • For a view that references a table in another database, mysqldump wrote the view name qualified with the current database name. This makes it impossible to reload the dump file into a different database. (Bug #40345)

  • The query cache stored only partial query results if a statement failed while the results were being sent to the client. This could cause other clients to hang when trying to read the cached result. Now if a statement fails, the result is not cached. (Bug #40264)

  • perror did not produce correct output for error codes 153 to 163. (Bug #39370)

  • The expression ROW(...) IN (SELECT ... FROM DUAL) always returned TRUE. (Bug #39069)

  • The greedy optimizer could cause a server crash due to improper handling of nested outer joins. (Bug #38795)

  • Use of COUNT(DISTINCT) prevented NULL testing in the HAVING clause. (Bug #38637)

  • When running the MySQL Instance Configuration Wizard in command-line only mode, the service name would be ignored (effectively creating all instances with the default MySQL service name), irrespective of the name specified on the command line. However, the wizard would attempt to start the service with the specified name, and failed. (Bug #38379)

  • Enabling the sync_frm system variable had no effect on the handling of .frm files for views. (Bug #38145)

  • Comparisons between row constructors, such as (a, b) = (c, d) resulted in unnecessary Illegal mix of collations errors for string columns. (Bug #37601)

  • An argument to the MATCH() function that was an alias for an expression other than a column name caused a server crash. (Bug #36737)

  • The query cache stored packets containing the server status of the time when the cached statement was run. This might lead to an incorrect transaction status on the client side if a statement was cached during a transaction and later served outside a transaction context (or vice versa). (Bug #36326)

  • If the system time was adjusted backward during query execution, the apparent execution time could be negative. But in some cases these queries would be written to the slow query log, with the negative execution time written as a large unsigned number. Now statements with apparent negative execution time are not written to the slow query log. (Bug #35396)

  • The use of NAME_CONST() can result in a problem for CREATE TABLE ... SELECT statements when the source column expressions refer to local variables. Converting these references to NAME_CONST() expressions can result in column names that are different on the master and slave servers, or names that are too long to be legal column identifiers. A workaround is to supply aliases for columns that refer to local variables.

    Now a warning is issued in such cases that indicate possible problems. (Bug #35383)

  • For DROP FUNCTION with names that were qualified with a database name, the database name was handled in case-sensitive fashion even with lower_case_table_names set to 1. (Bug #33813)

  • mysqldump --compatible=mysql40 emitted statements referring to the character_set_client system variable, which is unknown before MySQL 4.1. Now the statements are enclosed in version-specific comments. (Bug #33550)

  • For mysqld_multi, using the --mysqld=mysqld_safe option caused the --defaults-file and --defaults-extra-file options to behave the same way. (Bug #32136)

  • Attempts to open a valid MERGE table sometimes resulted in a ER_WRONG_MRG_TABLE error. This happened after failure to open an invalid MERGE table had also generated an ER_WRONG_MRG_TABLE error. (Bug #32047)

  • Use of MBR spatial functions such as MBRTouches() with columns of InnoDB tables caused a server crash rather than an error. (Bug #31435)

  • The mysql_change_user() C API function caused global Com_xxx status variable values to be incorrect. (Bug #31222)

  • For Solaris package installation using pkgadd, the postinstall script failed, causing the system tables in the mysql database not to be created. (Bug #31164)

  • The mysql client mishandled input parsing if a delimiter command was not first on the line. (Bug #31060)

  • For installation on Solaris using pkgadd packages, the mysql_install_db script was generated in the scripts directory, but the temporary files used during the process were left there and not deleted. (Bug #31052)

  • SHOW PRIVILEGES listed the CREATE ROUTINE privilege as having a context of Functions,Procedures, but it is a database-level privilege. (Bug #30305)

  • CHECK TABLE, REPAIR TABLE, ANALYZE TABLE, and OPTIMIZE TABLE erroneously reported a table to be corrupt if the table did not exist or the statement was terminated with KILL. (Bug #29458)

  • When installing the Windows service, using quotation marks around command-line configuration parameters could cause the quotation marks to be incorrectly placed around the entire command-line option, and not just the value. (Bug #27535)

  • SHOW TABLE STATUS could fail to produce output for tables with non-ASCII characters in their name. (Bug #25830)

  • The Time column for SHOW PROCESSLIST output now can have negative values. Previously, the column was unsigned and negative values were displayed incorrectly as large positive values. Negative values can occur if a thread alters the time into the future with SET TIMESTAMP = value or the thread is executing on a slave and processing events from a master that has its clock set ahead of the slave. (Bug #22047)

  • Restoring a mysqldump dump file containing FEDERATED tables failed because the file contained the data for the table. Now only the table definition is dumped (because the data is located elsewhere). (Bug #21360)

  • Floating-point numbers could be handled with different numbers of digits depending on whether the text or prepared-statement protocol was used. (Bug #21205)

  • Incorrect length metadata could be returned for LONG TEXT columns when a multibyte server character set was used. (Bug #19829)

  • ROUND() sometimes returned different results on different platforms. (Bug #15936)