End of Product Lifecycle. Active 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.
This is a bugfix release for the MySQL 4.1 release family.
Functionality added or changed:
Incompatible Change:
The prepared_stmt_count system
variable has been converted to the
Prepared_stmt_count global
status variable (viewable with the
SHOW GLOBAL
STATUS statement).
(Bug#23159)
Incompatible Change:
Previously, the DATE_FORMAT()
function returned a binary string. Now it returns a string with
a character set and collation given by
character_set_connection and
collation_connection so that it
can return month and weekday names containing non-ASCII
characters.
(Bug#22646)
Important Change:
When using a MERGE table, the definition of
the table and the underlying MyISAM tables
are checked each time the tables are opened for access
(including any SELECT or
INSERT statement). Each table is
compared for column order, types, sizes, and associated indexes.
If there is a difference in any one of the tables, the statement
will fail.
INSERT DELAYED statements on
BLACKHOLE tables are now rejected, due to the
fact that the BLACKHOLE storage engine does
not support them.
(Bug#27998)
The server now includes a timestamp in error messages that are
logged as a result of unhandled signals (such as mysqld
got signal 11 messages).
(Bug#24878)
The --memlock option relies on
system calls that are unreliable on some operating systems. If a
crash occurs, the server now checks whether
--memlock was specified and if so
issues some information about possible workarounds.
(Bug#22860)
If the user specified the server options
--max-connections= or
N
--table-cache=, a warning would be given in some cases that some
values were recalculated, with the result that
M
--table-cache could be assigned
greater value.
In such cases, both the warning and the increase in the
--table-cache value were
completely harmless. Note also that it is not possible for the
MySQL Server to predict or to control limitations on the maximum
number of open files, since this is determined by the operating
system.
The value of --table-cache is no
longer increased automatically, and a warning is now given only
if some values had to be decreased due to operating system
limits.
(Bug#21915)
mysqldump --single-transaction now uses
START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT
*/ rather than
BEGIN to start
a transaction, so that a consistent snapshot will be used on
those servers that support it.
(Bug#19660)
A dependency on the Intel runtime libraries existed in the
shared- RPMs
for the IA-64 CPU of some versions of MySQL 4.1 (4.1.16, 4.1.20,
and 4.1.22). This has been resolved.
(Bug#18776)xxx
Bugs fixed:
Performance:
InnoDB exhibited thread thrashing with more
than 50 concurrent connections under an update-intensive
workload.
(Bug#22868)
Performance:
InnoDB showed substandard performance with
multiple queries running concurrently.
(Bug#15815)
Security Fix:
The requirement of the DROP
privilege for RENAME TABLE was
not enforced.
(Bug#27515, CVE-2007-2691)
Incompatible Change:
INSERT DELAYED statements are not
supported for MERGE tables, but the
MERGE storage engine was not rejecting such
statements, resulting in table corruption. Applications
previously using INSERT DELAYED
into MERGE table will break when upgrading to
versions with this fix. To avoid the problem, remove
DELAYED from such statements.
(Bug#26464)
Incompatible Change:
For ENUM columns that had
enumeration values containing commas, the commas were mapped to
0xff internally. However, this rendered the
commas indistinguishable from true 0xff
characters in the values. This no longer occurs. However, the
fix requires that you dump and reload any tables that have
ENUM columns containing any true
0xff values. Dump the tables using
mysqldump with the current server before
upgrading from a version of MySQL 4.1 older than 4.1.23 to
version 4.1.23 or newer.
(Bug#24660)
MySQL Cluster:
When an API node sent more than 1024 signals in a single batch,
NDB would process only the first
1024 of these, and then hang.
(Bug#28443)
MySQL Cluster: In some circumstances, shutting down the cluster could cause connected mysqld processes to crash. (Bug#25668)
MySQL Cluster:
The management client command
displayed
the message node_id STATUSNode when node_id:
not connectednode_id
was not the node ID of a data node.
The ALL STATUS command in the cluster
management client still displays status information for data
nodes only. This is by design. See
Section 15.5.2, “Commands in the MySQL Cluster Management Client”, for more
information.
Replication:
GRANT statements were not
replicated if the server was started with the
--replicate-ignore-table or
--replicate-wild-ignore-table
option.
(Bug#25482)
Replication:
Changes to the lc_time_names
system variable were not replicated.
(Bug#22645)
Replication:
SQL statements close to the size of
max_allowed_packet could
produce binary log events larger than
max_allowed_packet that could
not be read by slave servers.
(Bug#19402)
Replication: If a slave server closed its relay log (for example, due to an error during log rotation), the I/O thread did not recognize this and still tried to write to the log, causing a server crash. (Bug#10798)
Replication:
Transient errors in replication from master to slave may trigger
multiple Got fatal error 1236: 'binlog truncated in the
middle of event' errors on the slave.
(Bug#4053)
Cluster Replication: Some queries that updated multiple tables were not backed up correctly. (Bug#27748)
Cluster API:
libndbclient.so was not versioned.
(Bug#13522)
The mysqlserver.lib library on Windows had
many missing symbols.
(Bug#29007)
EXPLAIN for a query on an empty
table immediately after its creation could result in a server
crash.
(Bug#28272)
The second execution of a prepared statement from a
UNION query with ORDER
BY RAND() caused the server to crash.
(Bug#27937)
Changes to some system variables should invalidate statements in the query cache, but invalidation did not happen. (Bug#27792)
Comparisons using row constructors could fail for rows
containing NULL values.
(Bug#27704)
Incorrect results could be returned for some queries that
contained a select list expression with IN or
BETWEEN together with an
ORDER BY or GROUP BY on
the same expression using NOT IN or
NOT BETWEEN.
(Bug#27532)
The fix for Bug#17212 provided correct sort order for misordered output of certain queries, but caused significant overall query performance degradation. (Results were correct (good), but returned much more slowly (bad).) The fix also affected performance of queries for which results were correct. The performance degradation has been addressed. (Bug#27531)
Passing nested row expressions with different structures to an
IN predicate caused a server crash.
(Bug#27484)
The error message for error number 137 did
not report which database/table combination reported the
problem.
(Bug#27173)
Storing NULL values in spatial fields caused
excessive memory allocation and crashes on some systems.
(Bug#27164)
In a MEMORY table, using a
BTREE index to scan for updatable rows could
lead to an infinite loop.
(Bug#26996)
For MERGE tables defined on underlying tables
that contained a short VARCHAR
column (shorter than four characters), using
ALTER TABLE on at least one but
not all of the underlying tables caused the table definitions to
be considered different from that of the
MERGE table, even if the
ALTER TABLE did not change the
definition.
In addition, when the underlying tables contained a
TINYINT or
CHAR(1) column, the MERGE
storage engine incorrectly reported that they differed from the
MERGE table in certain cases.
(Bug#26881)
Added support for --debugger=dbx for
mysql-test-run.pl and added support for
--debugger=devenv,
--debugger=DevEnv, and
--debugger=.
(Bug#26792)/path/to/devenv
The range optimizer could cause the server to run out of memory. (Bug#26625)
The range optimizer could consume a combinatorial amount of
memory for certain classes of WHERE clauses.
(Bug#26624)
For MyISAM tables,
COUNT(*) could return an
incorrect value if the WHERE clause compared
an indexed TEXT column to the
empty string (''). This happened if the
column contained empty strings and also strings starting with
control characters such as tab or newline.
(Bug#26231)
LOAD DATA
INFILE sent an okay to the client before writing the
binary log and committing the changes to the table had finished,
thus violating ACID requirements.
(Bug#26050)
X() IS NULL and Y() IS
NULL comparisons failed when
X() and
Y() returned
NULL.
(Bug#26038)
If a thread previously serviced a connection that was killed, excessive memory and CPU use by the thread occurred if it later serviced a connection that had to wait for a table lock. (Bug#25966)
Index hints (USE INDEX, IGNORE
INDEX, FORCE INDEX) cannot be used
with FULLTEXT indexes, but were not being
ignored.
(Bug#25951)
Running CHECK TABLE concurrently
with a SELECT,
INSERT or other statement on
Windows could corrupt a MyISAM table.
(Bug#25712)
In certain cases it could happen that deleting a row corrupted
an RTREE index. This affected indexes on
spatial columns.
(Bug#25673)
The InnoDB parser sometimes did not account
for null bytes, causing spurious failure of some queries.
(Bug#25596)
mysql_stmt_fetch() did an
invalid memory deallocation when used with the embedded server.
(Bug#25492)
Referencing an ambiguous column alias in an expression in the
ORDER BY clause of a query caused the server
to crash.
(Bug#25427)
perror crashed on some platforms due to
failure to handle a NULL pointer.
(Bug#25344)
Difficult repair or optimization operations could cause an assertion failure, resulting in a server crash. (Bug#25289)
A reference to a nonexistent column in the ORDER
BY clause of an UPDATE ... ORDER BY
statement could cause a server crash.
(Bug#25126)
A return value of -1 from user-defined
handlers was not handled well and could result in conflicts with
server code.
(Bug#24987)
Duplicate entries were not assessed correctly in a
MEMORY table with a BTREE
primary key on a utf8
ENUM column.
(Bug#24985)
The result set of a query that used WITH
ROLLUP and DISTINCT could lack some
rollup rows (rows with NULL values for
grouping attributes) if the GROUP BY list
contained constant expressions.
(Bug#24856)
Accessing a fixed record format table with a crashed key definition results in server/myisamchk segmentation fault. (Bug#24855)
mysqld_multi and
mysqlaccess looked for option files in
/etc even if the
--sysconfdir option for
configure had been given to specify a
different directory.
(Bug#24780)
Certain joins using Range checked for each
record in the query execution plan could cause the
server to crash.
(Bug#24776)
If there was insufficient memory available to mysqld, this could sometimes cause the server to hang during startup. (Bug#24751)
Optimizations that are legal only for subqueries without tables
and WHERE conditions were applied for any
subquery without tables.
(Bug#24670)
If an ORDER BY or GROUP BY
list included a constant expression being optimized away and, at
the same time, containing single-row subselects that returned
more that one row, no error was reported. If a query required
sorting by expressions containing single-row subselects that
returned more than one row, execution of the query could cause a
server crash.
(Bug#24653)
For ALTER TABLE, using
ORDER BY
could cause a
server crash. Now the expressionORDER BY clause allows
only column names to be specified as sort criteria (which was
the only documented syntax, anyway).
(Bug#24562)
mysqltest crashed with a stack overflow. (Bug#24498)
Attempts to access a MyISAM table with a
corrupt column definition caused a server crash.
(Bug#24401)
ALTER ENABLE KEYS or ALTER TABLE
DISABLE KEYS combined with another
ALTER TABLE option other than
RENAME TO did nothing. In addition, if ALTER
TABLE was used on a table having disabled keys, the keys of the
resulting table were enabled.
(Bug#24395)
When opening a corrupted .frm file during a
query, the server crashes.
(Bug#24358)
The --extern option for
mysql-test-run.pl did not function correctly.
(Bug#24354)
The MERGE storage engine could return
incorrect results when several index values that compare
equality were present in an index (for example,
'gross' and 'gross ',
which are considered equal but have different lengths).
(Bug#24342)
Foreign key identifiers for InnoDB tables
could not contain certain characters.
(Bug#24299)
ALTER TABLE statements that
performed both RENAME TO and
{ENABLE|DISABLE} KEYS operations caused a
server crash.
(Bug#24219)
There was a race condition in the InnoDB
fil_flush_file_spaces() function.
(Bug#24089)
This regression was introduced by Bug#15653.
Hebrew-to-Unicode conversion failed for some characters. Definitions for the following Hebrew characters (as specified by the ISO/IEC 8859-8:1999) were added: LEFT-TO-RIGHT MARK (LRM), RIGHT-TO-LEFT MARK (RLM) (Bug#24037)
The server was built even when configure was
run with the --without-server
option.
(Bug#23973)
See also Bug#32898.
ISNULL(DATE(NULL)) and
ISNULL(CAST(NULL AS DATE))
erroneously returned false.
(Bug#23938)
Using CAST() to convert
DATETIME values to numeric values
did not work.
(Bug#23656)
LAST_DAY('0000-00-00') could
cause a server crash.
(Bug#23653)
DOUBLE values such as
20070202191048.000000 were being treated as
illegal arguments by WEEK().
(Bug#23616)
The stack size for NetWare binaries was increased to 128KB to prevent problems caused by insufficient stack size. (Bug#23504)
If elements in a nontop-level IN subquery
were accessed by an index and the subquery result set included a
NULL value, the quantified predicate that
contained the subquery was evaluated to NULL
when it should return a non-NULL value.
(Bug#23478)
User-defined variables could consume excess memory, leading to a
crash caused by the exhaustion of resources available to the
MEMORY storage engine, due to the fact that
this engine is used by MySQL for variable storage and
intermediate results of GROUP BY queries.
Where SET had been used, such a condition
could instead give rise to the misleading error message
You may only use constant expressions with
SET, rather than Out of memory (Needed
NNNNNN bytes).
(Bug#23443)
For ODBC compatibility, MySQL supports use of WHERE
for
col_name IS NULLDATE or
DATETIME columns that are
NOT NULL, to allow column values of
'0000-00-00' or '0000-00-00
00:00:00' to be selected. However, this was not
working for WHERE clauses in
DELETE statements.
(Bug#23412)
The arguments to the ENCODE() and
the DECODE() functions were not
printed correctly, causing problems in the output of
EXPLAIN
EXTENDED and in view definitions.
(Bug#23409)
A table created with the ROW_FORMAT = FIXED
table option lost the option if an index was added or dropped
with CREATE INDEX or
DROP INDEX.
(Bug#23404)
For not-yet-authenticated connections, the
Time column in SHOW
PROCESSLIST was a random value rather than
NULL.
(Bug#23379)
A deadlock could occur, with the server hanging on
Closing tables, with a sufficient number of
concurrent INSERT DELAYED,
FLUSH TABLES,
and ALTER TABLE operations.
(Bug#23312)
MySQL failed to build on Linux/Alpha. (Bug#23256)
This regression was introduced by Bug#21250.
If COMPRESS() returned
NULL, subsequent invocations of
COMPRESS() within a result set or
within a trigger also returned NULL.
(Bug#23254)
NOW() returned the wrong value in
statements executed at server startup with the
--init-file option.
(Bug#23240)
If there was insufficient memory to store or update a blob
record in a MyISAM table then the table will
marked as crashed.
(Bug#23196)
A compressed MyISAM table that became
corrupted could crash myisamchk and possibly
the MySQL Server.
(Bug#23139)
The number of setsockopt() calls performed
for reads and writes to the network socket was reduced to
decrease system call overhead.
(Bug#22943)
mysql did not check for errors when fetching data during result set printing. (Bug#22913)
The return value from my_seek() was ignored.
(Bug#22828)
The Handler_rollback status
variable sometimes was incremented when no rollback had taken
place.
(Bug#22728)
SET lc_time_names = allowed only exact literal values, not expression
values.
(Bug#22647)value
Storing values specified as hexadecimal values 64 or more bits
long into BIGINT or
BIGINT UNSIGNED columns did not raise any
warning or error if the value was out of range.
(Bug#22533)
Queries using a column alias in an expression as part of an
ORDER BY clause failed, an example of such a
query being SELECT mycol + 1 AS mynum FROM mytable
ORDER BY 30 - mynum.
(Bug#22457)
SHOW COLUMNS reported some
NOT NULL columns as NULL.
(Bug#22377)
A server crash occurred when using LOAD
DATA to load a table containing a NOT
NULL spatial column, when the statement did not load
the spatial column. Now a NULL supplied to NOT NULL
column error occurs.
(Bug#22372)
Some small double precision numbers (such as
1.00000001e-300) that should have been
accepted were truncated to zero.
(Bug#22129)
Changing the value of MI_KEY_BLOCK_LENGTH in
myisam.h and recompiling MySQL resulted in
a myisamchk that saw existing
MyISAM tables as corrupt.
(Bug#22119)
A crash of the MySQL Server could occur when unpacking a
BLOB column from a row in a
corrupted MyISAM table. This could happen when trying to repair
a table using either REPAIR TABLE
or myisamchk; it could also happen when
trying to access such a “broken” row using
statements like SELECT if the
table was not marked as crashed.
(Bug#22053)
Trailing spaces were not removed from Unicode
CHAR column values when used in
indexes. This resulted in excessive usage of storage space, and
could affect the results of some ORDER BY
queries that made use of such indexes.
When upgrading, it is necessary to re-create any existing
indexes on Unicode CHAR columns
in order to take advantage of the fix. This can be done by
using a REPAIR TABLE statement
on each affected table.
STR_TO_DATE() returned
NULL if the format string contained a space
following a nonformat character.
(Bug#22029)
Adding a day, month, or year interval to a
DATE value produced a
DATE, but adding a week interval
produced a DATETIME value. Now
all produce a DATE value.
(Bug#21811)
It was possible to use DATETIME
values whose year, month, and day parts were all zeroes but
whose hour, minute, and second parts contained nonzero values,
an example of such an illegal
DATETIME being
'0000-00-00 11:23:45'.
This fix was reverted in MySQL 4.1.24.
See also Bug#25301.
Through the C API, the member strings in
MYSQL_FIELD for a query that contains
expressions may return incorrect results.
(Bug#21635)
When updating a table that used a JOIN of the
table itself (for example, when building trees) and the table
was modified on one side of the expression, the table would
either be reported as crashed or the wrong rows in the table
would be updated.
(Bug#21310)
InnoDB: During a restart of the MySQL Server
that followed the creation of a temporary table using the
InnoDB storage engine, MySQL failed to clean
up in such a way that InnoDB still attempted
to find the files associated with such tables.
(Bug#20867)
Selecting into variables sometimes returned incorrect wrong results. (Bug#20836)
Range searches on columns with an index prefix could miss records. (Bug#20732)
Some long error messages were printed incorrectly. (Bug#20710)
The creation of MySQL system tables was not checked for by mysql-test-run.pl. (Bug#20166)
The BUILD/check-cpu script did not recognize Celeron processors. (Bug#20061)
ORDER BY values of the
DOUBLE or
DECIMAL types could change the
result returned by a query.
(Bug#19690)
mysqltest incorrectly tried to retrieve result sets for some queries where no result set was available. (Bug#19410)
The server could send incorrect column count information to the client for queries that produce a larger number of columns than can fit in a two-byte number. (Bug#19216)
The server might fail to use an appropriate index for
DELETE when ORDER
BY, LIMIT, and a nonrestricting
WHERE are present.
(Bug#17711)
mysql_fix_privilege_tables did not accept a password containing embedded space or apostrophe characters. (Bug#17700)
mysql would lose its connection to the server if its standard output was not writable. (Bug#17583)
No warning was issued for use of the DATA
DIRECTORY or INDEX DIRECTORY table
options on a platform that does not support them.
(Bug#17498)
mysql-test-run did not work correctly for RPM-based installations. (Bug#17194)
IN() and
CHAR() can return
NULL, but did not signal that to the query
processor, causing incorrect results for
IS NULL
operations.
(Bug#17047)
Conversion of DATETIME values in
numeric contexts sometimes did not produce a double
(YYYYMMDDHHMMSS.uuuuuu) value.
(Bug#16546)
For BOOLEAN mode full-text
searches on nonindexed columns, NULL rows
generated by a LEFT JOIN caused incorrect
query results.
(Bug#14708, Bug#25637)
mysqldump --order-by-primary failed if the primary key name was an identifier that required quoting. (Bug#13926)
INSERT...ON DUPLICATE KEY UPDATE could cause
Error 1032: Can't find record in ... for
inserts into an InnoDB table unique index
using key column prefixes with an underlying
utf8 string column.
(Bug#13191)
Lack of validation for input and output
TIME values resulted in several
problems: SEC_TO_TIME() in some
cases did not clip large values to the
TIME range appropriately;
SEC_TO_TIME() treated
BIGINT UNSIGNED values as signed; only
truncation warnings were produced when both truncation and
out-of-range TIME values
occurred.
(Bug#11655, Bug#20927)
Metadata for columns calculated from scalar subqueries was limited to integer, double, or string, even if the actual type of the column was different. (Bug#11032)
The internal functions for table preparation, creation, and
alteration were not re-execution friendly, causing problems in
code that: repeatedly altered a table; repeatedly created and
dropped a table; opened and closed a cursor on a table, altered
the table, and then reopened the cursor; used
ALTER TABLE to change a table's
current AUTO_INCREMENT value; created indexes
on utf8 columns.
Re-execution of CREATE DATABASE,
CREATE TABLE, and
ALTER TABLE statements as
prepared statements also caused incorrect results or crashes.
(Bug#4968, Bug#6895, Bug#19182, Bug#19733, Bug#22060, Bug#24879)

User Comments
This release isn't available in binary form, except for paying customers, since MySQL 4.1 is in the extended support phase. See this forum post for confirmation:
http://forums.mysql.com/read.php?117,159239,192126
--df
Add your own comment.