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)
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”.
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 MySQL-shared-compat Linux RPM now
includes the 3.23 as well as the 4.0
libysqlclient.so shared libraries. (Bug#6342)
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.
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 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 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.4.3, “How MySQL Handles a Full Disk”.
Bugs fixed:
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)
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)
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)
InnoDB: Return a sensible error code from DISCARD
TABLESPACE if it fails because the table is
referenced by a FOREIGN KEY.
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.
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: 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: Use the fcntl() file flush method
on Mac OS X versions 10.3 and up. Apple had disabled
fsync() in Mac OS X for internal disk
drives, which caused corruption at power outages.
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)
Added a --default-character-set option to
mysqladmin to avoid problems when the
default character set is not latin1. (Bug#7524)
Fix a problem with truncation of FLOAT
values. (Bug#7361)
Fixed a bug in PROCEDURE ANALYSE(), which
did not quote some ENUM values properly.
(Bug#2813)
Fixed a bug that caused incorrect results for complex datetime
expressions containing casts of datetime values to
TIME or DATE values.
(Bug#6914)
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)
Corrected a problem with mysqld_safe not properly capturing output from ps. (Bug#5878)
Fixed a bug that caused a linking failure when linking both the MySQL client library and IMAP library. (Bug#7428)
Fixed table corruption bug when using INSERT
DELAYED with prepared statements.
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)
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, 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 that --expire-log-days was not honored
if using only transactions. (Bug#7236)
Fixed that a slave could crash after replicating many
ANALYZE TABLE, OPTIMIZE
TABLE, or REPAIR TABLE statements
from the master. (Bug#6461, Bug#7658)

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.