End of Product Lifecycle. Active development and support for MySQL database server versions 3.23, 4.0, and 4.1 has ended. However, for MySQL 4.0 and 4.1, there is still extended support available. For details, see http://www.mysql.com/company/legal/lifecycle/#calendar. According to the MySQL Lifecycle Policy (see http://www.mysql.com/company/legal/lifecycle/#policy), only Security and Severity Level 1 issues will still be fixed for MySQL 4.0 and 4.1. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Functionality added or changed:
mysqld_safe no longer tests for the presence of the data directory when using a relatively located server binary. It just assumes the directory is there, and fails to start up if it is not. This allows the data directory location to be specified on the command line, and avoids running a server binary that was not intended. (Bug#7249)
See also Bug#7518
The MySQL-shared-compat Linux RPM now
includes the 3.23 as well as the 4.0
libysqlclient.so shared libraries.
(Bug#6342)
The Mac OS X 10.3 installation disk images now include a MySQL Preference Pane for the Mac OS X Control Panel that enables the user to start and stop the MySQL server via the GUI and activate and deactivate the automatic MySQL server startup on bootup.
The naming scheme of the Windows installation packages has changed slightly:
The platform suffix was changed from -win
to -win32
The product descriptions -noinstall and
-essential have been moved in front of
the version number
Examples: mysql-essential-4.1.9-win32.msi,
mysql-noinstall-4.1.9-win32.zip See
Section 2.3, “Installing MySQL on Windows”.
Seconds_Behind_Master is
NULL (which means “unknown”) if
the slave SQL thread is not running, or if the slave I/O thread
is not running or not connected to master. It is zero if the SQL
thread has caught up with the I/O thread. It no longer grows
indefinitely if the master is idle.
InnoDB: Do not acquire an internal InnoDB
table lock in LOCK TABLES if
AUTOCOMMIT=1. This helps in porting old
MyISAM applications to
InnoDB. InnoDB table locks
in that case caused deadlocks very easily.
The binary log file and binary log index file now behave like
MyISAM when there is a "disk full"
or "quota exceeded" error. See
Section A.1.4.3, “How MySQL Handles a Full Disk”.
The product descriptions -noinstall and
-essential have been moved in front of the
version number
InnoDB: Print a more descriptive error and refuse to start
InnoDB if the size of
ibdata files is smaller than what is stored
in the tablespace header;
innodb_force_recovery overrides this.
The platform suffix was changed from -win to
-win32
The MySQL server aborts immediately instead of simply issuing a
warning if it is started with the --log-bin
option but cannot initialize the binary log at startup (that is,
an error occurs when writing to the binary log file or binary
log index file).
Bugs fixed:
Fixed that, when encountering a “disk full” or
“quota exceeded” write error,
MyISAM sometimes didn't sleep and retry the
write, thus resulting in a corrupted table.
(Bug#7714)
Fixed problem where running mysql_fix_privilege_tables could result in grant table columns with too-short lengths if the server character set had been set to a multi-byte character set first. (Bug#7539)
Added a --default-character-set option to
mysqladmin to avoid problems when the default
character set is not latin1.
(Bug#7524)
InnoDB: Fixed the critical bug
if you enabled innodb_file_per_table in
my.cnf. If you shut down
mysqld, records could disappear from the
secondary indexes of a table. Unfortunately, on Windows a new
Bug#8021 was introduced. Windows users of
innodb_file_per_table should put a line
innodb_flush_method=unbuffered to their
my.cnf or my.ini to
work around 8021.
(Bug#7496)
Fixed a bug that caused microseconds to be gobbled from the
string result of the STR_TO_DATE function, if
there is some other specifier in the format string following
%f.
(Bug#7458)
mysqladmin password now checks whether the
server has --old-passwords turned on or
predates 4.1 and uses the old-format password if so.
(Bug#7451)
Fixed a bug that caused a linking failure when linking both the MySQL client library and IMAP library. (Bug#7428)
Fix a problem with truncation of FLOAT
values.
(Bug#7361)
Made the MySQL server accept executing SHOW CREATE
DATABASE even if the connection has an open
transaction or locked tables. Refusing it made
mysqldump --single-transaction sometimes fail
to print a complete CREATE DATABASE statement
for some dumped databases.
(Bug#7358)
Fixed that --expire-log-days was not honored if
using only transactions.
(Bug#7236)
Include compression library flags in the output from mysql_config --lib_r. (Bug#7021)
Corrected a problem with mysql_config not
producing all relevant flags from CFLAGS.
(Bug#6964)
Fixed a bug that caused incorrect results for complex datetime
expressions containing casts of datetime values to
TIME or DATE values.
(Bug#6914)
Fixed that a slave could crash after replicating many
ANALYZE TABLE, OPTIMIZE
TABLE, or REPAIR TABLE statements
from the master.
(Bug#6461, Bug#7658)
InnoDB: Fixed a bug: 32-bit mysqld binaries
built on HP-UX-11 did not work with InnoDB
files greater than 2 GB in size.
(Bug#6189)
Corrected a problem with mysqld_safe not properly capturing output from ps. (Bug#5878)
Fixed a bug in PROCEDURE ANALYSE(), which did
not quote some ENUM values properly.
(Bug#2813)
InnoDB: Use the fcntl(F_FULLFSYNC) flush
method on Mac OS X versions 10.3 and up instead of
fsync() that could cause corruption at power
outages.
InnoDB: Fix a little bug: we looked at the physical size of a
stored SQL NULL value from a wrong field in
the index; this has probably caused no bugs visible to the user.
It caused only some extra space to be used in some rare cases.
InnoDB: Fixed a bug: if we dropped a table where an
INSERT was waiting for a lock to check a
FOREIGN KEY constraint, then an assertion
would fail in lock_reset_all_on_table().
InnoDB: Return a sensible error code from DISCARD
TABLESPACE if it fails because the table is referenced
by a FOREIGN KEY.
Fixed table corruption bug when using INSERT
DELAYED with prepared statements.
InnoDB: Fixed a bug: InnoDB failed to drop a
table in the background drop queue if the table was referenced
by a FOREIGN KEY constraint.

User Comments
Just one small correction: up above it says that fsync() is disabled on MacOS X 10.3 and above and that InnoDB switched to using an fcntl() instead.
On MacOS X, fsync() behaves the same as it does on all unixes: it writes the data from the host to the drive. This is not good enough because drives will buffer the data and potentially write it in a different order than the app did.
To deal with this MacOS X provides an fcntl() called F_FULLFSYNC which does what fsync does and in addition asks the drive to flush all buffered data to disk. This is the only way for an app to be able to make any guarantees about things like transactions which is why InnoDB uses it!
Add your own comment.