Dear MySQL users,
MySQL Server 5.5.1-m2, a new version of the popular Open Source
Database Management System, has been released.
The "-m2" suffix tells this belongs to the second milestone according
to our "milestone" release model, also called "Betony".
You can read more about the release model and the planned milestones at
The new features in this release are of beta quality. As with any
other pre-production release, caution should be taken when installing on
production level systems or systems with critical data.
For production level systems using 5.1, we would like to direct your
attention to the product description of MySQL Enterprise at:
MySQL 5.5 is based on MySQL 5.4, which won't get any further updates.
So MySQL 5.5 includes several high-impact changes to address scalability
and performance issues in MySQL Server. These changes exploit advances
in hardware and CPU design and enable better utilization of existing
For an overview of what's new in MySQL 5.5, please see the
section "What Is New in MySQL 5.5" below, or view it online at
For information on installing MySQL 5.5.1-m2 on new servers,
please see the MySQL installation documentation at
For upgrading from previous MySQL releases, please see the
important upgrade considerations at
MySQL Server is available in source and binary form for a
number of platforms from our download pages at
Not all mirror sites may be up to date at this point in
time, so if you can't find this version on some mirror,
please try again later or choose another download site.
We welcome and appreciate your feedback, bug reports, bug
fixes, patches, etc.:
Following the "What Is New" section, this mail lists the changes
in the MySQL source code of MySQL 5.5.1-m2.
The list of all "Bugs Fixed" may also be viewed online at
When the publishing process for 5.5.1-m2 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 only occur when SSL (using YaSSL) is enabled.
This problem is still under detailed investigation with the various
versions, configurations, and platforms.
When that has finished, the problem will be fixed ASAP,
and new binaries for the affected versions will be released.
Obviously, building and testing these binaries in the various
configurations on the various platforms will take some time.
The bug is tracked with a CVE ID already:
The related bug report is currently marked private, it will be made
public once the new binaries are out:
In the meantime, 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
On behalf of the MySQL Build Team at Sun Microsystems:
Senior Production Engineer
What Is New in MySQL 5.5
The following features have been added to MySQL 5.5:
* Support for an interface for semisynchronous replication:
A commit performed on the master side blocks before returning
to the session that performed the transaction until at least
one slave acknowledges that it has received and logged the events
for the transaction.
Semisynchronous replication is implemented through an optional
plugin component. See Section 16.2.8, "Semisynchronous Replication"
* Support for the SQL standard SIGNAL and RESIGNAL statements.
See Section 12.8.8, "SIGNAL and RESIGNAL".
* Enhancements to XML functionality, including a new LOAD XML
* Two new types of user-defined partitioning:
RANGE COLUMNS partitioning is an extension to RANGE partitioning;
LIST COLUMNS partitioning is an extension to LIST partitioning.
Each of these extensions provides two enhancements to MySQL
1. It is possible to define partitioning ranges or lists based on
DATE, DATETIME, or string values (such as CHAR or VARCHAR).
You can also define ranges or lists based on multiple column
values when partitioning tables by RANGE COLUMNS or LIST COLUMNS,
respectively. Such a range or list may refer to up to 16 columns.
2. For tables defined using these partitioning types, partition
pruning can now optimize queries with WHERE conditions that use
multiple comparisons between (different) column values and
constants, such as
a = 10 AND b > 5 or a < "2005-11-25" AND b = 10 AND c = 50.
For more information, see Section 17.2.1, "RANGE Partitioning",
and Section 17.2.2, "LIST Partitioning".
* It is now possible to delete all rows from one or more partitions
of a partitioned table using the ALTER TABLE ... TRUNCATE
PARTITION statement. Executing the statement deletes rows without
affecting the structure of the table. The partitions named in the
TRUNCATE PARTITION clause do not have to be contiguous.
* Key caches are now supported for indexes on partitioned MyISAM
tables, using the CACHE INDEX and LOAD INDEX INTO CACHE statements.
In addition, a key cache can be defined for and loaded with indexes
from an entire partitioned table, or for one or more partitions.
In the latter case, the partitions are not required to be contiguous.
* The TO_SECONDS() function is added. This function converts a date or
datetime expression to a number of seconds since the year 0. You may
use this function in partitioning expressions, and partition pruning
is supported for table defined using such expressions.
The following constructs are deprecated and will be removed in a future
MySQL release. Where alternatives are shown, applications should be
updated to use them.
* The table_type system variable (use storage_engine).
The TYPE table option to specify the storage engine for
CREATE TABLE or ALTER TABLE (use ENGINE).
The SHOW TABLE TYPES SQL statement (use SHOW ENGINES).
* The log_bin_trust_routine_creators variable
* TIMESTAMP(N): The ability to specify a display width of N
(use without N).
* The SHOW INNODB STATUS and SHOW MUTEX STATUS SQL statements
(use SHOW ENGINE INNODB STATUS for both of these).
* The LOAD TABLE ... FROM MASTER and LOAD DATA FROM MASTER SQL
* The SHOW PLUGIN SQL statement (use SHOW PLUGINS).
* The BACKUP TABLE and the RESTORE TABLE SQL statements.
* The --master-xxx server options to set replication parameters
(use the CHANGE MASTER TO statement instead):
--master-host, --master-user, --master-password, --master-port,
--master-connect-retry, --master-ssl, --master-ssl-ca,
--master-ssl-capath, --master-ssl-cert, --master-ssl-cipher,
Changes in MySQL 5.5.1-m2:
* 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 starts to count 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
(for this version: "m2") in the file name. For example, the
tar.gz filename is mysql-5.5.1-m2-linux-i686-glibc23.tar.gz.
The different separator, underscore '_' for RPM, is required
by the syntax of RPM.
InnoDB Plugin Notes:
* InnoDB Plugin has been upgraded to version 1.0.6. This version
is considered of Release Candidate (RC) quality. The InnoDB
Plugin Change History
ml) may contain information in addition to those changes
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
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 when attempting 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().
* 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.
See also Bug#21074: http://bugs.mysql.com/bug.php?id=21074.
* 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.
* 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.
* Partitioning: A query that searched on a ucs2 column failed if
the table was partitioned.
* Partitioning: In some cases, it was not possible to add a new
column to a table that had subpartitions.
* Partitioning: SELECT COUNT(*) from a partitioned table failed
when using the ONLY_FULL_GROUP_BY SQL mode.
This regression was introduced by
* Partitioning: SUBPARTITION BY KEY failed with DEFAULT
* 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.
* 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.
* For debug builds on Windows, SAFEMALLOC was defined
inconsistently, leading to mismatches when using my_malloc()
* The mysql.server script had incorrect shutdown logic.
* The result of comparison between nullable BIGINT and INT
columns was inconsistent.
* 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: http://bugs.mysql.com/bug.php?id=49506)
* When compiling on Windows, an error in the CMake definitions
for InnoDB would cause the engine to be built incorrectly.
* Incorrect cache initialization prevented storage of converted
constant values and could produce incorrect comparison
results. (Bug#49489: http://bugs.mysql.com/bug.php?id=49489)
* Comparisons involving YEAR values could produce incorrect
results. (Bug#49480: http://bugs.mysql.com/bug.php?id=49480)
See also Bug#43668: http://bugs.mysql.com/bug.php?id=43668.
* Valgrind warnings for CHECKSUM TABLE were corrected.
* 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 now disallowed
to do so. (Bug#49250: http://bugs.mysql.com/bug.php?id=49250)
* The optimizer sometimes incorrectly handled conditions of the
form WHERE col_name='const1' AND col_name='const2'.
* Execution of DECODE() and ENCODE() could be inefficient
because multiple executions within a single statement
reinitialized the random generator multiple times even with
* The LIKE operator did not work correctly when using an index
for a ucs2 column.
* check_key_in_view() was missing a DBUG_RETURN in one code
branch, causing a crash in debug builds.
* If a query involving a table was terminated with KILL, a
subsequent SHOW CREATE TABLE for that table caused a server
crash. (Bug#48985: http://bugs.mysql.com/bug.php?id=48985)
* Privileges for stored routines were ignored for mixed-case
See also Bug#41049: http://bugs.mysql.com/bug.php?id=41049.
* Concurrent ALTER TABLE operations on an InnoDB table could
raise an assertion.
* During query execution, ranges could be merged incorrectly for
OR operations and return an incorrect result.
* The InnoDB Table Monitor reported the FLOAT and DOUBLE data
* With row-based binary logging, the server crashed for
statements of the form CREATE TABLE IF NOT EXISTS
existing_view LIKE temporary_table. This occurred because the
server handled the existing view as a table when logging the
statement. (Bug#48506: http://bugs.mysql.com/bug.php?id=48506)
* The error message for ER_UPDATE_INFO was subject to buffer
overflow or truncation.
* DISTINCT was ignored for queries with GROUP BY WITH ROLLUP and
only const tables.
* Loose index scan was inappropriately chosen for some WHERE
* If the InnoDB tablespace was configured with too small a
value, the server could crash and corrupt the tablespace.
* Parts of the range optimizer could be initialized incorrectly,
resulting in Valgrind errors.
* A bad typecast could cause query execution to allocate large
amounts of memory.
* On Windows, InnoDB could not be built as a statically linked
library. (Bug#48317: http://bugs.mysql.com/bug.php?id=48317)
* mysql_secure_installation did not work on Solaris.
* When running mysql_secure_installation, the command would fail
if the root password contained multiple spaces, \, # or quote
* MATCH IN BOOLEAN MODE searches could return too many results
inside a subquery.
* User-defined collations with an ID less then 256 were not
initialized correctly when loaded and caused a server crash.
* If a session held a global read lock acquired with FLUSH
TABLES WITH READ LOCK, a lock for one table acquired with LOCK
TABLES, and issued an INSERT DELAYED statement for another
table, deadlock could occur.
* The mysql client status command displayed an incorrect value
for the server character set.
* Connecting to a 4.1.x server from a 5.1.x or higher mysql
client resulted in a memory-free error when disconnecting.
* 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.
* On Solaris, no stack trace was printed to the error log after
a crash. (Bug#47391: http://bugs.mysql.com/bug.php?id=47391)
* 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: http://bugs.mysql.com/bug.php?id=47167)
* After a binary upgrade to MySQL 5.1 from a MySQL 5.0
installation that contains ARCHIVE tables, accessing those
tables caused the server to crash, even if you had run
mysql_upgrade or CHECK TABLE ... FOR UPGRADE.
To work around this problem, use mysqldump to dump all 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.
* The IGNORE clause on a DELETE statement masked an SQL
statement error that occurred during trigger processing.
* Valgrind errors for InnoDB Plugin were corrected.
* The return value was not checked for some my_hash_insert()
calls. (Bug#45613: http://bugs.mysql.com/bug.php?id=45613)
* It was possible for init_available_charsets() not to
* GROUP BY on a constant (single-row) InnoDB table joined to
other tables caused a server crash.
* For YEAR(2) values, MIN(), MAX(), and comparisons could yield
* Comparison with NULL values sometimes did not produce a
* In debug builds, killing a LOAD XML INFILE statement raised an
assertion. (Bug#42520: http://bugs.mysql.com/bug.php?id=42520)
* 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
* The mysql_upgrade command would create three additional fields
to the mysql.proc table (character_set_client,
collation_connection, and db_collation), but did not populate
the fields with correct values. This would lead to error
messages reported during stored procedure execution.
* 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
* 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 limit the amount of memory used for memory mapping of
* When running mysql_secure_installation on Windows, the command
would fail to load a required module, Term::ReadKey, which was
required for correct operation.
* 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.
* 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.
* Using the SHOW ENGINE INNODB STATUS statement when using
partitions in InnoDB tables caused Invalid (old?) table or
database name errors to be logged.
* Output from mysql --html did not encode the <, >, or &
* 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: http://bugs.mysql.com/bug.php?id=21074)
See also Bug#39253: http://bugs.mysql.com/bug.php?id=39253.
* 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.
Joerg Bruehe, MySQL Build Team, Joerg.Bruehe@stripped
Sun Microsystems GmbH, Komturstraße 18a, D-12099 Berlin
Geschaeftsfuehrer: Thomas Schroeder, Wolfgang Engels, Wolf Frenkel
Vorsitzender des Aufsichtsrates: Martin Haering Muenchen: HRB161028
|• MySQL 5.5.1-m2 has been released||Joerg Bruehe||14 Jan|