2008.09.13

MySQL

MySQL 5.1.28rc版がリリースされました。

オリジナル版:http://dev.mysql.com/doc/refman/5.1/en/news-5-1-28.html

最も普及しているオープンソースデータベースの新たなリリース候補であるMySQL 5.1.28rc版がリリースされました。


MySQL 5.1.28rc版はMySQL 5.1を製品版(GA版)として公表する前のリリース候補となっています。したがって、残りのクリティカルな問題の解決を確実にするために、本リリースのご意見およびコミュニティテストを頂けると嬉しいです。

MySQL 5.1.28rc版はまだ安定版候補のリリースであり、他の多くの試作商品リリースと同様、商品レベルのシステムまたは、重要なデータを含むシステムに対してインストールしないように注意してください。5.0使用の商品レベルのシステムについては、以下のMySQL Enterpriseの商品説明のページをご覧ください。

http://mysql.com/products/enterprise/

MySQL 5.1.28rc版は、http://dev.mysql.com/downloads/とミラーサイトのダウンロード・ページから、ソースコード及び多くのプラットフォームのためのバイナリで現在利用可能です。

すべてのミラーサイトが現在、最新であるとは限らないことに注意してください。
あるミラーサイトでこのバージョンを見つけることができない場合は、再度確認を行うか、あるいは別のダウンロード・サイトを選択してください。


バグレポート、バグ修正、パッチ等の情報をお待ちしておりますので、以下のページをご利用ください。

http://forge.mysql.com/wiki/Contributing


以下のセクションはMySQL5.1の最も最近にリリースされたバージョンであるMySQL5.1.26rc版と比較してのMySQLソースコードにおけるバージョン間の変更を記載しています。

http://dev.mysql.com/doc/refman/5.1/en/news-5-1-28.html

以下は、追加または変更された機能です。


