33 Changes in MySQL Community Server 5.0.67 (2008-08-04)

Security Enhancement:
To enable stricter control over the location from which
user-defined functions can be loaded, the
plugin_dir system variable has
been backported from MySQL 5.1. If the value is nonempty,
user-defined function object files can be loaded only from the
directory named by this variable. If the value is empty, the
behavior that is used prior to the inclusion of
plugin_dir applies: The UDF
object files must be located in a directory that is searched by
your system's dynamic linker.

If the plugin directory is writable by the server, it may be
possible for a user to write executable code to a file in the
directory using SELECT
... INTO DUMPFILE. This can be prevented by making
plugin_dir read only to the
server or by setting
--secure-file-priv to a directory
where SELECT writes can be made
safely.
(Bug #37428)

Incompatible Change; Important Change:
The FEDERATED storage engine is now disabled
by default in the .cnf files shipped with
MySQL distributions (my-huge.cnf,
my-medium.cnf, and so forth). This affects
server behavior only if you install one of these files.
(Bug #37069)

Important Change; Cluster API:
Because NDB_LE_MemoryUsage.page_size_kb shows
memory page sizes in bytes rather than kilobytes, it has been
renamed to page_size_bytes. The name
page_size_kb is now deprecated and thus
subject to removal in a future release, although it currently
remains supported for reasons of backward compatibility. See
The Ndb_logevent_type Type, for more information
about NDB_LE_MemoryUsage.
(Bug #30271)

Important Change:
Some changes were made to
CHECK TABLE ... FOR
UPGRADE and REPAIR
TABLE with respect to detection and handling of tables
with incompatible .frm files (files created
with a different version of the MySQL server). These changes
also affect mysqlcheck because that program
uses CHECK TABLE and
REPAIR TABLE, and thus also
mysql_upgrade because that program invokes
mysqlcheck.

If your table was created by a different version of the
MySQL server than the one you are currently running,
CHECK TABLE ...
FOR UPGRADE indicates that the table has an
.frm file with an incompatible version.
In this case, the result set returned by
CHECK TABLE contains a line
with a Msg_type value of
error and a Msg_text
value of Table upgrade required. Please do "REPAIR
TABLE `tbl_name`" to fix
it!

REPAIR TABLE without
USE_FRM upgrades the
.frm file to the current version.

If you use REPAIR TABLE ...USE_FRM and
your table was created by a different version of the MySQL
server than the one you are currently running,
REPAIR TABLE will not attempt
to repair the table. In this case, the result set returned
by REPAIR TABLE contains a
line with a Msg_type value of
error and a Msg_text
value of Failed repairing incompatible .FRM
file.

Previously, use of REPAIR TABLE
...USE_FRM with a table created by a different
version of the MySQL server risked the loss of all rows in
the table.

(Bug #36055)

mysql_upgrade now has a
--tmpdir option to enable
the location of temporary files to be specified.
(Bug #36469)

mysql-test-run.pl now supports
--client-bindir and
--client-libdir options for specifying the
directory where client binaries and libraries are located.
(Bug #34995)

The ndbd and ndb_mgmd man
pages have been reclassified from volume 1 to volume 8.
(Bug #34642)

For binary .tar.gz packages,
mysqld and other binaries now are compiled
with debugging symbols included to enable easier use with a
debugger. If you do not need debugging symbols and are short on
disk space, you can use strip to remove the
symbols from the binaries.
(Bug #33252)

mysqldump produces a -- Dump
completed on DATE comment
at the end of the dump if
--comments is given. The date
causes dump files for identical data take at different times to
appear to be different. The new options
--dump-date and
--skip-dump-date
control whether the date is added to the comment.
--skip-dump-date
suppresses date printing. The default is
--dump-date (include the date
in the comment).
(Bug #31077)

mysqltest now has mkdir
and rmdir commands for creating and removing
directories.
(Bug #31004)

The mysql_odbc_escape_string() C API
function has been removed. It has multibyte character escaping
issues, doesn't honor the
NO_BACKSLASH_ESCAPES SQL mode
and is not needed anymore by Connector/ODBC as of 3.51.17.
(Bug #29592)

References: See also Bug #41728.

The default value of the
connect_timeout system variable
was increased from 5 to 10 seconds. This might help in cases
where clients frequently encounter errors of the form
Lost connection to MySQL server at
'XXX', system error:
errno.
(Bug #28359)

The argument for the mysql-test-run.pl--do-test and --skip-test
options is now interpreted as a Perl regular expression if there
is a pattern metacharacter in the argument value. This enables
more flexible specification of which tests to perform or skip.

Security Fix; Important Change:
It was possible to circumvent privileges through the creation of
MyISAM tables employing the DATA
DIRECTORY and INDEX DIRECTORY
options to overwrite existing table files in the MySQL data
directory. Use of the MySQL data directory in DATA
DIRECTORY and INDEX DIRECTORY path
name is no longer permitted.

Note

Additional fixes were made in MySQL 5.0.70.

(Bug #32167, CVE-2008-2079)

References: See also Bug #39277.

Security Fix:
Three vulnerabilities in yaSSL versions 1.7.5 and earlier were
discovered that could lead to a server crash or execution of
unauthorized code. The exploit requires a server with yaSSL
enabled and TCP/IP connections enabled, but does not require
valid MySQL account credentials. The exploit does not apply to
OpenSSL.

Warning

The proof-of-concept exploit is freely available on the
Internet. Everyone with a vulnerable MySQL configuration is
advised to upgrade immediately.

(Bug #33814, CVE-2008-0226, CVE-2008-0227)

Security Fix:
Using RENAME TABLE against a
table with explicit DATA DIRECTORY and
INDEX DIRECTORY options can be used to
overwrite system table information by replacing the symbolic
link points. the file to which the symlink points.

MySQL will now return an error when the file to which the
symlink points already exists.
(Bug #32111, CVE-2007-5969)

Security Fix:ALTER VIEW retained the original
DEFINER value, even when altered by another
user, which could enable that user to gain the access rights of
the view. Now ALTER VIEW is
permitted only to the original definer or users with the
SUPER privilege.
(Bug #29908)

Security Fix:
When using a FEDERATED table, the local
server could be forced to crash if the remote server returned a
result with fewer columns than expected.
(Bug #29801)

Security Enhancement:
It was possible to force an error message of excessive length
which could lead to a buffer overflow. This has been made no
longer possible as a security precaution.
(Bug #32707)

Performance:InnoDB adaptive hash latches could be held
too long during filesort operations, resulting in a server
crash. Now the hash latch is released when a query on
InnoDB tables performs a filesort. This
eliminates the crash and may provide significant performance
improvements on systems on which many queries using filesorts
with temporary tables are being performed.
(Bug #32149)

Performance:InnoDB had a race condition for an adaptive
hash rw-lock waiting for an X-lock. This fix may also provide
significant speed improvements on systems experiencing problems
with contention for the adaptive hash index.
(Bug #29560)

Incompatible Change:
The MySQL 5.0.50 patch for this bug was reverted because it
changed the behavior of a General Availability MySQL release.
(Bug #30234)

References: See also Bug #27525.

Incompatible Change:
It was possible to create a view having a column whose name
consisted of an empty string or space characters only.

One result of this bug fix is that aliases for columns in the
view SELECT statement are checked to ensure
that they are legal column names. In particular, the length must
be within the maximum column length of 64 characters, not the
maximum alias length of 256 characters. This can cause problems
for replication or loading dump files. For additional
information and workarounds, see
Restrictions on Views.
(Bug #27695)

References: See also Bug #31202.

Incompatible Change:
Several type-preserving functions and operators returned an
incorrect result type that does not match their argument types:
COALESCE(),
IF(),
IFNULL(),
LEAST(),
GREATEST(),
CASE. These now aggregate using the
precise SQL types of their arguments rather than the internal
type. In addition, the result type of the
STR_TO_DATE() function is now
DATETIME by default.
(Bug #27216)

Incompatible Change:
It was possible for option files to be read twice at program
startup, if some of the standard option file locations turned
out to be the same directory. Now duplicates are removed from
the list of files to be read.

Also, users could not override system-wide settings using
~/.my.cnf because
SYSCONFDIR/my.cnf
was read last. The latter file now is read earlier so that
~/.my.cnf can override system-wide
settings.

An additional correction was made to normalize directory names
before adding them to the list of directories. This prevents
/etc/ and /etc from
being considered different, for example.

The fix for this problem had a side effect such that on Unix,
MySQL programs looked for options in
~/my.cnf rather than the standard location
of ~/.my.cnf. That problem is addressed in
Bug #38180.
(Bug #20748)

Important Change; MySQL Cluster:AUTO_INCREMENT columns had the following
problems when used in NDB tables:

The AUTO_INCREMENT counter was not
updated correctly when such a column was updated.

As part of this fix, the behavior of
ndb_autoincrement_prefetch_sz
has changed. Setting this to less than 32 no longer has any
effect on prefetching within statements (where IDs are now
always obtained in batches of 32 or more), but only between
statements. The default value for this variable has also
changed, and is now 1.
(Bug #25176, Bug #31956, Bug #32055)

Important Change; Replication:
When the master crashed during an update on a transactional
table while in autocommit mode,
the slave failed. This fix causes every transaction (including
autocommit transactions) to be
recorded in the binary log as starting with a
BEGIN and
ending with a COMMIT or
ROLLBACK.

Note

The current fix does not cause
nontransactional changes to be wrapped in
BEGIN ...
COMMIT or
BEGIN ...
ROLLBACK
when written to the binary log. For this purpose, any
statements affecting tables using a nontransactional storage
engine such as MyISAM are
regarded as nontransactional, even when
autocommit is enabled.

(Bug #26395)

References: See also Bug #29288, Bug #49522.

Important Change:
The server handled truncation of values having excess trailing
spaces into VARCHAR and
TEXT columns in different ways.
This behavior has now been made consistent for columns of both
of these types, and now follows the existing behavior of
VARCHAR columns in this regard;
that is, a Note is always issued whenever
such truncation occurs.

This change does not affect columns of these types when using a
binary encoding; BLOB columns are
also unaffected by the change, since they always use a binary
encoding.
(Bug #30059)

Important Change:
When installing MySQL on AIX 5.3, you must upgrade AIX to
technology level 7 (5300-07) to ensure the required thread
libraries are available.

Important Note; Replication:
Network timeouts between the master and the slave could result
in corruption of the relay log. This fix rectifies a
long-standing replication issue when using unreliable networks,
including replication over wide area networks such as the
Internet. If you experience reliability issues and see many
You have an error in your SQL syntax
errors on replication slaves, we strongly recommend that you
upgrade to a MySQL version which includes this fix.
(Bug #26489)

MySQL Cluster:
The failure of a DDL statement could sometimes lead to node
failures when attempting to execute subsequent DDL statements.
(Bug #34160)

MySQL Cluster:
Extremely long SELECT statements
(where the text of the statement was in excess of 50000
characters) against NDB tables
returned empty results.
(Bug #34107)

MySQL Cluster:
A periodic failure to flush the send buffer by the
NDB TCP transporter could cause a
unnecessary delay of 10 ms between operations.
(Bug #34005)

MySQL Cluster:
When all data and SQL nodes in the cluster were shut down
abnormally (that is, other than by using STOP
in the cluster management client), ndb_mgm
used excessive amounts of CPU.
(Bug #33237)

MySQL Cluster:
An improperly reset internal signal was observed as a hang when
using events in the NDB API but
could result in various errors.
(Bug #33206)

MySQL Cluster:
Incorrectly handled parameters could lead to a crash in the
Transaction Coordinator during a node failure, causing other
data nodes to fail.
(Bug #33168)

MySQL Cluster:
The failure of a master node could lead to subsequent failures
in local checkpointing.
(Bug #32160)

MySQL Cluster:
An uninitialized variable in the
NDB storage engine code led to
AUTO_INCREMENT failures when the server was
compiled with gcc 4.2.1.
(Bug #31848)

References: This bug was introduced by Bug #27437.

MySQL Cluster:
An error with an if statement in
sql/ha_ndbcluster.cc could potentially lead
to an infinite loop in case of failure when working with
AUTO_INCREMENT columns in
NDB tables.
(Bug #31810)

MySQL Cluster:
In some cases, the cluster managment server logged entries
multiple times following a restart of
ndb_mgmd.
(Bug #29565)

MySQL Cluster:
An interpreted program of sufficient size and complexity could
cause all cluster data nodes to shut down due to buffer
overruns.
(Bug #29390)

MySQL Cluster:
It was possible in config.ini to define
cluster nodes having node IDs greater than the maximum permitted
value.
(Bug #28298)

MySQL Cluster:UPDATE IGNORE could sometimes fail on
NDB tables due to the use of
unitialized data when checking for duplicate keys to be ignored.
(Bug #25817)

MySQL Cluster:
When inserting a row into an NDB
table with a duplicate value for a nonprimary unique key, the
error issued would reference the wrong key.

This improves on an initial fix for this issue made in MySQL
5.0.30 and MySQL 5.0.33
(Bug #21072)

Replication:
Some kinds of internal errors, such as Out of
memory errors, could cause the server to crash when
replicating statements with user variables.

certain internal errors.
(Bug #37150)

Replication:CREATE PROCEDURE and
CREATE FUNCTION statements
containing extended comments were not written to the binary log
correctly, causing parse errors on the slave.
(Bug #36570)

References: See also Bug #32575.

Replication:insert_id was not written to
the binary log for inserts into BLACKHOLE
tables.
(Bug #35178)

Replication:
The character sets and collations used for constant identifiers
in stored procedures were not replicated correctly.
(Bug #34289)

Replication:
A CREATE USER,
DROP USER, or
RENAME USER statement that fails
on the master, or that is a duplicate of any of these
statements, is no longer written to the binary log; previously,
either of these occurrences could cause the slave to fail.
(Bug #33862)

Replication:
An extraneous
ROLLBACK
statement was written to the binary log by a connection that did
not use any transactional tables.
(Bug #33329)

Replication:
When a stored routine or trigger, running on a master that used
MySQL 5.0 or MySQL 5.1.11 or earlier, performed an insert on an
AUTO_INCREMENT column, the
insert_id value was not
replicated correctly to a slave running MySQL 5.1.12 or later
(including any MySQL 6.0 release).
(Bug #33029)

References: See also Bug #19630.

Replication:CREATE VIEW statements containing
extended comments were not written to the binary log correctly,
causing parse errors on the slave. Now, all comments are
stripped from such statements before being written to the binary
log.
(Bug #32575)

References: See also Bug #36570.

Replication:
SQL statements containing comments using --
syntax were not replayable by mysqlbinlog,
even though such statements replicated correctly.
(Bug #32205)

Replication:
It was possible for the name of the relay log file to exceed the
amount of memory reserved for it, possibly leading to a crash of
the server.
(Bug #31836)

References: See also Bug #28597.

Replication:
Corruption of log events caused the server to crash on 64-bit
Linux systems having 4 GB or more of memory.
(Bug #31793)

Replication:
Use of the @@hostname system variable in
inserts in mysql_system_tables_data.sql did
not replicate. The workaround is to select its value into a user
variable (which does replicate) and insert that.
(Bug #31167)

Replication:STOP SLAVE did not stop
connection attempts properly. If the I/O slave thread was
attempting to connect, STOP SLAVE
waited for the attempt to finish, sometimes for a long period of
time, rather than stopping the slave immediately.
(Bug #31024)

References: See also Bug #30932.

Replication:
Issuing a DROP VIEW statement
caused replication to fail if the view did not actually exist.
(Bug #30998)

Replication:
One thread could read uninitialized memory from the stack of
another thread. This issue was only known to occur in a
mysqld process acting as both a master and a
slave.
(Bug #30752)

Replication:
Issuing SHOW SLAVE STATUS as
mysqld was shutting down could cause a crash.
(Bug #26000)

Replication:
An UPDATE statement using a
stored function that modified a nontransactional table was not
logged if it failed. This caused the copy of the
nontransactional table on the master have a row that the copy on
the slave did not.

In addition, when an
INSERT ...
ON DUPLICATE KEY UPDATE statement encountered a
duplicate key constraint, but the
UPDATE did not actually change
any data, the statement was not logged. As a result of this fix,
such statements are now treated the same for logging purposes as
other UPDATE statements, and so
are written to the binary log.
(Bug #23333)

References: See also Bug #12713.

Replication:
The nonspecific error message Wrong parameters to
function register_slave resulted when
START SLAVE failed to register on
the master due to excess length of any the slave server options
--report-host,
--report-user, or
--report-password. An error
message specific to each of these options is now returned in
such cases. The new error messages are:

Failed to register slave: too long
'report-host'

Failed to register slave: too long
'report-user'

Failed to register slave; too long
'report-password'

(Bug #22989)

References: See also Bug #19328.

Replication:
A replication slave sometimes failed to reconnect because it was
unable to run SHOW SLAVE HOSTS.
It was not necessary to run this statement on slaves (since the
master should track connection IDs), and the execution of this
statement by slaves was removed.
(Bug #21132)

References: See also Bug #13963, Bug #21869.

Replication:PURGE BINARY LOGS TO and PURGE
BINARY LOGS BEFORE did not handle missing binary log
files correctly or in the same way. Now for both of these
statements, if any files listed in the
.index file are missing from the file
system, the statement fails with an error.
(Bug #18199, Bug #18453)

Replication:START SLAVE UNTIL
MASTER_LOG_POS=position
issued on a slave that was using
--log-slave-updates and that was
involved in circular replication would cause the slave to run
and stop one event later than that specified by the value of
position.
(Bug #13861)

Cluster API:
When reading a BIT(64) value using
NdbOperation::getValue(), 12
bytes were written to the buffer rather than the expected 8
bytes.
(Bug #33750)

The fix for Bug #20748 caused a problem such that on Unix, MySQL
programs looked for options in ~/my.cnf
rather than the standard location of
~/.my.cnf.
(Bug #38180)

The fix for Bug #33812 had the side effect of causing the
mysql client not to be able to read some dump
files produced with mysqldump. To address
this, that fix was reverted.
(Bug #38158)

Some binary distributions had a duplicate “-64bit”
suffix in the file name.
(Bug #37623)

On Windows 64-bit systems, temporary variables of
long types were used to store
ulong values, causing key cache
initialization to receive distorted parameters. The effect was
that setting key_buffer_size to
values of 2GB or more caused memory exhaustion to due allocation
of too much memory.
(Bug #36705)

Multiple-table UPDATE statements
that used a temporary table could fail to update all qualifying
rows or fail with a spurious duplicate-key error.
(Bug #36676)

A REGEXP match could return
incorrect rows when the previous row matched the expression and
used CONCAT() with an empty
string.
(Bug #36488)

mysqltest ignored the value of
--tmpdir in one place.
(Bug #36465)

The mysql client failed to recognize comment
lines consisting of -- followed by a newline.
(Bug #36244)

Conversion of a FLOAT ZEROFILL value to
string could cause a server crash if the value was
NULL.
(Bug #36139)

On Windows, the installer attempted to use JScript to determine
whether the target data directory already existed. On Windows
Vista x64, this resulted in an error because the installer was
attempting to run the JScript in a 32-bit engine, which wasn't
registered on Vista. The installer no longer uses JScript but
instead relies on a native WiX command.
(Bug #36103)

An error in calculation of the precision of zero-length items
(such as NULL) caused a server crash for
queries that employed temporary tables.
(Bug #36023)

For EXPLAIN EXTENDED, execution
of an uncorrelated IN subquery caused a crash
if the subquery required a temporary table for its execution.
(Bug #36011)

The server crashed inside NOT IN subqueries
with an impossible WHERE or
HAVING clause, such as NOT IN
(SELECT ... FROM t1, t2, ... WHERE 0).
(Bug #36005)

Grouping or ordering of long values in unindexed
BLOB or
TEXT columns with the
gbk or big5 character set
crashed the server.
(Bug #35993)

SET GLOBAL debug='' resulted in a Valgrind
warning in DbugParse(), which was reading
beyond the end of the control string.
(Bug #35986)

An empty bit-string literal (b'') caused a
server crash. Now the value is parsed as an empty bit value
(which is treated as an empty string in string context or 0 in
numeric context).
(Bug #35658)

mysqlbinlog left temporary files on the disk
after shutdown, leading to the pollution of the temporary
directory, which eventually caused
mysqlbinlog to fail. This caused problems in
testing and other situations where
mysqlbinlog might be invoked many times in a
relatively short period of time.
(Bug #35543)

There was a memory leak when connecting to a
FEDERATED table using a connection string
that had a host value of localhost or omitted
the host and a port value of 0 or omitted the
port.
(Bug #35509)

The code for detecting a byte order mark (BOM) caused
mysql to crash for empty input.
(Bug #35480)

The combination of
GROUP_CONCAT(),
DISTINCT, and LEFT JOIN
could crash the server when the right table is empty.
(Bug #35298)

When a view containing a reference to DUAL
was created, the reference was removed when the definition was
stored, causing some queries against the view to fail with
invalid SQL syntax errors.
(Bug #35193)

Debugging symbols were missing for some executables in Windows
binary distributions.
(Bug #35104)

A query that performed a
ref_or_null join where the
second table used a key having one or columns that could be
NULL and had a column value that was
NULL caused the server to crash.
(Bug #34945)

References: This bug was introduced by Bug #12144.

Some binaries produced stack corruption messages due to being
built with versions of bison older than 2.1.
Builds are now created using bison 2.3.
(Bug #34926)

mysqldump failed to return an error code when
using the --master-data option
without binary logging being enabled on the server.
(Bug #34909)

Under some circumstances, the value of
mysql_insert_id() following a
SELECT ... INSERT statement could return an
incorrect value. This could happen when the last SELECT
... INSERT did not involve an
AUTO_INCREMENT column, but the value of
mysql_insert_id() was changed by
some previous statements.
(Bug #34889)

Table and database names were mixed up in some places of the
subquery transformation procedure. This could affect debugging
trace output and further extensions of that procedure.
(Bug #34830)

A malformed URL used for a FEDERATED
table's CONNECTION option value in a
CREATE TABLE statement was not
handled correctly and could crash the server.
(Bug #34788)

Queries such as SELECT ROW(1, 2) IN (SELECT t1.a, 2)
FROM t1 GROUP BY t1.a (combining row constructors and
subqueries in the FROM clause) could lead to
assertion failure or unexpected error messages.
(Bug #34763)

Using NAME_CONST() with a negative number and
an aggregate function caused MySQL to crash. This could also
have a negative impact on replication.
(Bug #34749)

A memory-handling error associated with use of
GROUP_CONCAT() in subqueries
could result in a server crash.
(Bug #34747)

For an indexed integer column
col_name and a value
N that is one greater than the
maximum value permitted for the data type of
col_name, conditions of the form
WHERE col_name <
N failed to return rows
where the value of col_name is
N - 1.
(Bug #34731)

Executing a TRUNCATE TABLE
statement on a table having both a foreign key reference and a
DELETE trigger crashed the server.
(Bug #34643)

Some subqueries using an expression that included an aggregate
function could fail or in some cases lead to a crash of the
server.
(Bug #34620)

A server crash could occur if
INFORMATION_SCHEMA tables built in memory
were swapped out to disk during query execution.
(Bug #34529)

Executing an ALTER VIEW statement
on a table crashed the server.
(Bug #34337)

Several additional configuration scripts in the
BUILD directory now are included in source
distributions. These may be useful for users who wish to build
MySQL from source. (See
Installing MySQL Using a Development Source Tree, for information
about what they do.)
(Bug #34291)

Under some conditions, a SET GLOBAL
innodb_commit_concurrency or SET GLOBAL
innodb_autoextend_increment statement could fail.
(Bug #34223)

References: This bug is a regression of Bug #31177.

mysqldump attempts to set the
character_set_results system
variable after connecting to the server. This failed for pre-4.1
servers that have no such variable, but
mysqldump did not account for this and 1)
failed to dump database contents; 2) failed to produce any error
message alerting the user to the problem.
(Bug #34192)

mysql_install_db failed if the server was
running with an SQL mode of
TRADITIONAL. This program now
resets the SQL mode internally to avoid this problem.
(Bug #34159)

For a FEDERATED table with an index on a
nullable column, accessing the table could crash a server,
return an incorrect result set, or return ERROR 1030
(HY000): Got error 1430 from storage engine.
(Bug #33946)

Passing anything other than an integer argument to a
LIMIT clause in a prepared statement would
fail. (This limitation was introduced to avoid replication
problems; for example, replicating the statement with a string
argument would cause a parse failure in the slave). Now,
arguments to the LIMIT clause are converted
to integer values, and these converted values are used when
logging the statement.
(Bug #33851)

An internal buffer in mysql was too short.
Overextending it could cause stack problems or segmentation
violations on some architectures. (This is not a problem that
could be exploited to run arbitrary code.)
(Bug #33841)

A query using WHERE
(column1='string1' AND
column2=constant1) OR
(column1='string2' AND
column2=constant2), where
col1 used a binary collation and
string1 matched
string2 except for case, failed to
match any records even when matches were found by a query using
the equivalent clause WHERE
column2=constant1 OR
column2=constant2.
(Bug #33833)

The fix for this bug had the side effect of causing the problem
reported in Bug #38158, so it was reverted in MySQL 5.0.67.
(Bug #33812)

Large unsigned integers were improperly handled for prepared
statements, resulting in truncation or conversion to negative
numbers.
(Bug #33798)

Reuse of prepared statements could cause a memory leak in the
embedded server.
(Bug #33796)

The server crashed when executing a query that had a subquery
containing an equality X=Y where Y referred to a named select
list expression from the parent select. The server crashed when
trying to use the X=Y equality for
ref-based access.
(Bug #33794)

Some queries using a combination of IN,
CONCAT(), and an implicit type
conversion could return an incorrect result.
(Bug #33764)

In some cases a query that produced a result set when using
ORDER BY ASC did not return any results when
this was changed to ORDER BY DESC.
(Bug #33758)

Disabling concurrent inserts caused some cacheable queries not
to be saved in the query cache.
(Bug #33756)

Use of uninitialized memory for filesort in a
subquery caused a server crash.
(Bug #33675)

The server could crash when
REPEAT or another control
instruction was used in conjunction with labels and a
LEAVE instruction.
(Bug #33618)

The parser permitted control structures in compound statements
to have mismatched beginning and ending labels.
(Bug #33618)

make_binary_distribution passed the
--print-libgcc-file option to the C compiler,
but this does not work with the ICC compiler.
(Bug #33536)

Certain combinations of views, subselects with outer references
and stored routines or triggers could cause the server to crash.
(Bug #33389)

SLEEP(0) failed to return on
64-bit Mac OS X due to a bug in
pthread_cond_timedwait().
(Bug #33304)

CREATE TABLE ...
SELECT created tables that for date columns used the
obsolete Field_date type instead of
Field_newdate.
(Bug #33256)

Granting the UPDATE privilege on
one column of a view caused the server to crash.
(Bug #33201)

For DECIMAL columns used with the
ROUND(X,D)
or
TRUNCATE(X,D)
function with a nonconstant value of
D, adding an ORDER
BY for the function result produced misordered output.
(Bug #33143)

References: See also Bug #33402, Bug #30617.

Some valid SELECT statements
could not be used as views due to incorrect column reference
resolution.
(Bug #33133)

The fix for Bug #11230 and Bug #26215 introduced a significant
input-parsing slowdown for the mysql client.
This has been corrected.
(Bug #33057)

When MySQL was built with OpenSSL, the SSL library was not
properly initialized with information of which endpoint it was
(server or client), causing connection failures.
(Bug #33050)

Under some circumstances a combination of aggregate functions
and GROUP BY in a
SELECT query over a view could
lead to incorrect calculation of the result type of the
aggregate function. This in turn could lead to incorrect
results, or to crashes on debug builds of the server.
(Bug #33049)

For DISTINCT queries, MySQL 4.0 and 4.1
stopped reading joined tables as soon as the first matching row
was found. However, this optimization was lost in MySQL 5.0,
which instead read all matching rows. This fix for this
regression may result in a major improvement in performance for
DISTINCT queries in cases where many rows
match.
(Bug #32942)

The server was built even when configure was
run with the --without-server option.
(Bug #32898)

References: See also Bug #23973.

Repeated creation and deletion of views within prepared
statements could eventually crash the server.
(Bug #32890)

References: See also Bug #34587.

UNION constructs cannot contain
SELECT ...
INTO except in the final
SELECT. However, if a
UNION was used in a subquery and
an INTO clause appeared in the top-level
query, the parser interpreted it as having appeared in the
UNION and raised an error.
(Bug #32858)

The correct data type for a NULL column
resulting from a UNION could be
determined incorrectly in some cases: 1) Not correctly inferred
as NULL depending on the number of selects;
2) Not inferred correctly as NULL if one
select used a subquery.
(Bug #32848)

An ORDER BY query using IS
NULL in the WHERE clause did not
return correct results.
(Bug #32815)

For queries containing GROUP_CONCAT(DISTINCT
col_list ORDER BY
col_list), there was a
limitation that the DISTINCT columns had to
be the same as ORDER BY columns. Incorrect
results could be returned if this was not true.
(Bug #32798)

Use of a NULL-returning GROUP
BY expression in conjunction with WITH
ROLLUP could cause a server crash.
(Bug #32558)

References: See also Bug #31095.

A SELECT ... GROUP BY
bit_column query failed
with an assertion if the length of the
BIT column used for the
GROUP BY was not an integer multiple of 8.
(Bug #32556)

Using SELECT INTO OUTFILE with 8-bit
ENCLOSED BY characters led to corrupted data
when the data was reloaded using LOAD DATA INFILE. This was
because SELECT INTO OUTFILE failed to escape
the 8-bit characters.
(Bug #32533)

For FLUSH TABLES WITH
READ LOCK, the server failed to properly detect
write-locked tables when running with low-priority updates,
resulting in a crash or deadlock.
(Bug #32528)

ssl-cipher values in option files were not
being read by libmysqlclient.
(Bug #32429)

Repeated execution of a query containing a
CASE expression and numerous
AND and OR relations could
crash the server. The root cause of the issue was determined to
be that the internal SEL_ARG structure was
not properly initialized when created.
(Bug #32403)

Referencing within a subquery an alias used in the
SELECT list of the outer query
was incorrectly permitted.
(Bug #32400)

An ORDER BY query on a view created using a
FEDERATED table as a base table caused the
server to crash.
(Bug #32374)

Comparison of a BIGINT NOT NULL column with a
constant arithmetic expression that evaluated to NULL mistakenly
caused the error Column '...' cannot be
null (error 1048).
(Bug #32335)

Assigning a 65,536-byte string to a
TEXT column (which can hold a
maximum of 65,535 bytes) resulted in truncation without a
warning. Now a truncation warning is generated.
(Bug #32282)

MIN() and
MAX() could return incorrect
results when an index was present if a loose index scan was
used.
(Bug #32268)

Executing a prepared statement associated with a materialized
cursor sent to the client a metadata packet with incorrect table
and database names. The problem occurred because the server sent
the name of the temporary table used by the cursor instead of
the table name of the original table.

The same problem occurred when selecting from a view, in which
case the name of the table name was sent, rather than the name
of the view.
(Bug #32265)

Memory corruption could occur due to large index map in
Range checked for each record status reported
by EXPLAIN
SELECT. The problem was based in an incorrectly
calculated length of the buffer used to store a hexadecimal
representation of an index map, which could result in buffer
overrun and stack corruption under some circumstances.
(Bug #32241)

Various test program cleanups were made: 1)
mytest and libmysqltest
were removed. 2) bug25714 displays an error
message when invoked with incorrect arguments or the
--help option. 3)
mysql_client_test exits cleanly with a proper
error status.
(Bug #32221)

The default grant tables on Windows contained information for
host production.mysql.com, which should not
be there.
(Bug #32219)

Under certain conditions, the presence of a GROUP
BY clause could cause an ORDER BY
clause to be ignored.
(Bug #32202)

For comparisons of the form date_col OP
datetime_const (where
OP is
=,
<,
>,
<=,
or
>=),
the comparison is done using
DATETIME values, per the fix for
Bug #27590. However that fix caused any index on
date_col not to be used and
compromised performance. Now the index is used again.
(Bug #32198)

InnoDB does not support
SPATIAL indexes, but could crash when asked
to handle one. Now an error is returned.
(Bug #32125)

The server crashed on optimizations involving a join of
INT and
MEDIUMINT columns and a system
variable in the WHERE clause.
(Bug #32103)

SHOW STATUS caused a server crash
if InnoDB had not been initialized.
(Bug #32083)

With lower_case_table_names
set, CREATE TABLE LIKE was treated
differently by libmysqld than by the
nonembedded server.
(Bug #32063)

Within a subquery, UNION was
handled differently than at the top level, which could result in
incorrect results or a server crash.
(Bug #32036, Bug #32051)

User-defined functions are not loaded if the server is started
with the --skip-grant-tables
option, but the server did not properly handle this case and
issued an Out of memory error message
instead.
(Bug #32020)

A column with malformed multibyte characters could cause the
full-text parser to go into an infinite loop.
(Bug #31950)

Changing the SQL mode to cause dates with “zero”
parts to be considered invalid (such as
'1000-00-00') could result in indexed and
nonindexed searches returning different results for a column
that contained such dates.
(Bug #31928)

In debug builds, testing the result of an IN
subquery against NULL caused an assertion
failure.
(Bug #31884)

mysql-test-run.pl sometimes set up test
scenarios in which the same port number was passed to multiple
servers, causing one of them to be unable to start.
(Bug #31880)

Comparison results for BETWEEN were
different from those for operators like
< and
> for
DATETIME-like values with
trailing extra characters such as '2007-10-01 00:00:00
GMT-6'. BETWEEN treated
the values as DATETIME, whereas
the other operators performed a binary-string comparison. Now
they all uniformly use a DATETIME
comparison, but generate warnings for values with trailing
garbage.
(Bug #31800)

Name resolution for correlated subqueries and
HAVING clauses failed to distinguish which of
two was being performed when there was a reference to an outer
aliased field. This could result in error messages about a
HAVING clause for queries that had no such
clause.
(Bug #31797)

If an error occurred during file creation, the server sometimes
did not remove the file, resulting in an unused file in the file
system.
(Bug #31781)

The server could crash during filesort for
ORDER BY based on expressions with
INET_NTOA() or
OCT() if those functions returned
NULL.
(Bug #31758)

The mysqld crash handler failed on Windows.
(Bug #31745)

For a fatal error during a filesort in
find_all_keys(), the error was returned
without the necessary handler uninitialization, causing an
assertion failure.
(Bug #31742)

The examined-rows count was not incremented for
const queries.
(Bug #31700)

For SELECT ... INTO
OUTFILE, if the ENCLOSED BY string
is empty and the FIELDS TERMINATED BY string
started with a special character (one of n,
t, r,
b, 0,
Z, or N), every occurrence
of the character within field values would be duplicated.
(Bug #31663)

SHOW COLUMNS and
DESCRIBE displayed
null as the column type for a view with no
valid definer. This caused mysqldump to
produce a nonreloadable dump file for the view.
(Bug #31662)

The mysqlbug script did not include the
correct values of CFLAGS and
CXXFLAGS that were used to configure the
distribution.
(Bug #31644)

ucs2 does not work as a client character set,
but attempts to use it as such were not rejected. Now
character_set_client cannot be
set to ucs2. This also affects statements
such as SET NAMES and SET CHARACTER
SET.
(Bug #31615)

The server returned the error message Out of memory;
restart server and try again when the actual problem
was that the sort buffer was too small. Now an appropriate error
message is returned in such cases.
(Bug #31590)

A buffer used when setting variables was not dimensioned to
accommodate the trailing '\0' byte, so a
single-byte buffer overrun was possible.
(Bug #31588)

HAVING could treat lettercase of table
aliases incorrectly if
lower_case_table_names was
enabled.
(Bug #31562)

The fix for Bug #24989 introduced a problem such that a
NULL thread handler could be used during a
rollback operation. This problem is unlikely to be seen in
practice.
(Bug #31517)

Killing a CREATE TABLE ... LIKE statement
that was waiting for a name lock caused a server crash. When the
statement was killed, the server attempted to release locks that
were not held.
(Bug #31479)

The length of the result from
IFNULL() could be calculated
incorrectly because the sign of the result was not taken into
account.
(Bug #31471)

A data file required for the
ndb_restore_different_endian_data test case
was missing from binary distributions, causing the test to fail.
The data file now is included.
(Bug #31453, Bug #11747239)

Queries that used the ref
access method or index-based subquery execution over indexes
that have DECIMAL columns could
fail with an error Column
col_name cannot be null.
(Bug #31450)

Executing RENAME while tables were open for
use with HANDLER statements could
cause a server crash.
(Bug #31409)

mysql-test-run.pl tried to create files in a
directory where it could not be expected to have write
permission. mysqltest created
.reject files in a directory other than the
one where test results go.
(Bug #31398)

If MAKETIME() returned
NULL when used in an ORDER
BY that was evaluated using
filesort, a server crash could result.
(Bug #31160)

Full-text searches on ucs2 columns caused a
server crash. (FULLTEXT indexes on
ucs2 columns cannot be used, but it should be
possible to perform IN BOOLEAN MODE searches
on ucs2 columns without a crash.)
(Bug #31159)

Data in BLOB or
GEOMETRY columns could be cropped when
performing a UNION query.
(Bug #31158)

An assertion designed to detect a bug in the
ROLLUP implementation would incorrectly be
triggered when used in a subquery context with noncacheable
statements.
(Bug #31156)

Selecting spatial types in a
UNION could cause a server crash.
(Bug #31155)

The server crashed in the parser when running out of memory.
Memory handling in the parser has been improved to gracefully
return an error when out-of-memory conditions occur in the
parser.
(Bug #31153)

MySQL declares a UNIQUE key as a
PRIMARY key if it doesn't have
NULL columns and is not a partial key, and
the PRIMARY key must alway be the first key.
However, in some cases, a nonfirst key could be reported as
PRIMARY, leading to an assert failure by
InnoDB. This is fixed by correcting the key
sort order.
(Bug #31137)

GROUP BY NULL WITH ROLLUP could cause a
server crash.
(Bug #31095)

References: See also Bug #32558.

REGEXP operations could cause a
server crash for character sets such as ucs2.
Now the arguments are converted to utf8 if
possible, to permit correct results to be produced if the
resulting strings contain only 8-bit characters.
(Bug #31081)

For a spatial column with a regular
(non-SPATIAL) index, queries failed if the
optimizer tried to use the index.
(Bug #30825)

Values for the --tc-heuristic-recover option
incorrectly were treated as values for the
--myisam-stats-method option.
(Bug #30821)

The optimizer incorrectly optimized conditions out of the
WHERE clause in some queries involving
subqueries and indexed columns.
(Bug #30788)

If an alias was used to refer to the value returned by a stored
function within a subselect, the outer select recognized the
alias but failed to retrieve the value assigned to it in the
subselect.
(Bug #30787)

References: This bug is a regression of Bug #20777.

Improper calculation of CASE
expression results could lead to value truncation.
(Bug #30782)

On Windows, the pthread_mutex_trylock()
implementation was incorrect. One symptom was that invalidating
the query cache could cause a server crash.
(Bug #30768)

mysql-test-run.pl could not run
mysqld with root
privileges.
(Bug #30630)

Binary logging for a stored procedure differed depending on
whether or not execution occurred in a prepared statement.
(Bug #30604)

For MEMORY tables,
DELETE statements that remove
rows based on an index read could fail to remove all matching
rows.
(Bug #30590)

Using GROUP BY on an expression of the form
timestamp_col DIV
number caused a server
crash due to incorrect calculation of number of decimals.
(Bug #30587)

The options available to the CHECK
TABLE statement were also permitted in
OPTIMIZE TABLE and
ANALYZE TABLE statements, but
caused corruption during their execution. These options were
never supported for these statements, and an error is now raised
if you try to apply these options to these statements.
(Bug #30495)

When expanding a * in a
USING or NATURAL join, the
check for table access for both tables in the join was done
using only the grant information of the first table.
(Bug #30468)

When casting a string value to an integer, cases where the input
string contained a decimal point and was long enough to overrun
the unsigned long long type were not handled
correctly. The position of the decimal point was not taken into
account which resulted in miscalculated numbers and incorrect
truncation to appropriate SQL data type limits.
(Bug #30453)

Versions of mysqldump from MySQL 4.1 or
higher tried to use START TRANSACTION WITH CONSISTENT
SNAPSHOT if the
--single-transaction and
--master-data options were
given, even with servers older than 4.1 that do not support
consistent snapshots.
(Bug #30444)

For CREATE ... SELECT ... FROM, where the
resulting table contained indexes, adding
SQL_BUFFER_RESULT to the
SELECT part caused index
corruption in the table.
(Bug #30384)

An orphaned PID file from a no-longer-running process could
cause mysql.server to wait for that process
to exit even though it does not exist.
(Bug #30378)

The optimizer made incorrect assumptions about the value of the
is_member value for user-defined functions,
sometimes resulting in incorrect ordering of UDF results.
(Bug #30355)

Some valid euc-kr characters having the
second byte in the ranges [0x41..0x5A] and
[0x61..0x7A] were rejected.
(Bug #30315)

The mysql_config command would output
CFLAGS values that were incompatible with C++
for the HP-UX platform.
(Bug #29645)

Views were treated as insertable even if some base table columns
with no default value were omitted from the view definition.
(This is contrary to the condition for insertability that a view
must contain all columns in the base table that do not have a
default value.)
(Bug #29477)

The mysql client program now ignores Unicode
byte order mark (BOM) characters at the beginning of input
files. Previously, it read them and sent them to the server,
resulting in a syntax error.

Presence of a BOM does not cause mysql to
change its default character set. To do that, invoke
mysql with an option such as
--default-character-set=utf8.
(Bug #29323)

For transactional tables, an error during a multiple-table
DELETE statement did not roll
back the statement.
(Bug #29136)

The log and
log_slow_queries system
variables were displayed by SHOW
VARIABLES but could not be accessed in expressions as
@@log and
@@log_slow_queries. Also, attempting to set
them with
SET
produced an incorrect Unknown system variable
message. Now these variables can be accessed in expressions and
attempting to set their values produces an error message that
the variable is read only.
(Bug #29131)

Denormalized double-precision numbers cannot be handled properly
by old MIPS processors. For IRIX, this is now handled by
enabling a mode to use a software workaround.
(Bug #29085)

SHOW VARIABLES did not display
the relay_log,
relay_log_index, or
relay_log_info_file system variables.
(Bug #28893)

The MySQL preferences pane did not work to start or stop MySQL
on Mac OS X 10.5 (Leopard).
(Bug #28854)

When doing a DELETE on a table
that involved a JOIN with
MyISAM or
MERGE tables and the
JOIN referred to the same table, the
operation could fail reporting ERROR 1030 (HY000): Got
error 134 from storage engine. This was because scans
on the table contents would change because of rows that had
already been deleted.
(Bug #28837)

On Windows, mysql_upgrade created temporary
files in C:\ and did not clean them up.
(Bug #28774)

Index hints specified in view definitions were ignored when
using the view to select from the base table.
(Bug #28702)

Views do not have indexes, so index hints do not apply. Use of
index hints when selecting from a view is no longer permitted.
(Bug #28701)

After changing the SQL mode to a restrictive value that would
make already inserted dates in a column be considered invalid,
searches returned different results depending on whether the
column was indexed.
(Bug #28687)

For upgrading to a new major version using RPM packages (such as
4.1 to 5.0), if the installation procedure found an existing
MySQL server running, it could fail to shut down the old server,
but also erroneously removed the server's socket file. Now the
procedure checks for an existing server package from a different
vendor or major MySQL version. In such case, it refuses to
install the server and recommends how to safely remove the old
packages before installing the new ones.
(Bug #28555)

The result from CHAR() was
incorrectly assumed in some contexts to return a single-byte
result.
(Bug #28550)

The parser confused user-defined function (UDF) and stored
function creation for CREATE
FUNCTION and required that there be a default database
when creating UDFs, although there is no such requirement.
(Bug #28318, Bug #29816)

The SQL parser did not accept an empty
UNION=() clause. This meant that, when there
were no underlying tables specified for a
MERGE table,
SHOW CREATE TABLE and
mysqldump both output statements that could
not be executed.

The result of a comparison between
VARBINARY and
BINARY columns differed depending
on whether the VARBINARY column
was indexed.
(Bug #28076)

The metadata in some MYSQL_FIELD members
could be incorrect when a temporary table was used to evaluate a
query.
(Bug #27990)

An ORDER BY at the end of a
UNION affected individual
SELECT statements rather than the
overall query result.
(Bug #27848)

comp_err created files with permissions such
that they might be inaccessible during make
install operations.
(Bug #27789)

It was possible to exhaust memory by repeatedly running
index_merge queries and never
performing any FLUSH
TABLES statements.
(Bug #27732)

The anonymous accounts were not being created during MySQL
installation.
(Bug #27692)

When utf8 was set as the connection character
set, using SPACE() with a
non-Unicode column produced an error.
(Bug #27580)

References: See also Bug #23637.

A race condition between killing a statement and the thread
executing the statement could lead to a situation such that the
binary log contained an event indicating that the statement was
killed, whereas the statement actually executed to completion.
(Bug #27571)

Some queries using the
NAME_CONST() function failed to
return either a result or an error to the client, causing it to
hang. This was due to the fact that there was no check to insure
that both arguments to this function were constant expressions.
(Bug #27545, Bug #32559)

resolveip failed to produce correct results
for host names that begin with a digit.
(Bug #27427)

In ORDER BY clauses, mixing aggregate
functions and nongrouping columns is not permitted if the
ONLY_FULL_GROUP_BY SQL mode is
enabled. However, in some cases, no error was thrown because of
insufficient checking.
(Bug #27219)

For the --record_log_pos
option, mysqlhotcopy now determines the slave
status information from the result of SHOW
SLAVE STATUS by using the
Relay_Master_Log_File and
Exec_Master_Log_Pos values rather than the
Master_Log_File and
Read_Master_Log_Pos values. This provides a
more accurate indication of slave execution relative to the
master.
(Bug #27101)

The MySQL Instance Configuration Wizard would not permit you to
choose a service name, even though the criteria for the service
name were valid. The code that checks the name has been updated
to support the correct criteria of any string less than 256
character and not containing either a forward or backward slash
character.
(Bug #27013)

mysqld sometimes miscalculated the number of
digits required when storing a floating-point number in a
CHAR column. This caused the
value to be truncated, or (when using a debug build) caused the
server to crash.
(Bug #26788)

On Windows, an error in configure.js caused
installation of source distributions to fail.
(Bug #25340)

Using mysqldump in MySQL 5.1 resulted in dump
files that could not be loaded in MySQL 5.0 because
USING type_name
options in index definitions appeared after the index column
list, whereas 5.0 accepted only the old syntax that has
USING before the column list. The parser in
5.0 now accepts USING following the column
list.
(Bug #25162)

The client library had no way to return an error if no
connection had been established. This caused problems such as
mysql_library_init() failing
silently if no errmsg.sys file was
available.
(Bug #25097)

If the expected precision of an arithmetic expression exceeded
the maximum precision supported by MySQL, the precision of the
result was reduced by an unpredictable or arbitrary amount,
rather than to the maximum precision. In some cases, exceeding
the maximum supported precision could also lead to a crash of
the server.
(Bug #24907)

mysql did not use its completion table. Also,
the table contained few entries.
(Bug #24624)

If a user installed MySQL Server and set a password for the
root user, and then uninstalled and
reinstalled MySQL Server to the same location, the user could
not use the MySQL Instance Config wizard to configure the server
because the uninstall operation left the previous data directory
intact. The config wizard assumed that any
new install (not an upgrade) would have the default data
directory where the root user has no
password. The installer now writes a registry key named
FoundExistingDataDir. If the installer finds
an existing data directory, the key will have a value of 1,
otherwise it will have a value of 0. When
MySQLInstanceConfig.exe is run, it will
attempt to read the key. If it can read the key, and the value
is 1 and there is no existing instance of the server (indicating
a new installation), the Config Wizard will permit the user to
input the old password so the server can be configured.
(Bug #24215)

The parser used signed rather than unsigned values in some cases
that caused legal lengths in column declarations to be rejected.
(Bug #15776)

A SET column whose definition specified 64
elements could not be updated using integer values.
(Bug #15409)

Clients were ignoring the TCP/IP port number specified as the
default port using the
--with-tcp-port configuration
option.
(Bug #15327)

Zero-padding of exponent values was not the same across
platforms.
(Bug #12860)

Values of types REAL ZEROFILL,
DOUBLE ZEROFILL, FLOAT
ZEROFILL, were not zero-filled when converted to a
character representation in the C prepared statement API.
(Bug #11589)

mysql stripped comments from statements sent
to the server. Now the
--comments or
--skip-comments option can be
used to control whether to retain or strip comments. The default
is --skip-comments.
(Bug #11230, Bug #26215)

If an INSERT ...
SELECT statement is executed, and no automatically
generated value is successfully inserted, then
mysql_insert_id() returns the ID
of the last inserted row.

MySQLInstanceConfig.exe did not save the
innodb_data_home_dir value to
the my.ini file under certain
circumstances.
(Bug #6627)

Several buffer-size system variables were either being handled
incorrectly for large values (for settings larger than 4GB, they
were truncated to values less than 4GB without a warning), or
were limited unnecessarily to 4GB even on 64-bit systems. The
following changes were made:

For key_buffer_size, values
larger than 4GB are permitted on 64-bit platforms (except
Windows, for which large values are truncated to 4GB with a
warning).

In addition, settings for
read_buffer_size and
read_rnd_buffer_size are
limited to 2GB on all platforms. Larger values are truncated to
2GB with a warning.
(Bug #5731, Bug #29419, Bug #29446)

Executing DISABLE KEYS and ENABLE
KEYS on a nonempty table would cause the size of the
index file for the table to grow considerable. This was because
the DISABLE KEYS operation would only mark
the existing index, without deleting the index blocks. The
ENABLE KEYS operation would re-create the
index, adding new blocks, while the previous index blocks would
remain. Existing indexes are now dropped and recreated when the
ENABLE KEYS statement is executed.
(Bug #4692)