MySQL 5.5.5-m3がリリースされました


MySQLデータベース管理システムの新バージョンであるMySQL Server 5.5.5-m3がリリースされました。


このリリースからMySQL Server 5.5.2-m2を含む以前のリリースシリーズへの「ダウングレード」はサポートされないことに注意してください。

MySQL 5.1を使用する製品レベルシステムでは、下記のMySQL Enterpriseの製品説明をよく読んでください。

MySQL 5.5はMySQL 5.4をベースとしており、追加の変更は行われていません。そのためMySQL 5.5は、MySQLサーバのスケーラビリティおよびパフォーマンス問題に対応するための影響の大きな変更をいくつか含んでいます。この変更は、ハードウェアおよびCPU設計における詳細な性能を引き出し、既存のハードウェアをより有効に利用できます。

MySQL 5.5の新機能の概要については、以下の"MySQL 5.5の何が新しくなったのか"を参照してください。

新しいサーバへMySQL 5.5.5-m3をインストールする情報として、以下のMySQLのインストールドキュメントを参照してください。



MySQL Server 5.5は、とミラーサイトのダウンロード・ページから、ソースコード及び多くのプラットフォームのためのバイナリで現在利用可能です。





MySQL 5.5.5-m3では、CMakeが全プラットフォームのビルドフレームワークとしてGNU autotoolsに加わりました。われわれは既にWindows上でCMakeを利用してきました。GNU autotoolsに対する既存のサポートはまだ続けられますが、もしGNU autotoolsをまだお使いなら、下記リンクの指示に従ってCMakeを利用できます。このリリースのオフィシャルパッケージはCMakeを使って作成された最初のパッケージです。いつものようにわれわれはフィードバックを歓迎します。

MySQL 5.5.5の変更点:

|InnoDB is now the default storage engine, rather than MyISAM in|||  the
regular versions of MySQL. This change has the following consequences:

* Existing tables are not affected by this change, only new
tables that are created.

* Some of the|InnoDB| option settings also change, so that the
default configuration represents the best practices for|InnoDB|
functionality,reliability, and file management:
|innodb_file_format=Barracuda| rather than|Antelope|,
|innodb_strict_mode=TRUE| rather than|FALSE|, and
|innodb_file_per_table=TRUE| rather than|FALSE|.

* The system tables remain in|MyISAM| format.

*|MyISAM| remains the default storage engine for the embedded version
of MySQL

Bugs Fixed:

* Performance: While looking for the shortest index for a
covering index scan, the optimizer did not consider the full
row length for a clustered primary key, as in InnoDB.
Secondary covering indexes will now be preferred, making full
table scans less likely.

* Security Fix: The server failed to check the table name
argument of a COM_FIELD_LIST command packet for validity and
compliance to acceptable table name standards. This could be
exploited to bypass almost all forms of checks for privileges
and table-level grants by providing a specially crafted table
name argument to COM_FIELD_LIST.
In MySQL 5.0 and above, this allowed an authenticated user
with SELECT privileges on one table to obtain the field
definitions of any table in all other databases and
potentially of other MySQL instances accessible from the
server's file system.
Additionally, for MySQL version 5.1 and above, an
authenticated user with DELETE or SELECT privileges on one
table could delete or read content from any other table in all
databases on this server, and potentially of other MySQL
instances accessible from the server's file system.

* Security Fix: The server was susceptible to a buffer-overflow
attack due to a failure to perform bounds checking on the
table name argument of a COM_FIELD_LIST command packet. By
sending long data for the table name, a buffer is overflown,
which could be exploited by an authenticated user to inject
malicious code.

