Functionality added or changed:
* Incompatible change: Previously, you could create a
user-defined function (UDF) or stored function with the same
name as a built-in function, but could not invoke the UDF. Now
an error occurs if you try to create such a UDF. The server
also now generates a warning if you create a stored function
with the same name as a built-in function. It is not
considered an error to create a stored function with the same
name as a built-in function because you can invoke the
function using db_name.func_name() syntax. However, the server
now generates a warning in this case.
See Section 9.2.4, "Function Name Resolution," for the rules
describing how the server interprets references to different
kinds of functions.
* NDB Cluster (Replication): ndb_restore now creates the
apply_status and schema tables if they do not already exist on
the slave cluster. (Bug#14612:http://bugs.mysql.com/14612)
* NDB Cluster: Backup messages are now printed to the Cluster
* NDB Cluster: The error message Management server closed
connection, when recorded in the MySQL error log, now includes
a timestamp indicating when the error took place.
* NDB Cluster (Disk Data): The output of mysqldump now includes
by default all tablespace and logfile group definitions used
by any tables or databases that are dumped.
Note: The working of the –all-tablespaces or -Y option for
mysqldump remains unaffected by this change.
* Direct and indirect usage of stored routines, user-defined
functions, and table references is now prohibited in CREATE
EVENT and ALTER EVENT statements.
See Section 20.2.1, "CREATE EVENT Syntax," and Section 20.2.2,
"ALTER EVENT Syntax," for more specific information.
* DROP TRIGGER now supports an IF EXISTS clause.
* NDB Cluster (Replication): If errors occurred during purging
of the binary logs, extraneous rows could remain left in the
binlog_index table. (Bug#15021:http://bugs.mysql.com/15021)
* NDB Cluster (Disk Data): ndb_restore could sometimes fail when
attempting to restore Disk Data tables due to data node
failure caused by accessing unitialized memory.
* NDB Cluster (Disk Data): Excessive fragmentation of Disk Data
files (including log files and data files) could occur during
the course of normal use.
* NDB Cluster (Disk Data): It was possible to execute a
statement for creating a Disk Data table that referred to a
nonexistent tablespace, in which case the table was an
in-memory NDB table. Such a statement instead now fails with
an appropriate error message.
* NDB Cluster (Disk Data): Under some circumstances, a DELETE
from a Disk Data table could cause mysqld to crash.
* NDB Cluster (Cluster APIs): Using BIT values with any of the
comparison methods of the NdbScanFilter class caused the
cluster’s data nodes to fail.
* NDB Cluster: A value equal to or greater than the allowed
maximum for LongMessageBuffer caused all data nodes to crash.
* NDB Cluster: The failure of a data node failure during a
schema operation could lead to additional node failures.
* NDB Cluster: A committed read could be attempted before a data
node had time to connect, causing a timeout error.
* NDB Cluster: The simultaneous shutdown of mysqld and ndbd
processes caused unnecessary locking.
* NDB Cluster: The failure of the master node in a node group
during the allocation of node IDs could cause ndb_mgmd to
* NDB Cluster: In certain rare cases, a data node could crash
due to a typographical error in the MySQL Cluster source code.
* NDB Cluster: Creating a new tables containing a BLOB column
when the server was short of memory could cause the server to
* NDB Cluster: Any statement following the execution of CREATE
TABLE … LIKE ndb_table (where ndb_table was a table using
the NDB storage engine), would cause the mysql client to hang.
* NDB Cluster: When the management client command ALL RESTART -i
was executed while one data node was not running, all data
nodes in the cluster were shut down.
* NDB Cluster: A query using an index scan followed by a delete
operation, and then a rollback could cause one or more data
nodes to crash. (Bug#24039:http://bugs.mysql.com/24039)
* NDB Cluster (Cluster APIs): Some MGM API function calls could
yield incorrect return values in certain cases where the
cluster was operating under a very high load, or experienced
timeouts in inter-node communications.
* NDB Cluster: It was possible for the sum of the MaxNoOfTables,
MaxNoOfOrderedIndexes, and MaxNoOfUniqueHashIndexes
configuration parameters, plus the number of system tables to
exceed the maximum value for a Uint32 number. In such a case,
the cluster’s data nodes failed to start, and no reason for
this could easily be determined from the error messages
* NDB Cluster: Given a table mytbl in a database mydb on a MySQL
Server acting as an SQL node in a MySQL Cluster, then,
following multiple ALTER TABLE mytbl ENGINE=engine statements
— first, to change the storage engine used for a table to
NDB, and then again to change the table to use a non-NDB
storage engine — a DROP DATABASE mydb statement executed on
any SQL node in the cluster would cause mydb to be dropped on
all SQL nodes in the cluster, even if mydb contained non-NDB
* NDB Cluster: An incorrect error message was displayed in the
event that the value of the MaxNoOfOrderedIndexes parameter
was set too low. (Bug#20065:http://bugs.mysql.com/20065)
* NDB Cluster: An incorrect error message was displayed in the
event that the value of the DataMemory parameter was
insufficient for the amount of data to be stored by the
* NDB Cluster: A unique constraint violation was not ignored by
an UPDATE IGNORE statement when the constraint violation
occurred on a non-primary key.
* Through the C API, the member strings in MYSQL_FIELD for a
query that contains expressions may return incorrect results.
* mysql_affected_rows() could return values different from
mysql_stmt_affected_rows() for the same sequence of
* IN() and CHAR() can return NULL, but did not signal that to
the query processor, causing incorrect results for IS NULL
* Instance Manager option-parsing code caused memory-allocation
* A trigger that invoked a stored function could cause a server
crash when activated by different client connections.
* CONCURRENT did not work correctly for LOAD DATA INFILE.
* A stored procedure, executed from a connection using a binary
character set, and which wrote multi-byte data, would write
incorrectly escaped entries to the binary log. This caused
syntax errors, and caused replication to fail.
* The server source code had multiple exportable definitions of
the field_in_record_is_null() function. These are now all
declared static. (Bug#24190:http://bugs.mysql.com/24190)
* When reading from the standard input on Windows, mysqlbinlog
opened the input in text mode rather than binary mode and
consequently misinterpreted some characters such as Control-Z.
* Inserting a default or invalid value into a spatial column
could fail with Unknown error rather than a more appropriate
* The server could send incorrect column count information to
the client for queries that produce a larger number of columns
than can fit in a two-byte number.
* Evaluation of subqueries that require the filesort algorithm
were allocating and freeing the sort_buffer_size buffer many
times, resulting in slow performance. Now the buffer is
allocated once and reused.
* SQL statements close to the size of max_allowed_packet could
produce binary log events larger than max_allowed_packet that
could not be read by slave servers.
* View columns were always handled as having implicit
derivation, leading to illegal mix of collation errors for
some views in UNION operations. Now view column column
derivation comes from the original expression given in the
view definition. (Bug#21505:http://bugs.mysql.com/21505)
* If elements in a non-top-level IN subquery were accessed by an
index and the subquery result set included a NULL value, the
quantified predicate that contained the subquery was evaluated
to NULL when it should return a non-NULL value.
* Calculation of COUNT(DISTINCT), AVG(DISTINCT), or
SUM(DISTINCT) when they are referenced more than once in a
single query with GROUP BY could cause a server crash.
* For a cast of a DATETIME value containing microseconds to
DECIMAL, the microseconds part was truncated without
generating a warning. Now the microseconds part is preserved.
* Metadata for columns calculated from scalar subqueries was
limited to integer, double, or string, even if the actual type
of the column was different.
* The result for CAST() when casting a value to UNSIGNED was
limited to the maximum signed BIGINT value, not the maximum
unsigned value. (Bug#8663:http://bugs.mysql.com/8663)
* Some unnecessary Valgrind warnings were removed from the
* Using EXPLAIN caused a server crash for queries that selected
from INFORMATION_SCHEMA in a subquery in the FROM clause.
* Invalidating the query cache caused a server crash for INSERT
INTO … SELECT statements that selected from a view.
* With row-based binary logging, replicated multiple-statement
transaction deadlocks did not return the correct error code,
causing the slave SQL thread to stop rather than roll back and
* With row-based binary logging, for CREATE TABLE IF NOT EXISTS
LIKE temporary_table statements, the IF NOT EXISTS clause was
not logged. (Bug#22762:http://bugs.mysql.com/22762)
* With row-based binary logging, CREATE TABLE IF NOT EXISTS
SELECT statements were not logged properly.
* On slave servers, transactions that exceeded the lock wait
timeout failed to roll back properly.
* Changes to character set variables prior to an action on a
replication-ignored table were forgotten by slave servers.
* With lower_case_table_names set to 1, SHOW CREATE TABLE
printed incorrect output for table names containing Turkish I
(LATIN CAPITAL LETTER I WITH DOT ABOVE).
* When applying the group_concat_max_len limit, GROUP_CONCAT()
could truncate multi-byte characters in the middle.
* For view renaming, the table name to filename encoding was not
* For some problems relating to character set conversion or
incorrect string values for INSERT or UPDATE, the server was
reporting truncation or length errors instead.
* The XPath operators < and >, as implemented in the
ExtractValue() function, operated in reverse.
Changes in release 5.1.13 (Not released)
Functionality added or changed:
* Binary distributions of MySQL 5.1.12 were built without
support for partitioning. This has been corrected except for
* A change in the interfaces for the INFORMATION_SCHEMA.FILES
table has made the table accessible to storage engines other
than NDB. (Bug#23013:http://bugs.mysql.com/23013)
* mysqldump –single-transaction now uses START TRANSACTION
/*!40100 WITH CONSISTENT SNAPSHOT */ rather than BEGIN to
start a transaction, so that a consistent snapshot will be
used on those servers that support it.
* mysql_upgrade now passes all the parameters specified on the
command line to both mysqlcheck and mysql using the
* For the CALL statement, stored procedures that take no
arguments now can be invoked without parentheses. That is,
CALL p() and CALL p are equivalent.
* MySQL 5.0.26 introduced an ABI incompatibility, which this
release reverts. Programs compiled against 5.0.26 are not
compatible with any other version and must be recompiled.
* If a table contains an AUTO_INCREMENT column, inserting into
an insertable view on the table that does not include the
AUTO_INCREMENT column should not change the value of
LAST_INSERT_ID(), because the side effects of inserting
default values into columns not part of the view should not be
visible. MySQL was incorrectly setting LAST_INSERT_ID() to
* M % 0 returns NULL, but (M % 0) IS NULL evaluated to false.
* Within a stored routine, a view definition cannot refer to
routine parameters or local variables. However, an error did
not occur until the routine was called. Now it occurs during
parsing of the routine creation statement.
Note: A side effect of this fix is that if you have already
created such routines, and error will occur if you execute
SHOW CREATE PROCEDURE or SHOW CREATE FUNCTION. You should drop
these routines because they are erroneous.
* A client library crash was caused by executing a statement
such as SELECT * FROM t1 PROCEDURE ANALYSE() using a server
side cursor on a table t1 that does not have the same number
of columns as the output from PROCEDURE ANALYSE().
* mysql did not check for errors when fetching data during
result set printing. (Bug#22913:http://bugs.mysql.com/22913)
* Adding a day, month, or year interval to a DATE value produced
a DATE, but adding a week interval produced a DATETIME value.
Now all produce a DATE value.
* The column default value in the output from SHOW COLUMNS or
SELECT FROM INFORMATION_SCHEMA.COLUMNS was truncated to 64
* For not-yet-authenticated connections, the Time column in SHOW
PROCESSLIST was a random value rather than NULL.
* The Host column in SHOW PROCESSLIST output was blank when the
server was started with the –skip-grant-tables option.
* The Handler_rollback status variable sometimes was incremented
when no rollback had taken place.
* Within a prepared statement, SELECT (COUNT(*) = 1) (or similar
use of other aggregate functions) did not return the correct
result for statement re-execution.
* Lack of validation for input and output TIME values resulted
in several problems: SEC_TO_TIME() within subqueries
incorrectly clipped large values; SEC_TO_TIME() treated BIGINT
UNSIGNED values as signed; only truncation warnings were
produced when both truncation and out-of-range TIME values
* Range searches on columns with an index prefix could miss
* With SQL_MODE=TRADITIONAL, MySQL incorrectly aborted on
warnings within stored routines and triggers.
* In mysql, invoking connect or \r with very long db_name or
host_name parameters caused buffer overflow.
* mysqldump –xml produced invalid XML for BLOB data.
* For a debug server, a reference to an undefined user variable
in a prepared statment executed with EXECUTE caused an
assertion failure. (Bug#19356:http://bugs.mysql.com/19356)
* Within a trigger for a base table, selecting from a view on
that base table failed.
* DELETE IGNORE could hang for foreign key parent deletes.
* Transient errors in replication from master to slave may
trigger multiple Got fatal error 1236: ‘binlog truncated in
the middle of event’ errors on the slave.
* The value of the warning_count system variable was not being
calculated correctly (also affecting SHOW COUNT(*) WARNINGS).
* InnoDB showed substandard performance with multiple queries
running concurrently. (Bug#15815:http://bugs.mysql.com/15815)
* There was a race condition in the InnoDB
* FROM_UNIXTIME() did not accept arguments up to POWER(2,31)-1,
which it had previously.
* Some yaSSL-related memory leaks detected by Valgrind were
* If COMPRESS() returned NULL, subsequent invocations of
COMPRESS() within a result set or within a trigger also
returned NULL. (Bug#23254:http://bugs.mysql.com/23254)
* mysql would lose its connection to the server if its standard
output was not writable.
* mysql-test-run did not work correctly for RPM-based
* The return value from my_seek() was ignored.
* Use of PREPARE with a CREATE PROCEDURE statement that
contained a syntax error caused a server crash.
* Use of a DES-encrypted SSL certificate file caused a server
* Column names were not quoted properly for replicated views.
* InnoDB used table locks (not row locks) within stored
* InnoDB crashed when trying to display an error message about a
foreign key constraint violation when the two tables are in
different schemas. (Bug#23368:http://bugs.mysql.com/23368)
* Statements such as DROP PROCEDURE and DROP VIEW were written
to the binary log too late due to a race condition.
* At shutdown, Instance Manager told guarded server instances to
stop, but did not wait until they actually stopped.
* It was not possible to do an atomic rename of the log tables
without the possibility of losing rows. Now you can do this:
CREATE TABLE IF NOT EXISTS general_log2 LIKE general_log;
RENAME TABLE general_log TO general_log_backup, general_log2 TO general_log;
* NDB Cluster (Disk Data): In the event of an aborted multiple
update, the space in the Disk Data log buffer to be freed as a
result was actually freed twice, which could eventually lead
to a crash. (Bug#23430:http://bugs.mysql.com/23430)
* NDB Cluster: An NDB source file included a memset() call with
reversed arguments. (Bug#23169:http://bugs.mysql.com/23169)
* NDB Cluster: Under some conditions, the data distribution
could become unbalanced in a MySQL Cluster with 2 or more node
groups following the creation of a new table.
As part of the fix for this bug, two new NDB API methods were
added to the NdbDictionary::Object::Table class. See the MySQL
Cluster API documentation for details.
* Incorrect warnings occurred for use of CREATE TABLE … LIKE
or REPAIR TABLE with the log tables.
* MySQL failed to build on the Alpha platform.
* The optimizer failed to use equality propagation for BETWEEN
and IN predicates with string arguments.
* The optimizer used the ref join type rather than eq_ref for a
simple join on strings.
* The WITH CHECK OPTION for a view failed to prevent storing
invalid column values for UPDATE statements.
* A literal string in a GROUP BY clause could be interpreted as
a column name. (Bug#14019:http://bugs.mysql.com/14019)
* Some queries that used MAX() and GROUP BY could incorrectly
return an empty result.
* WITH ROLLUP could group unequal values.
* Use of a subquery that invoked a function in the column list
of the outer query resulted in a memory leak.
* LIKE searches failed for indexed utf8 character columns.
* FLUSH INSTANCES in Instance Manager triggered an assertion
* ALTER TABLE was not able to rename a view.
* The optimizer sometimes mishandled R-tree indexes for GEOMETRY
data types, resulting in a server crash.
* An unhandled NULL pointer caused a server crash.
* Use of SQL_BIG_RESULT did not influence the sort plan for
query execution. (Bug#22781:http://bugs.mysql.com/22781)
* The server did not allocate sufficient memory for some queries
for which a DISTINCT to GROUP BY conversion is possible and an
ORDER BY clause is present, resulting in a server crash.
* The range analysis optimizer did not take into account
predicates for which an index could be used after reading
const tables. In some cases this resulted in non-optimal
execution plans. (Bug#19579:http://bugs.mysql.com/19579)
* Entries in the slow query log could have an incorrect
Rows_examined value. (Bug#12240:http://bugs.mysql.com/12240)
* Insufficient memory (myisam_sort_buffer_size) could cause a
server crash for several operations on MyISAM tables: repair
table, create index by sort, repair by sort, parallel repair,
bulk insert. (Bug#23175:http://bugs.mysql.com/23175)
* OPTIMIZE TABLE with myisam_repair_threads > 1 could result in
MyISAM table corruption.
* NDB Cluster: Restoring a cluster failed if there were any
tables with 128 or more columns.
* NDB Cluster: Cluster backups would fail when there were more
than 2048 schema objects in the cluster.
* NDB Cluster: The management client command ALL DUMP 1000 would
cause the cluster to crash if data nodes were connected to the
cluster but not yret fully started.
* NDB Cluster: INSERT … ON DUPLICATE KEY UPDATE on an NDB
table could lead to deadlocks and memory leaks.
* NDB Cluster: If a node restart could not be performed from the
REDO log, no node takeover took place. This could cause
partitions to be left empty during a system restart.
* NDB Cluster: Multiple node restarts in rapid succession could
cause a system restart to fail
(Bug#22892:http://bugs.mysql.com/22892), or induce a race
* NDB Cluster: Attempting to create a unique constraint with
USING HASH on an NDB table caused mysqld to crash.
* NDB Cluster: When inserting a row into an NDB table with a
duplicate value for a non-primary unique key, the error issued
would reference the wrong key.
* NDB Cluster (NDB API): When multiple processes or threads in
parallel performed the same ordered scan with exclusive lock
and updating the retrieved records, the scan could skip some
records, which were not updated as the result.
* NDB Cluster: Aborting a cluster backup too soon after starting
it caused a forced shutdown of the data nodes.