Functionality added or changed:
Important Change: MySQL Cluster: Packaging:
Beginning with this release, standard 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 NDB
6.2.15 or a later MySQL Cluster NDB 6.2 or 6.3 release.
(Bug#36193)
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, where idempotent mode is the default.
However, strict mode is the default for storage engines other
than NDB
.
(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 PROCESS
privilege now is
required to start or stop the InnoDB
monitor
tables (see Section 13.6.13.2, “SHOW ENGINE INNODB
STATUS
and the InnoDB
Monitors”). 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. If you do not need debugging symbols and are short on
disk space, you can use strip to remove the
symbols from the binaries.
(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.
(Community contribution by 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 of 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.6.10.4, “Adaptive Hash Indexes”.
Bugs fixed:
Performance:
InnoDB
adaptive hash latches could be held
too long during filesort operations, resulting in a server
crash. Now the hash latch is released when a query on
InnoDB
tables performs a filesort. This
eliminates the crash and may provide significant performance
improvements on systems on which many queries using filesorts
with temporary tables are being performed.
(Bug#32149)
Performance:
InnoDB
exhibited thread thrashing with more
than 50 concurrent connections under an update-intensive
workload.
(Bug#22868)
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.
Additional fixes were made in MySQL 5.1.28, 5.1.41.
See also Bug#39277.
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 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.
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:
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)
Incompatible Change:
The UPDATE
statement allowed
NULL
to be assigned to NOT
NULL
columns (the implicit default value for the
column data type was assigned). This was changed so that on
error occurs.
This change was reverted, because the original report was
determined not to be a bug: Assigning NULL
to
a NOT NULL
column in an
UPDATE
statement should produce
an error only in strict SQL mode and set the column to the
implicit default with a warning otherwise, which was the
original behavior. See Section 10.1.4, “Data Type Default Values”, and
Bug#39265.
(Bug#33699)
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 path name and configure
their installation directory appropriately.
(Bug#31736)
Incompatible Change:
The utf8_general_ci
and
ucs2_general_ci
collations did not sort the
letter "U+00DF SHARP S" equal to 's'
.
As a result of this bug fix, indexes must be rebuilt for columns
that use the utf8_general_ci
or
ucs2_general_ci
collation for columns that
contain SHARP S. See
Section 2.4.3, “Checking Whether Tables or Indexes Must Be Rebuilt”.
(Bug#27877)
See also Bug#37046.
Important Change: Partitioning: The following statements did not function correctly with corrupted or crashed tables and have been disabled:
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.
(Bug#20129)
See also Bug#39434.
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)
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)
See also 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:
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:
For InnoDB
tables, there was a race condition
involving the data dictionary and repartitioning.
(Bug#33349)
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:
When using row-based replication, a slave could crash at startup
because it received a row-based replication event that
InnoDB
could not handle due to an incorrect
test of the query string provided by MySQL, which was
NULL
for row-based replication events.
(Bug#35226)
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.
(Bug#33862)
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 nonexistent 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 I/O 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:
Replication of LOAD
DATA INFILE
could fail when
read_buffer_size
was larger
than max_allowed_packet
.
(Bug#30435)
Replication:
Replication crashed with the NDB
storage engine when mysqld was started with
--character-set-server=ucs2
.
(Bug#29562)
Replication: When using row-based logging, nontransactional updates were not written atomically to the binary log. If a nontransactional update was made concurrently with some other update, this could cause incorrect binary logging, and consequently the slave could diverge from the master. Now, nontransactional updates are always written atomically to the binary log. (Bug#29020)
Replication:
Setting server_id
did not
update its value for the current session.
(Bug#28908)
Replication: Some older servers wrote events to the binary log using different numbering from what is currently used, even though the file format number in the file is the same. Slaves running MySQL 5.1.18 and later could not read these binary logs properly. Binary logs from these older versions now are recognized and event numbers are mapped to the current numbering so that they can be interpreted properly. (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 nonspecific 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:
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 file
system, the statement fails with an error.
(Bug#18199, Bug#18453)
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)
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 TEMPORARY
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)
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.
Debugging symbols were missing for some executables in Windows binary distributions. (Bug#35104)
Nonconnection 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
<
N
col_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 TABLE
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)
A server crash could occur if
INFORMATION_SCHEMA
tables built in memory
were swapped out to disk during query execution.
(Bug#34529)
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 an integer argument 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)
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)
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 nonspace 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 nonconstant 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, MySQL 4.0 and 4.1
stopped reading joined tables as soon as the first matching row
was found. However, this optimization 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 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)
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 file system. (Bug#31781)
When upgrading from MySQL 5.1.19 to any version between MySQL 5.1.20 to MySQL 5.1.23, the MySQL Instance Configuration Wizard would fail to account for the change in name for the mysqld-nt.exe to mysqld.exe, causing MySQL to fail to start properly after the upgrade. (Bug#31674)
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 nonconstant 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)
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)
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)
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 host names that begin with a digit. (Bug#27427)
In ORDER BY
clauses, mixing aggregate
functions and nongrouping 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)
The MySQL Instance Configuration Wizard would not allow you to choose a service name, even though the criteria for the service name were valid. The code that checks the name has been updated to support the correct criteria of any string less than 256 character and not containing either a forward or backward slash character. (Bug#27013)
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)
The XPath boolean()
function did not cast
string and nodeset values correctly in some cases. It now
returns TRUE
for any nonempty string or
nodeset and 0 for a NULL
string, as specified
in the XPath standard..
(Bug#26051)
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)
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)
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)
mysqldumpslow returned a confusing error message when no configuration file was found. (Bug#20455)
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.