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.18-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.
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 personalized 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:
Security fix: Use of a view could allow a user to gain update privileges for tables in other databases. (Bug#27878)
NDB Cluster: Multiple operations involving
deletes followed by reads were not handled correctly. (Bug#28276)
This issue could also affect MySQL Cluster Replication.
NDB Cluster (Disk Data): Extremely large
inserts into Disk Data tables could lead to data node failure
in some circumstances. (Bug#27942)
NDB Cluster: Repeated insertion of data
generated by mysqldump into
NDB tables could eventually lead to failure
of the cluster. (Bug#27437)
NDB Cluster: Restarting a data node caused
SQL nodes to log repeatedly and unnecessarily the status of
the event buffer. (Bug#27292)
(This issue was known to occur in MySQL 5.1.16 and later only.)
NDB Cluster: ndb_mgmd
failed silently when the cluster configuration file contained
invalid [TCP] entries. (Bug#27207)
NDB Cluster:
ndb_connectstring did not appear in the
output of SHOW VARIABLES. (Bug#26675)
NDB Cluster (APIs): In a multi-operation
transaction, a delete operation followed by the insertion of
an implicit NULL failed to overwrite an
existing value. (Bug#20535)
The server could hang for INSERT IGNORE ... ON
DUPLICATE KEY UPDATE if an update failed. (Bug#28000)
Quoted labels in stored routines were mishandled, rendering the routines unusable. (Bug#21513)
Changes to some system variables should invalidate statements in the query cache, but invalidation did not happen. (Bug#27792)
Some ALTER TABLE statements that worked in
MySQL 5.0 did not work in 5.1. (Bug#28415)
Flow control optimization in stored routines could cause exception handlers to never return or execute incorrect logic. (Bug#26977)
An attempt to execute CREATE TABLE ...
SELECT when a temporary table with the same name
already existed led to the insertion of data into the
temporary table and creation of an empty non-temporary table.
(Bug#24508)
Concurrent execution of CREATE TABLE ...
SELECT and other statements involving the target
table suffered from various race conditions, some of which
might have led to deadlocks. (Bug#24738)
CREATE TABLE IF NOT EXISTS ... SELECT
caused a server crash if the target table already existed and
had a BEFORE INSERT trigger. (Bug#20903)
Deadlock occurred for attempts to execute CREATE
TABLE IF NOT EXISTS ... SELECT when LOCK
TABLES had been used to acquire a read lock on the
target table. (Bug#20662)
It was not possible to use the value
–9223372036854775808 (that is,
–MAXVALUE + 1) when specifying a
LIST partition. (Bug#28005)
Some InnoDB variables were missing from the
output of mysqld --verbose --help. (Bug#26987)
CAST() to DECIMAL did
not check for overflow. (Bug#27957)
Views ignored precision for CAST()
operations. (Bug#27921)
For InnoDB, in some rare cases the
optimizer preferred a more expensive ref
access to a less expensive range access. (Bug#28189)
A query with a NOT IN subquery predicate
could cause a crash when the left operand of the predicate
evaluated to NULL. (Bug#28375)
Comparisons of DATE or
DATETIME values for the
IN() function could yield incorrect
results. (Bug#28133)
LOAD DATA did not use
CURRENT_TIMESTAMP as the default value for
a TIMESTAMP column for which no value was
provided. (Bug#27670)
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 personalized 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:
Incompatible change: The
INFORMATION_SCHEMA.EVENTS and
mysql.event tables have been changed to
facilitate replication of events. When upgrading to MySQL
5.1.18, you must run mysql_upgrade prior to
working with events. Until you have done so, any statement
relating to the Event Scheduler or these tables (including
SHOW EVENTS) will fail with the errors
Expected field status at position 12 to have type
enum ('ENABLED','SLAVESIDE_DISABLED','DISABLED'), found
enum('ENABLED','DISABLED') and Table
mysql.event is damaged. Can not open.
These changes were made as part of fixes for the following bugs:
The effects of scheduled events were not replicated (that is, binary logging of scheduled events did not work). (Bug#16421, Bug#17857)
Effects of scheduled events on a replication master were both replicated and executed on the slave, causing double execution of events. (Bug#20384)
CREATE FUNCTION statements and their
effects were not replicated correctly. (Bug#17671)
For more information, see Section 6.3.1.4, “Replication of Invoked Features”.
The output of mysql --xml
and mysqldump --xml now
includes a valid XML namespace. (Bug#25946)
The mysql_create_system_tables script was removed because mysql_install_db no longer uses it in MySQL 5.1.
Renamed the old_mode system variable to
old.
If you use SSL for a client connection, you can tell the
client not to authenticate the server certificate by
specifying neither --ssl-ca nor
--ssl-capath. The server still verifies the
client according to any applicable requirements established
via GRANT statements for the client, and it
still uses any
--ssl-ca/--ssl-capath values
that were passed to server at startup time. (Bug#25309)
Added a MASTER_SSL_VERIFY_SERVER_CERT
option for the CHANGE MASTER statement, and
a Master_SSL_Verify_Server_Cert output
column to the SHOW SLAVE STATUS statement.
The option value also is written to the
master.info file. (Bug#19991)
NDB Cluster (APIs): The MGM API now
supports explicit setting of network timeouts using the
ndb_mgm_set_timeout() function. A utility
function
ndb_mgm_number_of_mgmd_in_connect_string()
is also implemented to facilitate calculation of timeouts
based on the number of management servers in the cluster.
For more information, see
ndb_mgm_set_timeout(), and
ndb_mgm_number_of_mgmd_in_connect_string().
NDB Cluster: The behavior of the
ndb_restore utility has been changed as
follows:
It is now possible to restore selected databases or tables using ndb_restore. (Bug#26899)
Several options have been added for use with
ndb_restore
--print_data to facilitate
the creation of structured data dump files. These
options can be used to make dumps made using
ndb_restore more like those produced
by mysqldump. (Bug#26900)
For details of these changes, see Section 15.9.3, “ndb_restore — Restore a Cluster Backup”.
NDB Cluster
(Replication)/Incompatible
Change: The definition of the
mysql.ndb_apply_status table has changed
such that an online upgrade is not possible from MySQL 5.1.17
or earlier for a replication slave cluster; you must shut down
all SQL nodes as part of the upgrade procedure. See
Section 15.6.2, “Cluster Upgrade and Downgrade Compatibility”
before upgrading for details.
For more information about the changes to
mysql.ndb_apply_status see
Section 15.11.4, “Cluster Replication Schema and Tables”.
NDB Cluster (Replication): Some circular
replication setups are now supported for MySQL Cluster. See
Section 15.11.3, “Known Issues in MySQL Cluster Replication”, for
detailed information. (Bug#25688, Bug#17095)
NDB Cluster: The following changes were
made for the ndb_size.pl utility:
Several additional data types are supported for columns in
INFORMATION_SCHEMA tables:
DATE, TIME,
BLOB, FLOAT, and all
integer types. (Bug#27047)
NDB Cluster: The internal specifications
for columns in NDB tables has changed to
allow compatibility with future MySQL Cluster releases that
are expected to implement online adding and dropping of
columns. This change is not backwards compatible with earlier
MySQL versions.
See the related note in Section 15.6.2, “Cluster Upgrade and Downgrade Compatibility”, for important information prior to upgrading a MySQL Cluster to MySQL 5.1.18 or later from MySQL 5.1.17 or earlier.
See also Bug#28205.
If a set function S with an outer
reference
cannot be aggregated in the outer query against which the
outer reference has been resolved, MySQL interprets
S(outer_ref)
the same way that it would interpret
S(outer_ref).
However, standard SQL requires throwing an error in this
situation. An error now is thrown for such queries if the
S(const)ANSI SQL mode is enabled. (Bug#27348)
Added --write-binlog option for
mysqlcheck. This option is enabled by
default, but can be given as
--skip-write-binlog to cause ANALYZE
TABLE, OPTIMIZE TABLE, and
REPAIR TABLE statements generated by
mysqlcheck not to be written to the binary
log. (Bug#26262)
The plugin interface and its handling of system variables was
changed. Command-line options such as
--skip-innodb now cause an error if
InnoDB is not built-in or plugin-loaded.
You should use --loose-skip-innodb if you do
not want any error even if InnoDB is not
available. The --loose prefix modifier should
be used for all command-line options where you are uncertain
whether the plugin exists and when you want the operation to
proceed even if the option is neccessarily ignored due to the
absence of the plugin. (For a desecription of how
--loose works, see
Section 4.3.1, “Using Options on the Command Line”.)
New command-line options: To alleviate ambiguities in variable
names, all variables related to plugins can be specified using
a plugin part in the name. For example,
every time where we used to have innodb in
the command-line options, you can now write
plugin-innodb:
--skip-plugin-innodb --plugin-innodb-buffer-pool-size=#
Furthermore, this is the preferred syntax. It helps to avoid
ambiguities when a plugin, say, wait, has
an option called timeout.
--wait-timeout will still set a system
variable, but --plugin-wait-timeout will set
the plugin variable. Also, there is a new command-line option
--plugin-load to install or load plugins at
initialization time without using the
mysql.plugin table.
Storage engine plugins may now be uninstalled at run time.
However, a plugin is not actually uninstalled until after its
reference count drops to zero. The
default_storage_engine system variable
consumes a reference count, so uninstalling will not complete
until said reference is removed.
Bugs fixed:
Security fix: If a stored
routine was declared using SQL SECURITY
INVOKER, a user who invoked the routine could gain
privileges. (Bug#27337)
Security fix: The requirement
of the DROP privilege for RENAME
TABLE was not being enforced. (Bug#27515)
Security fix: A user with
only the ALTER privilege on a partitioned
table could obtain information about the table that should
require the SELECT privilege. (Bug#23675)
ON DUPLICATE KEY UPDATE failed for a table
partitioned by KEY on a primary key
VARCHAR column. (Bug#27123)
NDB Cluster (Disk Data): It was possible to
drop the last remaining datafile in a tablespace (using an
ALTER TABLESPACE statement), even though
there was still an empty table using the tablespace. (Bug#21699)
It should be noted that the datafile could be not dropped if the table still contained any rows, so this bug involved no loss of data.
NDB Cluster: INSERT
IGNORE wrongly ignored NULL
values in unique indexes. (Bug#27980)
NDB Cluster: The name of the month
“March” was given incorrectly in the cluster
error log. (Bug#27926)
NDB Cluster (Cluster Replication / Disk
Data): An issue with replication of Disk Data tables could in
some cases lead to node failure. (Bug#28161)
NDB Cluster (APIs): For
BLOB reads on operations with lock mode
LM_CommittedRead, the lock mode was not
upgraded to LM_Read before the state of the
BLOB had already been calculated. The
NDB API methods affected by this problem
included the following:
NdbOperation::readTuple()
NdbScanOperation::readTuples()
NdbIndexScanOperation::readTuples()
NDB Cluster (Disk Data): Setting the value
of the UNDO BUFFER SIZE to 64K or less in a
CREATE LOGFILE GROUP statement led to
failure of cluster data nodes. (Bug#24560)
NDB Cluster: The cluster waited 30 seconds
instead of 30 milliseconds before reading table statistics.
(Bug#28093)
NDB Cluster: It was not possible to add a
unique index to an NDB table while in
single user mode. (Bug#27710)
NDB Cluster: Performing a delete followed
by an insert during a local checkpoint could cause a
Rowid already allocated error. (Bug#27205)
NDB Cluster (Disk Data): When restarting a
data node following the creation of a large number (~200) of
Disk Data objects, the cluster could not assign a node ID to
the restarting node. (Bug#25741)
NDB Cluster: Adding of indexes online
failed for NDB tables having
BLOB or TEXT columns.
(Bug#25431)
NDB Cluster: The
ndb_resize.pl utility did not calculate
memory usage for indexes correctly. (Bug#24229)
NDB Cluster: While a data node was stopped,
dropping a table then creating an index on a different table
caused that node to fail during restart. This was due to the
re-use of the dropped table's internal ID for the index
without verifying that the index now referred to a different
database object. (Bug#21755)
NDB Cluster (Disk Data): When in single
user mode, it was possible to create log file groups and
tablespaces from any SQL node connected to the cluster. (Bug#27712)
NDB Cluster (Disk Data): Changing a column
specification or issuing a TRUNCATE
statement on a Disk Data table caused the table to become an
in-memory table. (Bug#24667, Bug#25296)
This fix supersedes an incomplete fix that was made for this issue in MySQL 5.1.15.
NDB Cluster (Replication): Setting
SQL_LOG_BIN to zero did not disable binary
logging. (Bug#27076)
This issue affected only the NDB storage
engine.
NDB Cluster (Replication): It was possible
for API nodes to begin interacting with the cluster
subscription manager before they were fully connected to the
cluster. (Bug#27651)
NDB Cluster (Replication): Under very high
loads, checkpoints could be read or written with checkpoint
indexes out of order. (Bug#27651)
NDB Cluster: NDB tables
having MEDIUMINT AUTO_INCREMENT columns
were not restored correctly by ndb_restore,
causing spurious duplicate key errors. This issue did not
affect TINYINT, INT, or
BIGINT columns with
AUTO_INCREMENT. (Bug#27775)
NDB Cluster: NDB tables
with indexes whose names contained space characters were not
restored correctly by ndb_restore (the
index names were truncated). (Bug#27758)
NDB Cluster (Disk Data): Changes to a Disk
Data table made as part of a transaction could not be seen by
the client performing the changes until the transaction had
been committed. (Bug#27757)
NDB Cluster: An INSERT
followed a delete DELETE on the same
NDB table caused a memory leak. (Bug#27756)
(This bug was introduced by the fix for Bug#20612.)
NDB Cluster: Some queries that updated
multiple tables were not backed up or replicated correctly.
(Bug#27748)
NDB Cluster: Joins on multiple tables
containing BLOB columns could cause data
nodes run out of memory, and to crash with the error
NdbObjectIdMap::expand unable to
expand. (Bug#26176)
NDB Cluster: When trying to create an
NDB table after the server was started with
--ndbcluster but without
--ndb-connectstring,
mysqld produced a memory allocation error.
(Bug#27359)
NDB Cluster (APIs): Using
NdbBlob::writeData() to write data in the
middle of an existing blob value (that is, updating the value)
could overwrite some data past the end of the data to be
changed. (Bug#27018)
NDB Cluster (Replication): Trying to
replicate a large number of frequent updates with a relatively
small relay log (max-relay-log-size set to
1M or less) could cause the slave to crash. (Bug#27529)
NDB Cluster (Replication): An SQL node
acting as a replication master server could be a single point
of failure; that is, if it failed, the replication slave had
no way of knowing this, which could result in a mismatch of
data between the master and the slave. (Bug#21494)
NDB Cluster (Disk Data): CREATE
TABLE ... LIKE
created
an in-memory disk_data_tableNDB table. (Bug#25875)
NDB Cluster (Disk Data): Creating an
excessive number of data files for a single tablespace caused
data nodes to crash. (Bug#24521)
NDB Cluster: Under certain rare
circumstances, DROP TABLE or
TRUNCATE of an NDB table
could cause a node failure or forced cluster shutdown. (Bug#27581)
NDB Cluster: Memory usage of a
mysqld process grew even while idle. (Bug#27560)
NDB Cluster: Using more than 16GB for
DataMemory caused problems with
variable-size columns. (Bug#27512)
NDB Cluster: In an NDB
table having a TIMESTAMP column using
DEFAULT CURRENT_TIMESTAMP, that column
would assume a random value when another column in the same
row was updated. (Bug#27127)
NDB Cluster: Performing ALTER
TABLE ... ENGINE=MERGE on an NDB
table caused mysqld to crash. (Bug#26898)
NDB Cluster: The Cluster table handler did
not set bits in null bytes correctly. (Bug#26591)
NDB Cluster: In some cases, AFTER
UPDATE and AFTER DELETE triggers
on NDB tables that referenced subject table
did not see the results of operation which caused invocation
of the trigger, but rather saw the row as it was prior to the
update or delete operation.
This was most noticeable when an update operation used a
subquery to obtain the rows to be updated. An example would be
UPDATE tbl1 SET col2 = val1 WHERE tbl1.col1 IN
(SELECT col3 FROM tbl2 WHERE c4 = val2) where there
was an AFTER UPDATE trigger on table
tbl1. In such cases, the trigger would fail
to execute.
The problem occurred because the actual update or delete
operations were deferred to be able to perform them later as
one batch. The fix for this bug solves the problem by
disabling this optimization for a given update or delete if
the table has an AFTER trigger defined for
this operation. (Bug#26242)
NDB Cluster: START BACKUP
NOWAIT caused a spurious Out of backup
record error in the management client
(START BACKUP and START BACKUP
WAIT STARTED performed normally). (Bug#25446)
NDB Cluster: When trying to create tables
on an SQL node not connected to the cluster, a misleading
error message Table
'tbl_name' already
exists was generated. The error now generated is
Could not connect to storage engine.
(Bug#18676)
NDB Cluster: A data node failing while
another data node was restarting could leave the cluster in an
inconsistent state. In certain rare cases, this could lead to
a race condition and the eventual forced shutdown of the
cluster. (Bug#27466)
NDB Cluster: When using the
MemReportFrequency configuration parameter
to generate periodic reports of memory usage in the cluster
log, DataMemory usage was not always
reported for all data nodes. (Bug#27444)
NDB Cluster: Error messages displayed when
running in single user mode were inconsistent. (Bug#27021)
NDB Cluster: On Solaris, the value of an
NDB table column declared as
BIT(33) was always displayed as
0. (Bug#26986)
NDB Cluster (Replication): An
UPDATE on the master became a
DELETE on slaves. (Bug#27378)
The fix for Bug#17212 provided correct sort order for misordered output of certain queries, but caused significant overall query performance degradation. (Results were correct (good), but returned much more slowly (bad).) The fix also affected performance of queries for which results were correct. The performance degradation has been addressed. (Bug#27531)
On Windows, connection handlers did not properly decrement the server's thread count when exiting. (Bug#25621)
SELECT COUNT(*) from a table containing a
DATETIME NOT NULL column could produce
spurious warnings with the NO_ZERO_DATE SQL
mode enabled. (Bug#22824)
Nested aggregate functions could be improperly evaluated. (Bug#27363)
Using CAST() to convert
DATETIME values to numeric values did not
work. (Bug#23656)
Early NULL-filtering optimization did not
work for eq_ref table access. (Bug#27939)
Non-grouped columns were allowed by * in
ONLY_FULL_GROUP_BY SQL mode. (Bug#27874)
Debug builds on Windows generated false alarms about uninitialized variables with some Visual Studio runtime libraries. (Bug#27811)
An error message suggested the use of mysql_fix_privilege_tables after an upgrade, but the recommended program is now mysql_upgrade. (Bug#27818)
mysqld did not check the length of option values and could crash with a buffer overflow for long values. (Bug#27715)
Index hints (USE INDEX, IGNORE
INDEX, FORCE INDEX) cannot be
used with FULLTEXT indexes, but were not
being ignored. (Bug#25951)
mysql_upgrade did not detect failure of external commands that it runs. (Bug#26639)
mysql_upgrade did not pass a password to mysqlcheck if one was given. (Bug#25452)
On Windows, mysql_upgrade was sensitive to lettercase of the names of some required components. (Bug#25405)
The result set of a query that used WITH
ROLLUP and DISTINCT could lack
some rollup rows (rows with NULL values for
grouping attributes) if the GROUP BY list
contained constant expressions. (Bug#24856)
Some upgrade problems are detected and better error messages suggesting that mysql_upgrade be run are produced. (Bug#24248)
A performance degradation was observed for outer join queries to which a not-exists optimization was applied. (Bug#28188)
The LEAST() and
GREATEST() functions compared
DATE and DATETIME values
as strings, which in some cases could lead to an incorrect
result. (Bug#27759)
SELECT * INTO OUTFILE ... FROM
INFORMATION_SCHEMA.schemata failed with an
Access denied error, even for a user who
has the FILE privilege. (Bug#28181)
Certain queries that used uncorrelated scalar subqueries
caused EXPLAIN to to crash. (Bug#27807)
INSERT...ON DUPLICATE KEY UPDATE could
cause Error 1032: Can't find record in ...
for inserts into an InnoDB table unique
index using key column prefixes with an underlying
utf8 string column. (Bug#13191)
On Linux, the server could not create temporary tables if
lower_case_table_names was set to 1 and the
value of tmpdir was a directory name
containing any uppercase letters. (Bug#27653)
A slave that used --master-ssl-cipher could
not connect to the master. (Bug#21611)
mysqldump crashed if it got no data from
SHOW CREATE PROCEDURE (for example, when
trying to dump a routine defined by a different user and for
which the current user had no privileges). Now it prints a
comment to indicate the problem. It also returns an error, or
continues if the --force option is given.
(Bug#27293)
Several math functions produced incorrect results for large
unsigned values. ROUND() produced incorrect
results or a crash for a large number-of-decimals argument.
(Bug#24912)
For storage engines that allow the current auto-increment
value to be set, using ALTER TABLE ...
ENGINE to convert a table from one such storage
engine to another caused loss of the current value. (For
storage engines that do not support setting the value, it
cannot be retained anyway when changing the storage engine.)
(Bug#25262)
Comparison of a DATE with a
DATETIME did not treat the
DATE as having a time part of
00:00:00. (Bug#27590)
A multiple-table UPDATE could return an
incorrect rows-matched value if, during insertion of rows into
a temporary table, the table had to be converted from a
MEMORY table to a MyISAM
table. (Bug#22364)
The omission of leading zeros in dates could lead to erroneous results when these were compared with the output of certain date and time functions. (Bug#16377)
If CREATE TABLE t1 LIKE t2 failed due to a
full disk, an empty t2.frm file could be
created but not removed. This file then caused subsequent
attempts to create a table named t2 to
fail. This is easily corrected at the filesystem level by
removing the t2.frm file manually, but
now the server removes the file if the create operation does
not complete successfully. (Bug#25761)
The MERGE storage engine could return
incorrect results when several index values that compare
equality were present in an index (for example,
'gross' and
'gross ', which are considered equal
but have different lengths). (Bug#24342)
For InnoDB tables, a multiple-row
INSERT of the form INSERT INTO t
(id...) VALUES (NULL...) ON DUPLICATE KEY UPDATE
id=VALUES(id), where id is an
AUTO_INCREMENT column, could cause
ERROR 1062 (23000): Duplicate entry...
errors or lost rows. (Bug#27650)
mysql_install_db is supposed to detect existing system tables and create only those that do not exist. Instead, it was exiting with an error if tables already existed. (Bug#27783)
Failure to allocate memory associated with
transaction_prealloc_size could cause a
server crash. (Bug#27322)
Aborting a statement on the master that applied to a non-transactional statement broke replication. The statement was written to the binary log but not completely executed on the master. Slaves receiving the statement executed it completely, resulting in loss of data synchrony. Now an error code is written to the error log so that the slaves stop without executing the aborted statement. (That is, replication stops, but synchrony to the point of the stop is preserved and you can investigate the problem.) (Bug#26551)
The AUTO_INCREMENT value would not be
correctly reported for InnoDB tables when using SHOW
CREATE TABLE statement or
mysqldump command. (Bug#23313)
Creating a temporary table with InnoDB when using the
one-file-per-table setting, when the host filesystem for
temporary tables is tmpfs would cause an
assertion in mysqld. This was due to the
use of O_DIRECT when opening the temporary
table file. (Bug#26662)
An interaction between SHOW TABLE STATUS
and other concurrent statements that modify the table could
result in a divide-by-zero error and a server crash. (Bug#27516)
The decimal.h header file was incorrectly
omitted from binary distributions. (Bug#27456)
mysqldump could not connect using SSL. (Bug#27669)
yaSSL crashed on pre-Pentium Intel CPUs. (Bug#21765)
The test for the
MYSQL_OPT_SSL_VERIFY_SERVER_CERT option for
mysql_options() was performed incorrectly.
Also changed as a result of this bugfix: The
arg option for the
mysql_options() C API function was changed
from char * to void *.
(Bug#24121)
Comparisons using row constructors could fail for rows
containing NULL values. (Bug#27704)
Performing a UNION on two views that had
had ORDER BY clauses resulted in an
Unknown column error. (Bug#27786)
The CRC32() function returns an unsigned
integer, but the metadata was signed, which could cause
certain queries to return incorrect results. (For example,
queries that selected a CRC32() value and
used that value in the GROUP BY clause.)
(Bug#27530)
A race condition between DROP TABLE and
SHOW TABLE STATUS could cause the latter to
display incorrect information. (Bug#27499)
mysqldump would not dump a view for which
the DEFINER no longer exists. (Bug#26817)
Changing a utf8 column in an
InnoDB table to a shorter length did not
shorten the data values. (Bug#20095)
The server did not shut down cleanly. (Bug#27310)
Using SET GLOBAL to change the
lc_time_names system variable had no effect
on new connections. (Bug#22648)
The XML output representing an empty result was an empty
string rather than an empty
<resultset/> element. (Bug#27608)
The range optimizer could consume a combinatorial amount of
memory for certain classes of WHERE
clauses. (Bug#26624)
mysqlbinlog produced different output with
the -R option than without it. (Bug#27171)
A stored function invocation in the WHERE
clause was treated as a constant. (Bug#27354)
mysqldump could not dump the log tables. (Bug#26121)
Implicit conversion of 9912101 to
DATE did not match CAST(9912101 AS
DATE). (Bug#23093)
CURDATE() is less than
NOW(), either when comparing
CURDATE() directly (CURDATE() <
NOW() is true) or when casting
CURDATE() to DATE
(CAST(CURDATE() AS DATE) < NOW() is
true). However, storing CURDATE() in a
DATE column and comparing
incorrectly yielded false. This is fixed by
comparing a col_name <
NOW()DATE column as
DATETIME for comparisons to a
DATETIME constant. (Bug#21103)
For dates with 4-digit year parts less than 200, an incorrect
implicit conversion to add a century was applied for date
arithmetic performed with DATE_ADD(),
DATE_SUB(), + INTERVAL,
and - INTERVAL. (For example,
DATE_ADD('0050-01-01 00:00:00', INTERVAL 0
SECOND) became '2050-01-01
00:00:00'.) (Bug#18997)
Some equi-joins containing a WHERE clause
that included a NOT IN subquery caused a
server crash. (Bug#27870)
A memory leak in the event scheduler that was uncovered by Valgrind was fixed. (Bug#27733)
For queries that used ORDER BY with
InnoDB tables, if the optimizer chose an
index for accessing the table but found a covering index that
enabled the ORDER BY to be skipped, no
results were returned. (Bug#24778)
Group relay log rotation updated only the log position and not the name, causing the slave to stop. (Bug#27583)
Conversion of DATETIME values in numeric
contexts sometimes did not produce a double
(YYYYMMDDHHMMSS.uuuuuu) value. (Bug#16546)
Passing nested row expressions with different structures to an
IN predicate caused a server crash. (Bug#27484)
SELECT DISTINCT could return incorrect
results if the select list contained duplicated columns. (Bug#27659)
A subquery could get incorrect values for references to outer query columns when it contained aggregate functions that were aggregated in outer context. (Bug#27321)
In some cases, the optimizer preferred a range or full index scan access method over lookup access methods when the latter were much cheaper. (Bug#19372)
Duplicates were not properly identified among (potentially)
long strings used as arguments for
GROUP_CONCAT(DISTINCT). (Bug#26815)
For InnoDB, fixed consistent-read behavior
of the first read statement, if the read was served from the
query cache, for the READ COMMITTED
isolation level. (Bug#21409)
The binary log incompatiblity introduced by the fix for Bug#22583 was corrected. (Bug#27779)
Row-based replication of MyISAM to
non-MyISAM tables did not work correctly
for BIT columns. This has been corrected,
but the fix introduces an incompatibility into the binary log
format. (Bug#22583) (The incompatibility is corrected by the
fix for Bug#27779.)
Duplicate members in SET definitions were
not detected. Now they result in a warning; if strict SQL mode
is enabled, an error occurs instead. (Bug#27069)
If the name of a table given to myisamchk
-rq was a packed table and the name included the
.MYI extension,
myisamchk incorrectly created a file with a
.MYI.MYI extension. (Bug#26782)
For INSERT INTO ... SELECT where index
searches used column prefixes, insert errors could occur when
key value type conversion was done. (Bug#26207)
For SHOW ENGINE INNODB STATUS, the
LATEST DEADLOCK INFORMATION was not always
cleared properly. (Bug#25494)
On Windows, if the server was installed as a service, it did not auto-detect the location of the data directory. (Bug#20376)
The FEDERATED engine did not allow the
local and remote tables to have different names. (Bug#26257)
The NO_DIR_IN_CREATE server SQL mode was
not enforced for partitioned tables. (Bug#24633)
On Windows, trying to use backslash (\)
characters in paths for DATA DIRECTORY and
INDEX DIRECTORY when creating partitioned
tables caused MySQL to crash. (Bug#25141, Bug#26074)
(You must use / characters when specifying
paths for these options, regardless of platform. See
Section 16.1, “Overview of Partitioning in MySQL”, for an example using
absolute paths for DATA DIRECTORY and
INDEX DIRECTORY when creating a partitioned
table on Windows.)
A damaged or missing mysql.event table
caused SHOW VARIABLES to fail. (Bug#23631)
Database and table names have a maximum length of 64 characters (even if they contain multi-byte characters), but were being truncated to 64 bytes. (Bug#21432)
If a rotate event occured in the middle of a non-transaction
group, the group position would be updated by the rotate event
indicating an illegal group start position that was
effectively inside a group. This can happen if, for example, a
rotate occurs between an Intvar event and
the associated Query event, or between the
table map events and the rows events when using row-based
replication. (Bug#23171)
mysqldump could crash or exhibit incorrect
behavior when some options were given very long values, such
as --fields-terminated-by=". The code has been cleaned up
to remove a number of fixed-sized buffers and to be more
careful about error conditions in memory allocation. (Bug#26346)
some very long
string"
Setting a column to NOT NULL with an
ON DELETE SET NULL clause foreign key
crashes the server. (Bug#25927)
The values displayed for the
Innodb_row_lock_time,
Innodb_row_lock_time_avg, and
Innodb_row_lock_time_max status variables
were incorrect. (Bug#23666)
COUNT(
sometimes generated a spurious truncation warning. (Bug#21976)
decimal_expr)
With NO_AUTO_VALUE_ON_ZERO SQL mode
enabled, LOAD DATA operations could assign
incorrect AUTO_INCREMENT values. (Bug#27586)
Incorrect results could be returned for some queries that
contained a select list expression with IN
or BETWEEN together with an ORDER
BY or GROUP BY on the same
expression using NOT IN or NOT
BETWEEN. (Bug#27532)
For the INFORMATION_SCHEMA
SESSION_STATUS and
GLOBAL_STATUS tables, some status values
were incorrectly converted to the data type of the
VARIABLE_VALUE column. (Bug#27327)
Queries containing subqueries with COUNT(*)
aggregated in an outer context returned incorrect results.
This happened only if the subquery did not contain any
references to outer columns. (Bug#27257)
Use of an aggregate function from an outer context as an
argument to GROUP_CONCAT() caused a server
crash. (Bug#27229)
Restoration of the default database after stored routine or trigger execution on a slave could cause replication to stop if the database no longer existed. (Bug#25082)
String truncation upon insertion into an integer or year column did not generate a warning (or an error in strict mode). (Bug#26359, Bug#27176)
In out-of-memory conditions, the server might crash or otherwise not report an error to the Windows event log. (Bug#27490)
The temporary file-creation code was cleaned up on Windows to improve server stability. (Bug#26233)
Out-of-memory errors were not reported. Now they are written to the error log. (Bug#26844)
mysqldump crashed for
MERGE tables if the
--complete-insert (-c)
option was given. (Bug#25993)
Corrupted MyISAM tables that have different
definitions in the .frm and
.MYI tables might cause a server crash.
(Bug#25908)
In certain situations, MATCH ... AGAINST
returned false hits for NULL values
produced by LEFT JOIN when no full-text
index was available. (Bug#25729)
OPTIMIZE TABLE might fail on Windows when
it attempts to rename a temporary file to the original name if
the original file had been opened, resulting in loss of the
.MYD file. (Bug#25521)
GRANT statements were not replicated if the
server was started with the
--replicate-ignore-table or
--replicate-wild-ignore-table option. (Bug#25482)
MBROverlaps() returned incorrect values in
some cases. (Bug#24563)
A problem in handling of aggregate functions in subqueries caused predicates containing aggregate functions to be ignored during query execution. (Bug#24484)
Improved out-of-memory detection when sending logs from a master server to slaves, and log a message when allocation fails. (Bug#26837)
MBRDisjoint(),
MBRequal(),
MBRIntersects(),
MBROverlaps(),
MBRTouches(), and
MBRWithin() were inadvertently omitted from
recent versions of MySQL (5.1.14 to 5.1.17). (Bug#24563)
SHOW CREATE VIEW qualified references to
stored functions in the view definition with the function's
database name, even when the database was the default
database. This affected mysqldump (which
uses SHOW CREATE VIEW to dump views)
because the resulting dump file could not be used to reload
the database into a different database. SHOW CREATE
VIEW now suppresses the database name for references
to functions in the default database. (Bug#23491)
When MySQL logged slow query information to a
CSV table, it used an incorrect formula to
calculate the query_time and
lock_time values. (Bug#27638)
With innodb_file_per_table enabled,
attempting to rename an InnoDB table to a
non-existent database caused the server to exit. (Bug#27381)
mysql_install_db could terminate with an error after failing to determine that a system table already existed. (Bug#27022)
For InnoDB tables having a clustered index
that began with a CHAR or
VARCHAR column, deleting a record and then
inserting another before the deleted record was purged could
result in table corruption. (Bug#26835)
make_win_bin_dist neglected to copy some
required MyISAM table files. (Bug#26922)
Fixed a possible buffer overflow in SHOW PROCEDURE
CODE. (Bug#26303)
Selecting the result of AVG() within a
UNION could produce incorrect values. (Bug#24791)
Access via my_pread() or
my_pwrite() to table files larger than 2GB
could fail on some systems. (Bug#24566)
An INTO OUTFILE clause is allowed only for
the final SELECT of a
UNION, but this restriction was not being
enforced correctly. (Bug#23345)
Duplicate entries were not assessed correctly in a
MEMORY table with a
BTREE primary key on a
utf8 ENUM column. (Bug#24985)
For MyISAM tables,
COUNT(*) could return an incorrect value if
the WHERE clause compared an indexed
TEXT column to the empty string
(''). This happened if the column contained
empty strings and also strings starting with control
characters such as tab or newline. (Bug#26231)
For DELETE FROM (with no
tbl_name ORDER BY
col_nameWHERE or LIMIT clause),
the server did not check whether
col_name was a valid column in the
table. (Bug#26186)
ALTER VIEW requires the CREATE
VIEW and DROP privileges for the
view. However, if the view was created by another user, the
server erroneously required the SUPER
privilege. (Bug#26813)
mysqlbinlog --base64-output produced invalid SQL. (Bug#26194)
In a view, a column that was defined using a
GEOMETRY function was treated as having the
LONGBLOB data type rather than the
GEOMETRY type. (Bug#27300)
Some views could not be created even when the user had the requisite privileges. (Bug#24040)
With the NO_AUTO_VALUE_ON_ZERO SQL mode
enabled, LAST_INSERT_ID() could return 0
after INSERT ... ON DUPLICATE KEY UPDATE.
Additionally, the next rows inserted (by the same
INSERT, or the following
INSERT with or without ON
DUPLICATE KEY UPDATE), would insert 0 for the
auto-generated value if the value for the
AUTO_INCREMENT column was
NULL or missing. (Bug#23233)
Executing an INSERT ... SELECT ... FROM
INFORMATION_SCHEMA.GLOBAL_STATUS statement from
within an event caused a server crash. (Bug#26174)
Having the EXECUTE privilege for a routine
in a database should make it possible to
USE that database, but the server returned
an error instead. This has been corrected. As a result of the
change, SHOW TABLES for a database in which
you have only the EXECUTE privilege returns
an empty set rather than an error. (Bug#9504)
When RAND() was called multiple times inside a stored procedure, the server did not write the correct random seed values to the binary log, resulting in incorrect replication. (Bug#25543)
SOUNDEX() returned an invalid string for
international characters in multi-byte character sets. (Bug#22638)
Row equalities in WHERE clauses could cause
memory corruption. (Bug#27154)
GROUP BY on a ucs2
column caused a server crash when there was at least one empty
string in the column. (Bug#27079)
Evaluation of an IN() predicate containing
a decimal-valued argument caused a server crash. (Bug#27362)
Storing NULL values in spatial fields
caused excessive memory allocation and crashes on some
systems. (Bug#27164)
mysql_stmt_fetch() did an invalid memory
deallocation when used with the embedded server. (Bug#25492)
For FEDERATED tables, SHOW CREATE
TABLE could fail when the table name was longer than
the connection name. (Bug#27036)
In a MEMORY table, using a
BTREE index to scan for updatable rows
could lead to an infinite loop. (Bug#26996)
The range optimizer could cause the server to run out of memory. (Bug#26625)
CREATE SERVER, DROP
SERVER, and ALTER SERVER did not
require any privileges. Now these statements require the
SUPER privilege. (Bug#25671)
Concurrent CREATE SERVER and ALTER
SERVER statements could cause a deadlock. (Bug#25721)
Difficult repair or optimization operations could cause an assertion failure, resulting in a server crash. (Bug#25289)
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 personalized 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:
Incompatible change:
Scheduled events now use the MySQL server time zone to
determine their schedules, rather than UTC as in previous
releases. Because of this change, scheduled event metadata now
includes time zone information, which can be seen in the
TIME_ZONE column of the
INFORMATION_SCHEMA.EVENTS table and the
Time zone column in the output of the
SHOW EVENTS statement. These columns have
been added in this release, along with a
time_zone column in the
mysql.event table. Due to these changes,
events created in previous versions of MySQL cannot be
created, viewed, or used until mysql.event
has been upgraded. (Bug#16420)
Important change: The
CREATE EVENT and ALTER
EVENT statements now support a
DEFINER clause, similar to that used in the
CREATE TRIGGER statement. (Bug#16425)
See Section 20.2.2, “CREATE EVENT Syntax”, for detailed information.
Important change: The following options for controlling replication master configuration on a slave are now deprecated.
--master-host
--master-user
--master-password
--master-port
--master-connect-retry
--master-ssl
--master-ssl-ca
--master-ssl-capath
--master-ssl-cert
--master-ssl-cipher
--master-ssl-key
To change the master configuration on a slave you should use
the CHANGE MASTER statement. (See also
#21490)
Statements that affect mysql database
tables now are written to the binary log using the following
rules:
Data manipulation statements such as
INSERT that change data in
mysql database tables directly are
logged according to the settings of the
binlog_format system variable.
Statements such as GRANT that change
the mysql database indirectly are
logged as statements regardless of the value of
binlog_format.
For more details, see
Section 6.1.2.4, “Logging Format for Changes to mysql Database Tables”. (Bug#25091)
Prepared statements now use the query cache under the conditions described in Section 5.13.1, “How the Query Cache Operates”. (Bug#735)
Added the --secure-file-priv option for
mysql-test-run.pl, which limits the effect
of the load_file command for
mysqltest and for the LOAD
DATA and SELECT ... INTO OUTFILE
statements to work with files in a given directory. (Bug#18628)
Added the innodb_stats_on_metadata system
variable to enable control over whether
InnoDB performs statistics gathering when
metadata statements are executed. See
Section 14.5.4, “InnoDB Startup Options and System Variables”. (Bug#26598)
Added the hostname system variable, which
the server sets at startup to the server hostname.
The syntax for index hints has been extended to enable more fine-grained control over the optimizer's selection of an execution plan for various phases of query processing. See Section 13.2.7.2, “Index Hint Syntax”. (Bug#21174)
Added the old_mode system variable to cause
the server to revert to certain behaviors present in older
versions. Currently, this variable affects handling of index
hints. See Section 13.2.7.2, “Index Hint Syntax”.
NDB Cluster: Added the
--skip-table-check option (short form
-s) for ndb_restore, which
causes the restoration process to ignore any changes that may
have occurred in table schemas after the backup was made.
Previously, this was the default behavior. (Bug#24363)
See Section 15.9.3, “ndb_restore — Restore a Cluster Backup”, for more information.
The server now includes a timestamp in error messages that are
logged as a result of unhandled signals (such as
mysqld got signal 11 messages). (Bug#24878)
Prefix lengths for columns in SPATIAL
indexes no longer can be specified. For tables created in
older versions of MySQL that have SPATIAL
indexes containing prefixed columns, dumping and reloading the
table causes the indexes to be created with no prefixes. (The
full column width of each column is indexed.) (Bug#26794)
Added a --no-beep option to
mysqladmin. It suppresses the warning beep
that is emitted by default for errors such as a failure to
connect to the server. (Bug#26964)
Bugs fixed:
Incompatible change:
INSERT DELAYED statements are not supported
for MERGE tables, but the
MERGE storage engine was not rejecting such
statements, resulting in table corruption. Applications
previously using INSERT DELAYED into
MERGE table will break when upgrading to
versions with this fix. To avoid the problem, remove
DELAYED from such statements. (Bug#26464)
Creating a table on one SQL node while in single user mode caused other SQL nodes to crash. (Bug#26997)
NDB Cluster: The output from
ndb_restore --print_data
was incorrect for a backup made of a database containing
tables with TINYINT or
SMALLINT columns. (Bug#26740)
NDB Cluster: After putting the cluster in
single user mode from one MySQL server, trying to drop an NDB
table from a second MySQL server also connected to the cluster
would cause the second MySQL server to hang. (Bug#27254)
NDB Cluster (Cluster APIs): You can now use
the ndb_mgm_check_connection() function to
determine whether a management server is running. See
ndb_mgm_check_connection().
NDB Cluster: mysqld
could crash shortly after a data node failure following
certain DML operations. (Bug#27169)
NDB Cluster: The management client command
displayed the message node_id STATUSNode
when node_id: not connectednode_id was not the node ID of
a data node. (Bug#21715)
The ALL STATUS command in the cluster
management client still displays status information for data
nodes only. This is by design. See
Section 15.8.2, “Commands in the MySQL Cluster Management Client”, for
more information.
NDB Cluster (Cluster APIs):
NAND and NOR operations
with NdbScanFilter did not perform
correctly. (Bug#24568)
NDB Cluster (Cluster Replication): The
simultaneous failure of a data node and an SQL node could
cause replication to fail. (Bug#27005)
NDB Cluster (Disk Data): Under some
circumstances, a data node could fail during restart while
flushing Disk Data UNDO logs. (Bug#27102)
NDB Cluster (Disk Data): Creating multiple
Disk Data tables using different tablespaces could sometimes
cause the cluster to fail. (Bug#25992)
NDB Cluster (Disk Data): ALTER
TABLE ... ADD COLUMN ... on a Disk Data table moved
data for existing non-indexed columns from the tablespace into
memory. (Bug#25880)
NDB Cluster (Disk Data): DROP
INDEX on a Disk Data table did not always move data
from memory into the tablespace. (Bug#25877)
NDB Cluster (Disk Data): When creating a
log file group, setting INITIAL_SIZE to
less than UNDO_BUFFER_SIZE caused data
nodes to crash. (Bug#25743)
NDB Cluster: It was not possible to set
LockPagesInMainMemory equal to
0. (Bug#27291)
NDB Cluster: A race condition could
sometimes occur if the node acting as master failed while node
IDs were still being allocated during startup. (Bug#27286)
NDB Cluster: When a data node was taking
over as the master node, a race condition could sometimes
occur as the node was assuming responsibility for handling of
global checkpoints. (Bug#27283)
NDB Cluster: A delete operation using a
scan following by an insert using a scan could cause a data
node to fail. (Bug#27203)
NDB Cluster: The same failed request from
an API node could be handled by the cluster multiple times,
resulting in reduced performance. (Bug#27087)
NDB Cluster: The failure of a data node
while restarting could cause other data nodes to hang or
crash. (Bug#27003)
NDB Cluster: mysqld
processes would sometimes crash under high load. (Bug#26825)
NDB Cluster: When performing an upgrade or
downgrade, no specific error information was made available
when trying to upgrade data nodes or SQL nodes before
upgrading management nodes. (Bug#21296)
NDB Cluster: Some values of
MaxNoOfTables caused the error
Job buffer congestion to occur. (Bug#19378)
NDB Cluster: An invalid pointer was
returned following a FSCLOSECONF signal
when accessing the REDO logs during a node restart or system
restart. (Bug#26515)