End of Product LifecycleActive development and support for MySQL Database Server versions 3.23, 4.0, and 4.1 has ended. For details, see http://www.mysql.com/about/legal/lifecycle/#calendar. Please consider upgrading to a recent version. Further updates to the content of this manual will be minimal. All formats of this manual will continue to be available until 31 Dec 2010.
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 permits the data directory location to be specified on the command line, and avoids running a server binary that was not intended. (Bug #7249)
References: See also Bug #7518.
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).
The platform suffix was changed from -win
to -win32
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 MySQL-shared-compat Linux RPM now
includes the 3.23 as well as the 4.0
libysqlclient.so shared libraries. (Bug
#6342)
The product descriptions -noinstall and
-essential have been moved in front of the
version number
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 B.5.4.3, “How MySQL Handles a Full Disk”.
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.
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.
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 Microsoft Windows”.
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 using the GUI and activate and deactivate the automatic MySQL server startup on bootup.
Bugs Fixed
Replication: A replication
slave could crash after replicating many
ANALYZE TABLE,
OPTIMIZE TABLE, or
REPAIR TABLE statements from
the master. (Bug #6461, Bug #7658)
FLOAT values were not truncated
correctly. (Bug #7361)
When encountering a disk full or
quota exceeded write error,
MyISAM sometimes failed to sleep and retry
the write, resulting in a corrupted table. (Bug #7714)
Include compression library flags in the output from mysql_config --lib_r. (Bug #7021)
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)
Corrected a problem with mysql_config not
producing all relevant flags from CFLAGS.
(Bug #6964)
mysqladmin password now checks whether the
server has the old_passwords
enabled or predates 4.1 and uses the old-format password if
so. (Bug #7451)
Running mysql_fix_privilege_tables could result in grant table columns with lengths that were too short if the server character set had been set to a multi-byte character set first. (Bug #7539)
Incorrect results were obtained for complex datetime
expressions containing casts of datetime values to
TIME or
DATE values. (Bug #6914)
InnoDB: InnoDB failed to
drop a table in the background drop queue if the table was
referenced by a FOREIGN KEY constraint.
PROCEDURE ANALYSE() did not quote some
ENUM values properly. (Bug
#2813)
Using INSERT DELAYED with
prepared statements could lead to table corruption.
InnoDB: When DISCARD
TABLESPACE failed because the table was referenced
by a foreign key, the error code returned did not indicate
that this was the case.
InnoDB: Dropping a table where an
INSERT was waiting for a lock
to check a FOREIGN KEY constraint caused an
assertion.
InnoDB: The storgae of an SQL
NULL value in some rare cases took more
space than should have been required.
Corrected a problem with mysqld_safe not properly capturing output from ps. (Bug #5878)
--expire-logs-days was not
honored if using only transactions. (Bug #7236)
Microseconds were dropped from the string result of the
STR_TO_DATE function, when there was some
other specifier in the format string following
%f. (Bug #7458)
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.
Added a --default-character-set option to
mysqladmin to avoid problems when the
default character set is not latin1. (Bug
#7524)
Linking both the MySQL client library and IMAP library in the same build failed. (Bug #7428)
InnoDB: When
innodb_file_per_table was
enabled in my.cnf, records could
disappear from the secondary indexes of a table after
mysqld was killed.
This fix introduced a new Bug #8021, affecting Windows and
users of
innodb_file_per_table only.
If you are using
innodb_file_per_table on
Windows, you can work around this new issue by adding the
line innodb_flush_method= unbuffered to
the my.cnf or
my.ini file.
(Bug #7496)
InnoDB: 32-bit mysqld
binaries built on HP-UX 11 did not work with
InnoDB files greater than 2 GB in size.
(Bug #6189)

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.