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]