* Security Fix: Privilege checking for UNINSTALL PLUGIN was
incorrect. (Bug#51770:,

* Security Fix: The server could be tricked into reading packets
indefinitely if it received a packet larger than the maximum
size of one packet.

* Incompatible Change: TRUNCATE TABLE did not take an exclusive
lock on a table if truncation was done by deleting all rows in
the table. For InnoDB tables, this could break proper
isolation because InnoDB ended up aborting some granted locks
when truncating a table. Now an exclusive metadata lock is
taken before TRUNCATE TABLE can proceed. This guarantees that
no other transaction is using the table.
Incompatible change: Truncation using delete no longer fails
if sql_safe_updates is enabled (this was an undocumented side
effect). (Bug#42643:

* Important Change: Replication: It was possible to set
sql_log_bin with session scope inside a transaction or
subquery. (Bug#53437:

* Important Change: Replication: When changing binlog_format or
binlog_direct_non_transactional_updates, permissions were not
checked prior to checking the scope and context of the
variable being changed.
As a result of this fix, an error is no longer reported
when---in the context of a transaction or a stored
function---you try to set a value for a session variable that
is the same as its previous value, or for a variable whose
scope is global only.

* Important Change: Replication: When invoked, CHANGE MASTER TO
and SET GLOBAL sql_slave_skip_counter now cause information to
be written to the error log about the slave's state prior to
execution of the statement. For CHANGE MASTER TO, this
information includes the previous values for MASTER_HOST,
GLOBAL sql_slave_skip_counter, this information includes the
previous values of sql_slave_skip_counter, the group relay log
name, and the group relay log position.

* Partitioning: Replication: Attempting to execute LOAD DATA on
a partitioned MyISAM table while using statement-based logging
mode caused the master to hang or crash.

* Partitioning: Replication: The NO_DIR_IN_CREATE server SQL
mode was not enforced when defining subpartitions. In certain
cases, this could lead to failures on replication slaves.

* Partitioning: Rows inserted into a table created using a
PARTITION BY LIST COLUMNS option referencing multiple columns
could be inserted into the wrong partition.

* Partitioning: Partition pruning on RANGE partitioned tables
did not always work correctly; the last partition was not
excluded if the range was beyond it (when not using MAXVALUE).
Now the last partition is not included if the partitioning
function value is not within the range.

* Partitioning: Attempting to partition a table using a DECIMAL
column caused the server to crash; this not supported and is
now specifically disallowed.

* Partitioning: ALTER TABLE statements that cause table
partitions to be renamed or dropped (such as ALTER TABLE ...
... REORGANIZE PARTITION) --- when run concurrently with
queries against the INFORMATION_SCHEMA.PARTITIONS table ---
could fail, cause the affected partitioned tables to become
unusable, or both. This was due to the fact that the
INFORMATION_SCHEMA database ignored the name lock imposed by
the ALTER TABLE statement on the partitions affected. In
particular, this led to problems with InnoDB tables, because
InnoDB would accept the rename operation, but put it in a
background queue, so that subsequent rename operations failed
when InnoDB was unable to find the correct partition. Now,
INFORMATION_SCHEMA honors name locks imposed by ongoing ALTER
TABLE statements that cause partitions to be renamed or
dropped. (Bug#50561:
See also Bug#47343:,

* Partitioning: The insert_id server system variable was not
reset following an insert that failed on a partitioned MyISAM
table having an AUTO_INCREMENT column.

* Partitioning: Foreign keys are not supported on partitioned
tables. However, it was possible via an ALTER TABLE statement
to set a foreign key on a partitioned table; it was also
possible to partition a table with a single foreign key.

* Partitioning: When attempting to perform DDL on a partitioned
table and the table's .par file could not be found, the server
returned the inaccurate error message Out of memory; restart
server and try again (needed 2 bytes). Now in such cases, the
server returns the error Failed to initialize partitions from
.par file. (Bug#49161:

* Partitioning: GROUP BY queries performed poorly for some
partitioned tables. This was due to the block size not being
set for partitioned tables, thus the keys per block was not
correct, which could cause such queries to be optimized
See also Bug#37252:

* Partitioning: REPAIR TABLE failed for partitioned ARCHIVE
tables. (Bug#46565:

* Replication: When using unique keys on NULL columns in
row-based replication, the slave sometimes chose the wrong row
when performing an update. This happened because a table
having a unique key on such a column could have multiple rows
containing NULL for the column used by the unique key, and the
slave merely picked the first row containing NULL in that
column. (Bug#53893:

statement was executed within a transaction that updated only
transactional engines and was later rolled back (for example,
due to a deadlock) the changes---including the creation of the
temporary table---were not written to the binary log, which
caused subsequent updates to this table to fail on the slave.

* Replication: When using the statement-based logging format,
statements that used CONNECTION_ID() were always kept in the
transaction cache; consequently, nontransactional changes that
should have been flushed before the transaction were kept in
the transaction cache.
This regression was introduced by

* Replication: In some cases, attempting to update a column with
a value of an incompatible type resulted in a mismatch between
master and slave because the column value was set to its
implicit default value on the master (as expected), but the
same column on the slave was set to NULL.

* Replication: When temporary tables were in use, switching the
binary logging format from STATEMENT to ROW did not take
effect until all temporary tables were dropped. (The existence
of temporary tables should prevent switching the format only
from ROW to STATEMENT from taking effect, not the reverse.)

* Replication: A buffer overrun in the handling of DATE column
values could cause mysqlbinlog to fail when reading back logs
containing certain combinations of DML on a table having a
DATE column followed by dropping the table.

* Replication: The failure of a REVOKE statement was logged with
the wrong error code, causing replication slaves to stop even
when the failure was expected on the master.

* -laio missing from embedded libs

Please see the complete list of changes to MySQL 5.5.5