mysql 4.0.21 RELEASE tonight

MySQL 4.0.21 will be released tonight on our YUM repositories. Your servers will auto-update (if it’s turned on). It’s already in our RHT90 EXPERIMENTAL YUM repository for those who want to update before the official release.


MySQL 4.0.21, a new version of the popular Open Source/Free Software
Database Management System, has been released. It is now available in source
and binary form for a number of platforms from our download pages at and mirror sites.

Note that not all mirror sites may be up to date at this point in time - if
you can’t find this version on some mirror, please try again later or choose
another download site.

This is a bug fix release for the current production version.

Please also note that this is the first 4.0.x version to have our FLOSS
licensing exception. This exception allows license compatibility with
important Open Source/Free Software projects. More information about our
FLOSS licensing exception can be found at:

Please refer to our bug database at for more details
about the individual bugs fixed in this version.

News from the ChangeLog:

Functionality added or changed:

  • Print VERSION_COMMENT (from ./configure --comment' during compilation) when starting the server. E.g.: Version:
    ‘4.0.21-debug’ socket: ‘/tmp/mysql.sock’ port: 0 Official MySQL

  • Made the MySQL server not react to signals SIGHUP' and SIGQUIT’
    on Mac OS X 10.3. This is needed because under this OS, the MySQL
    server receives lots of these signals (reported as Bug #2030).

  • On Windows, the mysqld-nt' and mysqld-max-nt’ servers now write
    error messages to the Windows event log in addition to the MySQL
    error log.

  • Renamed the innodb.status.<PID>' files (created in the data directory) to innodb_status.<PID>’. This avoids problems on
    filesystems that do not allow multiple periods in filenames.

  • Added innodb_status_file' system variable to mysqld’ to control
    whether output from SHOW INNODB STATUS' is written to a innodb_status.<PID>’ file in the data directory. By default, the
    file is not created. To create it, start mysqld' with the –innodb_status_file=1’ option.

Bugs fixed:

  • Fixed an old bug in concurrent accesses to MERGE' tables (even one MERGE’ table and `MyISAM’ tables), that could’ve resulted in
    a crash or hang of the server. (Bug #2408)

  • Fixed a bug that caused incorrect results from GROUP BY' queries with expression in HAVING’ clause that refers to a BLOB' (TEXT’, `TINYBLOB’, etc) fields. (Bug #4358)

  • Fixed a bug when memory was not released when `HEAP’ table is
    dropped. It could only happen on Windows when a symlink file
    (.sym) is used and if that symlink file contained double
    backslashes (\). (Bug #4973)

  • Fixed a bug which prevented `TIMESTAMP(19)’ fields from being
    created. (Bug #4491)

  • Fixed a bug that caused wrong results in queries that were using
    index to search for NULL' values in BLOB’ (TINYBLOB', TEXT’,
    TINYTEXT', etc) columns of MyISAM’ tables. (Bug #4816)

  • Fixed a bug in the function ROUND()' reporting incorrect metadata (number of digits after the decimal point). It can be seen, for example, in CREATE TABLE t1 SELECT ROUND(1, 34)’. (Bug #4393)

  • Fixed precision loss bug in some mathematical functions such as
    SQRT()' and LOG()’. (Bug #4356)

  • Fixed a long-standing problem with LOAD DATA' with the LOCAL’
    option. The problem occurs when an error happens during the `LOAD
    DATA’ operation. Previously, the connection was broken. Now the
    error message is returned and connection stays open.

  • Optimizer now treats col IN (val)' the same way it does for col
    = val’.

  • Fixed a problem with net_buffer_length' when building the DBD::mysql’ Perl module. (Bug #4206)

  • lower_case_table_names=2' (keep case for table names) was not honored with ALTER TABLE’ and `CREATE/DROP INDEX’. (Bug #3109)

  • Fixed a crash on declaration of `DECIMAL(0,…)’ column. (Bug

  • Fixed a bug in `IF()’ function incorrectly determining the result
    type if aggregate functions were involved. (Bug #3987)

  • Fixed bug in privilege checking where, under some conditions, one
    was able to grant privileges on the database, he has no privileges
    on. (Bug #3933)

  • Fixed crash in `MATCH … AGAINST()’ on a phrase search operator
    with a missing closing double quote. (Bug #3870)

  • Fixed a bug with truncation of big values (> 4294967295) of 64-bit
    system variables. (Bug #3754)

  • If server-id' was not set using startup options but with SET
    GLOBAL’, the replication slave still complained that it was not
    set. (Bug #3829)

  • Fixed potential memory overrun in `mysql_real_connect()’ (which
    required a compromised DNS server and certain operating systems).
    (Bug #4017)

  • During the installation process of the server RPM on Linux,
    mysqld' was run as the root’ system user, and if you had
    --log-bin=<somewhere_out_of_var_lib_mysql>' it created binary log files owned by root’ in this directory, which remained owned by
    root' after the installation. This is now fixed by starting mysqld’ as the `mysql’ system user instead. (Bug #4038)

  • Made DROP DATABASE' honor the value of lower_case_table_names’.
    (Bug #4066)

  • The slave SQL thread refused to replicate `INSERT … SELECT’ if it
    examined more than 4 billion rows. (Bug #3871)

  • Fixed incorrect destruction of expression which led to crash of
    server on complex AND'/OR’ expressions if query was ignored
    (either by a replication server because of `replicate-*-table’
    rules, or by any MySQL server because of a syntax error). (Bug
    #3969, Bug #4494)

  • Fixed that mysqlbinlog --position --read-from-remote-server' had wrong # at’ lines. (Bug #4506)

  • If `CREATE TEMPORARY TABLE t SELECT’ failed while loading the
    data, the temporary table was not dropped. (Bug #4551)

  • Fixed that when a multiple-table `DROP TABLE’ failed to drop a
    table on master, the error code was not written to the binary log.
    (Bug #4553)

  • When the slave SQL thread was replicating a LOAD DATA INFILE' it didn't show it in the output of SHOW PROCESSLIST’. (Bug #4326)

  • Fixed that `CREATE TABLE … TYPE=HEAP … AS SELECT…’ caused
    replication slave to stop. (Bug #4971)

  • Fixed that disable-local-infile' option had no effect if client read it from a configuration file using mysql_options(…,MYSQL_READ_DEFAULT,…)’. (Bug #5073)

  • Fixed that mysql-test-run' failed on the rpl_trunc_binlog’ test
    if running test from the installed (the target of ‘make install’)
    directory. (Bug #5050)

  • Fixed an unlikely deadlock which could happen when using `KILL’.
    (Bug #4810)

  • Fixed a crash when one connection got KILL'ed while it was doing START SLAVE’. (Bug #4827)

  • Made FLUSH TABLES WITH READ LOCK' block COMMIT’ if server is
    running with binary logging; this ensures that the binary log
    position is trustable when doing a full backup of tables and the
    binary log. (Bug #4953)

  • Fixed that the counter of an auto_increment' column was not reset by TRUNCATE TABLE’ is the table was a temporary one. (Bug #5033)

  • Made database names to compare case-insensitively in fully
    qualified column names (database.table.column') when lower_case_table_names=1’. (Bug #4792)

  • Fixed that `SET CHARACTER SET’ was not replicated correctly. MySQL
    4.1 does not have that bug. (Bug #4500)

  • Fixed a bug in ON DELETE CASCADE' and ON UPDATE CASCADE’ foreign
    key constraints: long chains of cascaded operations would cause a
    stack overflow and crash the server. Cascaded operations are now
    limited to 15 levels. (Bug #4446)

  • Fixed a possible bug in `LOCK TABLES’ introduced in
    MySQL/InnoDB-4.0.19: The count of tables explicitly locked by a
    transaction was incremented only after the locks were granted, but
    decremented when the lock structures were destroyed.