=======================================================================

   Important bugs fixed (5.1.28):

     * 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.(Bug#32167:http://bugs.mysql.com/32167, CVE-2008-2079
       (http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-2079))

     * Security Enhancement: The server consumed excess memory while
       parsing statements with hundreds or thousands of nested
       boolean conditions (such as OR (OR ... (OR ... ))). This could
       lead to a server crash or incorrect statement execution, or
       cause other client statements to fail due to lack of memory.
       The latter result constitutes a denial of service.
       (Bug#38296:http://bugs.mysql.com/38296)

     * Incompatible Change: An additional correction to the original
       MySQL 5.1.23 fix was made to normalize directory names before
       adding them to the list of directories. This prevents "/etc/"
       and "/etc" from being considered different, for example.
       (Bug#20748:http://bugs.mysql.com/20748)
       See also Bug#38180:http://bugs.mysql.com/38180

   Important bugs fixed (5.1.27, not released):

     * Partitioning: Incompatible Change: On Mac OS X with
       "lower_case_table_names = 2", the server could not read
       partitioned tables whose names contained uppercase letters.
       Partitioned tables using mixed case names should be renamed or
       dropped before upgrading to this version of the server on Mac
       OS X. (Bug#37402:http://bugs.mysql.com/37402)

     * Partitioning: Incompatible Change: This restores functionality
       missing since the removal of ALTER TABLE ... ANALYZE
       PARTITION, ALTER TABLE ... CHECK PARTITION, ALTER TABLE ...
       OPTIMIZE PARTITION, and ALTER TABLE ... REPAIR PARTITION in
       MySQL 5.1.24. (Bug#20129:http://bugs.mysql.com/20129)

   Bugs fixed (5.1.28):

     * Partitioning: When a partitioned table had a TIMESTAMP column
       defined with CURRENT_TIMESTAMP as the default but with no ON
       UPDATE clause, the column's value was incorrectly set to
       CURRENT_TIMESTAMP when updating across partitions.
       (Bug#38272:http://bugs.mysql.com/38272)

     * Partitioning: A LIST partitioned MyISAM table returned
       erroneous results when an index was present on a column in the
       WHERE clause and NOT IN was used on that column.
       Searches using the index were also much slower then if the
       index were not present.
       (Bug#35931:http://bugs.mysql.com/35931)

     * Partitioning: SELECT COUNT(*) was not correct for some
       partitioned tables using a storage engine that did not support
       HA_STATS_RECORDS_IS_EXACT. Tables using the ARCHIVE storage
       engine were known to be affected.
       This was because ha_partition::records() was not implemented,
       and so the default handler::records() was used in its place.
       However, this is not correct behavior if the storage engine
       does not support HA_STATS_RECORDS_IS_EXACT.
       The solution was to implement ha_partition::records() as a
       wrapper around the underlying partition records.
       As a result of this fix, the rows column in the output of
       EXPLAIN PARTITIONS now includes the total number of records in
       the partitioned table.
       (Bug#35745:http://bugs.mysql.com/35745)

     * Partitioning: When one user was in the midst of a transaction
       on a partitioned table, a second user performing an ALTER
       TABLE on this table caused the server to hang.
       (Bug#34604:http://bugs.mysql.com/34604)

     * Replication: Some kinds of internal errors (such as Out of
       stack) cuased the server to crash.
       (Bug#37150:http://bugs.mysql.com/37150)

     * Replication: Row-based replication did not correctly copy
       TIMESTAMP values from a big-endian storage engine to a
       little-endian storage engine.
       (Bug#37076:http://bugs.mysql.com/37076)

     * Replication: INSTALL PLUGIN and UNINSTALL PLUGIN caused
       row-based replication to fail. Note that these statements are
       not replicated; howver, when using row-based logging, the
       changes they introduce in mysql system tables are written
       to the binary log.
       (Bug#35807:http://bugs.mysql.com/35807)

     * Server-side cursors were not initialized properly, which could
       cause a server crash. (Bug#38486:http://bugs.mysql.com/38486)

     * A server crash or Valgrind warnings could result when a stored
       procedure selected from a view that referenced a function.
       (Bug#38291:http://bugs.mysql.com/38291)

     * Incorrect handling of aggregate functions when loose index
       scan was used caused a server crash.
       (Bug#38195:http://bugs.mysql.com/38195)

     * Over-aggressive lock acquisition by InnoDB could result in
       performance degradation when multiple threads were executing
       statements on multi-core machines.
       (Bug#38185:http://bugs.mysql.com/38185)

     * The fix for Bug#20748:http://bugs.mysql.com/20748caused a
       problem such that on Unix, MySQL programs looked for options
       in "~/my.cnf" rather than the standard location of "~/.my.cnf".
       (Bug#38180:http://bugs.mysql.com/38180)

     * If the table definition cache contained tables with many BLOB
       columns, much memory could be allocated to caching BLOB
       values. Now a size limit on the cached BLOB values is
       enforced. (Bug#38002:http://bugs.mysql.com/38002)

     * For InnoDB tables, ORDER BY ... DESC sometimes returned
       results in ascending order.
       (Bug#37830:http://bugs.mysql.com/37830)

     * If a table has a BIT NOT NULL column c1 with a length shorter
       than 8 bits and some additional NOT NULL columns c2, ..., and
       a SELECT query has a WHERE clause of the form (c1 = constant)
       AND c2 ..., the query could return an unexpected result set.
       (Bug#37799:http://bugs.mysql.com/37799)

     * The server returned unexpected results if a right side of the
       NOT IN clause consisted of the NULL value and some constants
       of the same type. For example, this query might return 3, 4,
       5, and so forth if a table contained those values:

  SELECT * FROM t WHERE NOT t.id IN (NULL, 1, 2);

       (Bug#37761:http://bugs.mysql.com/37761)

     * Setting the session value of the innodb_table_locks system
       variable caused a server crash.
       (Bug#37669:http://bugs.mysql.com/37669)

     * Nesting of IF() inside of SUM() could cause an extreme server
       slowdown. (Bug#37662:http://bugs.mysql.com/37662)

     * Killing a query that used an EXISTS subquery as the argument
       to SUM() or AVG() caused a server crash.
       (Bug#37627:http://bugs.mysql.com/37627)

     * When using indexed ORDER BY sorting, incorrect query results
       could be produced if the optimizer switched from a covering
       index to a non-covering index.
       (Bug#37548:http://bugs.mysql.com/37548)

     * myisamchk failed with an assertion error when analyzing a
       partitioned MyISAM table.
       (Bug#37537:http://bugs.mysql.com/37537)

     * After TRUNCATE TABLE for an InnoDB table, inserting explicit
       values into an AUTO_INCREMENT column could fail to increment
       the counter and result in a duplicate-key error for subsequent
       insertion of NULL. (Bug#37531:http://bugs.mysql.com/37531)

     * Within stored programs or prepared statements, REGEXP could
       return incorrect results due to improper initialization.
       (Bug#37337:http://bugs.mysql.com/37337)

     * For a MyISAM table with CHECKSUM = 1 and ROW_FORMAT = DYNAMIC
       table options, a data consistency check (maximum record
       length) could fail and cause the table to be marked as
       corrupted. (Bug#37310:http://bugs.mysql.com/37310)

     * The max_length result set metadata value was calculated
       incorrectly under some circumstances.
       (Bug#37301:http://bugs.mysql.com/37301)

     * Some performance problems of SHOW ENGINE INNODB STATUS were
       reduced by removing the used cells and Total number of lock
       structs in row lock hash table clauses from the output. These
       are now present only if UNIV_DEBUG is defined at MySQL build
       time. (Bug#36941:http://bugs.mysql.com/36941)

     * If the length of a field was 3, internal InnoDB to integer
       type conversion didn't work on big-endian machines in the
       row_search_autoinc_column() function.
       (Bug#36793:http://bugs.mysql.com/36793)

     * The CSV storage engine returned success even when it failed to
       open a table's data file.
       (Bug#36638:http://bugs.mysql.com/36638)

     * SELECT DISTINCT from a simple view on an InnoDB table, where
       all selected columns belong to the same unique index key,
       returned incorrect results.
       (Bug#36632:http://bugs.mysql.com/36632)

     * SHOW STATUS took a lot of CPU time for calculating the value
       of the Innodb_buffer_pool_pages_latched status variable. Now
       this variable is calculated and included in the output of SHOW
       STATUS only when the UNIV_DEBUG symbol is defined at server
       build time. (Bug#36600:http://bugs.mysql.com/36600)

     * Dumping information about locks in use by sending a SIGHUP
       signal to the server or by invoking the mysqladmin debug
       command could lead to a server crash in debug builds or to
       undefined behavior in production builds.
       (Bug#36579:http://bugs.mysql.com/36579)

     * If initialization of an INFORMATION_SCHEMA plugin failed,
       INSTALL PLUGIN freed some internal plugin data twice.
       (Bug#36399:http://bugs.mysql.com/36399)

     * For InnoDB tables, the DATA_FREE column of the
       INFORMATION_SCHEMA.TABLES displayed free space in kilobytes
       rather than bytes. Now it displays bytes.
       (Bug#36278:http://bugs.mysql.com/36278)

     * When the fractional part in a multiplication of DECIMAL values
       overflowed, the server truncated the first operand rather than
       the longest. Now the server truncates so as to produce more
       precise multiplications.
       (Bug#36270:http://bugs.mysql.com/36270)

     * The mysql client failed to recognize comment lines consisting
       of "--" followed by a newline.
       (Bug#36244:http://bugs.mysql.com/36244)

     * The server could crash with an assertion failure (or cause the
       client to get a "Packets out of order" error) when the
       expected query result is that it should terminate with a
       "Subquery returns more than 1 row" error.
       (Bug#36135:http://bugs.mysql.com/36135)

     * The UUID() function returned UUIDs with the wrong time; this
       was because the offset for the time part in UUIDs was
       miscalculated. (Bug#35848:http://bugs.mysql.com/35848)

     * The configure script did not allow utf8_hungarian_ci to be
       specified as the default collation.
       (Bug#35808:http://bugs.mysql.com/35808)

     * On 64-bit systems, assigning values of 2 ^63 - 1 or larger to
       key_buffer_size caused memory overruns.
       (Bug#35616:http://bugs.mysql.com/35616)

     * For InnoDB tables, REPLACE statements used "traditional" style
       locking, regardless of the setting of
       innodb_autoinc_lock_mode. Now REPLACE works the same way as
       "simple inserts" instead of using the old locking algorithm.
       (REPLACE statements are treated in the same way as as INSERT
       statements.) (Bug#35602:http://bugs.mysql.com/35602)

     * Freeing of an internal parser stack during parsing of complex
       stored programs caused a server crash.
       (Bug#35577:http://bugs.mysql.com/35577,
 Bug#37269:http://bugs.mysql.com/37269,
 Bug#37228:http://bugs.mysql.com/37228)

     * mysqlbinlog left temporary files on the disk after shutdown,
       leading to the pollution of the temporary directory, which
       eventually caused mysqlbinlog to fail. This caused problems in
       testing and other situations where mysqlbinlog might be
       invoked many times in a relatively short period of time.
       (Bug#35543:http://bugs.mysql.com/35543)

     * Index scans performed with the sort_union() access method
       returned bad data when the sort_buffer_size limit was reached.
       (Bug#35478:http://bugs.mysql.com/35478)

     * MyISAM recovery enabled with the '--myisam-recover' option did
       not work for partitioned MyISAM tables.
       (Bug#35161:http://bugs.mysql.com/35161)

     * Table checksum calculation could cause a server crash for
       FEDERATED tables with BLOB columns containing NULL values.
       (Bug#34779:http://bugs.mysql.com/34779)

     * A significant slowdown occurred when many SELECT statements
       that return many rows from InnoDB tables were running
       concurrently. (Bug#34409:http://bugs.mysql.com/34409)

     * mysql_install_db failed if the server was running with an SQL
       mode of TRADITIONAL. This program now resets the SQL mode
       internally to avoid this problem.
       (Bug#34159:http://bugs.mysql.com/34159)

     * Fast ALTER TABLE operations were not fast for columns that
       used multibyte character sets.
       (Bug#33873:http://bugs.mysql.com/33873)

     * The internal functions my_getsystime(), my_micro_time(), and
       my_micro_time_and_time() did not work correctly on Windows.
       One symptom was that uniqueness of UUID() values could be
       compromised. (Bug#33748:http://bugs.mysql.com/33748)

     * Cached queries that used 256 or more tables were not properly
       cached, so that later query invalidation due to a TRUNCATE
       TABLE for one of the tables caused the server to hang.
       (Bug#33362:http://bugs.mysql.com/33362)

     * mysql_upgrade attempted to use the "/proc" filesystem even on
       systems that do not have it.
       (Bug#31605:http://bugs.mysql.com/31605)

     * mysqlbinlog now supports '--verbose' and
       '--base64-output=DECODE-ROWS' options to display row events as
       commented SQL statements. (The default otherwise is to display
       row events encoded as base-64 strings using BINLOG
       statements.) See Section 4.6.7.2, "mysqlbinlog Row Event
       Display." (Bug#31455:http://bugs.mysql.com/31455)

     * Several MySQL programs could fail if the HOME environment
       variable had an empty value.
       (Bug#30394:http://bugs.mysql.com/30394)

     * On NetWare, mysql_install_db could appear to execute normally
       even if it failed to create the initial databases.
       (Bug#30129:http://bugs.mysql.com/30129)

     * The Serbian translation for the ER_INCORRECT_GLOBAL_LOCAL_VAR
       error was corrected. (Bug#29738:http://bugs.mysql.com/29738)

     * The BUILD/check-cpu build script failed if gcc had a different
       name (such as gcc.real on Debian).
       (Bug#27526:http://bugs.mysql.com/27526)

     * In some cases, the parser interpreted the ; character as the
       end of input and misinterpreted stored program definitions.
       (Bug#26030:http://bugs.mysql.com/26030)

     * The FLUSH PRIVILEGES statement did not produce an error when
       it failed. (Bug#21226:http://bugs.mysql.com/21226)

     * After executing a prepared statement that accesses a stored
       function, the next execution would fail to find the function
       if the stored function cache was flushed in the meantime.
       (Bug#12093:http://bugs.mysql.com/12093,
       Bug#21294:http://bugs.mysql.com/21294)

   Bugs fixed (5.1.27, not released):

     * Replication: Issuing a DROP DATABASE while any temporary
       tables were open caused the server to switch to
       statement-based mode. (Bug#38773:http://bugs.mysql.com/38773)

     * Replication: The '--replicate-*-table' options were not
       evaluated correctly when replicating multi-table updates.
       As a result of this fix, replication of multi-table updates no
       longer fails when an update references a missing table but
       does not update any of its columns.
       (Bug#37051:http://bugs.mysql.com/37051)

     * The fix for Bug#33812:http://bugs.mysql.com/33812had the
       side effect of causing the mysql client not to be able to read
       some dump files produced with mysqldump. To address this, that
       fix was reverted. (Bug#38158:http://bugs.mysql.com/38158)

   Functionality added or changed (5.1.27, not released):

     * "mysqltest" now installs signal handlers and generates a stack
       trace if it crashes. (Bug#37003:http://bugs.mysql.com/37003)

     * "mysql-test-run.pl" now supports '--client-bindir' and
       '--client-libdir' options for specifying the directory where
       client binaries and libraries are located.
       (Bug#34995:http://bugs.mysql.com/34995)