Functionality Added or Changed
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 by running
mysql_upgrade. This will assign 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 the SUPER
privilege.) If you fail to update the grant tables, triggers may
fail when activated.
(Bug #9412)
Incompatible Change:
Words with apostrophes are now matched in a FULLTEXT search
against nonapostrophe words (for example, a search for
Jerry will match against the term
Jerry's). Users upgrading to this version
must issue REPAIR TABLE ... QUICK statements
for tables containing FULLTEXT indexes.
(Bug #14194)
Incompatible Change:
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
Selecting General Query and Slow Query Log Output Destinations.
If logging is enabled, the default destination now is to log to
tables, which differs from earlier versions. 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.
Important Change; MySQL Cluster; Replication: Replication between MySQL Clusters is now supported. It is now also possible to replicate between a MySQL Cluster and a noncluster database. See MySQL Cluster Replication, for more information.
MySQL Cluster:
The NDB storage engine now supports
the CREATE INDEX and
DROP INDEX statements.
MySQL Cluster:
Added the ndb_extra_logging
system variable.
Packaging: 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. (Note: This changed in MySQL 5.1.9: The mysqld-max server also is included in binary distributions.)
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.
ANALYZE TABLE is now supported
for partitioned tables.
(Bug #13441)
Added the EVENTS table to
INFORMATION_SCHEMA.
Added the PARTITIONS table to
INFORMATION_SCHEMA.
Partition support is not an “engine”, but it was
included in the output of SHOW
ENGINES. Now it is not. The
have_partition_engine variable was renamed to
have_partitioning.
(Bug #14355, Bug #16718)
The mysqldump utility now supports an option
for dumping tablespaces. Use -Y or
--all-tablespaces to enable
this functionality.
(Bug #16753)
Server plugins can register their own status variables to be
displayed by the SHOW STATUS
statement.
The ARCHIVE storage engine now supports the
AUTO_INCREMENT column attribute and the
AUTO_INCREMENT table option.
The ARCHIVE Storage Engine.
Server binaries no longer are stripped, except for RPM distributions.
Distributions include both a mysqld optimized server and mysqld-debug debugging server. There is no separate debug distribution.
MySQL 5.1.6 introduces the Event Scheduler which enables statements to be scheduled 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 Using the Event Scheduler.
Added the event_scheduler
system variable.
Special characters in database and table identifiers now are encoded when creating the corresponding directory names and file names. This relaxes the restrictions on the characters that can appear in identifiers. See Mapping of Identifiers to File Names.
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.
Added the FILES table to
INFORMATION_SCHEMA.
There is no longer a mysqld-max server. (Note: This changed in MySQL 5.1.9: The mysqld-max server also is included in binary distributions.)
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 nonpartitioned version of the same table.
Added the --use-threads option
for mysqlslap.
Bugs Fixed
MySQL Cluster:
CREATE TABLESPACE statements were
incorrectly parsed on 64-bit platforms. (INITIAL SIZE
worked, but
sizeINITIAL SIZE = failed.)
(Bug #13556)size
MySQL Cluster:
A BIT column whose offset and
length totaled 32 caused the cluster to crash.
(Bug #16125)
MySQL Cluster:
Using mysqldump to obtain a dump of a
partitioned table employing the NDB
storage engine produced a nonfunctional table creation
statement.
(Bug #13155)
MySQL Cluster:
NDB returned an incorrect
Can't find file error for OS error 24;
this has been changed to Too many open
files.
(Bug #15020)
MySQL Cluster:
NDB leaked disk space when
performing repeated INSERT or
DELETE statements.
(Bug #16771)
MySQL Cluster: Trying to import too many dumped tables requiring resources beyond those allocated in the cluster configuration file caused the server to crash instead of reporting an insufficient resources error. (Bug #16455)
MySQL Cluster:
ndb_delete_all ran out of memory when
processing tables containing BLOB
columns.
(Bug #16693)
MySQL Cluster:
The ndb_autodiscover test failed sporadically
due to a node not being permitted to connect to the cluster.
(Bug #15619)
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)
Disk Data:
NDB returned the wrong error when
the tablespace on disk was full.
(Bug #16738)
Disk Data: Tablespaces created using parameters with relatively low values (10 MB or less) produced filesizes much smaller than expected. (Bug #16742)
Disk Data:
The error message generated by a failed ADD
UNDOFILE did not provide any reasons for the failure.
(Bug #16267)
Cluster API: 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 incomplete error handling for the failed node. (Bug #15908)
Creating a partitioned table using a storage engine other than the session default storage engine caused the server to crash. (Bug #15966)
The mysql_real_connect() C API
function incorrectly reset the
MYSQL_OPT_RECONNECT option to its default
value.
(Bug #15719)
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 file names.
(Bug #12448)
ALTER TABLE ... ADD PARTITIONS on a table
with one partition crashed the server.
(Bug #15820)
Using RANGE partitioning with a
CASE expression as the partitioning
function would cause records to be placed in the wrong
partition.
(Bug #15393)
Using ENGINE=... within a
PARTITION clause could cause the server to
crash.
(Bug #13438)
Certain subqueries where the inner query was the result of a aggregate function would return different results with MySQL 5.0 or 5.1 than with MySQL 4.1.
Subselects could also return wrong results when the query cache and grouping were involved. (Bug #15347)
The server would permit foreign keys to be declared in the definition of a partitioned table despite the fact that partitioned tables do not support foreign keys (see Restrictions and Limitations on Partitioning). (Bug #13446)
Using the TRUNCATE() function
with a negative number for the second argument on a
BIGINT column returned incorrect
results.
(Bug #8461)
ALTER TABLE ... DROP PARTITION would truncate
all DATE column values in the
table's remaining partitions to NULL.
(Bug #13644)
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)
CREATE TABLE ...
LIKE did not work if the table whose schema was to be
copied was a partitioned table.
(Bug #13435)
An indexing error sometimes caused values to be assigned to the
wrong RANGE partition.
(Bug #16684)
Temporary table aliasing did not work inside stored functions. (Bug #12198)
The error message for specifying values for which no partition exists returned wrong values on certain platforms. (Bug #15910)
When the full-text search parser plugin returned more words than half of the length (in bytes) of the query string, the server would crash. (Bug #16722)
An ALTER TABLE ... PARTITION BY ... statement
did not have any effect.
(Bug #15523)
Trying to add more than one partition in a single ALTER
TABLE ... ADD PARTITION statement caused the server to
crash.
(Bug #16534)
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)
Improper memory handling for stored routine variables could cause memory overruns and binary log corruption. (Bug #15588)
An INSERT statement in a stored
procedure corrupted the binary log.
(Bug #16621)
Certain permission management statements could create a
NULL host name for a user, resulting in a
server crash.
(Bug #15598)
STR_TO_DATE(1,NULL) caused a
server crash.
(Bug #15828, CVE-2006-3081)
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)
Attempting to insert data into a partitioned table that used the
BLACKHOLE storage engine caused
mysqld to crash.
(Bug #14524)
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)
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)
The DATA DIRECTORY and INDEX
DIRECTORY clauses of a CREATE
TABLE statement involving partitions did not work.
(Bug #14354)
ALTER TABLE ... ADD PARTITION could crash the
server or cause an Out of memory error in
some circumstances.
(Bug #13447)
Parallel builds occasionally failed on Solaris. (Bug #16282)
SHOW CREATE TABLE did not display
the PARTITIONS clause for tables partitioned
by HASH or KEY.
(Bug #14327)
A FULLTEXT query in a prepared statement
could result in unexpected behavior.
(Bug #14496)
Specifying a value for --tmpdir without a
trailing slash had unpredictable results.
(Bug #15904)
Issuing a TRUNCATE TABLE
statement twice in succession on the same partitioned table
would cause the server to crash.
(Bug #13442)
A SELECT from a key-partitioned
table with a multi-column key could cause the server to crash.
(Bug #13445)
Certain Japanese table names were not properly saved during a
CREATE TABLE statement.
(Bug #3906)
Using a REPLACE statement on a
partitioned table caused the server to crash.
(Bug #13440)
