When the publishing process for MySQL 5.5.1 was already running, the MySQL team was informed about a security problem in the SSL connect area (a possibility to crash the server). The problem is caused by a buffer overflow in the yaSSL library. MySQL Servers using OpenSSL are not affected; it can occur only when SSL (using yaSSL) is enabled.
This problem is under detailed investigation with the various versions, configurations, and platforms. When that has finished, the problem will be fixed as soon as possible, and new binaries for the affected versions will be released. However, building and testing these binaries in the various configurations on the various platforms will take some time. The bug is tracked with CVE ID CVE-2009-4484. We repeat the general security hint: If it is not absolutely necessary that external machines can connect to your database instance, we recommend that the server's connection port be blocked by a firewall to prevent any such illegitimate accesses.
Update: This bug is fixed in MySQL 5.5.2.
InnoDB Notes
InnoDB has been upgraded to version 1.0.6.
This version is considered of Release Candidate (RC) quality.
InnoDB Storage Engine Change History, may contain information in
addition to those changes reported here.
RPM Notes
The version information in RPM package files has been changed:
The “level” field of a MySQL version number is now also included in the RPM version and in the package file name.
The RPM “release” value now counts from 1, not 0.
For example, the generic x86 server RPM file of 5.5.1-m2 is
named
MySQL-server-5.5.1_m2-1.glibc23.i386.rpm.
This improves consistency with other formats that also include
the level in the file name (for this version:
“m2”). For example, the tar.gz
file name is
mysql-5.5.1-m2-linux-i686-glibc23.tar.gz.
The different separator, underscore '_' for
RPM, is required by the syntax of RPM.
Functionality Added or Changed
Partitioning:
The UNIX_TIMESTAMP() function is
now supported in partitioning expressions using
TIMESTAMP columns. For example,
it now possible to create a partitioned table such as this one:
CREATE TABLE t (c TIMESTAMP)
PARTITION BY RANGE ( UNIX_TIMESTAMP(c) ) (
PARTITION p0 VALUES LESS THAN (631148400),
PARTITION p1 VALUES LESS THAN (946681200),
PARTITION p2 VALUES LESS THAN (MAXVALUE)
);
All other expressions involving
TIMESTAMP values are now rejected
with an error for attempts to create a new partitioned table or
to alter an existing partitioned table.
When accessing an existing partitioned table having a
timezone-dependent partitioning function (where the table was
using a previous version of MySQL), a warning rather than an
error is issued. In such cases, you should fix the table. One
way of doing this is to alter the table's partitioning
expression so that it uses
UNIX_TIMESTAMP().
(Bug #42849)
Bugs Fixed
Performance:
When the query cache is fragmented, the size of the free block
lists in the memory bins grows, which causes query cache
invalidation to become slow. There is now a 50ms timeout for a
SELECT statement waiting for the
query cache lock. If the timeout expires, the statement executes
without using the query cache.
(Bug #39253)
References: See also Bug #21074.
Incompatible Change; Replication:
The file names for the semisynchronous plugins were prefixed
with lib, unlike file names for other
plugins. The file names no longer have a
lib prefix.
This change introduces an incompatibility if the plugins had been installed using the previous names. To handle this, uninstall the older version before installing the newer version. For example, use these statements for the master side plugins on Unix:
mysql>UNINSTALL PLUGIN rpl_semi_sync_master;mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
If you do not uninstall the older version first, attempting to install the newer version results in an error:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
ERROR 1125 (HY000): Function 'rpl_semi_sync_master' already exists
For the slave side, similar statements apply:
mysql>UNINSTALL PLUGIN rpl_semi_sync_slave;mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
Important Change; Replication: The following functions have been marked unsafe for statement-based replication:
None of the functions just listed are guaranteed to replicate
correctly when using the statement-based format because they can
produce different results on the master and the slave. The use
of any of these functions while
binlog_format is set to
STATEMENT is logged with the warning,
Statement is not safe to log in statement
format. When
binlog_format is set to
MIXED, the binary logging format is
automatically switched to the row-based format whenever one of
these functions is used.
(Bug #47995)
Important Change:
After a binary upgrade to MySQL 5.1 from a MySQL 5.0
installation that contains ARCHIVE
tables:
Before MySQL 5.1.42, accessing those tables will cause the
server to crash, even if you have run
mysql_upgrade or
CHECK TABLE ...
FOR UPGRADE.
As of MySQL 5.1.42, the server will not open 5.0
ARCHIVE tables at all.
In either case, the solution is to use
mysqldump to dump all 5.0
ARCHIVE tables before upgrading,
and reload them into MySQL 5.1 after upgrading. The same problem
occurs for binary downgrades from MySQL 5.1 to 5.0.
(Bug #47012)
InnoDB:
When compiling on Windows, an error in the
CMake definitions for
InnoDB caused the engine to be built
incorrectly.
(Bug #49502)
Partitioning:
When SHOW CREATE TABLE was
invoked for a table that had been created using the
COLUMNS keyword or the
TO_SECONDS() function, the output
contained the wrong MySQL version number in the conditional
comments.
(Bug #49591)
Partitioning:
A query that searched on a ucs2 column failed
if the table was partitioned.
(Bug #48737)
Partitioning: In some cases, it was not possible to add a new column to a table that had subpartitions. (Bug #48276)
Partitioning:
SELECT
COUNT(*) from a partitioned table failed when using
the ONLY_FULL_GROUP_BY SQL
mode.
(Bug #46923)
References: This bug was introduced by Bug #45807.
Partitioning:
SUBPARTITION BY KEY failed with
DEFAULT CHARSET=utf8.
(Bug #45904)
Replication:
When using row-based logging, TRUNCATE
TABLE was written to the binary log even if the
affected table was temporary, causing replication to fail.
(Bug #48350)
Replication:
When using the STATEMENT or
MIXED logging format, the statements
LOAD DATA CONCURRENT
LOCAL INFILE and
LOAD DATA CONCURRENT
INFILE were logged as
LOAD DATA LOCAL
INFILE and
LOAD DATA LOCAL
INFILE, respectively (in other words, the
CONCURRENT keyword was omitted). As a result,
when using replication with either of these logging modes,
queries on the slaves were blocked by the replication SQL thread
while trying to execute the affected statements.
(Bug #34628)
Replication: A flaw in the implementation of the purging of binary logs could result in orphaned files being left behind in the following circumstances:
If the server failed or was killed while purging binary logs.
If the server failed or was killed after creating of a new binary log when the new log file was opened for the first time.
In addition, if the slave was not connected during the purge operation, it was possible for a log file that was in use to be removed; this could lead data loss and possible inconsistencies between the master and slave. (Bug #45292)
Cluster Replication:
When expire_logs_days was set,
the thread performing the purge of the log files could deadlock,
causing all binary log operations to stop.
(Bug #49536)
Building MySQL on Fedora Core 12 64-bit failed, due to errors in comp_err. (Bug #48864)
When running mysql_secure_installation, the
command failed if the root password contained
multiple space, '\', '#',
or quote characters.
(Bug #48031)
On Windows, the mysql_secure_installation
command failed to load the Term::ReadKey
module, which was required for correct operation.
(Bug #35106)
Use of InnoDB monitoring
(SHOW ENGINE INNODB
STATUS or one of the
InnoDB Monitor tables) could cause
a server crash due to invalid access to a shared variable in a
concurrent environment.
(Bug #38883)
GROUP BY on a constant
(single-row) InnoDB table joined to other
tables caused a server crash.
(Bug #44886)
On Windows, InnoDB could not be
built as a statically linked library.
(Bug #48317)
Valgrind errors for InnoDB were corrected.
(Bug #45992, Bug #46656)
For YEAR(2) values,
MIN(),
MAX(), and comparisons could
yield incorrect results.
(Bug #43668)
Assignment of a system variable sharing the same base name as a declared stored program variable in the same context could lead to a crash. (Bug #47627)
The server could crash when attempting to access a
non-conformant mysql.proc system table. For
example, the server could crash when invoking stored
procedure-related statements after an upgrade from MySQL 5.0 to
5.1 without running mysql_upgrade.
(Bug #41726)
Privileges for stored routines were ignored for mixed-case routine names. (Bug #48872)
References: See also Bug #41049.
DISTINCT was ignored for queries with
GROUP BY WITH ROLLUP and only
const tables.
(Bug #48475)
Loose index scan was inappropriately chosen for some
WHERE conditions.
(Bug #48472)
The innodb_file_format_check
system variable could not be set at runtime to
DEFAULT or to the value of a user-defined
variable.
(Bug #47167)
If the --log-bin server option
was set to a directory name with a trailing component separator
character, the basename of the binary log files was empty, so
that the created files were named .000001
and .index. The same thing occurred with
the --log-bin-index,
--relay-log, and
--relay-log-index options. Now
the server reports and error and exits.
(Bug #34739)
Concurrent ALTER TABLE operations
on an InnoDB table could raise an
assertion.
(Bug #48782)
During query execution, ranges could be merged incorrectly for
OR operations and return an
incorrect result.
(Bug #48665)
The InnoDB Table Monitor reported
the FLOAT and
DOUBLE data types incorrectly.
(Bug #48526)
With row-based binary logging, the server crashed for statements
of the form CREATE TABLE IF NOT EXISTS
. This
occurred because the server handled the existing view as a table
when logging the statement.
(Bug #48506)existing_view LIKE
temporary_table
A bad typecast could cause query execution to allocate large amounts of memory. (Bug #48458)
MATCH IN BOOLEAN MODE searches could return
too many results inside a subquery.
(Bug #47930)
Connecting to a 4.1.x server from a 5.1.x or higher mysql client resulted in a memory-free error when disconnecting. (Bug #47655)
mysql_secure_installation did not work on Solaris. (Bug #48086)
Parts of the range optimizer could be initialized incorrectly, resulting in Valgrind errors. (Bug #48459)
The server could crash and corrupt the tablespace if the
InnoDB tablespace was configured
with too small a value, or if
innodb_file_per_table was
enabled and many
CREATE TEMPORARY
TABLE statements were executed and the temporary file
directory filled up.
(Bug #48469)
The mysql client status
command displayed an incorrect value for the server character
set.
(Bug #47671)
The IGNORE clause on a
DELETE statement masked an SQL
statement error that occurred during trigger processing.
(Bug #46425)
If a session acquired a global read lock with
FLUSH TABLES WITH READ
LOCK, acquired a lock for one table with
LOCK TABLES, and issued an
INSERT DELAYED statement for
another table, deadlock could occur.
(Bug #47682)
The return value was not checked for some
my_hash_insert() calls.
(Bug #45613)
If a comparison involved a constant value that required type conversion, the converted value might not be cached, resulting in repeated conversion and poorer performance. (Bug #34384)
User-defined collations with an ID less than 256 were not initialized correctly when loaded and caused a server crash. (Bug #47756)
Comparison with NULL values sometimes did not
produce a correct result.
(Bug #42760)
The result of comparison between nullable
BIGINT and
INT columns was inconsistent.
(Bug #49517)
Incorrect cache initialization prevented storage of converted constant values and could produce incorrect comparison results. (Bug #49489)
Comparisons involving YEAR values
could produce incorrect results.
(Bug #49480)
References: See also Bug #43668.
If a query involving a table was terminated with
KILL, a subsequent
SHOW CREATE TABLE for that table
caused a server crash.
(Bug #48985)
A Valgrind error in
make_cond_for_table_from_pred() was
corrected. Thanks to Sergey Petrunya for the patch to fix this
bug.
(Bug #49506)
The mysql_upgrade command added three columns
to the mysql.proc table
(character_set_client,
collation_connection, and
db_collation), but did not populate the
columns with correct values. This led to error messages reported
during stored procedure execution.
(Bug #41569)
Valgrind warnings for CHECKSUM
TABLE were corrected.
(Bug #49465)
The mysql.server script had incorrect shutdown logic. (Bug #49772)
On Solaris, the server printed no stack trace to the error log after a crash. (Bug #47391)
The error message for
ER_UPDATE_INFO was subject to
buffer overflow or truncation.
(Bug #48500)
Specifying an index algorithm (such as BTREE)
for SPATIAL or FULLTEXT
indexes caused a server crash. These index types do not support
algorithm specification, and it is not longer permitted to do
so.
(Bug #49250)
The optimizer sometimes incorrectly handled conditions of the
form WHERE
.
(Bug #49199)col_name='const1'
AND
col_name='const2'
The LIKE operator did not work
correctly when using an index for a ucs2
column.
(Bug #49028)
Execution of DECODE() and
ENCODE() could be inefficient
because multiple executions within a single statement
reinitialized the random generator multiple times even with
constant parameters.
(Bug #49141)
check_key_in_view() was missing a
DBUG_RETURN in one code branch, causing a
crash in debug builds.
(Bug #48995)
When compressed MyISAM files were
opened, they were always memory mapped, sometimes causing
memory-swapping problems. To deal with this, a new system
variable, myisam_mmap_size, was added to
permit limiting the amount of memory used for memory mapping of
MyISAM files.
(Bug #37408)
For debug builds on Windows, SAFEMALLOC was
defined inconsistently, leading to mismatches when using
my_malloc() and my_free().
(Bug #49811)
In debug builds, killing a
LOAD XML
INFILE statement raised an assertion.
Implemented in the course of fixing this bug,
mysqltest has a new
send_eval command that combines the
functionality of the existing send and
eval commands.
(Bug #42520)
It was possible for init_available_charsets()
not to initialize correctly.
(Bug #45058)
With binary logging enabled,
REVOKE ... ON
{PROCEDURE|FUNCTION} FROM ... could cause a crash.
(Bug #49119)
Re-execution of a prepared statement could cause a server crash. (Bug #48508)
SHOW BINLOG EVENTS could fail
with a error: Wrong offset or I/O error.
(Bug #48357)
Valgrind warnings related to binary logging of
LOAD DATA
INFILE statements were corrected.
(Bug #48340)
The first execution of
STOP SLAVE
UNTIL stopped too early.
(Bug #47210)
Incomplete reset of internal TABLE structures
could cause a crash with
eq_ref table access in
subqueries.
(Bug #48709)
The push_warning_printf() function was being
called with an invalid error level,
MYSQL_ERROR::WARN_LEVEL_ERROR, causing an
assertion failure. To fix the problem,
MYSQL_ERROR::WARN_LEVEL_ERROR has been
replaced by MYSQL_ERROR::WARN_LEVEL_WARN.
(Bug #49638)
Queries containing GROUP BY ... WITH ROLLUP
that did not use indexes could return incorrect results.
(Bug #47650)
For a
VARCHAR(
column, N)ORDER BY
BINARY( sorted
using only the first col_name)N bytes of the
column, even though column values could be longer than
N bytes if they contained multi-byte
characters.
(Bug #44131)
Under heavy load with a large query cache, invalidating part of the cache could cause the server to freeze (that is, to be unable to service other operations until the invalidation was complete). (Bug #21074)
References: See also Bug #39253.
Output from mysql --html did not encode the
'<', '>', or
'&' characters.
(Bug #27884)
On some Windows systems, InnoDB could report
Operating system error number 995 in a file
operation due to transient driver or hardware
problems. InnoDB now retries the operation
and adds Retry attempt is made to the error
message.
(Bug #3139)
Using the SHOW
ENGINE INNODB STATUS statement when using partitions
in InnoDB tables caused Invalid
(old?) table or database name errors to be logged.
(Bug #32430)
