The world's most popular open source database
Functionality added or changed:
Important Change: Partitioning: Security Fix:
It was possible, by creating a partitioned table using the
DATA DIRECTORY and INDEX
DIRECTORY options to gain privileges on other tables
having the same name as the partitioned table. As a result of
this fix, any table-level DATA DIRECTORY or
INDEX DIRECTORY options are now ignored for
partitioned tables.
(Bug#32091, CVE-2007-5970)
Incompatible Change: The Unicode implementation has been extended to provide support for supplementary characters that lie outside the Basic Multilingual Plane (BMP). Noteworthy features:
utf16 and utf32
character sets have been added. These correspond to the
UTF-16 and UTF-32 encodings of the Unicode character set,
and they both support supplementary characters.
The utf8 character set from previous
versions of MySQL has been renamed to
utf8mb3, to reflect that its encoding
uses a maximum of three bytes for multi-byte characters.
(Old tables that previously used utf8
will be reported as using utf8mb3 after
an in-place upgrade to MySQL 6.0, but otherwise work as
before.)
The new utf8 character set in MySQL 6.0
is similar to utf8mb3, but its encoding
allows up to four bytes per character to enable support for
supplementary characters.
The ucs2 character set is essentially
unchanged except for the inclusion of some newer BMP
characters.
In most respects, upgrading from MySQL 5.1 to 6.0 should present few problems with regard to Unicode usage, although there are some potential areas of incompatibility. Some examples:
For the variable-length character data types
(VARCHAR and the
TEXT types), the maximum
length in characters for utf8 columns is
less in MySQL 6.0 than previously.
For all character data types
(CHAR,
VARCHAR, and the
TEXT types), the maximum
number of characters for utf8 columns
that can be indexed is less in MySQL 6.0 than previously.
Consequently, if you want to upgrade tables from the old
utf8 (now utf8mb3) to the
current utf8, it may be necessary to change
some column or index definitions.
For additional details about the new Unicode character sets and potential incompatibilities, see Section 9.1.9, “Unicode Support”, and Section 9.1.10, “Upgrading from Previous to Current Unicode Support”.
If you use events, a known issue is that if you upgrade from MySQL 5.1 to 6.0.4 though 6.0.6, the event scheduler will not work, even after you run mysql_upgrade. (This is an issue only for an upgrade, not for a new installation of MySQL 6.0.x.) As of MySQL 6.0.7, mysql_upgrade handles upgrading the system tables properly. If you upgrade to 6.0.4 through 6.0.6, you can work around this upgrading problem by using these instructions:
In MySQL 5.1, before upgrading, create a dump file
containing your mysql.event table:
shell> mysqldump -uroot -p mysql event > event.sql
Stop the server, upgrade to MySQL 6.0, and start the server.
Recreate the mysql.event table using the
dump file:
shell> mysql -uroot -p mysql < event.sql
Run mysql_upgrade to upgrade the other
system tables in the mysql database:
shell> mysql_upgrade -uroot -p
Restart the server. The event scheduler should run normally.
Incompatible Change:
Because of a change in the format of the
Falcon pages stored within
Falcon database files,
Falcon databases created in MySQL 6.0.4 (or
later) are not compatible with previous releases, and existing
Falcon databases are incompatible with MySQL
6.0.4 (and later versions. You should dump
Falcon databases using
mysqldump before upgrading, and then reload
them after the upgrade. For more information, see
Section 4.5.4, “mysqldump — A Database Backup Program”.
MySQL Cluster:
Introduced the
Ndb_execute_count status
variable, which measures the number of round trips made by
queries to the NDB kernel.
Partitioning: Error messages for partitioning syntax errors have been made more descriptive. (Bug#29368)
Cluster Replication: Replication: A replication heartbeat mechanism has been added to facilitate monitoring. This provides an alternative to checking log files, making it possible to detect in real time when a slave has failed.
Configuration of heartbeats is done via a new
MASTER_HEARTBEAT_PERIOD =
clause for the
intervalCHANGE MASTER TO statement (see
Section 12.6.2.1, “CHANGE MASTER TO Syntax”); monitoring can be done by
checking the values of the status variables
Slave_heartbeat_period and
Slave_received_heartbeats (see
Section 5.1.6, “Server Status Variables”).
The addition of replication heartbeats addresses a number of issues:
Relay logs were rotated every
slave_net_timeout seconds
even if no statements were being replicated.
SHOW SLAVE STATUS displayed
an incorrect value for
seconds_behind_master following a
FLUSH
LOGS statement.
Replication master-slave connections used
slave_net_timeout for
connection timeouts.
Replication:
Replication of the following SQL functions now switches to
row-based logging in MIXED mode, and
generates a warning in STATEMENT mode:
CURRENT_USER() and its
alias CURRENT_USER
See Section 5.2.4.3, “Mixed Binary Logging Format”, for more information. (Bug#12092, Bug#28086, Bug#30244)
The (undocumented) configure script previously included with binary distributions is no longer included. (Bug#35011)
The --event-scheduler option without a value
disabled the event scheduler. Now it enables the event
scheduler.
(Bug#31332)
mysqldump produces a -- Dump
completed on comment
at the end of the dump if DATE--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)
MySQL now can be compiled with gcc 4.2.x.
There was a problem involving a conflict with the
min() and max() macros
in my_global.h.
(Bug#28184)
Added the --auto-vertical-output option to
mysql which causes result sets to be
displayed vertically if they are too wide for the current
window, and using normal tabular format otherwise. (This applies
to statements terminated by ; or
\G.)
(Bug#26780)
It is now possible to set
long_query_time in microseconds
or to 0. Setting this value to 0 causes all queries to be
recorded in the slow query log.
Currently, fractional values can be used only when logging to files. We plan to provide this functionality for logging to tables when time-related data types are enhanced to support microsecond resolution. (Bug#25412)
INFORMATION_SCHEMA implementation changes
were made that optimize certain types of queries for
INFORMATION_SCHEMA tables so that they
execute more quickly.
Section 7.2.20, “INFORMATION_SCHEMA Optimization”, provides
guidelines on how to take advantage of these optimizations by
writing queries that minimize the need for the server to access
the filesystem to obtain the information contained in
INFORMATION_SCHEMA tables. By writing queries
that enable the server to avoid directory scans or opening table
files, you will obtain better performance.
(Bug#19588)
Three options were added to mysqldump make it
easier to generate a dump from a slave server.
--dump-slave is similar to
--master-data, but the
CHANGE MASTER TO statement
contains binary log coordinates for the slave's master host, not
the slave itself. --apply-slave-statements
causes STOP SLAVE and
START SLAVE statements to be
added before the CHANGE MASTER TO
statement and at the end of the output, respectively.
--include-master-host-port causes the
CHANGE MASTER TO statement to
include MASTER_PORT and
MASTER_HOST options for the slave's master.
(Bug#8368)
mysql-test-run.pl now supports a
--combination option for specifying options to
the mysqld server. This option is similar to
--mysqld but should be given two or more times.
mysql-test-run.pl executes multiple test
runs, using the options for each instance of
--combination in successive runs.
For test runs specific to a given test suite, an alternative to
the use of --combination is to create a
combinations file in the suite directory.
The file should contain a section of options for each test run.
An alternative thread model is available for dealing with the issues that occur with the original one-thread-per-client model when scaling to large numbers of simultaneous connections. This model uses thread pooling:
Connection manager threads do not dedicate a thread to each client connection. Instead, the connection is added to the set of existing connection sockets. The server collects input from these sockets and when a complete request has been received from a given client, it is queued for service.
The server maintains a pool of service threads to process requests. When a queued request is waiting and there is an available (not busy) service thread in the pool, the request is given to the thread to be handled. After processing the request, the service thread becomes available to process other requests.
Service threads are created at server startup and exist until the server terminates. A given service thread is not tied to a specific client connection and the requests that it processes over time may originate from different client connections.
The pool of service threads has a fixed size, so the amount of memory required for it does not increase as the number of client connections increases.
For information about choosing one thread model over the other and tuning the parameters that control thread resources, see Section 7.5.7, “How MySQL Uses Threads for Client Connections”.
When the server detects MyISAM table
corruption, it now writes additional information to the error
log, such as the name and line number of the source file, and
the list of threads accessing the table. Example: Got
an error from thread_id=1, mi_dynrec.c:368. This is
useful information to include in bug reports.
Two options relating to slow query logging have been added for
mysqld.
--log-slow-slave-statements causes slow
statements executed by a replication slave to be written to the
slow query log;
min_examined_row_limit can be
used to cause queries which examine fewer than the stated number
of rows not to be logged.
Bugs fixed:
Security Fix: Replication:
It was possible for any connected user to issue a
BINLOG statement, which could be
used to escalate privileges.
Use of the BINLOG statement now
requires the SUPER privilege.
(Bug#31611, CVE-2007-6313)
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.
The proof-of-concept exploit is freely available on the Internet. Everyone with a vulnerable MySQL configuration is advised to upgrade immediately.
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 allow that user to gain the access rights of
the view. Now ALTER VIEW is
allowed 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)
Important Change: Incompatible Change:
A number of problems existed in the implementation of
MERGE tables that could cause problems. The
problems are summarized below:
Bug#26379 - Combination of
FLUSH TABLE
and REPAIR TABLE corrupts a
MERGE table. This was caused in a number
of situations:
A thread trying to lock a MERGE table
performs busy waiting while REPAIR
TABLE or a similar table administration task
is ongoing on one or more of its MyISAM tables.
A thread trying to lock a MERGE table
performs busy waiting until all threads that did
REPAIR TABLE or similar
table administration tasks on one or more of its MyISAM
tables in LOCK TABLES segments do UNLOCK TABLES. The
difference against problem #1 is that the busy waiting
takes place after the administration task. It is
terminated by
UNLOCK
TABLES only.
Two FLUSH
TABLES within a LOCK
TABLES segment can invalidate the lock. This
does not require a MERGE table. The
first FLUSH
TABLES can be replaced by any statement that
requires other threads to reopen the table. In 5.0 and
5.1 a single
FLUSH
TABLES can provoke the problem.
Bug#26867 - Simultaneously executing
LOCK TABLES and
REPAIR TABLE on a
MERGE table would result in memory/cpu
hogging.
Trying DML on a MERGE table, which has a
child locked and repaired by another thread, made an
infinite loop in the server.
Bug#26377 - Deadlock with MERGE and
FLUSH TABLE
Locking a MERGE table and its children in parent-child order and flushing the child deadlocked the server.
Truncating a MERGE child, while the MERGE table was in use, let the truncate fail instead of waiting for the table to become free.
Bug#25700 - MERGE base tables get
corrupted by OPTIMIZE/ANALYZE/REPAIR
TABLE
Repairing a child of an open MERGE table
corrupted the child. It was necessary to
FLUSH the child first.
Bug#30275 - MERGE tables:
FLUSH
TABLES or
UNLOCK
TABLES causes server to crash.
Flushing and optimizing locked MERGE
children crashed the server.
Bug#19627 - temporary merge table locking
Use of a temporary MERGE table with
non-temporary children could corrupt the children.
Temporary tables are never locked. Creation of tables with
non-temporary children of a temporary
MERGE table is now prohibited.
Bug#27660 - Falcon:
MERGE table possible
It was possible to create a MERGE table
with non-MyISAM children.
Bug#30273 - MERGE tables: Can't lock
file (errno: 155)
This was a Windows-only bug. Table administration statements sometimes failed with "Can't lock file (errno: 155)".
The fix introduces the following changes in behavior:
This patch changes the behavior of temporary
MERGE tables. Temporary
MERGE must have temporary children. The
old behavior was wrong. A temporary table is not locked.
Hence even non-temporary children were not locked. See Bug#19627.
You cannot change the union list of a non-temporary
MERGE table when LOCK TABLES is in
effect. The following does not work:
CREATE TABLE m1 ... ENGINE=MRG_MYISAM ...; LOCK TABLES t1 WRITE, t2 WRITE, m1 WRITE; ALTER TABLE m1 ... UNION=(t1,t2) ...;
However, you can do this with a temporary
MERGE table.
You cannot create a MERGE table with
CREATE ... SELECT, neither as a temporary
MERGE table, nor as a non-temporary
MERGE table. For example, CREATE
TABLE m1 ... ENGINE=MRG_MYISAM ... SELECT ...;
causes the error message: table is not BASE
TABLE.
(Bug#19627, Bug#25038, Bug#25700, Bug#26377, Bug#26379, Bug#26867, Bug#27660, Bug#30275, Bug#30491)
Incompatible Change:
The falcon_lock_timeout system variable,
which had a value in milliseconds, has been replaced with
falcon_lock_wait_timeout, which has a value
in seconds. The default value of
falcon_lock_wait_timeout is 50 seconds. This
has been done for better name and unit consistency with the
innodb_lock_wait_timeout system variable.
Uses of the old variable should be converted to use the new
variable.
(Bug#33474, Bug#33072)
Incompatible Change:
With ONLY_FULL_GROUP_BY SQL
mode enabled, queries such as SELECT a FROM t1 HAVING
COUNT(*)>2 were not being rejected as they should
have been.
This fix results in the following behavior:
There is a check against mixing group and non-group columns
only when
ONLY_FULL_GROUP_BY is
enabled.
This check is done both for the select list and for the
HAVING clause if there is one.
This behavior differs from previous versions as follows:
Previously, the HAVING clause was not
checked when
ONLY_FULL_GROUP_BY was
enabled; now it is checked.
Previously, the select list was checked even when
ONLY_FULL_GROUP_BY was not
enabled; now it is checked only when
ONLY_FULL_GROUP_BY is
enabled.
Incompatible Change:
SET PASSWORD statements now cause
an implicit commit, and thus are prohibited within stored
functions and triggers.
(Bug#30904)
Incompatible Change:
The mysql_install_db script could fail to
locate some components (including resolveip)
during execution if the --basedir option was
specified on the command-line or within the
my.cnf file. This was due to a conflict
when comparing the compiled-in values and the supplied values.
The --source-install command-line option to
the script has been removed and replaced with the
--srcdir option.
mysql_install_db now locates components
either using the compiled-in options, the
--basedir option or --srcdir
option.
(Bug#30759)
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
was read last. The latter file now is read earlier so that
SYSCONFDIR/my.cnf~/.my.cnf can override system-wide
settings.
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 was addressed as
Bug#38180.
(Bug#20748)
Partitioning: Important Note:
An apostrophe or single quote character
(') used in the DATA
DIRECTORY, INDEX DIRECTORY, or
COMMENT for a PARTITION
clause caused the server to crash. When used as part of a
CREATE TABLE statement, the crash
was immediate. When used in an ALTER
TABLE statement, the crash did not occur until trying
to perform a SELECT or DML
statement on the table. In either case, the server could not be
completely restarted until the .FRM file
corresponding to the newly created or altered table was deleted.
Upgrading to the current (or later) release solves this
problem only for tables that are newly created or altered.
Tables created or altered in previous versions of the server
to include ' characters in
PARTITION options must still be removed by
deleting the corresponding .FRM files and
re-creating them afterwards.
Partitioning: MySQL Cluster:
EXPLAIN PARTITIONS reported partition usage
by queries on NDB tables according to the
standard MySQL hash function than the hash function used in the
NDB storage engine.
(Bug#29550)
Replication: MySQL Cluster:
Row-based replication from or to a big-endian machine where the
table used the NDB storage engine failed, if
the same table on the other machine was either
non-NDB or the other machine was
little-endian.
(Bug#29549, Bug#30790)
MySQL Cluster: Replication: (Replication): Inconsistencies could occur between the master and the slave when replicating Disk Data tables. (Bug#19259, Bug#19227)
MySQL Cluster:
An insert or update with combined range and equality constraints
failed when run against an NDB table with the
error Got unknown error from NDB. An
example of such a statement would be UPDATE t1 SET b =
5 WHERE a IN (7,8) OR a >= 10;.
(Bug#31874)
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:
The NDB storage engine code was not safe for
strict-alias optimization in gcc 4.2.1.
(Bug#31761)
MySQL Cluster: Following an upgrade, ndb_mgmd would fail with an ArbitrationError. (Bug#31690)
MySQL Cluster: It was possible in some cases for a node group to be “lost” due to missed local checkpoints following a system restart. (Bug#31525)
MySQL Cluster:
A query against a table with TEXT
or BLOB columns that would return
more than a certain amount of data failed with Got
error 4350 'Transaction already aborted' from
NDBCLUSTER.
(Bug#31482)
This regression was introduced by Bug#29102.
MySQL Cluster:
NDB tables having names containing
non-alphanumeric characters (such as “
$ ”) were not discovered correctly.
(Bug#31470)
MySQL Cluster: A node failure during a local checkpoint could lead to a subsequent failure of the cluster during a system restart. (Bug#31257)
MySQL Cluster: A cluster restart could sometimes fail due to an issue with table IDs. (Bug#30975)
MySQL Cluster: In some cases, the cluster managment server logged entries multiple times following a restart of mgmd. (Bug#29565)
MySQL Cluster:
ndb_mgm --help did not
display any information about the -a option.
(Bug#29509)
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:
Performing DELETE operations
after a data node had been shut down could lead to inconsistent
data following a restart of the node.
(Bug#26450)
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: The cluster log was formatted inconsistently and contained extraneous newline characters. (Bug#25064)
Partitioning:
An INSERT into a
Falcon table with partitions and an
auto-increment column would fail.
(Bug#33661)
Partitioning:
Multiple simultaneous inserts into a partitioned
Falcon table could deadlock.
(Bug#33480, Bug#33735)
Partitioning:
Repeated updates of a table that was partitioned by
KEY on a
TIMESTAMP column eventually
crashed the server.
(Bug#32067)
Partitioning:
Selecting from a table partitioned by KEY on
a VARCHAR column whose size was
greater than 65530 caused the server to crash.
(Bug#31705)
Partitioning:
INSERT DELAYED on a partitioned table crashed
the server. The server now rejects the statement with an error.
(Bug#31210)
Partitioning:
Using ALTER TABLE to partition an
existing table having an AUTO_INCREMENT
column could crash the server.
(Bug#30878)
This regression was introduced by Bug#27405.
Partitioning:
Falcon cannot drop a table for which there is
a pending transaction, but the error message for such attempts
was misleading.
(Bug#22972)
Cluster Replication: Replication: A node failure during replication could lead to buckets out of order; now active subscribers are checked for, rather than empty buckets. (Bug#31701)
Replication:
When using a transactional storage engine not using
statement-based logging, a duplicate key error on the master
caused replication to fail. This issue was first observed when
using the Falcon storage engine.
(Bug#33688)
Replication:
When updating columns for a row when using a
Falcon table, the values for columns that
were not updated were replicated as NULL.
(Bug#33055)
Replication:
When dropping a database containing a stored procedure while
using row-cased replication, the delete of the stored procedure
from the mysql.proc table was recorded in the
binary log following the DROP
DATABASE statement. To correct this issue,
DROP DATABASE now uses
statement-based replication.
(Bug#32435)
Replication:
DELETE FROM
(no
tbl_nameWHERE clause) for a Falcon
table caused replication to fail on the slave.
(Bug#32150)
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)
See also Bug#28597.
Replication: Corruption of log events caused the server to crash on 64-bit Linux systems having 4 GB of memory or more. (Bug#31793)
Replication: Trying to replicate an update of a row that was missing on the slave led to a failure on the slave. (Bug#31702)
Replication:
Falcon tables would fail during replication
if ROW-based replication was specified.
(Bug#31671)
Replication: Table names were displayed as binary “garbage” characters in slave error messages. The issue was observed on 64-bit Windows but may have effected other platforms. (Bug#30854)
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:
A new configuration option, falcon_support_xa
has been added. The option specifies whether
Falcon should report itself as a two-phase
commit storage engine, and therefore take part in XA
transactions.
(Bug#29371)
Replication:
It was possible to set SQL_SLAVE_SKIP_COUNTER
such that the slave would jump into the middle of an event
group, including possibly a transaction.
(Bug#28618)
See also Bug#12691.
Replication: Due a previous change in how the default name and location of the binary log file were determined, replication failed following some upgrades. (Bug#28597, Bug#28603)
See also Bug#31836.
This regression was introduced by Bug#20166.
Replication:
Connections from one mysqld server to another
failed on Mac OS X, affecting replication and
FEDERATED tables.
(Bug#26664)
See also Bug#29083.
Replication:
Stored procedures having BIT
parameters were not replicated correctly.
(Bug#26199)
Replication:
Issuing SHOW SLAVE STATUS as
mysqld was shutting down could cause a crash.
(Bug#26000)
Replication: If a temporary error occured inside an event group on an event that was not the first event of the group, the slave could get caught in an endless loop because the retry counter was reset whenever an event was executed successfully. (Bug#24860)
Replication:
An UPDATE statement using a
stored function that modified a non-transactional table was not
logged if it failed. This caused the copy of the
non-transactional 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)
See also Bug#12713.
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)
Replication: A replication slave sometimes stopped for changes that were idempotent (that is, such changes should have been considered “safe”), even though it should have simply noted that the change was already done, and continued operation. (Bug#19958)
Cluster Replication:
A replication slave could return “garbage” data
that was not in recognizable row format due to a problem with
the internal all_set() method.
(Bug#33375)
Cluster Replication:
Replicating NDB tables with extra
VARCHAR columns on the master
caused the slave to fail.
(Bug#31646)
See also Bug#29549.
Cluster Replication: In some cases, not all tables were properly initialized before the binary log thread was started. (Bug#31618)
Cluster API:
A buffer overrun in NdbBlob::setValue()
caused erroneous results on Mac OS X.
(Bug#31284)
Setting falcon_consistent_read to a value of
1 or ON resulted in a value of –1 being
assigned.
(Bug#34331)
Compiling MySQL on FreeBSD would fail due to missing definitions for certain network constants. (Bug#34292)
The INFORMATION_SCHEMA.FALCON_TRANSACTIONS
had two columns named STATE.
(Bug#34241)
For Falcon, under some circumstances, a
rolled back record could appear not to be removed.
(Bug#34174)
Attempting to set the isolation level to a value not supported
by Falcon caused a Falcon
assertion failure.
(Bug#34164)
Falcon did not compile on Mac OS X/Intel or
Mac OS X/PPC.
(Bug#34095)
When inserting very large data sets into table using
INSERT INTO ... SELECT FROM on a
Falcon table when the value of
falcon_page_cache_size is higher than the
available memory. Instead of returning an error,
mysqld would crash in this instance.
(Bug#34086)
For Falcon, an initializing transaction
created a dependency on a commitNoUpdate transaction releasing
transaction dependencies, which caused an assertion failure.
(Bug#33759)
The output from SHOW CREATE TABLE
on a Falcon table would not include the
AUTO_INCREMENT value parameters.
(Bug#33662)
For table creation, Falcon did not handle
identifiers with embedded double quotes.
(Bug#33657, Bug#33667)
Contention between concurrent Falcon
transactions could cause some queries to be starved for a long
time.
(Bug#33634)
Incomplete Falcon recovery after server
restarts eventually resulted in tablespace corruption.
(Bug#33608, Bug#33665)
Using falcon_debug_mask to enable debugging
messages could lead to some messages not being correctly flushed
to the log file.
(Bug#33531)
Table recovery failed repeatedly after starting the server with
a corrupted Falcon tablespace, causing the
server to crash.
(Bug#33517)
After a server restart, Falcon mishandled
metadata, resulting in apparent corruption of
BLOB data.
(Bug#33492)
Dropping a tablespace for the Falcon storage
engine when the specified tablespace did not exist would
silently succeed, instead of generating a suitable error
message.
(Bug#33212)
Multiple concurrent delete operations on a
Falcon table were serialized rather than
executing concurrently, resulting in poor performance.
(Bug#33191)
Inserting millions of rows into a Falcon
table could cause the insert operation to hang.
(Bug#33175)
The columns in the INFORMATION_SCHEMA table
for FALCON_SERIAL_LOG_INFO,
FALCON_TRANSACTIONS, and
FALCON_TRANSACTION_SUMMARY contained a
reference to the databae of tablespace, but the column
information was actually showing instances of the
Falcon engine. The tables have been updated
to a different structure.
(Bug#33141)
Using ALTER TABLE to convert a
CHAR column using the
ucs2 character set to
VARBINARY when using a
Falcon table would cause a crash.
(Bug#33081)
Multiple Falcon gopher threads attempting to
update the same index could result in failure to add new index
entries.
(Bug#33080)
Falcon tried to delete a record from an empty
record locator page, which could cause a server crash.
(Bug#33068)
Falcon failed to rebuild a Section page
during recovery, causing a server crash.
(Bug#32921)
Using Falcon when accessing multiple versions
of the same record, certain records could fail to be retrieved
from the record cache, causing an assertion failure.
(Bug#32862)
Creating an index on a Falcon table with a
column using UTF32 that has been converted to UTF8 would cause a
server crash.
(Bug#32833)
Using ALTER TABLE on a
Falcon table it would be possible to create
two tables with the same name but different case.
(Bug#32830)
Converting a table from InnoDB to
Falcon, where the Falcon
table with the same name (but different case) would cause a
server crash.
(Bug#32829)
Concurrent TRUNCATE
TABLE operations for Falcon tables
caused Falcon to crash.
(Bug#32730)
mysqld_safe looked for error messages in the wrong location. (Bug#32679)
An issue with the
NO_ENGINE_SUBSTITUTION
sql_mode database can cause the
creation of stored routines to fail. If you are having problems
with creating stored routines while using this
sql_mode value, remove this
value from your sql_mode
setting.
(Bug#32633)
Repeatedly creating and dropping Falcon
tablespaces failed because the old tablespace was not dropped
before the new tablespace file was created.
(Bug#32621)
Falcon did not properly handle quoted column
name or tablespace name identifiers.
(Bug#32620)
The INTERVAL() function
incorrectly handled NULL values in the value
list.
(Bug#32560)
Use of a NULL-returning GROUP
BY expression in conjunction with WITH
ROLLUP could cause a server crash.
(Bug#32558)
See also Bug#31095.
ORDER BY UpdateXML(...) caused the server to
crash in queries where
UpdateXML() returned
NULL.
(Bug#32557)
Falcon used a fixed index key size which was
too small to cope with some Falcon page
sizes, leading to a crash. Falcon now
supports variable-length index keys according to the supported
page sizes. See
falcon_page_size.
(Bug#32554)
The rules for valid column names were being applied differently for base tables and views. (Bug#32496)
Falcon options to set the limits of memory
usage would not be honored. This could lead to crashes and
assertions during normal usage, instead of generating a suitable
warning.
(Bug#32413)
Falcon would incorrectly return the supported
repeatable-read level when queried by the Online Backup system,
preventing the ability to create a consistent snapshot backup.
(Bug#32301)
Some uses of user variables in a query could result in a server crash. (Bug#32260)
Under certain conditions, the presence of a GROUP
BY clause could cause an ORDER BY
clause to be ignored.
(Bug#32202)
On Mac OS X, creating a Falcon table using a
new Falcon installation caused a crash.
(Bug#32201)
Altering a Falcon table to support an auto
increment column on a column with existing data and null values
would incorrectly update the table and return an incorrect count
of the altered rows.
(Bug#32194)
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)
mysql-test-run.pl used the
--user option when starting
mysqld, which produces warnings if the
current user is not root. Now
--user is added only for
root.
(Bug#32078)
Inserting, updating and deleting a large number of
BLOB records in a
Falcon table would take significant amount of
time and may prevent shutdown.
(Bug#32062)
On 64-bit platforms, assignments of values to enumeration-valued storage engine-specific system variables were not validated and could result in unexpected values. (Bug#32034)
A DELETE statement with a
subquery in the WHERE clause would sometimes
ignore an error during subquery evaluation and proceed with the
delete operation.
(Bug#32030)
Using dates in the range '0000-00-01' to
'0000-00-99' range in the
WHERE clause could result in an incorrect
result set. (These dates are not in the supported range for
DATE, but different results for a
given query could occur depending on position of records
containing the dates within a table.)
(Bug#32021)
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)
If a user-defined function was used in a
SELECT statement, and an error
occurred during UDF initialization, the error did not terminate
execution of the SELECT, but
rather was converted to a warning.
(Bug#32007)
In debug builds, testing the result of an IN
subquery against NULL caused an assertion
failure.
(Bug#31884)
SHOW CREATE TRIGGER caused a
server crash.
(Bug#31866)
The server crashed after insertion of a negative value into an
AUTO_INCREMENT column of an
InnoDB table.
(Bug#31860)
For libmysqld applications, handling of
mysql_change_user() calls left
some pointers improperly updated, leading to server crashes.
(Bug#31850)
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)
The server could crash during filesort for
ORDER BY based on expressions with
INET_NTOA() or
OCT() if those functions returned
NULL.
(Bug#31758)
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)
The mysql_change_user() C API
function was subject to buffer overflow.
(Bug#31669)
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 non-reloadable 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)
For queries for which loose index scan is applicable, the optimizer could choose the wrong execution plan for correlated subqueries. (Bug#31639)
Queries that include a comparison of an
INFORMATION_SCHEMA table column to
NULL caused a server crash.
(Bug#31633)
EXPLAIN EXTENDED for
SELECT from
INFORMATION_SCHEMA tables caused an assertion
failure.
(Bug#31630)
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)
For semi-join processing, pullout of functionally dependent tables was not handled transitively. (Bug#31563)
HAVING could treat lettercase of table
aliases incorrectly if
lower_case_table_names was
enabled.
(Bug#31562)
Spurious duplicate-key errors could occur for multiple-row
inserts into an InnoDB table that activate a
trigger.
(Bug#31540)
When inserting dates into a
DATETIME column with a
Falcon, the values would automatically be
converted with values between 70 and 99 converted to 1970-1999,
and values from 00 to 69 converted to 2000 to 2069. These dates
are now correctly handled.
(Bug#31490)
The length of the result from
IFNULL() could be calculated
incorrectly because the sign of the result was not taken into
account.
(Bug#31471)
Queries that used the ref access method or
index-based subquery execution over indexes that have
DECIMAL columns could fail with
an error Column .
(Bug#31450)col_name
cannot be null
InnoDB now tracks locking and use of tables
by MySQL only after a table has been successfully locked on
behalf of a transaction. Previously, the locked flag was set and
the table in-use counter was updated before checking whether the
lock on the table succeeded. A subsequent failure in obtaining a
lock on the table led to an inconsistent state as the table was
neither locked nor in use.
(Bug#31444)
SELECT 1 REGEX NULL caused an assertion
failure for debug servers.
(Bug#31440)
INFORMATION_SCHEMA.TABLES was
returning incorrect information.
(Bug#31381)
mysql_install_db failed if the default
storage engine was NDB. Now it explicitly
uses MyISAM as the storage engine when
running mysqld --bootstrap.
(Bug#31315)
TABLESPACE names within
Falcon did not support characters outside the
alpha-numeric ASCII character set.
(Bug#31311)
For InnoDB tables with
READ COMMITTED isolation
level, UPDATE statements skipped
rows locked by another transaction, rather than waiting for the
locks to be released.
(Bug#31310)
For an almost-full MyISAM table, an insert
that failed could leave the table in a corrupt state.
(Bug#31305)
When dropping Falcon tablespaces the associated tablespace file was not deleted. (Bug#31296)
Falcon could crash when the maximum record
size was exceeded.
(Bug#31286)
myisamchk --unpack could corrupt a table that when unpacked has static (fixed-length) row format. (Bug#31277)
Building a 64-bit binary with support for the
Falcon storage engine using
gcc on Solaris could fail. See
Section 2.9, “MySQL Installation Using a Source Distribution”, for more information.
(Bug#31268, Bug#33126)
When a TIMESTAMP with a non-zero
time part was converted to a DATE
value, no warning was generated. This caused index lookups to
assume that this is a valid conversion and was returning rows
that match a comparison between a
TIMESTAMP value and a
DATE keypart. Now a warning is
generated so that TIMESTAMP with
a non-zero time part will not match
DATE values.
(Bug#31221)
If MAKETIME() returned
NULL when used in an ORDER
BY that was evaluated using
filesort, a server crash could result.
(Bug#31160)
LAST_INSERT_ID() execution could
be handled improperly in subqueries.
(Bug#31157)
An assertion designed to detect a bug in the
ROLLUP implementation would incorrectly be
triggered when used in a subquery context with non-cacheable
statements.
(Bug#31156)
When creating a TABLESPACE that uses the same
name as an existing TABLESPACE, Falcon
returned Unknown error -103. MySQL now
returns an error stating that the specified tablespace already
exists.
(Bug#31114)
mysqldump failed to handle databases
containing a ‘-’ character in the
name.
(Bug#31113)
Starting the server using --read-only and with
the Event Scheduler enabled caused it to crash.
This issue occurred only when the server had been built with certain nonstandard combinations of configure options.
Dropping a tablespace and specifying an engine type that does not support tablespaces reported a warning. The response has now been updated to report an error. (Bug#31110)
GROUP BY NULL WITH ROLLUP could cause a
server crash.
(Bug#31095)
See also Bug#32558.
A rule to prefer filesort over an indexed
ORDER BY when accessing all rows of a table
was being used even if a LIMIT clause was
present.
(Bug#31094)
REGEXP operations could cause a
server crash for character sets such as ucs2.
Now the arguments are converted to utf8 if
possible, to allow correct results to be produced if the
resulting strings contain only 8-bit characters.
(Bug#31081)
Expressions of the form WHERE
, where the same
column was named both times, could cause a server crash in the
optimizer.
(Bug#31075)col NOT IN
(col, ...)
Falcon failed to compile on FreeBSD.
(Bug#31045)
Using ORDER BY with
ARCHIVE tables caused a server crash.
(Bug#31036)
The MOD() function and the
% operator crashed the server for a divisor
less than 1 with a very long fractional part.
(Bug#31019)
Using falcon_serial_log_dir to set the location
of the Falcon serial log would have no
effect.
(Bug#31005)
The LooseScan subquery optimization strategy could produce duplicate rows in query results. (Bug#30993)
A character set introducer followed by a hexadecimal or bit-value literal did not check its argument and could return an ill-formed result for invalid input. (Bug#30986)
CHAR( did not check its
argument and could return an ill-formed result for invalid
input.
(Bug#30982)str USING
charset)
The result from
CHAR() did not add a leading 0x00 byte for input
strings with an odd number of bytes.
(Bug#30981)str USING
ucs2
The GeomFromText() function could
cause a server crash if the first argument was
NULL or the empty string.
(Bug#30955)
When invoked with constant arguments,
STR_TO_DATE() could use a cached
value for the format string and return incorrect results.
(Bug#30942)
GROUP_CONCAT() returned
',' rather than an empty string when the
argument column contained only empty strings.
(Bug#30897)
A server crash could occur if a stored function that contained a
DROP TEMPORARY TABLE statement was invoked by
a CREATE TEMPORARY TABLE statement that
created a table of the same name.
(Bug#30882)
Calling NAME_CONST() with
non-constant arguments triggered an assertion failure.
Non-constant arguments are now disallowed.
(Bug#30832)
Running ALTER TABLE ... OPTIMIZE PARTITION on
a Falcon table, a 'divide by zero' error
would be reported during a server crash.
(Bug#30826)
For a spatial column with a regular
(non-SPATIAL) index, queries failed if the
optimizer tried to use the index.
(Bug#30825)
INFORMATION_SCHEMA.SCHEMATA was
returning incorrect information.
(Bug#30795)
On Windows, the pthread_mutex_trylock()
implementation was incorrect. One symptom was that invalidating
the query cache could cause a server crash.
(Bug#30768)
A multiple-table UPDATE involving
transactional and non-transactional tables caused an assertion
failure.
(Bug#30763)
Under some circumstances, CREATE TABLE ...
SELECT could crash the server or incorrectly report
that the table row size was too large.
(Bug#30736)
Using the MIN() or
MAX() function to select one part
of a multi-part key could cause a crash when the function result
was NULL.
(Bug#30715)
INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION was
incorrect for views that were defined to select from other
INFORMATION_SCHEMA tables.
(Bug#30689)
Issuing an ALTER SERVER statement
to update the settings for a FEDERATED server
would cause the mysqld to crash.
(Bug#30671)
The optimizer could ignore ORDER BY in cases
when the result set is ordered by filesort,
resulting in rows being returned in incorrect order.
(Bug#30666)
A different execution plan was displayed for
EXPLAIN than would actually have
been used for the SELECT because
the test of sort keys for ORDER BY did not
consider keys mentioned in IGNORE KEYS FOR ORDER
BY.
(Bug#30665)
MyISAM tables could not exceed 4294967295
(2^32 - 1) rows on Windows.
(Bug#30638)
mysql-test-run.pl could not run
mysqld with root
privileges.
(Bug#30630)
Using GROUP BY on an expression of the form
caused a server
crash due to incorrect calculation of number of decimals.
(Bug#30587)timestamp_col DIV
number
The options available to the CHECK
TABLE statement were also allowed 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)
Compared to MySQL 5.1, the 6.0 optimizer failed to use join buffering for certain queries, resulting in slower performance for those queries. (Bug#30363)
A table-access check was performed improperly by
libmysqld, causing a crash.
(Bug#30329)
Some valid euc-kr characters having the
second byte in the ranges [0x41..0x5A] and
[0x61..0x7A] were rejected.
(Bug#30315)
When loading a dynamic plugin on FreeBSD, the plugin would fail to load. This was due to a build error where the required symbols would be not exported correctly. (Bug#30296)
Setting certain values on a table using a spatial index could cause the server to crash. (Bug#30286)
It was not possible for client applications to distinguish
between auto-set and auto-updated
TIMESTAMP column values.
To rectify this problem, a new
ON_UPDATE_NOW_FLAG flag is set by
Field_timestamp constructors whenever a column should be set to
NOW on UPDATE,
and the get_schema_column_record() function
now reports whether a timestamp column is set to
NOW on UPDATE.
In addition, such columns now display on update
CURRENT_TIMESTAMP in the Extra
column in the output from SHOW
COLUMNS.
(Bug#30081)
Some INFORMATION_SCHEMA tables are intended
for internal use, but could be accessed by using
SHOW statements.
(Bug#30079)
On some 64-bit systems, inserting the largest negative value
into a BIGINT column resulted in
incorrect data.
(Bug#30069)
mysqlslap did not properly handle multiple result sets from stored procedures. (Bug#29985)
Running the sqlbench test suite against
Falcon would cause a crash.
(Bug#29870)
When accessing the statistics in
INFORMATION_SCHEMA.FALCON_DATABASE_IO, the
information related only to the Falcon
database, and not to user tablespaces. The output has been
updated to report on all tablespaces, and the
DATABASE column has been renamed to
TABLESPACE to reflect the fact that these
statistics are now reported by tablespace, not by database.
(Bug#29823)
Whitespace characters other than spaces within XML tags, such as
linefeeds or tabs, caused LOAD XML INFILE to
skip rows.
(Bug#29752)
configure did not find nss
on some Linux platforms.
(Bug#29658)
Compilation failed on systems where a native
log2() implementation was unavailable.
(Bug#29640)
Use of the latin2_czech_cs collation caused a
server crash.
(Bug#29459)
Using two simultaneous connections it was possible to create a
deadlock situation between two different active transactions on
the same Falcon table. There is no way to
prevent this, but a new parameter,
falcon_lock_timeout can set the timeout for
deadlocked transactions. The default timeout is 0 (timeouts are
disabled).
(Bug#29452)
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)
Inserting information into the same table from multiple threads
could cause duplicate key errors. This was related to the
changes made to allow compatibility with the
InnoDB repeatable-read isolation level. The
option, falcon_innodb_compatibility, has been
renamed to falcon_consistent_read, but with the
opposite effect. The default is for this option to be on. When
set to off, the behavior of Falcon is similar
to that in InnoDB.
(Bug#29151)
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 are treated as synonyms for
general_log and
slow_query_log, which means
that they can be accessed in expressions and their values can be
changed with SET.
(Bug#29131)
When loading large data sets using
LOAD DATA
INFILE into a Falcon table, the
server could crash.
(Bug#29081)
SHOW VARIABLES did not display
the relay_log,
relay_log_index, or
relay_log_info_file system variables.
(Bug#28893)
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 now disallowed. (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)
The result from CHAR() was

