Table of Contents
This appendix lists the changes from version to version in the MySQL source code through the latest version of MySQL 5.1, which is currently MySQL 5.1.7-beta. Starting with MySQL 5.0, we began offering a new version of the Manual for each new series of MySQL releases (5.0, 5.1, and so on). For information about changes in previous release series of the MySQL database software, see the corresponding version of this Manual. For information about legacy versions of the MySQL software through the 4.1 series, see MySQL 3.23, 4.0, 4.1 Reference Manual.
We update this section as we add new features in the 5.1 series, so that everybody can follow the development process.
Note that we tend to update the manual at the same time we make changes to MySQL. If you find a recent version of MySQL listed here that you can't find on our download page (http://dev.mysql.com/downloads/), it means that the version has not yet been released.
The date mentioned with a release version is the date of the last BitKeeper ChangeSet on which the release was based, not the date when the packages were made available. The binaries are usually made available a few days after the date of the tagged ChangeSet, because building and testing all packages takes some time.
The manual included in the source and binary distributions may not be fully accurate when it comes to the release changelog entries, because the integration of the manual happens at build time. For the most up-to-date release changelog, please refer to the online version instead.
An overview of which features were added in MySQL 5.1 can be found here: Section 1.6.1, “What's New in MySQL 5.1”.
For a full list of changes, please refer to the changelog sections for each individual 5.1.x release.
This is a new Beta development release, fixing recently discovered bugs.
This Beta release, as any other pre-production release, should not be installed on production-level systems or systems with critical data. It is good practice to back up your data before installing any new version of software. Although MySQL has worked very hard to ensure a high level of quality, protect your data by making a backup as you would for any software beta release. Please refer to our bug database at http://bugs.mysql.com/ for more details about the individual bugs fixed in this version.
This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalised update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Network (a commercial MySQL offering). For more details please see http://www.mysql.com/network/advisors.html.
Bugs fixed:
NDB Cluster
: Attempting to create an index
using multiple columns on an explicitly partitioned table in a
replicated Cluster database could cause the master
mysqld process to crash. (Bug #18284)
NDB Cluster
: Queries using ORDER
BY
failed against a
pkN
LIST
-partitioned Cluster table having a
multi-column primary key, where pkN
represents one of the columns making up the primary key. (Bug
#18598)
This is a new Beta development release, fixing recently discovered bugs.
NOTE: This Beta release, as any other pre-production release, should not be installed on production-level systems or systems with critical data. It is good practice to back up your data before installing any new version of software. Although MySQL has worked very hard to ensure a high level of quality, protect your data by making a backup as you would for any software beta release. Please refer to our bug database at http://bugs.mysql.com/ for more details about the individual bugs fixed in this version.
This section documents all changes and bug fixes that have been applied since the last official MySQL release. If you would like to receive more fine-grained and personalised update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Network (a commercial MySQL offering). For more details please see http://www.mysql.com/network/advisors.html.
Functionality added or changed:
For partitioned tables, the output of SHOW TABLE
STATUS
now shows in the Engine
column the name of the storage engine used by all partitions
for the table; in the Create_options
column, the output now shows partitioned
for a partitioned table. This change also affects the values
shown in the corresponding columns of the
INFORMATION_SCHEMA.TABLES
table. (Bug
#17631)
The NDBCluster
storage engine now supports
CREATE TABLE
statements of arbitrary length.
(Previously, CREATE TABLE
statements for MySQL
Cluster tables could contain a maximum of 4096 characters only.) (Bug
#17813)
Bugs fixed:
MEDIUMINT
columns were not handled in the
same way as other column types by partition pruning.
Partition pruning would sometimes use inappropriate columns in preforming queries.
Both of these issues were rectified as part of the same bugfix. (Bug #18025)
Quoted values could not be used for partition option values. (Bug #13520)
Delimited identifiers could not be used in defining partitions. (Bug #13433)
Building the server using
--with-example-storage-engine
failed to
enable the EXAMPLE
storage engine in the
server. (Bug #18464)
Triggers created in one version of the server could not be dropped after upgrading to a newer version. (Bug #15921)
Queries using WHERE ... IS NULL
returned
incorrect results from partitioned tables. (Bug #18070)
Partition pruning did not perform correctly with partitions on
NULL
, and could potentially crash the
server. (Bug #18053)
If InnoDB
encountered a
HA_ERR_LOCK_TABLE_FULL
error and
rolled back a transaction, the transaction was still written
to the binary log. (Bug #18283)
Functionality added or changed:
In order not to break legacy applications, support for
TYPE =
has been
restored, but now generates a warning.
engine_name
Important: This option has
been deprecated since MySQL 4.0. Beginning with
MySQL 5.2, TYPE =
will no
longer be available and will produce a syntax
error. You should not use
engine_name
TYPE
in any new applications, and you
should immediately begin conversion of existing applications
to use the ENGINE =
syntax
instead. (Bug #17501)
engine_name
The deprecated constructs in the following table now generate warnings. You should not employ them in new applications, as they are likely to be removed in a future version of MySQL. Use the equivalents shown in the table's second column instead. For the same reason, existing applications depending on the deprecated constructs should be converted to make use of the current equivalents as soon as possible. (Bug #17501)
Deprecated / Obsolete: | Current / Preferred: |
@@table_type | @@storage_engine |
@@log_bin_trust_routine_creators | @@log_bin_trust_function_creators |
TIMESTAMP( | See Section 12.5, “Date and Time Functions”. |
TYPE= | ENGINE= |
BACKUP TABLE | mysqldump, mysqlhotcopy, or MySQL Administrator |
RESTORE TABLE , LOAD TABLE FROM
MASTER | mysqldump, mysql, or MySQL Administrator |
SHOW TABLE TYPES | SHOW [STORAGE] ENGINES |
SHOW INNODB STATUS | SHOW ENGINE INNODB STATUS |
SHOW MUTEX STATUS | SHOW ENGINE INNODB MUTEX |
SHOW BDB LOGS , SHOW LOGS | SHOW ENGINE BDB LOGS |
The deprecated items shown in the table are not guaranteed to be available in MySQL 5.2 or later.
Incompatible change: For
purposes of determining placement, RANGE
partitioning now treats NULL
as less than
any other value. (Formerly, NULL
was
treated as equal to zero.) See
Section 17.2.6, “How MySQL Partitioning Handles NULL
Values”. (Bug #15447)
Incompatible Change: The
semantics of ALTER TABLE
for partitioned
tables is changed, and now means that the storage engine used
for table t
ENGINE=X
;t
is changed to
X
.
The previous statement formerly (prior to MySQL 5.1.8) meant
that all partitioning was removed from the table. In order to
remove the partitioning of a table, the syntax ALTER
TABLE
is introduced. The t
REMOVE
PARTITIONING;REMOVE
PARTITIONING
option can be used in combination with
existing ALTER TABLE
options such as those
employed for adding or dropping columns or indexes. (Bug
#17754)
Security Enhancement: Checks
for permissions on database operations were performed in a
case-insensitive manner, meaning that a user with permissions
on database MYDATABASE
also had permissions
on database myDataBase
. (Bug #17279)
The NDBCluster
storage engine now supports
INSERT IGNORE
and REPLACE
statements. Previously, these statements failed with an error. (Bug
#17431)
Events no longer support times past the end of the Unix epoch. (Formerly, such dates were interpreted as being at the beginning of the Unix epoch.) (Bug #16396)
Event names are now case-insenstive. That is (for example),
you cannot have events with the names
Myevent
and MyEvent
belonging to the same database and definer. (Bug #16415)
Windows builds now have SSL support enabled. (Bug#18195)
Temporary tables may no longer be partitioned. (Bug #17497)
Added the --events
option to
mysqldump to enable events to be included
in the dump output. (Bug #16853)
NDB Cluster
(Disk Data): You can now have
only one logfile group at any one time. See
Section 13.1.8, “CREATE LOGFILE GROUP
Syntax”. (Bug #16386)
The syntax for CREATE PROCEDURE
and
CREATE FUNCTION
statements now includes a
DEFINER
clause. The
DEFINER
value specifies the security
context to be used when checking access privileges at routine
invocation time if the routine has the SQL SECURITY
DEFINER
characteristic. See
Section 19.2.1, “CREATE PROCEDURE
and CREATE FUNCTION
Syntax”, for more information.
When mysqldump is invoked with the
--routines
option, it now dumps the
DEFINER
value for stored routines.
The output from SHOW CREATE TABLE
is more
consistent about using uppercase for keywords. Data types
still are in lowercase. (Bug #10460)
The ExtractValue()
function with
contains()
now uses the SQL collation in
making comparisons. Perviously, comparisons were always binary
(that is, case-sensitive). (Bug #16316)
The cluster_replication
database has been
renamed to cluster
. This will effect
replication between MySQL Clusters where one cluster is
running MySQL 5.1.8 or later, and the other is running MySQL
5.1.7 or earlier. See
Section 16.7, “MySQL Cluster Replication”, and especially
Section 16.7.4, “Replication Schema and Tables”.
The stability of CREATE
and
DROP
operations on NDB
tables containing BLOB
columns has been
improved. (Bug #17761)
More specific error messages are now given when attempting to create an excessive number of partitions or subpartitions. (Previously, no distinction was made between an excessive number of partitions and an excessive number of subpartitions.) (Bug #17393)
The mysqltest
utility now converts all
CR/LF
combinations to LF
to allow test cases intended for Windows to work properly on
UNIX-like systems. (Bug #13809)
The mysql_ping
function will now retry if
the reconnect
flag is set and error
CR_SERVER_LOST
is encountered during the
first attempt to ping the server. (Bug #14057)
mysqldump
now surrounds the
DEFINER
, SQL SECURITY
DEFINER
and WITH CHECK OPTION
clauses of a CREATE VIEW
statement with
"not in version" comments to prevent errors in earlier
versions of MySQL. (Bug #14871)
For an event having no STARTS
time
specified when it was created, the
mysql.event
table's
start
column now displays the creation time
rather than NULL
. (Bug #16537)
In addition, both the SHOW EVENTS
statement's Starts
column and the
STARTS
column of the
INFORMATION_SCHEMA.EVENTS
table are now
empty rather than NULL
when
STARTS
was not used in the CREATE
EVENT
statement.
MICROSECOND
intervals are no longer allowed
for events. (Bug #16411)
Description of the EVENT
privilege has been
changed to To create, alter, drop, and execute
events
. (Bug #16412)
The binlog_format
system variable now is
dynamic and can be changed at runtime, as described in
Section 6.3, “Row-Based Replication”.
The binlog_format
system variable now can
be set to a third format, MIXED
, as
described in Section 6.3, “Row-Based Replication”.
A slave server may switch the format
automatically now.
This happens when the server is running in either
STATEMENT
or MIXED
format
and encounters a row in the binary log that is written in
ROW
logging format. In that case, the slave
switches to row-based replication temporarily for that event, and
switches back to the previous format afterwards.
Partition pruning was made more stable, particularly in cases
involving queries using tests for NULL
values in the WHERE
clause against
subpartitioned tables which were partitioned by LIST(
. (Bug
#17891)
some_function
(col1
,
... ,colN
) )
Names of subpartitions must now be unique for an entire table, and not merely within the same partition. (Bug #15408)
The output of SHOW CREATE EVENT
no longer
qualifies the event name with the name of the schem to which
the event belongs. (Bug #17714)
The client API will now attempt to reconnect on TCP/IP if the
reconnect
flag is set, as is the case with
sockets. (Bug #2845)
Bugs fixed:
A SELECT ... ORDER BY ...
from a view
defined using a function could crash the server. An example of
such a view might be CREATE VIEW AS SELECT SQRT(c1)
FROM t1
. (Bug #18386)
REPAIR TABLE
, OPTIMIZE
TABLE
, and ALTER TABLE
operations on transactional tables could corrupt triggers
referencing those tables. (Bug #18153)
MyISAM
: Performing a bulk insert on a table
referenced by a trigger would crash the table. (Bug #17764)
Using ORDER BY
within a stored
procedure (where intvar
intvar
is an
integer variable or expression) would crash the server. (Bug
#16474)
Note: The use of an integer
i
in an ORDER BY
clause for sorting
the result by the
i
i
th
column is deprecated (and non-standard). It should
not be used in new applications. See
Section 13.2.7, “SELECT
Syntax”.
A SELECT
using a function against a nested
view would crash the server. (Bug #15683)
ALTER TABLE ... ADD COLUMN ... AFTER ...
failed when used on partitioned tables. (Bug #16806)
NDB Cluster
: A timeout in the handling of
an ABORT
condition with more that 32
operations could yield a node failure. (Bug #18414)
NDB Cluster
: A node restart immediately
following a CREATE TABLE
would fail.
Important: This fix supports
2-node Clusters only. (Bug #18385)
NDB Cluster
: In event of a node failure
during a rollback, a “false” lock could be
established on the backup for that node, which lock could not
be removed without restarting the node. (Bug #18352)
NDB Cluster
: The cluster created a crashed
replica of a table having an ordered index — or when
logging was not enabled, of a table having a table or unique
index — leading to a crash of the cluster following 8
successibe restarts. (Bug #18298)
NDB Cluster
: When replacing a failed master
node, the replacement node could cause the cluster to crash
from a buffer overflow if it had an excessively large amount
of data to write to the cluster log. (Bug #18118)
NDB Cluster
: Restarting nodes were allowed to start
and join the cluster too early. (Bug #16772)
NDB Cluster
: Issuing a DROP LOGFILE
GROUP
statement would cause ndbd
processes to crash if MySQL had been compiled with
gcc4. (Bug #18295)
Using triggers with partitioned InnoDB
tables led
to incorrect results. (Bug #17744)
Calling CREATE TABLE
or ALTER
TABLE
twice on a partitioned table in a stored
procedure or a prepared statement resulted in errors and
sometimes server crashes. (Bug #17290)
A problem with NULL
s and interval mapping
sometimes caused incorrect results or crashes when trying to
use less-than searches on partitioned tables. (Bug #17173)
CREATE TABLE ... PARTITION ... AS SELECT
...
would cause the server to crash. (Bug #15336)
Creating a partition which depends on an expression containing a column using the UTF8 character set would cause the server to crash. (Bug #14367)
Invoking more than once a prepared statement that creates a partitioned table would crash the server. (Bug #14350)
NDB Cluster
: A SELECT ... ORDER
BY
query on an explicitly partitioned Cluster table
with no explicit indexes would crash the server. (Bug #17899)
The ExtractValue()
function did not
return an error when passed an invalid XPath string. (Bug
#18172)
Stored procedures that call UDFs and pass local string variables caused server crashes. (Bug #17261)
Connecting to a server with a UCS2 default character set with a client using a non-UCS2 character set crashed the server. (Bug #18004)
Loading of UDFs in a statically linked MySQL caused a server crash. UDF loading is now blocked if the MySQL server is statically linked. (Bug #11835)
A security enhancement in Visual Studio 8 could cause a MySQL
debug server compiled with it to hang when running
SELECT
queries against partitioned tables.
(Bug #17722)
NDB Cluster
:
auto_increment
values were not propagated
correctly in statement-based replication. (Bug #18208)
Rpeated invocations of a stored procedure containing a
SHOW CREATE EVENT
statement would result in
the error Packets out of order. (Bug
#17403)
Repeated invocations of a stored procedure containing a
CREATE EVENT
or ALTER
EVENT
statement would crash the server. (Bug #16408)
Renaming and adding a new column to a partitioned table in the
same ALTER TABLE
statement caused the
server to crash. (Bug #17772)
ALTER TABLE ... REBUILD PARTITION
with no
partition name specified would crash the server. (Bug #17940)
Trying to add a partition to a table having subpartitions could crash the server. (Bug #17140)
Attempting to use a conflicting VALUES
clause in ALTER TABLE ... ADD PARTITION
caused the server to crash. An example of such a conflicting
clause would be that uses VALUES LESS THAN
(
(which
indicates a range) with a table that is partitioned by
constant
)LIST
. (Bug #17127)
ALTER TABLE ... COALESCE PARTITION
failed
with an Out of Memory error. (Bug
#16810)
Names of subpartitions were not displayed in the output of
SHOW CREATE TABLE
. (Bug #16370)
Setting up subpartitions on at least one but not all the partitions of a partitioned table caused the server to crash. (Bug #15407)
InnoDB
used table locks (not row locks)
within stored functions. (Bug #18077)
Using the position()
function in the XPath
argument to ExtractValue()
crashed the
server. (Bug #18171)
A query with a WHERE
condition
failed on a table partitioned by date_column
>
date_value
RANGE
.
(Bug #17894)
Cursors in stored routines could cause a server crash. (Bug #16887)
Replication slaves could not replicate triggers from older
servers that included no DEFINER
clause in
the trigger definition. Now the trigger executes with the
privileges of the invoker (which on the slave is the slave SQL
thread). (Bug #16266)
Character set conversion of string constants for
UNION
of constant and table column was not
done when it was safe to do so. (Bug #15949)
NULL
values were written to the
mysql.slow_log
table incorrectly. (Bug
#17600)
A query with a WHERE
condition
failed on a table partitioned by date_column
>
date_value
RANGE
.
(Bug #17894)
A failed ALTER TABLE ... ADD PRIMARY KEY
on
a partitioned table would result in bad table metadata and
could possibly crash the server. (Bug #17097)
No error was reported when subpartitions were defined for a non-subpartitioned table. (Bug #15961)
Searches on indexed columns of partitioned tables failed to find all matching rows following updates of the indexed columns. (Bug #14526)
The DEFINER
value for stored routines was
not replicated. (Bug #15963)
Use of TRUNCATE TABLE
for a
TEMPORARY
table on a master server was
propagated to slaves properly, but slaves did not decrement
the Slave_open_temp_tables
counter
properly. (Bug #17137)
SELECT COUNT(*)
for a
MyISAM
table could return different results
depending on whether an index was used. (Bug #14980)
Updating a view that filters certain rows to set a filtered
out row to be included in the table caused infinite loop. For
example, if the view has a WHERE clause of salary >
100
then issuing an UPDATE statement of SET
salary = 200 WHERE id = 10
, caused an infinite loop.
(Bug #17726)
Creating a table with the same name as the mapped name of
another table caused a server crash. For example, if MySQL
maps the table name txu#P#p1
to
txu@0023P@0023p1
on disk, creating another
table named txu@0023P@0023p1
crashed the
server. (Bug #17142)
NDB Cluster
: Adding an index together with
replication could cause mysqld to crash.
(Bug #18106)
NDB Cluster
: Insufficient stringbuffer
memory when attempting to create a trigger caused the server
to crash. (Bug #18101)
NDB Cluster
: Variable-length columns used
as primary keys were not handled correctly. (Bug #18075)
NDB Cluster
: Row-based replication could
fail with tables using VARCHAR
columns for
primary keys and having BLOB
columns. (Bug
#18067)
NDB Cluster
: CREATE UNIQUE
INDEX
on a column containing non-unique data could
cause one or more ndbd nodes to hang or
crash. (Bug #18040)
NDB Cluster
(Disk Data): CREATE
UNIQUE INDEX
failed with Error 4243:
Index not found. (Bug #18039)
NDB Cluster
: Node recovery of tables with
VARCHAR
columns using character sets was
inconsistent, which could cause a number of issues, including
the data nodes failing to restart and ALTER
TABLE
statements to hang. (Bug #18026)
NDB Cluster
: In some cases, a single
ndbd node would fail following a system
restart. (Bug #17854)
NDB Cluster
(Replication): The binary log
on the secondary master was not being set up correctly
following a table rename. (Bug #17838)
NDB Cluster
: With a single replica,
transactions waiting in the log synchronisation queue were not
being restarted, causing them to be aborted. (Bug #17536)
NDB Cluster
(Disk Data): It was not
possible to create more than 9 tablespaces. (Bug #16913)
NDB Cluster
: Inserting and deleting
BLOB
column values while a backup was in
process could cause the loss of an ndbd
node. (Bug #14028)
NDB Cluster
:
UNDO_BUFFER_SIZE
was limited to 17 MB. (Bug
#16657, Bug #17890)
Using ALTER TABLE ... REBUILD PARTITION
without specifying the name of the partition caused the server
to crash, rather than reporting a syntax error. (Bug #17947)
When attempting to insert a 0
into a
LIST
-partitioned table that had no
value-list containing 0
, no error was
reported. (Bug #15253)
With ExtractValue()
, the
last()
function returned
1
even when there was more than one node.
(Bug #16318)
If the server was started with the
--skip-grant-tables
option, it was impossible
to create a trigger or a view without explicitly specifying a
DEFINER
clause. (Bug #16777)
The server would execute stored routines that had a non-existent definer. (Bug #13198)
NDB Cluster
: A simultaneous
RENAME
of several tables was logged
multiple times. (Bug #17827)
NDB Cluster
: Trying to perform a
DELETE
from a Cluster table following a
LOCK TABLES
would cause the
ndbd processes to hang. (Bug #17812)
ALTER TABLE ... REORGANIZE PARTITION
failed
with Error on rename of
filename
... on
Windows. (Bug #17720)
NDB Cluster
: ALTER TABLE ... ADD
INDEX
failed with ERROR 756: Index on
disk column is not supported when run against a
Disk Data table having a primary key. (Bug #17888)
NDB Cluster
: DELETE
operations on NDB
tables could cause memory
leaks. (Bug #16874)
NDB Cluster
: Some query cache statistics
were not always correctly reported for Cluster tables. (Bug
#16795)
The EXAMPLE
storage engine did not work on
Windows. (Bug #17721)
For FEDERATED
tables, a
SELECT
statement with an ORDER
BY
clause did not return rows in the proper order.
(Bug #17377)
Setting the myisam_repair_threads
system
variable to a value larger than 1 could cause corruption of
large MyISAM
tables. (Bug #11527)
The length of a VARCHAR()
column that used
the utf8
character set would increase each
time the table was re-created in a stored procedure or
prepared statement, eventually causing the CREATE
TABLE
statement to fail. (Bug #13134)
The MySQL server could crash with out of memory errors when
performing aggregate functions on a DECIMAL
column. (Bug #17602)
INSERT
statements executed by scheduled
events were not written to the general log. (Bug #16413)
A memory leak caused warnings on slaves for certain statements that executed without warning on the master. (Bug #16175)
Naming a partition using the character
Ç (“c-cedilla”;
Unicode 00C7
or 00E7
)
made unreadable the table containing the partition. (Bug
#14527)
The self()
XPath function was not handled
correcty by ExtractValue()
. (Bug #16315)
The ExtractValue()
function would not
accept expressions which matched element names containing an
underscore character. (Bug #16320)
NDB Cluster
: Trying to update very large
partitioned tables using the NDB
storage
engine sometimes caused the server to crash. (Bug #16385, Bug
#17806)
Slow queries executed by scheduled events were not being written to the slow query log. (Bug #16426)
On Linux, creation of table partitions failed within a stored procedure. (Bug #14363)
mysql_fix_privilege_tables didn't create
the mysql.plugin
table. (Bug #17568)
Improper checking of binary log statements could result in a server crash. (Bug #17457)
The ExtractValue()
function allowed the use
of the !
character in identifiers by
ignoring the illegal character. This is now correctly reported
as a syntax error. (Bug #16313)
NDB Cluster
: Trying to insert a value into
a nonexistent LIST
partition of an
NDB
table would cause the server to crash.
(Bug #17763)
NDB Cluster
: ALTER TABLE
on a partitioned NDB
table could cause the
server to crash. (Bug #17499)
NDB Cluster
: A repeated
SELECT
on a partitioned table that used the
NDB
storage engine could cause the server
to crash. (Bug #17390)
NDB Cluster
: Using ALTER TABLE ...
ADD PARTITION
on a table partitioned by
LIST
would cause the client to hang. (Bug
#17701)
Triggers created without BEGIN
and
END
clauses could not be properly restored
from a mysqldump
file. (Bug #16878)
The RENAME TABLE
statement did not move
triggers to the new table. (Bug #13525)
Clients compiled from source with the
--without-readline
did not save command
history from session to session. (Bug #16557)
Stored routines that contained only a single statement were
not written properly to the dumpfile when using
mysqldump
. (Bug #14857)
Issuing GRANT EXECUTE
on a procedure would
display any warnings related to the creation of the procedure.
(Bug #7787)
Attempting to add a new partition to a table partitioned by a unique key would cause an Out of memory error. (Bug #17169)
In a highly concurrent environment, a server crash or deadlock could result from execution of a statement that used stored functions or activated triggers coincident with alteration of the tables used by these functions or triggers. (Bug #16593)
Functionality added or changed:
Incompatible change:
TYPE =
is no longer
accepted as a synonym for the engine_name
ENGINE =
table option.
(engine_name
TYPE
has been deprecated since MySQL 4.0.)
Several changes were made to make upgrades easier:
Added the mysql_upgrade program that checks all tables for incompatibilities with the current version of MySQL Server and repairs them if necessary. This program should be run for each MySQL upgrade (rather than mysql_fix_privilege_tables). See Section 5.5.2, “mysql_upgrade — Check Tables for MySQL Upgrade”.
Added the FOR UPGRADE
option for the
CHECK TABLE
statement. This option
checks whether tables are incompatible with the current
version of MySQL Server.
Added the --check-upgrade
to
mysqlcheck that invokes CHECK
TABLE
with the FOR UPGRADE
Added the --fix-db-names
and
--fix-table-names
options to
mysqlcheck.
All subpartitions within a given partitioned table are now guaranteed to have unque names. (Bug #15408)
Added the RENAME DATABASE
statement.
The SQL mode in effect at the time an event is created or altered is recorded and used during event execution. (Bug #16407)
Added the PROCESSLIST
table to
INFORMATION_SCHEMA
.
Attempting to read pre-5.1.6 partitioned tables with a MySQL 5.1.7 (or later) server now generates a suitable warning message. (Bug #16695)
For additional information about this issue, see Section D.1.5, “Changes in release 5.1.6 (01 February 2006)”.
NDB Cluster
: Attempting to SELECT
... FROM INFORMATION_SCHEMA.FILES
now raises a
warning in the event that the cluster has crashed. (Bug
#17087)
Removed the have_isam
and
have_raid
system variables.
Status messages added to ndb_restore to allow users to know that data files for Disk Data are being created. (Bug #16873)
Added the IN NATURAL LANGUAGE MODE
and
IN NATURAL LANGUAGE MODE WITH QUERY
EXPANSION
modifiers for full-text searches. See
Section 12.7, “Full-Text Search Functions”.
Creator privileges are now checked for all events before execution. (Bug #17289)
CREATE EVENT
, DROP
EVENT
, and ALTER EVENT
statements
are not allowed in triggers. (Bug #16410)
New charset
command added to
mysql command-line client. By typing
charset
or
name
\C
(such as
name
\C UTF8
), the client character set can be
changed without reconnecting. (Bug #16217)
In row-based replication, when executing a Rows_log_event, the
associated table was locked, the rows applied and the lock
released. This did not work since there are storage engines
that count locks and perform an autocommit when the number of
locks reach zero. Now we ensure that all table maps come
before all ROWS
events in a statement.
Bugs fixed:
Using an XPath expression containing =
with
ExtractValue()
caused the server to crash.
(Bug #16242)
NDB Cluster
: An unhandled resources issue
could cause node failure with a DELETE FROM
TABLE
affecting thousands of rows. (Bug #16492)
NDB Cluster
: Cluster tables not having an
explicit primary key could not be replicated. (Bug #14541)
For a transaction that used MyISAM
and
InnoDB
tables, interruption of the
transaction due to a dropped connection on a master server
caused slaves to lose synchrony. (Bug #16559)
SELECT
with GROUP BY
on
a view could cause a server crash. (Bug #16382)
SET TRANSACTION ISOLATION LEVEL
acted like
SET SESSION TRANSACTION ISOLATION LEVEL
.
That is, it set the isolation level for longer than the next
transaction. (Bug #7955)
SHOW CREATE TABLE
produced extraneous
spaces after the PRIMARY KEY
keywords. (Bug
#13883)
If the query optimizer transformed a GROUP
BY
clause in a subquery, it did not also transform
the HAVING
clause if there was one,
producing incorrect results. (Bug #16603)
SUBSTRING_INDEX()
could yield inconsistent
results when applied with the same arguments to consecutive
rows in a query. (Bug #14676)
myisam_ftdump did not work for
FULLTEXT
indexes associated with a parser
plugin. (Bug #17116)
BIT
fields were not properly handled when
using row-based replication. (Bug #13418)
Column counts were encoded incorrectly in the binary log for row-based logging format. (Bug #17678)
Data truncations on non-UNIQUE
indexes
could crash InnoDB
when using multi-byte
character sets. (Bug #17530)
An ALTER DATABASE
statement on a
replication master crashed the slaves. (Bug #17521)
Partitioning with certain SUBPARTITION BY
HASH
clauses caused an error when querying for a
partitioned column using an IS NULL
comparison. (Bug #17430, Bug #17432)
The mysql_fix_privilege_tables.sql
script
did not properly initialize the Event_priv
column to 'Y'
for those accounts that
should have the EVENT
privilege. (Bug
#16400)
NDB Cluster
: Inserting the output of
REPEAT('
into a
some_string
',
some_int
)BLOB
column resulted in the error
Invalid blob attributes or invalid blob parts
table. (Bug #17505)
NDB Cluster
: Row-based replication was not
being set up correctly if a backup was already in progress.
For example, connecting a mysqld instance
to a cluster which was being backed up would result in the
message NDB: skipping setup table
test.t1 being written to the error log. (Bug
#17459)
NDB Cluster
: CREATE TEMPORARY
TABLE
of a Cluster table would fail with an
Unsupported error or crash the server.
(Bug #17210, Bug #16552)
NDB Cluster
: UNIQUE
keys
in Cluster tables were limited to 225 bytes in length. (Bug
#15918)
NDB Cluster
: REPLACE
failed when attempting to update a primary key value in a
Cluster table. (Bug #14007)
NDB Cluster
: Creating
NDB
tables containing
BLOB
columns but no primary key caused
unpredictable behavior. (Bug #17559)
Creating an event and using a whitespace character other than
space following the DO
keyword caused a
server crash. (Bug #17453)
Previously, a stored function invocation was written to the
binary log as DO
if the
invocation changes data and occurs within a non-logged
statement, or if the function invokes a stored procedure that
produces an error. These invocations now are logged as
func_name
()SELECT
instead for
better control over error code checking (slave servers could
stop due to detecting a different error than occurred on the
master). (Bug #14769)
func_name
()
CHECKSUM TABLE
returned different values on
MyISAM table depending on whether the QUICK
or EXTENDED
options were used. (Bug #8841)
Querying the INFORMATION_SCHEMA.PARTITIONS
table on a non-max server caused a server crash. This also
happened following the creation of a table with a very large
number (hundreds) of partitions. (Bug #16591, Bug #17141)
Attempting to add a new partition to a table partitioned by a unique key would cause an Out of memory error. (Bug #17169)
MySQL server dropped client connection for certain
SELECT
statements against views defined
that used MERGE
algorithm. (Bug #16260)
A statement containing GROUP BY
and
HAVING
clauses could return incorrect
results when the HAVING
clause contained
logic that returned FALSE
for every row.
(Bug #14927)
Using GROUP BY
on column used in
WHERE
clause could cause empty set to be
returned. (Bug #16203)
DROP DATABASE
did not drop events for the
database. (Bug #16406)
Race conditions between event creation, dropping, and execution could result in a server crash or hang. (Bug #17373)
SET sql_mode =
, where
N
N
> 31, did not work properly.
(Bug #13897)
Repeated invocation of my_init()
and
my_end()
caused corruption of character set
data and connection failure. (Bug #6536)
When used with the ExtractValue()
function,
an XPath expression having no leading
“/
” character would crash the
server. (Bug #16234)
A SELECT
from the last partition of a
subpartitioned table having a UNIQUE KEY
could crash the MySQL Server. (Bug #16907)
A SELECT
on a subpartitioned table having a
multiple-column PRIMARY
or UNIQUE
KEY
, and whose partitioning function used only the
first column of the key, could cause mysqld
to crash. (Bug #16901)
Using REPLACE INTO
on a partitioned table
having a primary key would crash the server in the event of a
duplicate key error. (Bug #16782)
DROP TABLE
would sometimes fail on a table
having subpartitions that used the default storage engine.
(Bug #16775)
NDB Cluster
: Sharing of table names
containing special characters between multiple SQL nodes was
not handled correctly when binary logging was enabled (a
timeout error resulted). (Bug #17415)
NDB Cluster
: Table definitions were not
shared between multiple SQL nodes in a cluster without binary
logging being enabled. (Bug #17414)
NDB Cluster
: Cluster log file paths were
truncated to 128 characters. They may now be as long as
MAX_PATH
(the maximum path length permitted
by the operating system). (Bug #17411)
SHOW CREATE EVENT
displayed no output. (Bug
#16423)
Statements that contained Unicode characters were not logged to the log tables correctly. (Bug #16905)
On Windows platforms, some attempts to create partitioned
tables from the command line would cause the
mysql
client to hang. (Bug #17082)
NDB Cluster
: SHOW CREATE
TABLE
would fail when run against a table created in
a different session. (Bug #17340)
NDB Cluster
: Following multiple forced
shutdowns and restarts of data nodes, DROP
DATABASE
could fail. (Bug #17325)
NDB Cluster
: An UPDATE
with an inner join failed to match any records if both tables
in the join did not have a primary key. (Bug #17257)
NDB Cluster
: A DELETE
with a join in the WHERE
clause failed to
retrieve any records if both tables in the join did not have a
primary key. (Bug #17249)
The NDB Cluster
storage engine did not
allow views to be updated. (Bug #17206)
NDB Cluster
: Row-based replication of a
cluster failed to take --binlog_ignore_db
settings
into account. (Bug #17188)
Trying to create a partitioned table with more than 32 attributes failed. (Bug #17179)
NDB Cluster
: When attempting to import data
into an NDB
table using LOAD DATA
INFILE
, the server would hang in the event of a
duplicate key error. (Bug #17154)
NDB Cluster
: In some cases, LOAD
DATA INFILE
did not load all data into
NDB
tables. (Bug #17081)
NDB Cluster
: Performing large numbers of
data manipulation statements on cluster tables using Disk Data
could lead to a server crash. ()
NDB Cluster
: In some cases, a cluster using
Disk Data tables could not be restarted following a normal
shutdown. (Bug #16872)
NDB Cluster
: The REDO
log would become corrupted (and thus unreadable) in some
circumstances, due to a failure in the query handler. (Bug
#17295)
NDB Cluster
: CREATE TABLE
failed when
new_tbl
LIKE
old_tbl
;old_tbl
used the
NDB
storage engine. (Bug #17005)
NDB Cluster
: No error message was generated
for setting NoOfFragmentLogFiles
too low.
(Bug #13966)
NDB Cluster
: No error message was generated
for setting MaxNoOfAttributes
too low. (Bug
#13965)
The SELECT
privilege was required for
triggers that performed no selects. (Bug #15196)
The UPDATE
privilege was required for
triggers that performed no updates. (Bug #15166)
CAST(... AS TIME)
operations returned
different results when using versus not using
prepared-statement protocol. (Bug #15805)
Killing a long-running query containing a subquery could cause a server crash. (Bug #14851)
InnoDB
could display an incorrect error
message for a cascading update. (Bug #9680)
A RETURN
statement within a trigger caused
a server crash. RETURN
now is disallowed
within triggers. To exit immediately, use
LEAVE
. (Bug #16829)
Functionality added or changed:
Packaging changes: MySQL 5.1.6 introduces some changes to distribution packaging:
Distributions include both a mysqld optimized server and mysqld-debug debugging server. There is no separate debug distribution.
There is no longer a mysqld-max server.
Server binaries no longer are stripped, except for RPM distributions.
Binary distributions for Unix and Unix-like systems no longer include safe_mysqld as a link to mysqld_safe. safe_mysqld has been deprecated since MySQL 4.0 and now is removed.
Incompatible change: This
release introduces the TRIGGER
privilege.
Previously, the SUPER
privilege was needed
to create or drop triggers. Now those operations require the
TRIGGER
privilege. This is a security
improvement because you no longer need to grant users the
SUPER
privilege to enable them to create
triggers. However, the requirement that the account named in a
trigger's DEFINER
clause must have the
SUPER
privilege has changed to a
requirement for the TRIGGER
privilege.
After upgrading, be sure to update your grant tables as
described in Section 5.5.1, “mysql_fix_privilege_tables — Upgrade MySQL System Tables”.
This process assigns the TRIGGER
privilege
to all accounts that had the SUPER
privilege. (After updating, you might also consider whether
any of those accounts no longer need
SUPER
.) If you fail to update the grant
tables, triggers may fail when activated. (Bug #9142)
Incompatible change: Due to a
change in the naming scheme for partitioning and
subpartitioning files, it is not possible for the server to
read partitioned tables created in previous MySQL versions. A
suggested workaround is (1) to create a non-partitioned table
with the same table schema using a standard CREATE
TABLE
statement (that is, with no partitioning
clauses) and then (2) to issue aSELECT INTO
to copy the data into the non-partitioned table before the
upgrade; following the upgrade, you can partition the new
table using ALTER TABLE ... PARTITION BY
...
. Alternatively, you can dump the table using
mysqldump prior to upgrading and reload it
afterwards with LOAD DATA
. In either case,
you should drop the pre-5.1.6 partitioned tables before
upgrading to 5.1.6 or later. (Bug #13437)
Important: If any partitioned
tables that were created prior to MySQL 5.1.6 are present
following an upgrade to MySQL 5.1.6 or later, it is also not
possible to read from the
INFORMATION_SCHEMA.PARTITIONS
table, nor
will you be able to drop those tables or the database or
databases in which they are located. In this event, you must:
(1) shut down mysqld; (2) manually delete
the table, partition, and (if any) subpartition files; and
then (3) restart the MySQL Server. (Bug #16695)
Incompatible change: Words
with apostrophes are now matched in a FULLTEXT search against
non-apostrophe words (for example, a search for
Jerry
will match against the term
Jerry's
). Users upgrading to this version
must issue REPAIR TABLE
statements for
tables containing FULLTEXT
indexes. (Bug
#14194)
MySQL 5.1.6 introduces the Event Scheduler which allows one to schedule statements for execution at predetermined times. Events can be transient (one-time-only) or recurrent at regular intervals, and may execute queries and statements permitted in stored routines, including compound statements.
Events can be altered after creation, and dropped when no longer needed.
Information about scheduled events can be obtained using the
statements SHOW EVENTS
and SHOW
CREATE EVENT
, or by querying the
INFORMATION_SCHEMA.EVENTS
table. All of
these are available beginning in MySQL 5.1.6.
Users must have the EVENT
privilege (also
added in 5.1.6) to create events.
For more information, see Chapter 21, Event Scheduler.
Replication between MySQL Clusters is now supported. It is now also possible to replicate between a MySQL Cluster and a non-cluster database. See Section 16.7, “MySQL Cluster Replication”.
Queries against partitioned tables can now take advantage of partition pruning. In some cases, this can result in query execution that is an order of magnitude faster than the same query against a non-partitioned version of the same table.
Before MySQL 5.1.6, the server writes general query log and
slow query log entries to log files. As of MySQL 5.1.6, the
server's logging capabilities for these logs are more
flexible. Log entries can be written to log files (as before)
or to the general_log
and
slow_log
tables in the
mysql
database. If logging is enabled,
either or both destinations can be selected. The
--log-output
option controls the destination
or destinations of log output. See
Section 5.11.1, “Server Log Tables”.
If you had the server configured for logging to log files
formerly, use --log-output=FILE
to preserve
this behavior after an upgrade to MySQL 5.1.6 or higher.
The mysqldump utility now supports an
option for dumping tablespaces. Use -Y
or
--all-tablespaces
to enable this
functionality. (Bug #16753)
Partition support is not an “engine”, but it was
included in the output of SHOW ENGINES
. Now
it is not. (Bug #14355) The
have_partition_engine
variable was renamed
to have_partitioning
. (Bug #16718)
ANALYZE TABLE
is now supported for
partitioned tables. (Bug #13441)
Added the event_scheduler
system variable.
Added the ndb_extra_logging
system
variable.
Added the FILES
table to
INFORMATION_SCHEMA
.
Added the EVENTS
table to
INFORMATION_SCHEMA
.
Added the PARTITIONS
table to
INFORMATION_SCHEMA
.
The ARCHIVE
storage engine now supports the
AUTO_INCREMENT
column attribute and the
AUTO_INCREMENT
table option.
Section 14.8, “The ARCHIVE
Storage Engine”.
Added support for the CREATE INDEX
and
DROP INDEX
statements to the NDB
Cluster
storage engine.
Server plugins can register their own status variables to be
displayed by the SHOW STATUS
statement.
Bugs fixed:
An indexing error sometimes caused values to be assigned to
the wrong RANGE
partition. (Bug #16684)
NDB Cluster
:
ndb_delete_all would run out of memory on
tables containing BLOB
columns. (Bug
#16693)
Using the TRUNCATE()
function with a
negative number for the second argument on a
BIGINT
column returned incorrect results.
(Bug #8461)
When the fulltext search parser plugin returned more words than half of the length (in bytes) of the query string, the server would crash. (Bug #16722)
Improper memory handling for stored routine variables could cause memory overruns and binary log corruption. (Bug #15588)
A FULLTEXT
query in a prepared statement
could result in unexpected behavior. (Bug #14496)
STR_TO_DATE(1,NULL)
caused a server crash.
(Bug #15828)
An INSERT
statement in a stored procedure
corrupted the binary log. (Bug #16621)
MYSQL_OPT_RECONNECT
option was modified by
calls to the mysql_real_connect()
function. (Bug #15719)
Specifying a value for --tmpdir
without a
trailing slash had unpredictable results. (Bug #15904)
Attempting to insert data into a partitioned table that used
the BLACKHOLE
storage engine caused
mysqld to crash. (Bug #14524)
Using RANGE
partitioning with a
CASE
statement as the partitioning function
would cause records to be placed in the wrong partition. (Bug
#15393)
ALTER TABLE ... ADD PARTITIONS
on a table
with one partition crashed the server. (Bug #15820)
NDB Cluster returned incorrect Can't find
file
error for OS error 24, changed to Too
many open files
. (Bug #15020)
Multi-byte path names for LOAD DATA
and
SELECT ... INTO OUTFILE
caused errors.
Added the character_set_filesystem
system
variable, which controls the interpretation of string literals
that refer to filenames. (Bug #12448)
Certain subqueries where the inner query is the result of a aggregate function would return different results on MySQL 5.0 than on MySQL 4.1. (Bug #15347)
Error message for specifying value for which no partition exists returned wrong values on certain platforms. (Bug #15910)
Certain Japanese table names were not properly saved during a
CREATE TABLE
statement. (Bug #3906)
NDB Cluster leaked disk space when performing INSERTS/DELETES in a loop. (Bug #16771)
NDB Cluster returned wrong error when tablespace on disk was full. (Bug #16738)
The DATA DIRECTORY
and INDEX
DIRECTORY
clauses of a CREATE
TABLE
statement involving partitions did not work.
(Bug #14354)
Subselect could return wrong results when records cache and grouping was involved. (Bug #15347)
In some cases the query optimizer did not properly perform multiple joins where inner joins followed left joins, resulting in corrupted result sets. (Bug #15633)
The absence of a table in the left part of a left or right join was not checked prior to name resolution, which resulted in a server crash. (Bug #15538)
NDB Cluster
: Trying to import too many
dumped tables requiring resources beyond those allocated in
the cluster configuration would cause the server to crash
instead of reporting an insufficient resources error. (Bug
#16455)
NDB Cluster
(Disk Data): Tablespaces
created using parameters with relatively low values (< 10
MB) produced filesizes much smaller than expected. (Bug
#16742)
NDB Cluster
: CREATE
TABLESPACE
statements were incorrectly parsed on
64-bit platforms. (INITIAL SIZE
worked, but
size
INITIAL SIZE =
failed.) (Bug
#13556)
size
Trying to add more than one partition in a single
ALTER TABLE ... ADD PARTITION
statement
caused the server to crash. (Bug #16534)
Creating a partitioned table using a storage engine other than the session default storage engine caused the server to crash. (Bug #15966)
An ALTER TABLE ... PARTITION BY ...
statement did not have any effect. (Bug #15523)
NDBCluster
(Disk Data): The error message
generated by a failed ADD UNDOFILE
did not
provide any reasons for the failure. (Bug #16267)
NDBCluster
(Disk Data): DROP
LOGFILE GROUP
corrupted the cluster file system and
caused ndbd to fail when running more than
one node on the same system. (Bug #16193)
NDBCluster
: A bitfield whose offset and
length totaled 32 would crash the cluster. (Bug #16125)
NDBCluster
: Upon the completion of a scan
where a key request remained outstanding on the primary
replica and a starting node died, the scan did not terminate.
This caused incompleted error handling of the failed node.
(Bug #15908)
NDBCluster
: The
ndb_autodiscover
test failed sporadically
due to a node not being permitted to connect to the cluster.
(Bug #15619)
Using mysqldump to obtain a dump of a
partitioned table employing the NDB
storage
engine produced a non-functional table creation statement.
(Bug #13155)
SHOW CREATE TABLE
did not display the
PARTITIONS
clause for tables partitioned by
HASH
or KEY
. (Bug
#14327)
Inserting a negative value into an integer column used as the
partitioning key for a table partitioned by
HASH
could cause the server to crash. (Bug
#15968)
With a table partitioned by LIST
, inserting
a value which was smaller than any value shown in the
partitioning value-lists could cause the server to crash. (Bug
#14365)
ALTER TABLE ... DROP PARTITION
would
truncate all DATE
column values in the
table's remaining partitions to NULL
. (Bug
#13644)
ALTER TABLE ... ADD PARTITION
could crash
the server or cause an Out of memory
error in some circumstances. (Bug #13447)
The server would allow foreign keys to be declared in the definition of a partitioned table despite the fact that partitioned tables do not support foreign keys (see Section 17.5, “Restrictions and Limitations on Partitioning”). (Bug #13446)
A SELECT
from a key-partitioned table with
a multi-column key could cause the server to crash. (Bug
#13445)
Issuing a TRUNCATE
statement twice in
succession on the same partitioned table would cause the
server to crash. (Bug #13442)
Using a REPLACE
statement on a partitioned
table caused the server to crash. (Bug #13440)
Using an identifier rather than a literal integer value in the
LESS THAN
clause of a range-partitioned
table could cause the server to crash and corruption of
tables. (Bug #13439)
Using ENGINE=...
within a
PARTITION
clause could cause the server to
crash. (Bug #13438)
CREATE TABLE ... LIKE
did not work if the
table whose schema was to be copied was a partitoned table.
(Bug #13435)
SHOW CREATE TABLE
did not display the
PARTITIONS
clause for tables partitioned by
HASH
or KEY
. (Bug
#14327)
Certain permission management statements could create a
NULL
hostname for a user, resulting in a
server crash. (Bug #15598)
Temporary table aliasing did not work inside stored functions. (Bug #12198)
Parallel builds occasionally failed on Solaris. (Bug #16282)
Functionality added or changed:
Added the INFORMATION_SCHEMA ENGINES
table.
Added the INFORMATION_SCHEMA PLUGINS
table
and the SHOW PLUGIN
statement.
Added the binlog_format
system variable
that controls whether to use row-based or statement-based
binary logging. Added the --binlog-format
and
--binlog-row-event-max-size
server options
for binary logging control. See
Section 6.3, “Row-Based Replication”.
Plugins now can have status variables that are displayed in
the output from SHOW STATUS
. See
Section 27.2.5, “Writing Plugins”.
Added the XML functions ExtractValue()
and
UpdateXML()
.
ExtractValue()
returns the content of a
fragment of XML matching a given XPath expression.
UpdateXML()
replaces the element selected
from a fragment of XML by an XPath expression supplied by the
user with a second XML fragment (also user-supplied), and
returns the modified XML. See Section 12.9, “XML Functions”.
Added the --base64-output
option to
mysqlbinlog to print all binary log entries
using base64 encoding. This is for debugging only. Logs
produced using this option should not be applied on production
systems.
Added the --port-open-timeout
option to
mysqld to control how many seconds the
server should wait for the TCP/IP port to become free if it
cannot be opened. (Bug #15591)
Two new Hungarian collations are included:
utf8_hungarian_ci
and
ucs2_hungarian_ci
. These support the
correct sort order for Hungarian vowels. However, they do not
support the correct order for sorting Hungarian consonant
contractions; this issue will be fixed in a future release.
Bugs fixed:
InnoDB
: An UPDATE
statement with no index column in the WHERE
condition locked all the rows in the table. (Bug #3300)
INSERT DELAYED
caused
mysqld to crash. (Bug #16095)
The output of mysqldump --triggers did not
contain the DEFINER
clause in dumped
trigger definitions. (Bug #15110)
The output of SHOW TRIGGERS
contained
extraneous whitespace. (Bug #15103)
An INSERT ... SELECT
statement between
tables in a MERGE
set can return errors
when statement involves insert into child table from merge
table or vice-versa. (Bug #5390)
A COMMIT
statement followed by a
ALTER TABLE
statement on a BDB table caused
server crash. (Bug #14212)
InnoDB
: Comparison of indexed
VARCHAR CHARACTER SET ucs2 COLLATE ucs2_bin
columns using LIKE
could fail. (Bug #14583)
Creating a trigger caused a server crash if the table or trigger database was not known because no default database had been selected. (Bug #14863)
Issuing a DROP USER
command could cause
some users to encounter a
error. (Bug #15775)
hostname
is not allowed to
connect to this MySQL server
The --plugin_dir
option was not working. Also
fix error with specifying parser name for fulltext. (Bug
#16068)
Attempting to insert into a table partitioned by
LIST
a value less than any specified in one
of the table's partition definitions resulted in a server
crash. In such cases, mysqld now returns
ERROR 1500 (HY000): Table has no partition for
value v
, where
v
is the out-of-range value. (Bug
#15819)
Functionality added or changed:
Added the mysqlslap program, which is designed to emulate client load for a MySQL server and report the timing of each stage. It works as if multiple clients are accessing the server.
Added the --server-id
option to
mysqlbinlog to enable only those events
created by the server having the given server ID to be
extracted. (Bug #15485)
It is now possible to build the server such that
MyISAM
tables can support up to 128 keys
rather than the standard 64. This can be done by configuring
the build using the option
--with-max-indexes=
,
where N
N
≤128 is the maximum
number of indexes to permit per table. (Bug #10932)
The bundled BDB
library was upgraded to
version 4.4.16.
Added the cp1250_polish_ci
collation for
the cp1250
character set.
Added the myisam_use_mmap
system variable.
Added the --bdb-data-direct
and
--bdb-log-direct
server options.
Bugs fixed:
SHOW ENGINES
output showed the
FEDERATED
engine as
DISABLED
even for builds with
FEDERATED
support. (Bug #15559)
Server could not be built on default Debian systems with BDB enabled. (Bug #15734)
BDB
: A DELETE
,
INSERT
, or UPDATE
of a
BDB
table could cause the server to crash
where the query contained a subquery using an index read. (Bug
#15536)
A left join on a column that having a NULL
value could cause the server to crash. (Bug #15268)
It was not possible to reorganize a partition reusing a discarded partition name.
Now, for example, you can create a table such as this one:
CREATE TABLE t1 (a INT) PARTITION BY RANGE (a) ( PARTITION p0 VALUES LESS THAN (10), PARTITION p1 VALUES LESS THAN (20), PARTITION p2 VALUES LESS THAN MAXVALUE );
and then repartition it as shown here:
ALTER TABLE t1 REORGANIZE PARTITION p2 INTO ( PARTITION p2 VALUES LESS THAN (30) );
Previously, attempting to do so would produce the error All partitions must have unique names in the table . (Bug #15521)
NDB Cluster
: The --ndb
option for perror did not function. (Bug
#15486)
The BLACKHOLE
storage engine did not handle
transactions properly: Rolled-back transactions were written
to the binary log. Now they ae not. (Bug #15406)
NDB Cluster
: Using ORDER BY
when
selecting from a table having the primary key on a
primary_key_column
VARCHAR
column caused a forced shutdown of
the cluster. (Bug #14828, Bug #15240, Bug #15682, Bug #15517)
ANALYZE TABLE
did not properly update table
statistics for a MyISAM
table with a
FULLTEXT
index containing stopwords, so a
subsequent ANALYZE TABLE
would not
recognize the table as having already been analyzed. (Bug
#14902)
The maximum value of MAX_ROWS
was handled
incorrectly on 64-bit systems. (Bug #14155)
Multiple-table update operations were counting updates and not updated rows. As a result, if a row had several updates it was counted several times for the “rows matched” value but updated only once. (Bug #15028)
SELECT
queries that began with an opening
parenthesis were not being placed in the query cache. (Bug
#14652)
Space truncation was being ignored when inserting into
BINARY
or VARBINARY
columns. Now space truncation results in a warning, or an
error in strict mode. (Bug #14299)
Selecting from a view processed with the temptable algorithm caused a server crash if the query cache was enabled. (Bug #15119)
Creating a view that referenced a stored function that selected from a view caused a crash upon selection from the view. (Bug #15096)
Creating a view within a stored procedure could result in an out of memory error or a server crash. (Bug #14885)
SHOW CREATE DATABASE
was sometimes refused
when the client had privileges for the database. (Bug #9785)
mysql ignored the
MYSQL_TCP_PORT
environment variable. (Bug
#5792)
ROW_COUNT()
returned an incorrect result
after EXECUTE
of a prepared statement. (Bug
#14956)
Invalid casts to DATE
values now result in
a message of Incorrect datetime value
,
rather than Truncated incorrect datetime
value
. (Bug #8294)
Attempts to assign NULL
to a NOT
NULL
column in strict mode now result in a message
of Column '
, rather than col_name
'
cannot be nullColumn set to
default value; NULL supplied to NOT NULL column
'
. (Bug #11491)
col_name
' at row
n
For binary string data types, mysqldump
--hex-blob produced an illegal output value of
0x
rather than ''
. (Bug
#13318)
Some comparisons for the IN()
operator were
inconsistent with equivalent comparisons for the
=
operator. (Bug #12612)
Functionality added or changed:
This is the first public alpha release of the current MySQL 5.1 development branch, providing an insight to upcoming features. Although some of these are still under heavy development, this release includes the following new features and changes (in comparison to the current MySQL 5.0 production release):
Partitioning: allows distributing portions of individual tables across a filesystem, according to rules which can be set when the table is created. In effect, different portions of a table are stored as separate tables in different locations, but from the user point of view, the partitioned table is still a single table. See Chapter 17, Partitioning, for further information on this functionality. (Author: Mikael Ronström)
Plugin API: MySQL 5.1 adds support for a very flexible plugin API that enables loading and unloading of various components at runtime, without restarting the server. Although the work on this is not finished yet, plugin full-text parsers are a first step in this direction. This allows users to implement their own input filter on the indexed text, enabling full-text search capability on arbitrary data such as PDF files or other document formats. A pre-parser full-text plugin performs the actual parsing and extraction of the text and hands it over to the built-in MySQL full-text search. (Author: Sergey Vojtovich)
The plugin API requires the mysql.plugin
table. When upgrading from an older version of MySQL, you
should run the mysql_fix_privilege_tables
command to create this table. See
Section 5.5.1, “mysql_fix_privilege_tables — Upgrade MySQL System Tables”.
Incompatible change: Plugins
are installed in the directory named by the
plugin_dir
system variable. This variable
also controls the location from which the server loads
user-defined functions (UDFs), which is a change from earlier
versions of MySQL. That is, all UDF library files now must be
installed in the plugin directory. When upgrading from an
older version of MySQL, you must migrate your UDF files to the
plugin directory.
The Instance Manager (IM) now has some additional functionality:
SHOW
provides a listing of all log files
used by the instance. (Author: Petr Chardin)
instance_name
LOG FILES
SHOW
retrieves a
part of the specified log file. (Author: Petr Chardin)
instance_name
LOG {ERROR | SLOW | GENERAL}
size
SET
sets an option to the specified value and writes it to
the config file See Section 5.4, “mysqlmanager — The MySQL Instance Manager”,
for more details on these new commands. (Author: Petr
Chardin)
instance_name
.
option_name
=option_value
The performance of boolean full-text searches (using the “+” Operator) has been improved. See Section 12.7, “Full-Text Search Functions”, for more details about full-text searching. (Author: Sergey Vojtovich)
VARCHAR
fields used in MySQL Cluster tables
are now variable-sized; that is, they now only allocate as
much space as required to store the data. Previously, a
VARCHAR(
column allocated n+2 bytes (aligned to 4 bytes), regardless if
the actual inserted value required that much space. (In other
words, a n
)VARCHAR
column always required the
same, fixed, amount of storage as a CHAR
column of the same size.)
Renamed the table_cache
system variable to
table_open_cache
. Any scripts that refer to
table_cache
should be updated to use the
new name.
Added the table_definition_cache
system
variable. If you use a large number of tables, you can create
a large table definition cache to speed up opening of tables.
The table definition cache takes less space and does not use
file descriptors, unlike the normal table cache.
Bugs fixed:
Set functions could not be aggregated in outer subqueries. (Bug #12762)
Functionality added or changed:
Added MAXLOCKS
,
MINLOCKS
, MAXWRITE
, and
MINWRITE
as allowable values of the
--bdb-lock-detect
option. (Bug #14876)
Added the bdb_cache_parts
and
bdb_region_size
system variables, and
allowed bdb_cache_size
to be larger than
4GB on systems that support it. (Bug #14895)
Added Transactions
, XA
,
and Savepoints
columns to SHOW
ENGINES
output.
Added --replace
to
mysqldump. This option uses
REPLACE INTO
, rather than INSERT
INTO
, when writing the dumpfile.
Bugs fixed:
Foreign keys were not properly enforced in
TEMPORARY
tables. Foreign keys now are
disallowed in TEMPORARY
tables. (Bug
#12084)
Functionality added or changed:
Bugs fixed:
Performing a CREATE TABLE
statement with a
PARTITION BY
clause in a prepared statement
could crash a server running in debug mode. (Bug #12097)
NDB
: Specifying the wrong nodegroup in a
CREATE TABLE
using partitioning would lead
to the table name being locked after the CREATE
TABLE
statement failed (that is, the table name
could not be re-used). (Bug #12114)
Using ORDER BY
in a query with a
partitioned table on a 64-bit operating system could crash the
server. (Bug #12116)
When two threads compete for the same table, a deadlock could
occur if one thread has also a lock on another table through
LOCK TABLES
and the thread is attempting to
remove the table in some manner and the other thread want
locks on both tables. (Bug #10600)
Functionality added or changed:
N/A
Bugs fixed:
The SQLDriverConnect()
ODBC method did not
work with recent MyODBC releases. (Bug #12393)
Functionality added or changed:
N/A
Bugs fixed:
File DSNs could not be saved. (Bug #12019)
SQLColumns()
returned no information for
tables that had a column named using a reserved word. (Bug
#9539)
Functionality added or changed: No changes.
Bugs fixed:
mysql_list_dbcolumns()
and
insert_fields()
were retrieving all rows
from a table. Fixed the queries generated by these functions
to return no rows. (Bug #8198)
SQLGetTypoInfo()
returned
tinyblob
for
SQL_VARBINARY
and nothing for
SQL_BINARY
. Fixed to return
varbinary
for
SQL_VARBINARY
, binary
for SQL_BINARY
, and
longblob
for
SQL_LONGVARBINARY
. (Bug #8138)