Table of Contents
InnoDBThis appendix lists the changes from version to version in the MySQL source code through the latest version of MySQL 4.1.
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. 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 Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Note that we tend to update the manual at the same time we make changes to MySQL. If you find a recent version of MySQL listed here that you can't find on our download page (http://dev.mysql.com/downloads/), it means that the version has not yet been released.
The date mentioned with a release version is the date of the last BitKeeper ChangeSet on which the release was based, not the date when the packages were made available. The binaries are usually made available a few days after the date of the tagged ChangeSet, because building and testing all packages takes some time.
The manual included in the source and binary distributions may not be fully accurate when it comes to the release changelog entries, because the integration of the manual happens at build time. For the most up-to-date release changelog, please refer to the online version instead.
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. 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 Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
Version 4.1 of the MySQL server includes many enhancements and new features. Binaries for this version are available for download at http://dev.mysql.com/downloads/mysql-4.1.html.
The SUBSTRING() function can now take a
negative value for the pos (position)
argument. See Section 12.3, “String Functions�.
Subqueries and derived tables (unnamed views). See Section 13.2.8, “Subquery Syntax�.
INSERT ... ON DUPLICATE KEY UPDATE ...
syntax. This allows you to UPDATE an existing
row if the insert would cause a duplicate value in a
PRIMARY or UNIQUE key.
(REPLACE allows you to overwrite an existing
row, which is something entirely different.) See
Section 13.2.4, “INSERT Syntax�.
A newly designed GROUP_CONCAT() aggregate
function. See
Section 12.10, “Functions and Modifiers for Use with GROUP BY Clauses�.
Extensive Unicode (UTF8) support.
Table names and column names now are stored in
UTF8. This makes MySQL more flexible, but
might cause some problems upgrading if you have table or column
names that use characters outside of the standard 7-bit US-ASCII
range. See Section 2.11.1, “Upgrading from MySQL 4.0 to 4.1�.
Character sets can be defined per column, table, and database.
New key cache for MyISAM tables with many
tunable parameters. You can have multiple key caches, preload
index into caches for batches...
BTREE index on HEAP
tables.
Support for OpenGIS spatial types (geographical data). See Chapter 16, Spatial Extensions.
SHOW WARNINGS shows warnings for the last
command. See Section 13.5.4.21, “SHOW WARNINGS Syntax�.
Faster binary protocol with prepared statements and parameter binding. See Section 17.2.4, “C API Prepared Statements�.
You can now issue multiple statements with a single C API call and then read the results in one go. See Section 17.2.9, “C API Handling of Multiple Statement Execution�.
Create Table: CREATE [TEMPORARY] TABLE [IF NOT EXISTS]
table2 LIKE table1.
Server based HELP command that can be used in
the mysql command-line client (and other
clients) to get help for SQL statements.
For a full list of changes, please refer to the changelog sections for each individual 4.1.x release.
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. 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 Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
This is a bugfix release for the MySQL 4.1 release family.
Functionality added or changed:
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)
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)
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)
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)
Bugs fixed:
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)
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)
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)
NDB Cluster: In some circumstances,
shutting down the cluster could cause connected
mysqld processes to crash. (Bug#25668)
mysqltest incorrectly tried to retrieve result sets for some queries where no result set was available. (Bug#19410)
mysqltest crashed with a stack overflow. (Bug#24498)
The server was built even when configure
was run with the --without-server option.
(Bug#23973)
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)
The BUILD/check-cpu script did not recognize Celeron processors. (Bug#20061)
InnoDB exhibited thread thrashing with more
than 50 concurrent connections under an update-intensive
workload. (Bug#22868)
InnoDB showed substandard performance with
multiple queries running concurrently. (Bug#15815)
mysql_fix_privilege_tables did not handle a password containing embedded space or apostrophe characters. (Bug#17700)
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)
SET lc_time_names =
allowed only exact
literal values, not expression values. (Bug#22647)
value
Changes to the lc_time_names system
variable were not replicated. (Bug#22645)
mysqldump --order-by-primary failed if the primary key name was an identifier that required quoting. (Bug#13926)
Re-execution of CREATE DATABASE,
CREATE TABLE, and ALTER
TABLE statements as prepared statements caused
incorrect results or crashes. (Bug#22060)
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. (Bug#4968, Bug#6895, Bug#19182, Bug#19733)
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)
Referencing an ambiguous column alias in an expression in the
ORDER BY clause of a query caused the
server to crash. (Bug#25427)
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)
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)
A compressed MyISAM table that became
corrupted could crash myisamchk and
possibly the MySQL Server. (Bug#23139)
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.
Note: 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.
The stack size for NetWare binaries was increased to 128KB to prevent problems caused by insufficient stack size. (Bug#23504)
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)
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)
STR_TO_DATE() returned
NULL if the format string contained a space
following a non-format character. (Bug#22029)
Selecting into variables sometimes returned incorrect wrong results. (Bug#20836)
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)
The --extern option for
mysql-test-run.pl did not function
correctly. (Bug#24354)
ALTER TABLE statements that performed both
RENAME TO and {ENABLE|DISABLE}
KEYS operations caused a server crash. (Bug#24089)
There was a race condition in the InnoDB
fil_flush_file_spaces() function. (Bug#24089)
Some small double precision numbers (such as
1.00000001e-300) that should have been
accepted were truncated to zero. (Bug#22129)
LAST_DAY('0000-00-00') could cause a server
crash. (Bug#23653)
Through the C API, the member strings in
MYSQL_FIELD for a query that contains
expressions may return incorrect results. (Bug#21635)
IN() can return NULL,
but did not signal that to the query processor, causing
incorrect results for IS NULL operations.
(Bug#17047)
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)
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)
If elements in a non-top-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)
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)
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)
mysql did not check for errors when fetching data during result set printing. (Bug#22913)
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)
For not-yet-authenticated connections, the
Time column in SHOW
PROCESSLIST was a random value rather than
NULL. (Bug#23379)
The Handler_rollback status variable
sometimes was incremented when no rollback had taken place.
(Bug#22728)
Lack of validation for input and output
TIME values resulted in several problems:
SEC_TO_TIME() within subqueries incorrectly
clipped large values; 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)
Range searches on columns with an index prefix could miss records. (Bug#20732)
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)
If COMPRESS() returned
NULL, subsequent invocations of
COMPRESS() within a result set or within a
trigger also returned NULL. (Bug#23254)
mysql would lose its connection to the server if its standard output was not writable. (Bug#17583)
mysql-test-run did not work correctly for RPM-based installations. (Bug#17194)
The return value from my_seek() was
ignored. (Bug#22828)
MySQL would fail to build on the Alpha platform. (Bug#23256)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. 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 Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
This is a bugfix release for the MySQL 4.1 release family.
This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Network (a commercial MySQL offering). For more details please see http://www.mysql.com/network/advisors.html.
Functionality added or changed:
If the user specified the server options
--max-connections=
or
N--table-open-cache=,
a warning would be given in some cases that some values were
recalculated, with the result that
M--table-open-cache could be assigned greater
value.
It should be noted that, in such cases, both the warning and
the increase in the --table-open-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 recalculation code has now been fixed to ensure that the
value of --table-open-cache is no longer
increased automatically, and that a warning is now given only
if some values had to be decreased due to operating system
limits.
The mysqld manpage has been reclassified from volume 1 to volume 8. (Bug#21220)
MySQL now can do stack dumps on x86_64 and
i386/NPTL systems. (Bug#21250)
The LOAD DATA FROM MASTER and LOAD
TABLE FROM MASTER statements are deprecated. See
Section 13.6.2.2, “LOAD DATA FROM MASTER Syntax�, for recommended
alternatives. (Bug#18822, Bug#9125, Bug#12187, Bug#14399,
Bug#15025, Bug#20596)
A warning now is issued if the client attempts to set the
SQL_LOG_OFF variable without the
SUPER privilege. (Bug#16180)
Bugs fixed:
Deleting entries from a large MyISAM index
could cause index corruption when it needed to shrink. Deletes
from an index can happen when a record is deleted, when a key
changes and must be moved, and when a key must be un-inserted
because of a duplicate key. This can also happen in
REPAIR TABLE when a duplicate key is found
and in myisamchk when sorting the records
by an index. (Bug#22384)
Setting myisam_repair_threads caused any
repair operation on a MyISAM table to fail
to update the cardinality of indexes, instead making them
always equal to 1. (Bug#18874)
Within a prepared statement, SELECT (COUNT(*) =
1) (or similar use of other aggregate functions) did
not return the correct result for statement re-execution. (Bug#21354)
DELETE IGNORE could hang for foreign key
parent deletes. (Bug#18819)
Redundant binary log LAST_INSERT_ID events
could be generated;
LAST_INSERT_ID(
didn't return the value of expr)expr;
LAST_INSERT_ID() could return the value
generated by the current statement if the call happens after
value generation, as in:
CREATE TABLE t1 (i INT AUTO_INCREMENT PRIMARY KEY, j INT); INSERT INTO t1 VALUES (NULL, 0), (NULL, LAST_INSERT_ID());
FROM_UNIXTIME() did not accept arguments up
to POWER(2,31)-1, which it had previously.
(Bug#9191)
A literal string in a GROUP BY clause could
be interpreted as a column name. (Bug#14019)
WITH ROLLUP could group unequal values.
(Bug#20825)
LIKE searches failed for indexed
utf8 character columns. (Bug#20471)
The optimizer sometimes mishandled R-tree indexes for
GEOMETRY data types, resulting in a server
crash. (Bug#21888)
Entries in the slow query log could have an incorrect
Rows_examined value. (Bug#12240)
Insufficient memory
(myisam_sort_buffer_size) could cause a
server crash for several operations on
MyISAM tables: repair table, create index
by sort, repair by sort, parallel repair, bulk insert. (Bug#23175)
REPAIR TABLE ... USE_FRM could cause a
server crash or hang when used for a MyISAM
table in a database other than the default database. (Bug#22562)
OPTIMIZE TABLE with
myisam_repair_threads > 1 could result
in MyISAM table corruption. (Bug#8283)
The result for CAST() when casting a value
to UNSIGNED was limited to the maximum
signed BIGINT value (9223372036854775808),
not the maximum unsigned value (18446744073709551615). (Bug#8663)
For multiple-table UPDATE statements,
storage engines were not notified of duplicate-key errors.
(Bug#21381)
Successive invocations of a COUNT(*) query
containing a join on two MyISAM tables and
a WHERE clause of the form WHERE
( yielded different results. (Bug#21019)
table1.column1
=
table2.column2)
OR
table2.column2
IS NULL
Using ALTER TABLE to add an
ENUM column with an enumeration value
containing 0xFF caused the name of the
first table column to be lost. (Bug#20922)
PROCEDURE ANALYSE() returned incorrect
values of M
FLOAT( and
M,
D)DOUBLE(. (Bug#20305)
M,
D)
A query that used GROUP BY and an
ALL or ANY quantified
subquery in a HAVING clause could trigger
an assertion failure. (Bug#21853)
For an ENUM column that used the
ucs2 character set, using ALTER
TABLE to modify the column definition caused the
default value to be lost. (Bug#20108)
Creating a TEMPORARY table with the same
name as an existing table that was locked by another client
could result in a lock conflict for DROP TEMPORARY
TABLE because the server unnecessarily tried to
acquire a name lock. (Bug#21096)
Incorporated some portability fixes into the definition of
__attribute__ in
my_global.h. (Bug#2717)
In the package of pre-built time zone tables that is available
for download at
http://dev.mysql.com/downloads/timezones.html, the tables
now explicitly use the utf8 character set
so that they work the same way regardless of the system
character set value. (Bug#21208)
The build process incorrectly tried to overwrite
sql/lex_hash.h. This caused the build to
fail when using a shadow link tree pointing to original
sources that were owned by another account. (Bug#18888)
Execution of a prepared statement that uses an
IN subquery with aggregate functions in the
HAVING clause could cause a server crash.
(Bug#22085)
Selecting from a MERGE table could result
in a server crash if the underlying tables had fewer indexes
than the MERGE table itself. (Bug#21617,
Bug#22937)
SUBSTR() results sometimes were stored
improperly into a temporary table when multi-byte character
sets were used. (Bug#20204)
Parallel builds occasionally failed on Solaris. (Bug#16282)
The source distribution failed to compile when configured with
the --without-geometry option. (Bug#12991)
The server returns a more informative error message when it
attempts to open a MERGE table that has
been defined to use non-MyISAM tables. (Bug#10974)
On Mac OS X, zero-byte read() or
write() calls to an SMB-mounted filesystem
could return a non-standard return value, leading to data
corruption. Now such calls are avoided. (Bug#12620)
For INSERT ... ON DUPLICATE KEY UPDATE, use
of
VALUES(
within the col_name)UPDATE clause sometimes was
handled incorrectly. (Bug#21555)
Table aliases in multiple-table DELETE
statements sometimes were not resolved. (Bug#21392)
EXPORT_SET() did not accept arguments with
coercible character sets. (Bug#21531)
The --collation-server server option was
being ignored. With the fix for this problem, if you choose a
non-default character set with
--character-set-server, you should also use
--collation-server to specify the collation.
(Bug#15276)
A subquery that uses an index for both the
WHERE and ORDER BY
clauses produced an empty result. (Bug#21180)
Queries containing a subquery that used aggregate functions could return incorrect results. (Bug#16792)
The MD5(), SHA1(), and
ENCRYPT() functions should return a binary
string, but the result sometimes was converted to the
character set of the argument. MAKE_SET()
and EXPORT_SET() now use the correct
character set for their default separators, resulting in
consistent result strings which can be coerced according to
normal character set rules. (Bug#20536)
For a MyISAM table with a
FULLTEXT index, compression with
myisampack or a check with
myisamchk after compression resulted in
table corruption. (Bug#19702)
The optimizer could produce an incorrect result after
AND with collations such as
latin1_german2_ci,
utf8_czech_ci, and
utf8_lithianian_ci. (Bug#9509)
character_set_results can be
NULL to signify “no
conversion,� but some code did not check for
NULL, resulting in a server crash. (Bug#21913)
The myisam_stats_method variable was
mishandled when set from an option file or on the command
line. (Bug#21054)
libmysqld produced some warnings to
stderr which could not be silenced. These
warnings now are suppressed. (Bug#13717)
If a column definition contained a character set declaration,
but a DEFAULT value began with an
introducer, the introducer character set was used as the
column character set. (Bug#20695)
Some Linux-x86_64-icc packages (of previous releases) mistakenly contained 32-bit binaries. Only ICC builds are affected, not gcc builds. Solaris and FreeBSD x86_64 builds are not affected. (Bug#22238)
For TIME_FORMAT(), the
%H and %k format
specifiers can return values larger than two digits (if the
hour is greater than 99), but for some query results that
contained three-character hours, column values were truncated.
(Bug#19844)
For table-format output, mysql did not always calculate columns widths correctly for columns containing multi-byte characters in the column name or contents. (Bug#17939)
Views could not be updated within a stored function or trigger. (Bug#17591)
Usernames have a maximum length of 16 characters (even if they contain multi-byte characters), but were being truncated to 16 bytes. (Bug#20393)
Database and table names have a maximum length of 64 characters (even if they contain multi-byte characters), but were being truncated to 64 bytes. (Bug#21432)
When using tables created under MySQL 4.1 with a 5.0 server,
if the tables contained VARCHAR columns,
for some queries the metadata sent to the client could have an
empty column name. (Bug#14897)
On 64-bit systems, use of the cp1250
character set with a primary key column in a
LIKE clause caused a server crash for
patterns having letters in the range 128..255. (Bug#19741)
A subquery in the WHERE clause of the outer
query and using IN and GROUP
BY returned an incorrect result. (Bug#16255)
COUNT(*) queries with ORDER
BY and LIMIT could return the
wrong result. (Bug#21787)
Note: This problem was
introduced by the fix for Bug#9676, which limited the rows
stored in a temporary table to the LIMIT
clause. This optimization is not applicable to non-group
queries with aggregate functions. The current fix disables the
optimization in such cases.
Running SHOW MASTER LOGS at the same time
as binary log files were being switched would cause
mysqld to hang. (Bug#21965)
Adding ORDER BY to a SELECT
DISTINCT( query
could produce incorrect results. (Bug#21456)
expr)
For InnoDB tables, the server could crash
when executing NOT IN () subqueries. (Bug#21077)
mysqld --flush failed to flush
MyISAM table changes to disk following an
UPDATE statement for which no updated
column had an index. (Bug#20060)
The --with-collation option was not honored
for client connections. (Bug#7192)
NDB Cluster: The
ndb_size.pl script did not account for
TEXT and BLOB column
values correctly. (Bug#21204)
NDB Cluster: Attempting to create an
NDB table on a MySQL with an existing
non-Cluster table with the same name in the same database
could result in data loss or corruption. MySQL now issues a
warning when a SHOW TABLES or other
statement causing table discovery finds such a table. (Bug#21378)
NDB Cluster (NDB API): Attempting to read a
nonexistent tuple using Commit mode for
NdbTransaction::execute() caused node
failures. (Bug#22672)
NDB Cluster: Restoring a cluster failed if
there were any tables with 128 or more columns. (Bug#23502)
NDB Cluster: INSERT ... ON
DUPLICATE KEY UPDATE on an NDB
table could lead to deadlocks and memory leaks. (Bug#23200)
NDB Cluster: If a node restart could not be
performed from the REDO log, no node takeover took place. This
could cause partitions to be left empty during a system
restart. (Bug#22893)
NDB Cluster: Multiple node restarts in
rapid succession could cause a system restart to fail (Bug#22892), or induce a race condition (Bug#23210).
NDB Cluster: The node recovery algorithm
was missing a version check for tables in the
ALTER_TABLE_COMMITTED state (as opposed to
the TABLE_ADD_COMMITTED state, which has
the version check). This could cause inconsistent schemas
across nodes following node recovery. (Bug#21756)
NDB Cluster: The output for the
--help option used with
NDB executable programs
(ndbd, ndb_mgm,
ndb_restore, ndb_config,
and so on) referred to the Ndb.cfg file,
instead of my.cnf. (Bug#21585)
NDB Cluster: The ndb_mgm
management client did not set the exit status on errors,
always returning 0 instead. (Bug#21530)
NDB Cluster: Cluster logs were not rotated
following the first rotation cycle. (Bug#21345)
NDB Cluster: When inserting a row into an
NDB table with a duplicate value for a
non-primary unique key, the error issued would reference the
wrong key. (Bug#21072)
NDB Cluster: Under some circumstances,
local checkpointing would hang, keeping any unstarted nodes
from being started. (Bug#20895)
NDB Cluster: In some cases where
SELECT COUNT(*) from an
NDB table should have yielded an error,
MAX_INT was returned instead. (Bug#19914)
NDB Cluster: ndb_restore
did not always make clear that it had recovered successfully
from temporary errors while restoring a cluster backup. (Bug#19651)
NDB Cluster: A problem with takeover during
a system restart caused ordered indexes to be rebuilt
incorrectly. (Bug#15303)
NDB Cluster: The ndb_mgm
program was included in both the
MySQL-ndb-tools and
MySQL-ndb-management RPM packages,
resulting in a conflict if both were installed. Now
ndb_mgm is included only in
MySQL-ndb-tools. (Bug#21058)
NDB Cluster: ndb_size.pl
and ndb_error_reporter were missing from
RPM packages. (Bug#20426)
NDB Cluster: Setting
TransactionDeadlockDetectionTimeout to a
value greater than 12000 would cause scans to deadlock, time
out, fail to release scan records, until the cluster ran out
of scan records and stopped processing. (Bug#21800)
NDB Cluster: The server provided a
non-descriptive error message when encountering a fatally
corrupted REDO log. (Bug#21615)
NDB Cluster: A partial rollback could lead
to node restart failures. (Bug#21536)
NDB Cluster: The failure of a unique index
read due to an invalid schema version could be handled
incorrectly in some cases, leading to unpredictable results.
(Bug#21384)
NDB Cluster: In a cluster with more than 2
replicas, a manual restart of one of the data nodes could fail
and cause the other nodes in its nodegroup to shut down. (Bug#21213)
NDB Cluster: When the redo buffer ran out
of space, a Pointer too large error was
raised and the cluster could become unusable until restarted
with --initial. (Bug#20892)
NDB Cluster: In some situations with a high
disk-load, writing of the redo log could hang, causing a crash
with the error message GCP STOP
detected. (Bug#20904)
NDB Cluster: ndb_size.pl
and ndb_error_reporter were missing from
RPM packages. (Bug#20426)
NDB Cluster: The server failed with a
non-descriptive error message when out of data memory. (Bug#18475)
NDB Cluster: SELECT ... FOR
UPDATE failed to lock the selected rows. (Bug#18184)
NDB Cluster: Some queries involving joins
on very large NDB tables could crash the
MySQL server. (Bug#21059)
Character set collation was ignored in GROUP
BY clauses. (Bug#20709)
A query using WHERE did not
return consistent results on successive invocations. The
column
= constant OR
column IS NULLcolumn in each part of the
WHERE clause could be either the same
column, or two different columns, for the effect to be
observed. (Bug#21019)
A query using WHERE NOT
( yielded a
different result from the same query using the same
column < ANY
(subquery))column and
subquery with WHERE
(. (Bug#20975)
column > ANY
(subquery))
Using the extended syntax for TRIM()
— that is, TRIM(... FROM ...) —
caused erroneous output from EXPLAIN
EXTENDED statements. (Bug#17526)
DELETE with WHERE
condition on a BTREE-indexed column for a
MEMORY table deleted only the first matched
row. (Bug#9719)
For cross-database multiple-table UPDATE
statements, a user with all privileges for the default
database could update tables in another database for which the
user did not have UPDATE privileges. (Bug#7391)
mysql_install_db incorrectly had a blank first line. (Bug#20721)
Under heavy load (executing more than 1024 simultaneous complex queries), a problem in the code that handles internal temporary tables could lead to writing beyond allocated space and memory corruption. (Bug#21206)
Multiple invocations of the REVERSE()
function could return different results. (Bug#18243)
Conversion of TIMESTAMP values between UTC
and the local time zone resulted in some values having the
year 2069 rather than 1969. (Bug#16327)
Under certain circumstances,
AVG(
returned a value but
key_val)MAX(
returned an empty set due to incorrect application of
key_val)MIN()/MAX() optimization. (Bug#20954)
Using aggregate functions in subqueries yielded incorrect
results under certain circumstances due to incorrect
application of MIN()/MAX() optimization.
(Bug#20792)
Using > ALL with subqueries that return
no rows yielded incorrect results under certain circumstances
due to incorrect application of MIN()/MAX()
optimization. (Bug#18503)
Using ANY with “non-table�
subqueries such as SELECT 1 yielded
incorrect results under certain circumstances due to incorrect
application of MIN()/MAX() optimization.
(Bug#16302)
The use of WHERE in col_name
IS NULLSELECT statements
reset the value of LAST_INSERT_ID() to
zero. (Bug#14553)
Use of the join cache in favor of an index for ORDER
BY operations could cause incorrect result sorting.
(Bug#17212)
libmysqld returned TEXT
columns to the client as number of bytes, not number of
characters (which can be different for multi-byte character
sets). (Bug#19983)
End of Product LifecycleActive development and support for MySQL database server versions 3.23, 4.0, and 4.1 have ended. For MySQL 4.0 and 4.1, there is still extended support available, though. 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 Level 1 issues will still be fixed for those versions. Please consider upgrading to a recent version (MySQL 5.0 or 5.1).
This is a bugfix release for the MySQL 4.1 release family.
This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Network (a commercial MySQL offering). For more details please see http://www.mysql.com/network/advisors.html.
Functionality added or changed:
For spatial data types, the server formerly returned these as
VARSTRING values with a binary collation.
Now the server returns spatial values as
BLOB values. (Bug#10166)
Added the --set-charset option to
mysqlbinlog to allow the character set to
be specified for processing binary log files. (Bug#18351)
For a table with an AUTO_INCREMENT column,
SHOW CREATE TABLE now shows the next
AUTO_INCREMENT value to be generated. (Bug#19025)
The mysqldumpslow script has been moved from client RPM packages to server RPM packages. This corrects a problem where mysqldumpslow could not be used with a client-only RPM install, because it depends on my_print_defaults which is in the server RPM. (Bug#20216)
A new system variable, lc_time_names,
specifies the locale that controls the language used to
display day and month names and abbreviations. This variable
affects the output from the DATE_FORMAT(),
DAYNAME() and
MONTHNAME() functions. See
Section 5.10.9, “MySQL Server Locale Support�.
Bugs fixed:
Security fix: On Linux, and possibly other platforms using case-sensitive filesystems, it was possible for a user granted rights on a database to create or access a database whose name differed only from that of the first by the case of one or more letters. (CVE-2006-4226, Bug#17647)
Security fix: If a user has
access to MyISAM table
t, that user can create a
MERGE table m
that accesses t. However, if the
user's privileges on t are
subsequently revoked, the user can continue to access
t by doing so through
m. If this behavior is undesirable,
you can start the server with the new
--skip-merge option to disable the
MERGE storage engine. (Bug#15195)
Security fix: Invalid
arguments to DATE_FORMAT() caused a server
crash.
(CVE-2006-3469,
Bug#20729) Thanks to Jean-David Maillefer for discovering and
reporting this problem to the Debian project and to Christian
Hammers from the Debian Team for notifying us of it.
Closing of temporary tables failed if binary logging was not enabled. (Bug#20919)
Repeated DROP TABLE statements in a stored
procedure could sometimes cause the server to crash. (Bug#19399)
DATE_ADD() and
DATE_SUB() returned NULL
when the result date was on the day
'9999-12-31'. (Bug#12356)
For a DATE parameter sent via a
MYSQL_TIME data structure,
mysql_stmt_execute() zeroed the hour,
minute, and second members of the structure rather than
treating them as read-only. (Bug#20152)
The DATA DIRECTORY table option did not
work for TEMPORARY tables. (Bug#8706)
The mysql client did not ignore
client-specific commands (such as use or
help) that occurred as the first word on a
line within multiple-line /* ... */
comments. (Bug#20432)
The mysql client did not understand
help commands that had spaces at the end.
(Bug#20328)
Failure to account for a NULL table pointer
on big-endian machines could cause a server crash during type
conversion. (Bug#21135)
Some memory leaks in the libmysqld embedded
server were corrected. (Bug#16017)
When mysqldump disabled keys and locked a
MyISAM table, the lock operation happened
second. If another client performed a query on the table in
the interim, it could take a long time due to indexes not
being used. Now the lock operation happens first. (Bug#15977)
The length of the pattern string prefix for
LIKE operations was calculated incorrectly
for multi-byte character sets. As a result, the the scanned
range was wider than necessary if the prefix contained any
multi-byte characters. (Bug#16674, Bug#18359)
For very complex SELECT statements could
create temporary tables that were too big, but for which the
temporary files did not get removed, causing subsequent
queries to fail. (Bug#11824)
Using SELECT and a table join while running
a concurrent INSERT operation would join
incorrect rows. (Bug#14400)
Using SELECT on a corrupt
MyISAM table using the dynamic record
format could cause a server crash. (Bug#19835)
Checking a MyISAM table (using
CHECK TABLE) having a spatial index and
only one row would wrongly indicate that the table was
corrupted. (Bug#17877)
For SELECT ... FOR UPDATE statements that
used DISTINCT or GROUP
BY over all key parts of a unique index (or primary
key), the optimizer unnecessarily created a temporary table,
thus losing the linkage to the underlying unique index values.
This caused a Result set not updatable
error. (The temporary table is unnecessary because under these
circumstances the distinct or grouped columns must also be
unique.) (Bug#16458)
Concatenating the results of multiple constant subselects produced incorrect results. (Bug#16716)
The use of MIN() and
MAX() on columns with a partial index
produced incorrect results in some queries. (Bug#18206)
Use of MIN() or MAX()
with GROUP BY on a ucs2
column could cause a server crash. (Bug#20076)
INSERT INTO ... SELECT ... LIMIT 1 could be
slow because the LIMIT was ignored when
selecting candidate rows. (Bug#9676)
NDB Cluster: A Cluster whose storage nodes
were installed from the
MySQL-ndb-storage-
RPMs could not perform *CREATE or
ALTER operations that made use of
non-default character sets or collations. (Bug#14918)
NDB Cluster: The repeated creating and
dropping of a table would eventually lead to
NDB Error 826, Too many tables
and attributes ... Insufficient space. (Bug#20847)
NDB Cluster: When attempting to restart the
cluster following a data import, the cluster would fail during
Phase 4 of the restart with Error 2334: Job buffer
congestion. (Bug#20774)
NDB Cluster: A node failure during a scan
could sometime cause the node to crash when restarting too
quickly following the failure. (Bug#20197)
NDB Cluster: It was possible to use port
numbers greater than 65535 for ServerPort
in the config.ini file. (Bug#19164)
The omission of leading zeros in dates could lead to erroneous results when these were compared with the output of certain date and time functions. (Bug#16377)
Certain queries having a WHERE clause that
included conditions on multi-part keys with more than 2 key
parts could produce incorrect results and send
[Note] Use_count: Wrong count for key
at... messages to STDERR. (Bug#16168)
An invalid comparison between keys in partial indexes over
multi-byte character fields could lead to incorrect result
sets if the selected query execution plan used a range scan by
a partial index over a UTF8 character
field. This also caused incorrect results under similar
circumstances with many other character sets. (Bug#14896)
NDB Cluster: The cluster's data nodes would
fail while trying to load data when
NoOfFrangmentLogFiles was equal to 1. (Bug#19894)
NDB Cluster: A problem with error handling
when ndb_use_exact_count was enabled could
lead to incorrect values returned from queries using
COUNT(). A warning is now returned in such
cases. (Bug#19202)
NDB Cluster: LOAD DATA
LOCAL failed to ignore duplicate keys in Cluster
tables. (Bug#19496)
NDB Cluster: Repeated
CREATE - INSERT -
DROP operations tables could in some
circumstances cause the MySQL table definition cache to become
corrupt, so that some mysqld processes
could access table information but others could not. (Bug#18595)
NDB Cluster: The mgm
client command ALL CLUSTERLOG
STATISTICS=15; had no effect. (Bug#20336)
NDB Cluster: TRUNCATE
TABLE failed to reset the
AUTO_INCREMENT counter. (Bug#18864)
NDB Cluster: The failure of a data node
when preparing to commit a transaction (that is, while the
node's status was CS_PREPARE_TO_COMMIT)
could cause the failure of other cluster data nodes. (Bug#20185)
NDB Cluster: Renaming a table in such a way
as to move it to to a different database failed to move the
table's indexes. (Bug#19967)
NDB Cluster: Resources for unique indexes
on Cluster table columns were incorrectly allocated, so that
only one-fourth as many unique indexes as indicated by the
value of UniqueHashIndexes could be
created. (Bug#19623)
NDB Cluster (NDBAPI): On big-endian
platforms, NdbOperation::write_attr() did
not update 32-bit fields correctly. (Bug#19537)
NDB Cluster: Some queries having a
WHERE clause of the form c1=val1
OR c2 LIKE 'val2' were not evaluated correctly. (Bug
# 17421)
NDB Cluster: Using “stale�
mysqld .FRM files
could cause a newly-restored cluster to fail. This situation
could arise when restarting a MySQL Cluster using the
--intial option while leaving connected
mysqld processes running. (Bug#16875)
NDB Cluster: Repeated use of the
SHOW and ALL STATUS
commands in the ndb_mgm client could cause
the mgmd process to crash. (Bug#18591)
NDB Cluster: An issue with
ndb_mgmd prevented more than 27
mysqld processes from connecting to a
single cluster at one time. (Bug#17150)
NDB Cluster: Data node failures could cause
excessive CPU usage by ndb_mgmd. (Bug#13987)
NDB Cluster: TRUNCATE
failed on tables having BLOB or
TEXT columns with the error Lock
wait timeout exceeded. (Bug#19201)
A cast problem caused incorrect results for prepared statements that returned float values when MySQL was compiled with gcc 4.0. (Bug#19694)
Improper character set initialization in the embedded server could result in a server crash. (Bug#20318)
Some queries that used ORDER BY and
LIMIT performed quickly in MySQL 3.23, but
slowly in MySQL 4.x/5.x due to an optimizer problem. (Bug#4981)
Queries using an indexed column as the argument for the
MIN() and MAX()
functions following an ALTER TABLE .. DISABLE
KEYS statement returned Got error 124
from storage engine until ALTER TABLE ...
ENABLE KEYS was run on the table. (Bug#20357)
A number of dependency issues in the RPM
bench and test packages
caused installation of these packages to fail. (Bug#20078)
The MD5() and SHA() functions treat their arguments as case-sensitive strings. But when they are compared, their arguments were compared as case-insensitive strings, which leads to two function calls with different arguments (and thus different results) compared as being identical. This can lead to a wrong decision made in the range optimizer and thus to an incorrect result set. (Bug#15351)
InnoDB unlocked its data directory before
committing a transaction, potentially resulting in
non-recoverable tables if a server crash occurred before the
comm