Functionality added or changed:
Important Change: MySQL Cluster: Packaging:
Beginning with this release, MySQL 5.1 binaries are no longer
built with support for the NDBCLUSTER storage
engine, and the NDBCLUSTER code included in
5.1 mainline sources is no longer guaranteed to be maintained or
supported. Those using MySQL Cluster in MySQL 5.1.23 and earlier
MySQL 5.1 mainline releases should upgrade to MySQL Cluster 5.1 Carrier Grade Edition
6.2.15 when this becomes available. Sources for MySQL Cluster 5.1 Carrier Grade Edition
are available under GPL, and both commercial and GPL binaries
for supported platforms are expected for MySQL Cluster 5.1 Carrier Grade Edition 6.2.15
and later MySQL Cluster 5.1 Carrier Grade Edition releases.
For more information about MySQL Cluster 5.1 Carrier Grade Edition, see Section 18.2, “MySQL Cluster 5.1 Carrier Grade Edition”. (Bug#36193)
Cluster API: Important Change:
Because NDB_LE_MemoryUsage.page_size_kb shows
memory page sizes in bytes rather than kilobytes, it has been
renamed to page_size_bytes. The name
page_size_kb is now deprecated and thus
subject to removal in a future release, although it currently
remains supported for reasons of backward compatibility. See
The Ndb_logevent_type Type, for more information about
NDB_LE_MemoryUsage.
(Bug#30271)
Important Change:
The FEDERATED storage engine is not included
in binary distributions of MySQL 5.1.24. (It will be included
again in 5.1.25.)
Replication:
Introduced the slave_exec_mode system
variable to control whether idempotent or strict mode is used
for replication conflict resolution. Idempotent mode suppresses
duplicate-key, no-key-found, and some other errors, and is
needed for circular replication, multi-master replication, and
some other complex replication setups when using MySQL Cluster.
Strict mode is the default.
(Bug#31609)
Replication:
When running the server with
--binlog-format=MIXED or
--binlog-format=STATEMENT, a query that
referred to a system variable used the slave's value when
replayed on the slave. This meant that, if the value of a system
variable was inserted into a table, the slave differed from the
master. Now, statements that refer to a system variable are
marked as “unsafe”, which means that:
When the server is using
--binlog-format=MIXED, the row-based
format is used automatically to replicate these
statements.
When the server is using
--binlog-format=STATEMENT, these
statements produce a warning.
See also Bug#34732
The ndbd and ndb_mgmd manpages have been reclassified from volume 1 to volume 8. (Bug#34642)
The PROCESS privilege now is required to
start or stop the InnoDB monitor tables (see
linkend="innodb-monitor"/>). Previously, no privilege was
required.
(Bug#34053)
For binary .tar.gz packages,
mysqld and other binaries now are compiled
with debugging symbols included to enable easier use with a
debugger.
(Bug#33252)
Formerly, when the MySQL server crashed, the generated stack dump was numeric and required external tools to properly resolve the names of functions. This is not very helpful to users having a limited knowledge of debugging techniques. In addition, the generated stack trace contained only the names of functions and was formatted differently for each platform due to different stack layouts.
Now it is possible to take advantage of newer versions of the GNU C Library provide a set of functions to obtain and manipulate stack traces from within the program. On systems that use the ELF binary format, the stack trace contains important information such as the shared object where the call was generated, an offset into the function, and the actual return address. Having the function name also makes possible the name demangling of C++ functions.
The library generates meaningful stack traces on the following platforms: i386, x86_64, PowerPC, IA64, Alpha, and S390. On other platforms, a numeric stack trace is still produced, and the use of the resolve_stack_dump utility is still required. (Bug#31891)
mysqltest now has mkdir
and rmdir commands for creating and removing
directories.
(Bug#31004)
The server uses less memory when loading privileges containing table grants. (Patch provided by Google.) (Bug#25175)
Added the Uptime_since_flush_status status
variable, which indicates the number of seconds since the most
recent FLUSH STATUS statement. (From Jeremy
Cole)
(Bug#24822)
SHOW OPEN TABLES now supports
FROM and LIKE clauses.
(Bug#12183)
The new read-only global system variables
report_host,
report_password,
report_port, and
report_user system variables provide runtime
access to the values of the corresponding
--report-host,
--report-password,
--report-port, and
--report-user options.
Formerly it was possible to specify an
innodb_flush_method value of
fdatasync to obtain the default flush
behavior of using fdatasync() for flushing.
This is no longer possible because it can be confusing that a
value of fdatasync causes use of
fsync() rather than
fdatasync().
The use on InnoDB hash indexes now can be controlled by setting
the new innodb_adaptive_hash_index system
variable at server startup. By default, this variable is
enabled. See Section 13.5.13.3, “Adaptive Hash Indexes”.
Bugs fixed:
Important Change: Security Fix:
It was possible to circumvent privileges through the creation of
MyISAM tables employing the DATA
DIRECTORY and INDEX DIRECTORY
options to overwrite existing table files in the MySQL data
directory. Use of the MySQL data directory in DATA
DIRECTORY and INDEX DIRECTORY is
now disallowed. This is now also true of these options when used
with partitioned tables and individual partitions of such
tables.
(Bug#32167)
Security Fix:
A client that connects to a malicious server could be tricked by
the server into sending files from the client host to the
server. This occurs because the
libmysqlclient client library would respond
to a FETCH LOCAL FILE request from the server
even if the request is sent for statements from the client other
than LOAD DATA LOCAL INFILE. The client
library has been modified to respond to a FETCH LOCAL
FILE request from the server only if is is sent in
response to a LOAD DATA LOCAL INFILE
statement from the client.
The client library now also checks whether
CLIENT_LOCAL_FILE is set and refuses to send
a local file if not.
Binary distributions ship with the
local-infile capability enabled.
Applications that do not use this functionality should disable
it to be safe.
Important Change: Security Enhancement:
On Windows Vista and Windows Server 2008, a user without
administrative privileges does not have write permissions to the
Program Files directory where MySQL and the
associated data files are normally installed. Using data files
located in the standard Program Files
installation directory could therefore cause MySQL to fail, or
lead to potential security issues in an installed instance.
To address the problem, on Windows XP, Windows Vista and Windows
Server 2008, the datafiles and data file configuration are now
set to the Microsoft recommended AppData
folder. The AppData folder is typically
located within the user's home directory.
When upgrading an existing 5.1.23 or 6.0.4 installation of
MySQL you must take a backup of your data and configuration
file (my.ini before installing the new
version. To migrate your data, either extract the data and
re-import (using mysqldump, then upgrade
and re-import using mysql), or back up your
data, upgrade to the new version, and copy your existing data
files from your old datadir directory to
the new directory located within AppData.
Failure to back up your data and follow these procedures may lead to data loss.
Partitioning: Incompatible Change: The following statements did not function correctly with corrupted or crashed tables and have been removed:
ALTER TABLE ... ANALYZE PARTITION
ALTER TABLE ... CHECK PARTITION
ALTER TABLE ... OPTIMIZE PARTITION
ALTER TABLE ... REPAIR PARTITION
ALTER TABLE ... REBUILD PARTITION is
unaffected by this change and continues to be available. This
statement and ALTER TABLE ... REORGANIZE
PARTITION may be used to analyze and optimize
partitioned tables, since these operations cause the partition
files to be rebuilt. In addition, it remains possible to use
mysqlcheck on partitioned tables and
myisamchk on partitioned
MyISAM tables.
(Bug#20129)
Incompatible Change:
In MySQL 5.1.23, the last_errno and
last_error members of the
NET structure in
mysql_com.h were renamed to
client_last_errno and
client_last_error. This was found to cause
problems for connectors that use the internal
NET structure for error handling. The change
has been reverted.
(Bug#34655)
See also Bug#12713
Incompatible Change:
For packages that are built within their own prefix (for
example, /usr/local/mysql) the plugin
directory will be lib/plugin. For packages
that are built to be installed into a system-wide prefix (such
as RPM packages with a prefix of /usr), the
plugin directory will be lib/mysql/plugin
to ensure a clean /usr/lib hierarchy. In
both cases, the $pkglibdir configuration
setting is used at build time to set the plugin directory.
The current plugin directory location is available as the value
of the plugin_dir system variable as before,
but the mysql_config script now has a
--plugindir option that can be used externally
to the server by third-party plugin writers to obtain the
default plugin directory pathname and configure their
installation directory appropriately.
(Bug#31736)
Important Change: Replication:
When the master crashed during an update on a transactional
table while in AUTOCOMMIT mode, the slave
failed. This fix causes every transaction (including
AUTOCOMMIT transactions) to be recorded in
the binlog as starting with a BEGIN and
ending with a COMMIT or
ROLLBACK.
(Bug#26395)
Disk Data: Important Change:
It is no longer possible on 32-bit systems to issue statements
appearing to create Disk Data log files or data files greater
than 4 GB in size. (Trying to create log files or data files
larger than 4 GB on 32-bit systems led to unrecoverable data
node failures; such statements now fail with
NDB error 1515.)
(Bug#29186)
Important Change:
It was possible to use FRAC_SECOND as a
synonym for MICROSECOND with
DATE_ADD(),
DATE_SUB(), and
INTERVAL; now, using
FRAC_SECOND with anything other than
TIMESTAMPADD() or
TIMESTAMPDIFF() produces a
syntax error.
It is now possible (and preferable) to use
MICROSECOND with
TIMESTAMPADD() and
TIMESTAMPDIFF(), and
FRAC_SECOND is now deprecated.
(Bug#33834)
Important Change:
InnoDB free space information is now shown in
the Data_free column of SHOW TABLE
STATUS and in the DATA_FREE column
of the INFORMATION_SCHEMA.TABLES table.
(Bug#32440)
This regression was introduced by Bug#11379
Important Change:
The server handled truncation of values having excess trailing
spaces into CHAR, VARCHAR,
and TEXT columns in different ways. This
behavior has now been made consistent for columns of all three
of these types, and now follows the existing behavior of
VARCHAR columns in this regard; that is, a
Note is always issued whenever such
truncation occurs.
This change does not affect columns of these three types when
using a binary encoding; BLOB columns are
also unaffected by the change, since they always use a binary
encoding.
(Bug#30059)
Important Change:
An AFTER UPDATE trigger was not invoked when
the UPDATE did not make any changes to the
table for which the trigger was defined. Now AFTER
UPDATE triggers behave the same in this regard as do
BEFORE UPDATE triggers, which are invoked
whether the UPDATE makes any changes in the
table or not.
(Bug#23771)
Replication: Important Note: Network timeouts between the master and the slave could result in corruption of the relay log. This fix rectifies a long-standing replication issue when using unreliable networks, including replication over wide area networks such as the Internet. If you experience reliability issues and see many You have an error in your SQL syntax errors on replication slaves, we strongly recommend that you upgrade to a MySQL version which includes this fix. (Bug#26489)
Partitioning: MySQL Cluster:
When partition pruning on an NDB table
resulted in an ordered index scan spanning only one partition,
any descending flag for the scan was wrongly discarded, causing
ORDER BY DESC to be treated as ORDER
BY ASC, MAX() to be handled
incorrectly, and similar problems.
(Bug#33061)
MySQL Cluster:
Upgrades of a cluster using while a
DataMemory setting in excess of 16 GB caused
data nodes to fail.
(Bug#34378)
MySQL Cluster:
Performing many SQL statements on NDB tables
while in AUTOCOMMIT mode caused a memory leak
in mysqld.
(Bug#34275)
MySQL Cluster: In certain rare circumstances, a race condition could occur between an aborted insert and a delete leading a data node crash. (Bug#34260)
MySQL Cluster: Multi-table updates using ordered indexes during handling of node failures could cause other data nodes to fail. (Bug#34216)
MySQL Cluster:
When configured with NDB support, MySQL
failed to compile using gcc 4.3 on 64bit
FreeBSD systems.
(Bug#34169)
MySQL Cluster: The failure of a DDL statement could sometimes lead to node failures when attempting to execute subsequent DDL statements. (Bug#34160)
MySQL Cluster:
Extremely long SELECT statements (where the
text of the statement was in excess of 50000 characters) against
NDB tables returned empty results.
(Bug#34107)
MySQL Cluster:
When configured with NDB support, MySQL
failed to compile on 64bit FreeBSD systems.
(Bug#34046)
See also Bug#32175
MySQL Cluster:
High numbers of insert operations, delete operations, or both
could cause NDB error 899 (Rowid
already allocated) to occur unnecessarily.
(Bug#34033)
MySQL Cluster:
A periodic failure to flush the send buffer by the
NDB TCP transporter could cause a unnecessary
delay of 10 ms between operations.
(Bug#34005)
MySQL Cluster: A race condition could occur (very rarely) when the release of a GCI was followed by a data node failure. (Bug#33793)
MySQL Cluster: Some tuple scans caused the wrong memory page to be accessed, leading to invalid results. This issue could affect both in-memory and Disk Data tables. (Bug#33739)
MySQL Cluster:
Statements executing multiple inserts performed poorly on
NDB tables having
AUTO_INCREMENT columns.
(Bug#33534)
MySQL Cluster:
When all data and SQL nodes in the cluster were shut down
abnormally (that is, other than by using STOP
in the cluster management client), ndb_mgm
used excessive amounts of CPU.
(Bug#33237)
MySQL Cluster: The ndb_waiter utility polled ndb_mgmd excessively when obtaining the status of cluster data nodes. (Bug#32025)
See also Bug#32023
MySQL Cluster: Transaction atomicity was sometimes not preserved between reads and inserts under high loads. (Bug#31477)
MySQL Cluster:
Numerous NDBCLUSTER test failures occurred in
builds compiled using icc on IA64 platforms.
(Bug#31239)
MySQL Cluster:
The server failed to reject properly the creation of an
NDB table having an unindexed
AUTO_INCREMENT column.
(Bug#30417)
MySQL Cluster: Having tables with a great many columns could cause Cluster backups to fail. (Bug#30172)
MySQL Cluster:
Issuing an INSERT ... ON DUPLICATE KEY UPDATE
concurrently with or following a TRUNCATE
statement on an NDB table failed with
NDB error 4350 Transaction already
aborted.
(Bug#29851)
MySQL Cluster: The Cluster backup process could not detect when there was no more disk space and instead continued to run until killed manually. Now the backup fails with an appropriate error when disk space is exhausted. (Bug#28647)
MySQL Cluster:
It was possible in config.ini to define
cluster nodes having node IDs greater than the maximum allowed
value.
(Bug#28298)
MySQL Cluster:
CREATE TABLE and ALTER
TABLE statements using ENGINE=NDB
or ENGINE=NDBCLUSTER caused
mysqld to fail on Solaris 10 for x86
platforms.
(Bug#19911)
Partitioning:
In some cases, matching rows from a partitioned
MyISAM using a BIT column
as the primary key were not found by queries.
(Bug#34358)
Partitioning:
Enabling innodb_file_per_table produced
problems with partitioning and tablespace operations on
partitioned InnoDB tables, in some cases
leading to corrupt partitions or causing the server to crash.
(Bug#33429)
Partitioning:
A table defined using PARTITION BY KEY and
having a BIT column referenced in the
partitioning key did not behave correctly; some rows could be
inserted into the wrong partition, causing wrong results to be
returned from queries.
(Bug#33379)
Partitioning:
When ALTER TABLE DROP PARTITION was executed
on a table on which there was a trigger, the statement failed
with an error. This occurred even if the trigger did not
reference any tables.
(Bug#32943)
Partitioning:
Currently, all partitions of a partitioned table must use the
same storage engine. One may optinally specify the storage
engine on a per-partition basis; however, where this is the
done, the storage engine must be the same as used by the table
as a whole. ALTER TABLE did not enforce these
rules correctly, the result being that incaccurate error
messages were shown when trying to use the statement to change
the storage engine used by an individual partition or
partitions.
(Bug#31931)
Partitioning: Using the DATA DIRECTORY and INDEX DIRECTORY options for partitions with CREATE TABLE or ALTER TABLE statements appeared to work on Windows, although they are not supported by MySQL on Windows systems, and subsequent attempts to use the tables referenced caused errors. Now these options are disabled on Windows, and attempting to use them generates a warning. (Bug#30459)
Replication:
The failure of a CREATE TABLE ... ENGINE=InnoDB ...
SELECT statement caused the slave to lose data.
(Bug#35762)
Replication:
INSERT_ID was not written to the binary log
for inserts into BLACKHOLE tables.
(Bug#35178)
Replication:
When using statement-based replication and a
DELETE, UPDATE, or
INSERT ... SELECT statement using a
LIMIT clause is encountered, a warning that
the statement is not safe to replicate in statement mode is now
issued; when using MIXED mode, the statement
is now replicated using the row-based format.
(Bug#34768)
Replication:
mysqlbinlog did not output the values of
auto_increment_increment and
auto_increment_offset when both were equal to
their default values (for both of these variables, the default
is 1). This meant that a binary log recorded by a client using
the defaults for both variables and then replayed on another
client using its own values for either or both of these
variables produced erroneous results.
(Bug#34732)
See also Bug#31168
Replication:
When the Windows version of mysqlbinlog read
4.1 binlogs containing LOAD DATA INFILE
statements, it output backslashes as path separators, causing
problems for client programs expecting forward slashes. In such
cases, it now converts \\ to
/ in directory paths.
(Bug#34355)
Replication:
SHOW SLAVE STATUS failed when slave I/O was
about to terminate.
(Bug#34305)
Replication: The character sets and collations used for constant identifiers in stored procedures were not replicated correctly. (Bug#34289)
Replication:
mysqlbinlog from a 5.1 or later MySQL
distribution could not read binary logs generated by a 4.1
server when the logs contained LOAD DATA
INFILE statements.
(Bug#34141)
This regression was introduced by Bug#32407
Replication:
A CREATE USER, DROP USER,
or RENAME USER statement that fails on the
master, or that is a duplicate of any of these statements, is no
longer written to the binlog; previously, either of these
occurrences could cause the slave to fail.
See also Bug#29749
Replication:
SHOW BINLOG EVENTS could fail when the binlog
contained one or more events whose size was close to the value
of max_allowed_packet.
(Bug#33413)
Replication:
An extraneous ROLLBACK statement was written
to the binary log by a connection that did not use any
transactional tables.
(Bug#33329)
Replication: mysqlbinlog failed to release all of its memory after terminating abnormally. (Bug#33247)
Replication:
When a stored routine or trigger, running on a master that used
MySQL 5.0 or MySQL 5.1.11 or earlier, performed an insert on an
AUTO_INCREMENT column, the
INSERT_ID value was not replicated correctly
to a slave running MySQL 5.1.12 or later (including any MySQL
6.0 release).
(Bug#33029)
See also Bug#19630
Replication: The error message generated due to lack of a default value for an extra column was not sufficiently informative. (Bug#32971)
Replication:
When a user variable was used inside an
INSERT statement, the corresponding binlog
event was not written to the binlog correctly.
(Bug#32580)
Replication: When using row-based replication, deletes from a table with a foreign key constraint failed on the slave. (Bug#32468)
Replication:
The --base64-output option for
mysqlbinlog was not honored for all types of
events. This interfered in some cases with performing
point-in-time recovery.
(Bug#32407)
Replication:
SQL statements containing comments using --
syntax were not replayable by mysqlbinlog,
even though such statements replicated correctly.
(Bug#32205)
Replication: When using row-based replication from a master running MySQL 5.1.21 or earlier to a slave running 5.1.22 or later, updates of integer columns failed on the slave with Error in Unknown event: row application failed. (Bug#31583)
This regression was introduced by Bug#21842
Replication: Replicating write, update, or delete events from a master running MySQL 5.1.15 or earlier to a slave running 5.1.16 or later caused the slave to crash. (Bug#31581)
Replication: When using row-based replication, the slave stopped when attempting to delete non-existent rows from a slave table without a primary key. In addition, no error was reported when this occurred. (Bug#31552)
Replication:
Errors due to server ID conflicts were reported only in the
slave's error log; now these errors are also shown in the
Server_IO_State column in the output of
SHOW SLAVE STATUS.
(Bug#31316)
Replication:
STOP SLAVE did not stop connection attempts
properly. If the IO slave thread was attempting to connect,
STOP SLAVE waited for the attempt to finish,
sometimes for a long period of time, rather than stopping the
slave immediately.
(Bug#31024)
See also Bug#30932
Replication:
Issuing a DROP VIEW statement caused
replication to fail if the view did not actually exist.
(Bug#30998)
Replication: The effects of scheduled events were not always correctly reproduced on the slave when using row-based replication. (Bug#29020)
Replication:
Setting server_id did not update its value
for the current session.
(Bug#28908)
Replication: Slaves running MySQL 5.1.18 and later could not read binary logs from older versions of the server. (Bug#27779, Bug#32434)
This regression was introduced by Bug#22583
Replication:
MASTER_POS_WAIT() did not return
NULL when the server was not a slave.
(Bug#26622)
Replication:
The inspecific error message Wrong parameters to
function register_slave resulted when START
SLAVE failed to register on the master due to excess
length of any the slave server options
--report-host, --report-user,
or --report-password. An error message specific
to each of these options is now returned in such cases. The new
error messages are:
Failed to register slave: too long 'report-host'
Failed to register slave: too long 'report-user'
Failed to register slave; too long 'report-password'
See also Bug#19328
Replication:
START SLAVE UNTIL
MASTER_LOG_POS=
issued on a slave that was using
position--log-slave-updates and that was involved in
circular replication would cause the slave to run and stop one
event later than that specified by the value of
position.
(Bug#13861)
Replication:
PURGE BINARY LOGS TO and PURGE
BINARY LOGS BEFORE did not handle missing binary log
files correctly or in the same way. Now for both of these
statements, if any files listed in the
.index file are missing from the
filesystem, the statement fails with an error.
Cluster Replication: Disk Data:
Statements violating unique keys on Disk Data tables (such as
attempting to insert NULL into a NOT
NULL column) could cause data nodes to fail. When the
statement was executed from the binlog, this could also result
in failure of the slave cluster.
(Bug#34118)
Disk Data: Updating in-memory columns of one or more rows of Disk Data table, followed by deletion of these rows and re-insertion of them, caused data node failures. (Bug#33619)
Cluster Replication:
Setting --replicate-ignore-db=mysql caused the
mysql.ndb_apply_status table not to be
replicated, breaking Cluster Replication.
(Bug#28170)
Cluster API:
When reading a BIT(64) value using
NdbOperation:getValue(), 12 bytes were
written to the buffer rather than the expected 8 bytes.
(Bug#33750)
Manually replacing a binary log file with a directory having the same name caused an error that was not handled correctly. (Bug#35675)
Using LOAD DATA INFILE with a view could
crash the server.
(Bug#35469)
Selecting from
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
could cause a server crash.
(Bug#35406)
See also Bug#35108
For a TERMPORARY table,
DELETE with no WHERE
clause could fail when preceded by DELETE
statements with a WHERE clause.
(Bug#35392)
If the server crashed with an InnoDB error
due to unavailability of undo slots, errors could persist during
rollback when the server was restarted: There are two
UNDO slot caches (for
INSERT and UPDATE). If all
slots end up in one of the slot caches, a request for a slot
from the other slot cache would fail. This can happen if the
request is for an UPDATE slot and all slots
are in the INSERT slot cache, or vice versa.
(Bug#35352)
In some cases, when too many clients tried to connect to the
server, the proper SQLSTATE code was not
returned.
(Bug#35289)
Memory-allocation failures for attempts to set
key_buffer_size to large values could result
in a server crash.
(Bug#35272)
In some cases, mysqld would crash during
replication startup because InnoDB tried to
parse a NULL query and failed.
(Bug#35226)
For InnoDB tables, ALTER TABLE
DROP failed if the name of the column to be dropped
began with “foreign”.
(Bug#35220)
Queries could return different results depending on whether
ORDER BY columns were indexed.
(Bug#35206)
When a view containing a reference to DUAL
was created, the reference was removed when the definition was
stored, causing some queries against the view to fail with
invalid SQL syntax errors.
(Bug#35193)
SELECT ... FROM
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS caused the
server to crash if the table referenced by a foreign key had
been dropped. This issue was observed on Windows platforms only.
(Bug#35108)
See also Bug#35406
Non-connection threads were being counted in the value of the
Max_used_connections status variable.
(Bug#35074)
A query that performed a ref_or_null join
where the second table used a key having one or columns that
could be NULL and had a column value that was
NULL caused the server to crash.
(Bug#34945)
This regression was introduced by Bug#12144
For some queries, the optimizer used an ordered index scan for
GROUP BY or DISTINCT when
it was supposed to use a loose index scan, leading to incorrect
results.
(Bug#34928)
Creating a foreign key on an InnoDB table
that was created with an explicit
AUTO_INCREMENT value caused that value to be
reset to 1.
(Bug#34920)
mysqldump failed to return an error code when
using the --master-data option without binary
logging being enabled on the server.
(Bug#34909)
Under some circumstances, the value of
mysql_insert_id() following a
SELECT ... INSERT statement could return an
incorrect value. This could happen when the last SELECT
... INSERT did not involve an
AUTO_INCREMENT column, but the value of
mysql_insert_id() was changed
by some previous statements.
(Bug#34889)
Table and database names were mixed up in some places of the subquery transformation procedure. This could affect debugging trace output and further extensions of that procedure. (Bug#34830)
If fsync() returned
ENOLCK, InnoDB could treat
this as fatal and cause abnormal server termination.
InnoDB now retries the operation.
(Bug#34823)
CREATE SERVER and ALTER
SERVER could crash the server if out-of-memory
conditions occurred.
(Bug#34790)
DROP SERVER does not release memory cached
for server structures created by CREATE
SERVER, so repeated iterations of these statements
resulted in a memory leak. FLUSH PRIVILEGES
now releases the memory allocated for CREATE
SERVER.
(Bug#34789)
A malformed URL used for a FEDERATED
table's CONNECTION option value in a
CREATE TABLE statement was not handled
correctly and could crash the server.
(Bug#34788)
Queries such as SELECT ROW(1, 2) IN (SELECT t1.a, 2)
FROM t1 GROUP BY t1.a (combining row constructors and
subqueries in the FROM clause) could lead to
assertion failure or unexpected error messages.
(Bug#34763)
Using NAME_CONST() with a negative number and
an aggregate function caused MySQL to crash. This could also
have a negative impact on replication.
(Bug#34749)
A memory-handling error associated with use of
GROUP_CONCAT() in subqueries
could result in a server crash.
(Bug#34747)
For an indexed integer column
col_name and a value
N that is one greater than the
maximum value allowed for the data type of
col_name, conditions of the form
WHERE failed to return rows
where the value of col_name <
Ncol_name is
.
(Bug#34731)N - 1
A server running with the --debug option could
attempt to dereference a null pointer when opening tables,
resulting in a crash.
(Bug#34726)
Assigning an “incremental” value to the
debug system variable did not add the new
value to the current value. For example, if the current
debug value was 'T', the
statement SET debug = '+P' resulted in a
value of 'P' rather than the correct value of
'P:T'.
(Bug#34678)
For debug builds, reading from
INFORMATION_SCHEMA.TABLES or
INFORMATION_SCHEMA.COLUMNS could cause
assertion failures. This could happen under rare circumstances
when INFORMATION_SCHEMA fails to get
information about a table (for example, when a connection is
killed).
(Bug#34656)
Executing a TRUNCATE statement on a table
having both a foreign key reference and a
DELETE trigger crashed the server.
(Bug#34643)
Some subqueries using an expression that included an aggregate function could fail or in some cases lead to a crash of the server. (Bug#34620)
Dangerous pointer arithmetic crashed the server on some systems. (Bug#34598)
Creating a view inside a stored procedure could lead to a crash of the MySQL Server. (Bug#34587)
CAST(AVG( produced incorrect results for
non-arg) AS
DECIMAL)DECIMAL arguments.
(Bug#34512)
The per-thread debugging settings stack was not being deallocated before thread termination, resulting in a stack memory leak. (Bug#34424)
Executing an ALTER VIEW statement on a table
crashed the server.
(Bug#34337)
InnoDB could crash if overflow occurred for
an AUTO_INCREMENT column.
(Bug#34335)
For InnoDB, exporting and importing a table
could corrupt TINYBLOB columns, and a
subsequent ALTER TABLE could corrupt
TINYTEXT columns as well.
(Bug#34300)
DEFAULT 0 was not allowed for the
YEAR data type.
(Bug#34274)
Under some conditions, a SET GLOBAL
innodb_commit_concurrency or SET GLOBAL
innodb_autoextend_increment statement could fail.
(Bug#34223)
mysqldump attempts to set the
character_set_results system variable after
connecting to the server. This failed for pre-4.1 servers that
have no such variable, but mysqldump did not
account for this and 1) failed to dump database contents; 2)
failed to produce any error message alerting the user to the
problem.
(Bug#34192)
Use of stored functions in the WHERE clause
for SHOW OPEN TABLES caused a server crash.
(Bug#34166)
For a FEDERATED table with an index on a
nullable column, accessing the table could crash a server,
return an incorrect result set, or return ERROR 1030
(HY000): Got error 1430 from storage engine.
(Bug#33946)
Passing anything other than a integer to a
LIMIT clause in a prepared statement would
fail. (This limitation was introduced to avoid replication
problems; for example, replicating the statement with a string
argument would cause a parse failure in the slave). Now,
arguments to the LIMIT clause are converted
to integer values, and these converted values are used when
logging the statement.
(Bug#33851)
An internal buffer in mysql was too short. Overextending it could cause stack problems or segmentation violations on some architectures. (This is not a problem that could be exploited to run arbitrary code.) (Bug#33841)
A query using WHERE
(column1=', where
string1' AND
column2=constant1) OR
(column1='string2' AND
column2=constant2)col1 used a binary collation and
string1 matched
string2 except for case, failed to
match any records even when matches were found by a query using
the equivalent clause WHERE
column2=.
(Bug#33833)constant1 OR
column2=constant2
Large unsigned integers were improperly handled for prepared statements, resulting in truncation or conversion to negative numbers. (Bug#33798)
Reuse of prepared statements could cause a memory leak in the embedded server. (Bug#33796)
The server crashed when executing a query that had a subquery
containing an equality X=Y where Y referred to a named select
list expression from the parent select. The server crashed when
trying to use the X=Y equality for ref-based
access.
(Bug#33794)
Some queries using a combination of IN,
CONCAT(), and an implicit type
conversion could return an incorrect result.
(Bug#33764)
In some cases a query that produced a result set when using
ORDER BY ASC did not return any results when
this was changed to ORDER BY DESC.
(Bug#33758)
Disabling concurrent inserts caused some cacheable queries not to be saved in the query cache. (Bug#33756)
The UPDATE statement allowed NULL to be
assigned to NOT NULL columns (the default
data type value was assigned). An error occurs now.
(Bug#33699)
ORDER BY ... DESC sorts could produce
misordered results.
(Bug#33697)
The server could crash when REPEAT or another
control instruction was used in conjunction with labels and a
LEAVE instruction.
(Bug#33618)
The parser allowed control structures in compound statements to have mismatched beginning and ending labels. (Bug#33618)
make_binary_distribution passed the
--print-libgcc-file option to the C compiler,
but this does not work with the ICC compiler.
(Bug#33536)
Threads created by the event scheduler were incorrectly counted
against the max_connections thread limit,
which could lead to client lockout.
(Bug#33507)
Dropping a function after dropping the function's creator could cause the server to crash. (Bug#33464)
Certain combinations of views, subselects with outer references and stored routines or triggers could cause the server to crash. (Bug#33389)
SET GLOBAL myisam_max_sort_file_size=DEFAULT
set myisam_max_sort_file_size to an incorrect
value.
(Bug#33382)
See also Bug#31177
ENUM- or SET-valued plugin
variables could not be set from the command line.
(Bug#33358)
For InnoDB tables, there was a race condition
involving the data dictionary and repartitioning.
(Bug#33349)
Loading plugins via command-line options to mysqld could cause an assertion failure. (Bug#33345)
SLEEP(0) failed to return on
64-bit Mac OS X due to a bug in
pthread_cond_timedwait().
(Bug#33304)
Using Control-R in the mysql client caused it to crash. (Bug#33288)
For MyISAM tables, CHECK
TABLE (non-QUICK) and any form of
REPAIR TABLE incorrected treated rows as
corrupted under the combination of the following conditions:
The table had dynamic row format
The table had a CHAR (not
VARCHAR) column longer than 127 bytes
(for multi-byte character sets this could be less than 127
characters)
The table had rows with a signifcant length of more than 127
bytes significant length in that CHAR
column (that is, a byte beyond byte position 127 must be a
non-space character)
This problem affected CHECK TABLE,
REPAIR TABLE, OPTIMIZE
TABLE, ALTER TABLE. CHECK
TABLE reported and marked the table as crashed if any
row was present that fulfilled the third condition. The other
statements deleted these rows.
(Bug#33222)
Granting the UPDATE privilege on one column
of a view caused the server to crash.
(Bug#33201)
For DECIMAL columns used with the
ROUND(
or
X,D)TRUNCATE(
function with a non-constant value of
X,D)D, adding an ORDER
BY for the function result produced misordered output.
(Bug#33143)
The CSV engine did not honor update requests
for BLOB columns when the new column value
had the same length as the value to be updated.
(Bug#33067)
After receiving a SIGHUP signal, the server
could crash, and user-specified log options were ignored when
reopening the logs.
(Bug#33065)
When MySQL was built with OpenSSL, the SSL library was not properly initialized with information of which endpoint it was (server or client), causing connection failures. (Bug#33050)
Under some circumstances a combination of aggregate functions
and GROUP BY in a SELECT
query over a view could lead to incorrect calculation of the
result type of the aggregate function. This in turn could lead
to incorrect results, or to crashes on debug builds of the
server.
(Bug#33049)
For DISTINCT queries, 4.0 and 4.1 stopped
reading joined tables as soon as the first matching row was
found. However, this optimzation was lost in MySQL 5.0, which
instead read all matching rows. This fix for this regression may
result in a major improvement in performance for
DISTINCT queries in cases where many rows
match.
(Bug#32942)
Repeated creation and deletion of views within prepared statements could eventually crash the server. (Bug#32890)
See also Bug#34587
Incorrect assertions could cause a server crash for
DELETE triggers for transactional tables.
(Bug#32790)
In some cases where setting a system variable failed, no error was sent to the client, causing the client to hang. (Bug#32757)
Enabling the PAD_CHAR_TO_FULL_LENGTH SQL mode
caused privilege-loading operations (such as FLUSH
PRIVILEGES) to include trailing spaces from grant
table values stored in CHAR columns.
Authentication for incoming connections failed as a result. Now
privilege loading does not include trailing spaces, regardless
of SQL mode.
(Bug#32753)
The SHOW ENGINE INNODB STATUS and
SHOW ENGINE INNODB MUTEX statements
incorrectly required the SUPER privilege
rather than the PROCESS privilege.
(Bug#32710)
Inserting strings with a common prefix into a table that used
the ucs2 character set corrupted the table.
(Bug#32705)
Tables in the mysql database that stored the
current sql_mode value as part of stored
program definitions were not updated with newer mode values
(NO_ENGINE_SUBSTITUTION,
PAD_CHAR_TO_FULL_LENGTH). This causes various
problems defining stored programs if those modes were included
in the current sql_mode value.
(Bug#32633)
A view created with a string literal for one of the columns picked up the connection character set, but not the collation. Comparison to that field therefore used the default collation for that character set, causing an error if the connection collation was not compatible with the default collation. The problem was caused by text literals in a view being dumped with a character set introducer even when this was not necessary, sometimes leading to a loss of collation information. Now the character set introducer is dumped only if it was included in the original query. (Bug#32538)
See also Bug#21505
Queries using LIKE on tables having indexed
CHAR columns using either of the
eucjpms or ujis character
sets did not return correct results.
(Bug#32510)
Executing a prepared statement associated with a materialized cursor sent to the client a metadata packet with incorrect table and database names. The problem occurred because the server sent the the name of the temporary table used by the cursor instead of the table name of the original table.
The same problem occured when selecting from a view, in which case the name of the table name was sent, rather than the name of the view. (Bug#32265)
InnoDB adaptive hash latches could be held
too long, resulting in a server crash. This fix may also provide
significant performance improvements on systems on which many
queries using filesorts with temporary tables are being
performed.
(Bug#32149)
On Windows, mysqltest_embedded.exe did not
properly execute the send command.
(Bug#32044)
A variable named read_only could be declared
even though that is a reserved word.
(Bug#31947)
On Windows, the build process failed with four parallel build threads. (Bug#31929)
Queries testing numeric constants containing leading zeroes
against ZEROFILL columns were not evaluated
correctly.
(Bug#31887)
If an error occurred during file creation, the server sometimes did not remove the file, resulting in an unused file in the filesystem. (Bug#31781)
The mysqld crash handler failed on Windows. (Bug#31745)
The server returned the error message Out of memory; restart server and try again when the actual problem was that the sort buffer was too small. Now an appropriate error message is returned in such cases. (Bug#31590)
A table having an index that included a BLOB
or TEXT column, and that was originally
created with a MySQL server using version 4.1 or earlier, could
not be opened by a 5.1 or later server.
(Bug#31331)
The -, *, and
/ operators and the functions
POW() and
EXP() could misbehave when used
with floating-point numbers. Previously they might return
+INF, -INF, or
NaN in cases of numeric overflow (including
that caused by division by zero) or when invalid arguments were
used. Now NULL is returned in all such cases.
(Bug#31236)
The mysql_change_user() C API
function caused global
Com_ status
variable values to be incorrect.
(Bug#31222)xxx
When sorting privilege table rows, the server treated escaped
wildcard characters (\% and
\_) the same as unescaped wildcard characters
(% and _), resulting in
incorrect row ordering.
(Bug#31194)
On WIndows, SHOW PROCESSLIST could display
process entries with a State value of
*** DEAD ***.
(Bug#30960)
ROUND(
or
X,D)TRUNCATE(
for non-constant values of X,D)D could
crash the server if these functions were used in an
ORDER BY that was resolved using
filesort.
(Bug#30889)
Resetting the query cache by issuing a SET GLOBAL
query_cache_size=0 statement caused the server to
crash if it concurrently was saving a new result set to the
query cache.
(Bug#30887)
Manifest problems prevented MySQLInstanceConfig.exe from running on Windows Vista. (Bug#30823)
If an alias was used to refer to the value returned by a stored function within a subselect, the outer select recognized the alias but failed to retrieve the value assigned to it in the subselect. (Bug#30787)
Binary logging for a stored procedure differed depending on whether or not execution occurred in a prepared statement. (Bug#30604)
Replication of LOAD DATA INFILE could fail
when read_buffer_size was larger than
max_allowed_packet.
(Bug#30435)
An orphaned PID file from a no-longer-running process could cause mysql.server to wait for that process to exit even though it does not exist. (Bug#30378)
The Table_locks_waited waited variable was
not incremented in the cases that a lock had to be waited for
but the waiting thread was killed or the request was aborted.
(Bug#30331)
The Com_create_function status variable was
not incremented properly.
(Bug#30252)
View metadata returned from
INFORMATION_SCHEMA.VIEWS was changed by the
fix for Bug#11986, causing the information returned in MySQL 5.1
to differ from that returned in 5.0.
(Bug#30217)
mysqld displayed the
--enable-pstack option in its help message even
if MySQL was configured without --with-pstack.
(Bug#29836)
The mysql_config command would output
CFLAGS values that were incompatible with C++
for the HP-UX platform.
(Bug#29645)
Replication crashed with the NDB storage
engine when mysqld was started with
--character-set-server=ucs2.
(Bug#29562)
Views were treated as insertable even if some base table columns with no default value were omitted from the view definition. (This is contrary to the condition for insertability that a view must contain all columns in the base table that do not have a default value.) (Bug#29477)
myisamchk always reported the character set
for a table as latin1_swedish_ci (8)
regardless of the table' actual character set.
(Bug#29182)
InnoDB could return an incorrect rows-updated
value for UPDATE statements.
(Bug#29157)
The MySQL preferences pane did not work to start or stop MySQL on Mac OS X 10.5 (Leopard). (Bug#28854)
For upgrading to a new major version using RPM packages (such as 4.1 to 5.0), if the installation procedure found an existing MySQL server running, it could fail to shut down the old server, but also erroneously removed the server's socket file. Now the procedure checks for an existing server package from a different vendor or major MySQL version. In such case, it refuses to install the server and recommends how to safely remove the old packages before installing the new ones. (Bug#28555)
mysqlhotcopy silently skipped databases with names consisting of two alphanumeric characters. (Bug#28460)
No information was written to the general query log for the
COM_STMT_CLOSE,
COM_STMT_RESET, and
COM_STMT_SEND_LONG_DATA commands. (These
occur when a client invokes the
mysql_stmt_close(),
mysql_stmt_reset() and
mysql_stmt_send_long_data() C
API functions.)
(Bug#28386)
Previously, the parser accepted the ODBC { OJ ... LEFT
OUTER JOIN ...} syntax for writing left outer joins.
The parser now allows { OJ ... } to be used
to write other types of joins, such as INNER
JOIN or RIGHT OUTER JOIN. This
helps with compatibility with some third-party applications, but
is not official ODBC syntax.
(Bug#28317)
The FEDERATED storage engine did not perform
identifier quoting for column names that are reserved words when
sending statements to the remote server.
(Bug#28269)
The SQL parser did not accept an empty
UNION=() clause. This meant that, when there
were no underlying tables specified for a
MERGE table, SHOW CREATE
TABLE and mysqldump both output
statements that could not be executed.
Now it is possible to execute a CREATE TABLE
or ALTER TABLE statement with an empty
UNION=() clause. However, SHOW
CREATE TABLE and mysqldump do not
output the UNION=() clause if there are no
underlying tables specified for a MERGE
table. This also means it is now possible to remove the
underlying tables for a MERGE table using
ALTER TABLE ... UNION=().
(Bug#28248)
The utf8_general_ci collation incorrectly did
not sort "U+00DF SHARP S" equal to 's'.
(Bug#27877)
It was possible to exhaust memory by repeatedly running
index_merge queries and never performing any
FLUSH TABLES statements.
(Bug#27732)
When utf8 was set as the connection character
set, using SPACE() with a
non-Unicode column produced an error.
(Bug#27580)
See also Bug#23637
The parser rules for the SHOW PROFILE
statement were revised to work with older versions of
bison.
(Bug#27433)
resolveip failed to produce correct results for hostnames that begin with a digit. (Bug#27427)
In ORDER BY clauses, mixing aggregate
functions and non-grouping columns is not allowed if the
ONLY_FULL_GROUP_BY SQL mode is enabled.
However, in some cases, no error was thrown because of
insufficient checking.
(Bug#27219)
For the --record_log_pos option,
mysqlhotcopy now determines the slave status
information from the result of SHOW SLAVE
STATUS by using the
Relay_Master_Log_File and
Exec_Master_Log_Pos values rather than the
Master_Log_File and
Read_Master_Log_Pos values. This provides a
more accurate indication of slave execution relative to the
master.
(Bug#27101)
Memory corruption, a crash of the MySQL server, or both, could
take place if a low-level I/O error occurred while an
ARCHIVE table was being opened.
(Bug#26978)
DROP DATABASE failed for attempts to drop
databases with names that contained the legacy
#mysql50# name prefix.
(Bug#26703)
config-win.h unconditionally defined
bool as BOOL, causing
problems on systems where bool is 1 byte and
BOOL is 4 bytes.
(Bug#26461)
On Windows, for distributions built with debugging support, mysql could crash if the user typed Control-C. (Bug#26243)
When symbolic links were disabled, either with a server startup
option or by enabling the NO_DIR_IN_CREATE
SQL mode, CREATE TABLE silently ignored the
DATA DIRECTORY and INDEX
DIRECTORY table options. Now the server issues a
warning if symbolic links are disabled when these table options
are used.
(Bug#25677)
Attempting to create an index with a prefix on a
DECIMAL column appeared to succeed with an
inaccurate warning message. Now, this action fails with the
error Incorrect prefix key; the used key part isn't a
string, the used length is longer than the key part, or the
storage engine doesn't support unique prefix keys.
(Bug#25426)
mysqlcheck -A -r did not correctly identify all tables that needed repairing. (Bug#25347)
On Windows, an error in configure.js caused
installation of source distributions to fail.
(Bug#25340)
The Qcache_free_blocks status variable did
not display a value of 0 if the query cache was disabled.
(Bug#25132)
The client library had no way to return an error if no
connection had been established. This caused problems such as
mysql_library_init() failing
silently if no errmsg.sys file was
available.
(Bug#25097)
On Mac OS X, the StartupItem for MySQL did not work. (Bug#25008)
For Windows 64-bit builds, enabling shared-memory support caused client connections to fail. (Bug#24992)
mysql did not use its completion table. Also, the table contained few entries. (Bug#24624)
If a user installed MySQL Server and set a password for the
root user, and then uninstalled and
reinstalled MySQL Server to the same location, the user could
not use the MySQL Instance Config wizard to configure the server
because the uninstall operation left the previous data directory
intact. The config wizard assumed that any
new install (not an upgrade) would have the default data
directory where the root user has no
password. The installer now writes a registry key named
FoundExistingDataDir. If the installer finds
an existing data directory, the key will have a value of 1,
otherwise it will have a value of 0. When
MySQLInstanceConfig.exe is run, it will
attempt to read the key. If it can read the key, and the value
is 1 and there is no existing instance of the server (indicating
a new installation), the Config Wizard will allow the user to
input the old password so the server can be configured.
(Bug#24215)
Logging of statements to log tables was incorrect for statements
that contained utf8-incompatible binary
strings. Incompatible sequences are hex-encoded now.
(Bug#23924)
The MySQL header files contained some duplicate macro definitions that could cause compilation problems. (Bug#23839)
SHOW COLUMNS on a TEMPOARY
table caused locking issues.
(Bug#23588)
For distributions compiled with the bundled
libedit library, there were difficulties
using the mysql client to enter input for
non-ASCII or multi-byte characters.
(Bug#23097)
perror reported incomplete or inaccurate information. (Bug#23028, Bug#25177)
InnoDB exhibited thread thrashing with more
than 50 concurrent connections under an update-intensive
workload.
(Bug#22868)
After stopping and starting the event scheduler, disabled events could remain in the execution queue. (Bug#22738)
The server produced a confusing error message when attempting to open a table that required a storage engine that was not loaded. (Bug#22708)
For views or stored programs created with an invalid
DEFINER value, the error message was
confusing (did not tie the problem to the
DEFINER clause) and has been improved.
(Bug#21854)
Warnings for deprecated syntax constructs used in stored routines make sense to report only when the routine is being created, but they were also being reported when the routine was parsed for loading into the execution cache. Now they are reported only at routine creation time. (Bug#21801)
Renaming a column that appeared in a foreign key definition did not update that definition with the new column name. This occurred with both referenced and referencing tables. (Bug#21704)
On Mac OS X, mysqld did not react to Ctrl-C
when run under gdb, even when run with the
--gdb option.
(Bug#21567)
CREATE ... SELECT did not always set
DEFAULT column values in the new table.
(Bug#21380)
mysql_config output did not include
-lmygcc on some platforms when it was needed.
(Bug#21158)
mysql-stress-test.pl and mysqld_multi.server.sh were missing from some binary distributions. (Bug#21023, Bug#25486)
The BENCHMARK() function,
invoked with more than 2147483648 iterations (the size of a
signed 32-bit integer), terminated prematurely.
(Bug#20752)
MySQLInstanceConfig.exe could lose the
innodb_data_home_dir setting when
reconfiguring an instance.
(Bug#19797)
DROP DATABASE did not drop orphaned
FOREIGN KEY constraints.
(Bug#18942)
CREATE TABLE allowed 0 as the default value
for a TIMESTAMP column when the server was
running in NO_ZERO_DATE mode.
(Bug#18834)
A SET column whose definition specified 64
elements could not be updated using integer values.
(Bug#15409)
If a SELECT calls a stored function in a
transaction, and a statement within the function fails, that
statement should roll back. Furthermore, if
ROLLBACK is executed after that, the entire
transaction should be rolled back. Before this fix, the failed
statement did not roll back when it failed (even though it might
ultimately get rolled back by a ROLLBACK
later that rolls back the entire transaction).
(Bug#12713)
See also Bug#34655
The parser incorrectly allowed SQLSTATE
'00000' to be specified for a condition handler. (This
is incorrect because the condition must be a failure condition
and '00000' indicates success.)
(Bug#8759)
MySQLInstanceConfig.exe did not save the
innodb_data_home_dir value to the
my.ini file under certain circumstances.
(Bug#6627)

User Comments
Add your own comment.