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.32 (2009-02-14)

Changes in MySQL 5.1.32 (2009-02-14)

Functionality Added or Changed

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

Bugs Fixed

  • Security Fix: Using an XPath expression employing a scalar expression as a FilterExpr with ExtractValue() or UpdateXML() caused the server to crash. Such expressions now cause an error instead. (Bug #42495)

  • Incompatible Change: The fix for Bug #33699 introduced a change to the UPDATE statement such that assigning NULL to a NOT NULL column caused an error even when strict SQL mode was not enabled. The original behavior before was that such assignments caused an error only in strict SQL mode, and otherwise set the column to the implicit default value for the column data type and generated a warning. (For information about implicit default values, see Data Type Default Values.)

    The change caused compatibility problems for applications that relied on the original behavior. It also caused replication problems between servers that had the original behavior and those that did not, for applications that assigned NULL to NOT NULL columns in UPDATE statements without strict SQL mode enabled. This change has been reverted so that UPDATE again had the original behavior. Problems can still occur if you replicate between servers that have the modified UPDATE behavior and those that do not. (Bug #39265)

  • Important Change: When using the MySQL Instance Configuration Wizard with a configuration where you already have an existing installation with a custom datadir, the wizard could reset the data to the default data directory. When performing an upgrade installation in this situation, you must re-specify your custom settings, including the datadir, to ensure that your configuration file is not reset to the default values. (Bug #37534)

  • Important Change: Uninstalling MySQL using the MySQL installer on Windows would delete the my.ini file. The file is no longer deleted. In addition, when a new installation is conducted, any existing configuration file will be renamed to myDATETIME.ini.bak during configuration. (Bug #36493)

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

  • Replication: START SLAVE UNTIL did not work correctly with --replicate-same-server-id enabled; when started with this option, the slave did not perform events recorded in the relay log and that originated from a different master.

    Log rotation events are automatically generated and written when rotating the binary log or relay log. Such events for relay logs are usually ignored by the slave SQL thread because they have the same server ID as that of the slave. However, when --replicate-same-server-id was enabled, the rotation event for the relay log was treated as if it originated on the master, because the log's name and position were incorrectly updated. This caused the MASTER_POS_WAIT() function always to return NULL and thus to fail. (Bug #38734, Bug #38934)

  • Replication: TRUNCATE TABLE statements failed to replicate when statement-based binary logging mode was not available. The issue was observed when using InnoDB with the transaction isolation level set to READ UNCOMMITTED (thus forcing InnoDB not to permit statement-based logging). However, the same behavior could be reproduced using any transactional storage engine supporting only row-based logging, regardless of the isolation level. This was due to two separate problems:

    1. An error was printed by InnoDB for TRUNCATE TABLE when using statement-based logging mode where the transaction isolation level was set to READ COMMITTED or READ UNCOMMITTED, because InnoDB permits statement-based replication for DML statements. However, TRUNCATE TABLE is not transactional; since it is the equivalent of DROP TABLE followed by CREATE TABLE, it is actually DDL, and should therefore be permitted to be replicated as a statement.

    2. TRUNCATE TABLE was not logged in mixed mode because of the error just described; however, this error was not reported to the client.

    As a result of this fix, TRUNCATE TABLE is now treated as DDL for purposes of binary logging and replication; that is, it is always logged as a statement and so no longer causes an error when replicated using a transactional storage engine such as InnoDB. (Bug #36763)

    References: See also Bug #42643.

  • Replication: mysqlbinlog replay of CREATE TEMPORARY TABLE ... LIKE statements and of TRUNCATE TABLE statements used on temporary tables failed with Error 1146 (Table ... doesn't exist). (Bug #35583)

  • Replication: In statement mode, mysqlbinlog failed to issue a SET @@autommit statement when the autocommit mode was changed. (Bug #34541)

  • Replication: LOAD DATA INFILE statements did not replicate correctly from a master running MySQL 4.1 to a slave running MySQL 5.1 or later. (Bug #31240)

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

  • A '%' character in SQL statements could cause the server to crash. (Bug #42634)

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

  • On the IBM i5 platform, the MySQL configuration process caused the system version of pthread_setschedprio() to be used. This function returns SIGILL on i5 because it is not supported, causing the server to crash. Now the my_pthread_setprio() function in the mysys library is used instead. (Bug #42524)

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

  • User variables within triggers could cause a crash if the mysql_change_user() C API function was invoked. (Bug #42188)

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

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

  • mysql_install_db did not pass some relevant options to mysqld. (Bug #41828)

  • Setting innodb_locks_unsafe_for_binlog should be equivalent to setting the transaction isolation level to READ COMMITTED. However, if both of those things were done, nonmatching semi-consistently read rows were not unlocked when they should have been. (Bug #41671)

  • REPAIR TABLE crashed for compressed MyISAM tables. (Bug #41574)

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

  • The server cannot execute INSERT DELAYED statements when statement-based binary logging is enabled, but the error message displayed only the table name, not the entire statement. (Bug #41121)

  • FULLTEXT indexes did not work for Unicode columns that used a custom UCA collation. (Bug #41084)

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

  • Changing innodb_thread_concurrency at runtime could cause errors. (Bug #40760)

  • SELECT statements could be blocked by INSERT DELAYED statements that were waiting for a lock, even with low_priority_updates enabled. (Bug #40536)

  • For InnoDB tables that used ROW_FORMAT=REDUNDANT, storage size of NULL columns could be determined incorrectly. (Bug #40369)

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

  • When a MEMORY table became full, the error generated was returned to the client but was not written to the error log. (Bug #39886)

  • With row-based binary logging, replication of InnoDB tables containing NULL-valued BIT columns could fail. (Bug #39648)

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

  • The innodb_stats_on_metadata system variable was not displayed by SHOW VARIABLES and was not settable at runtime. (Bug #38189)

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

  • The embedded server truncated some error messages. (Bug #37995)

  • For comparison of NULL to a subquery result inside IS NULL, the comparison could evaluate to NULL rather than to TRUE or FALSE. This occurred for expressions such as:


    (Bug #37822)

  • Setting myisam_repair_threads greater than 1 caused a server crash for table repair or alteration operations for MyISAM tables with multiple FULLTEXT indexes. (Bug #37756)

  • When using the MySQL MSI Installer on Windows and selecting Back after a choosing Repair, you would be returned to the Fresh Install section of the installer. You are now correctly returned to the Install, Repair, Modify screen. (Bug #37294)

  • The mysql client sometimes improperly interpreted string escape sequences in nonstring contexts. (Bug #36391)

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

  • libmysqld was not built with all character sets. (Bug #32831)

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

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

  • If the default database was dropped, the value of character_set_database was not reset to character_set_server as it should have been. (Bug #27208)

    References: See also Bug #63524.

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