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 expression
ORDER 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.