Hi,

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
http://www.mysql.com/downloads/ 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:

  http://dev.mysql.com/doc/mysql/en/MySQL_FLOSS_License_Exception.html

Please refer to our bug database at http://bugs.mysql.com/ 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
     Binary'

   * 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
     #4046)

   * 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.

   * Fixed a bug in `UNLOCK TABLES' in `AUTOCOMMIT=0' mode, introduced
     in MySQL/InnoDB-4.0.19: The memory allocated for some locks
     acquired by the transaction could be deallocated before those
     locks were released.  The bug can lead to crashes and memory
     corruption of the buffer pool when the transaction acquires a
     large number of locks (table locks or row-level locks).

   * Increment the InnoDB watchdog timeout during `CHECK TABLE'.  (Bug
     #2694)

   * If you configure `innodb_additional_mem_pool_size' so small that
     InnoDB memory allocation spills over from it, then every 4
     billionth spill may cause memory corruption. A symptom is a
     printout like below in the `.err' log.  The workaround is to make
     `innodb_additional_mem_pool_size' big enough to hold all memory
     allocation.  Use `SHOW INNODB STATUS' to determine that there is
     plenty of free space available in the additional mem pool, and the
     total allocated memory stays rather constant.
         InnoDB: Error: Mem area size is 0. Possibly a memory overrun of the
         InnoDB: previous allocated area!
         InnoDB: Apparent memory corruption: mem dump  len 500; hex

   * The special meaning of the table names `innodb_monitor',
     `innodb_lock_monitor', `innodb_tablespace_monitor',
     `innodb_table_monitor', and `innodb_validate' in `CREATE TABLE'
     and `DROP TABLE' statements was accidentally removed in
     MySQL/InnoDB-4.0.19.  The diagnostic functions attached to these
     special table names (*note InnoDB Monitor::) are accessible again
     in MySQL/InnoDB-4.0.21.

   * When the private SQL parser of InnoDB was modified in
     MySQL/InnoDB-4.0.19 in order to allow the use of the apostrophe
     (`'') in table and column names, the fix relied on a previously
     unused function `mem_realloc()', whose implementation was
     incorrect.  As a result, InnoDB can incorrectly parse column and
     table names as the empty string.  The InnoDB `realloc()'
     implementation has been corrected in MySQL/InnoDB-4.0.21.

   * Fixed a glitch introduced in 4.0.18 and 4.1.2: in `SHOW TABLE
     STATUS' InnoDB systematically overestimated the row count by 1 if
     the table fit on a single 16 kB data page.

   * InnoDB created temporary files with the C library function
     `tmpfile()'.  On Windows, the files would be created in the root
     directory of the current file system.  To correct this behavior,
     the invocations of `tmpfile()' were replaced with code that uses
     the function `create_temp_file()' in the MySQL portability layer.
     (Bug #3998)


Enjoy!

    Matt

-- 
Matt Wagner, Production Engineer
MySQL AB, www.mysql.com
Northfield, MN, USA



-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to