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.
Functionality added or changed:
Replication: MySQL Cluster:
Added a new global system variable
the replication slave SQL thread fails to execute a transaction
because of an
InnoDB deadlock or exceeded
TransactionInactiveTimeout, it automatically
before stopping with an error. The default is 0, and you must
explicitly set the value greater than 0 to enable the
For slave replication servers started with
--replicate-* options, statements that should
not be replicated according those options no longer are written
to the slave's general query log.
The use of
GLOBAL is now disallowed for user variables.
InnoDB: Commit after every 10,000 copied rows
DROP INDEX or
OPTIMIZE TABLE, which are
internally implemented as
TABLE. This makes it much faster to recover from an
User variable coercibility has been changed from “coercible” to “implicit.” That is, user variables have the same coercibility as column values.
compilation option to configure. (Previously
it was necessary to pass
-DBIG_TABLES to the
compiler manually in order to enable large table support.) See
Section 2.9.2, “Typical configure Options”, for details.
The coercibility for the return value of functions such as
VERSION() now is “system
constant” rather than “implicit.” This makes
these functions more coercible than column values so that
comparisons of the two do not result in
Illegal mix of
COERCIBILITY() was modified to
accommodate this new coercibility value. See
Section 11.10.3, “Information Functions”.
Added configuration directives
!includedir for including option files and
searching directories for option files. See
Section 220.127.116.11, “Using Option Files”, for usage.
NULL now is considered more coercible than
string constants. This resolves some
Illegal mix of
Replication: If multiple semicolon-separated statements were received in a single packet, they were written to the binary log as a single event rather than as separate per-statement events. For a server serving as a replication master, this caused replication to fail when the event was sent to slave servers. (Bug#8436)
A replication master stamped a generated statement (such as a
SET statement) with an error code intended
only for another statement. This could happen, for example, when
a statement generated a duplicate key error on the master but
still had be to replicated to the slave.
If the slave was running with
--replicate-*-table options which excluded one
temporary table and included another, and the two tables were
used in a single
DROP TEMPORARY TABLE IF
EXISTS statement, as the ones the master automatically
writes to its binary log upon client's disconnection when client
has not explicitly dropped these, the slave could forget to
delete the included replicated temporary table. Only the slave
needs to be upgraded.
Treat user variables as having
derivation (coercibility) to avoid “Illegal mix of
collations” errors when replicating user variables.
Some user variables were not being handled with “implicit” coercibility. (Bug#9425)
Allow extra HKSCS and cp950 characters (
extension characters) to be accepted in
that contained a
HAVING clause did not work
InnoDB: If MySQL wrote to its binlog, but for
trx->insert_undo were NULL in
trx->commit_lsn was garbage, and
InnoDB could assert in the log flush of
ucs2_spanish2_ci collations no longer
r equal to
If you upgrade to this version from an earlier version, you
should rebuild the indexes of any affected tables.
Depending on index statistics,
incorrect results if the first table processed for a join had
several indexes that cover the grouped columns.
NULL when given any of these arguments that
NULL: A system function such as
DATABASE(); a column value; and a
user variable. Now
COLLATION() return the system
character set and collation; the column character set and
COERCIBILITY(NULL) now returns
“ignorable” coercibility rather than
zlib in the source distribution was
upgraded to 1.2.2.
The use of
XOR together with
ISNULL() erroneously resulted in some outer joins
being converted to inner joins by the optimizer.
could fail to produce the correct result if
col_name was contained in multiple
indexes and the optimizer did not choose the first index that
contained the column.
Using a compariosn where the left expression of
ANY was a subquery caused the server to crash
When using the
empty literal strings were not regarded as equal to empty
Binary data stored in
BINARY columns would be
erroneously dumped if mysqldump was invoked
--skip-extended-insert arguments. This happened
if data contained characters larger then 0x7F .
Killing a filesort could cause an assertion failure. (Bug#8799)
This regression was introduced by Bug#7350.
Table creation for a
MyISAM table failed if
DATA DIRECTORY or
DIRECTORY options were given that specified the path
name to the database directory where the table files would be
created by default.
InnoDB: If one used
TABLES, created an
table, and did a multiple-table update where a
MyISAM table was the update table and the
temp table was a read table, then
n_mysql_tables_in_use was 0. Also, we remove
the assertion altogether and just print an error to the
.err log if this important consistency
Too many rows were returned from queries that combined
SQL_CALC_FOUND_ROWS was given.
A join on two tables failed when each contained a
BIGINT UNSIGNED column that were compared
when their values exceeded 263
– 1. The match failed and the join returned no rows.
LIKE pattern-matching for strings did not
work correctly with the
MATCH ... AGAINST in natural language mode
could cause a server crash if the
index was not used in a join (that is,
EXPLAIN did not show
fulltext join mode) and the
search query matched no rows in the table.
MEMORY storage engine did not properly
AUTO_INCREMENT column if there
was a second composite index that included the column.
For a statement string that contained multiple slow queries, only the last one would be written to the slow query log. (Bug#8475)
The Cyrillic letters
(Й) were treated as being the same
character by the
With a database was dropped with
lower_case_table_names = 2,
tables in the database also were dropped but not being flushed
properly from the table cache. If the database was re-created,
the tables also would appear to have been re-created.
When performing boolean full-text searches on
utf8 columns, a double-quote character in the
search string caused the server to crash.
MAX_CONNECTIONS_PER_HOUR resource limit
was not being reset hourly and thus imposed an absolute limit on
number of connections per account until the server is restarted
or the limits flushed.
MyISAM table indexes could
TRUNCATE TABLE if the
table had already been opened. For example, this was possible if
the table had been opened implicitly by selecting from a
MERGE table that mapped to the
MyISAM table. The server now issues an error
TRUNCATE TABLE under
In string literals with an escape character
\”) followed by a multi-byte
character that has a second byte of
\”, the literal was not
interpreted correctly. The next character now is escaped, not
just the next byte.
On Windows, create shared memory objects with the proper access rights to make them usable when the client and server are running under different accounts. (Bug#8226)
Creating a table using a name containing a character that is
resulted in the character being stripped from the name and no
error. The character now is considered an error.
Mixed-case database and table names in the grant tables were
ignored for authentication if the
variable was set.
GRANT will not
create such privileges when
lower_case_table_names is set,
but it is possible to create them by direct manipulation of the
grant tables, or that old grant records were present before
setting the variable.
Accented letters were improperly treated as distinct by the
Conversion of strings to doubles is now more accurate for
floating point values that can be represented by integers, such
columns in privilege tables incorrectly had a case-sensitive
collation, resulting in failure of assignments of values that
did not have the same lettercase as given in the column
definitions. The collation was changed to be case insensitive.
Ordering by an unsigned expression (more complex than a column
reference) was treating the value as signed, producing
incorrectly sorted results.
HAVING was also
treating unsigned columns as signed.
An expression that tested a case-insensitive character column
against string constants that differed in lettercase could fail
because the constants were treated as having a binary collation.
WHERE city='London' AND
city='london' could fail.)
When setting integer system variables to a negative value with
SET VARIABLES, the value was treated as a
positive value modulo 232.
MyISAM table on Windows had
INDEX DIRECTORY or
DIRECTORY table options, mysqldump
dumped the directory path names with single-backslash path name
separators. This would cause syntax errors when importing the
dump file. mysqldump now changes
/” in the path names on
Incorrectly ordered results were returned from a query using a
FULLTEXT index to retrieve rows and there was
another index that was usable for
For such a query,
fulltext join type, but
showed the other (not
FULLTEXT) index in the
A problem with static variables did not allow building the server on Fedora Core 3. (Bug#6554)
Unions between binary and nonbinary columns failed due to a collation coercibility problem. (Bug#6519)
InnoDB: Honor the
--tmpdir startup option when
creating temporary files. Previously,
temporary files were always created in the temporary directory
of the operating system. On Netware,
will continue to ignore
Worked around a bug in support for NSS support in
glibc when static linking is used and LDAP is
one of the NSS sources. The workaround is to detect when the bug
causes a segmentation fault and issue a diagnostic message with
information about the problem.
Platform and architecture information in version information
--version option on Windows was
Win95/Win98 (i32). More accurately
determine platform as
Win64 for 32-bit or 64-bit Windows, and
ia32 for x86,
ia64 for Itanium, and
Host name matching didn't work if a netmask was specified for table-specific privileges. (Bug#3309)
InnoDB: An error in mysqld
InnoDB in MySQL 4.1.8 to 4.1.10
InnoDB to refuse to use a table created with
MySQL 3.23.49 or earlier if it was in the new compact
InnoDB table format of 5.0.3 or later.
Workaround. Upgrade to 4.1.11 or newer, or dump the table and re-create it with MySQL 3.23.50 or newer before upgrading.
InnoDB: A table with a primary key that
contained at least two column prefixes was prone to memory
corruption. An example of an affected
CREATE TABLE statement is shown
CREATE TABLE t ( a CHAR(100), b TINYBLOB, PRIMARY KEY(a(5), b(10)) );
allocate memory, keep retrying for 60 seconds before we
mysqld; maybe the
memory shortage is just temporary.
InnoDB: Work around a problem in AIX 5.1
patched with ML7 security patch:
refuse to open its
complaining about an operating system error 0.