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 <
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 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.