Released on 27 Feb 2006
MySQL 5.1.7 Changelog
  • Functionality Added or Changed

  • Bugs Fixed

Functionality Added or Changed

  • Incompatible Change: The mysql_stmt_attr_get() C API function now returns a boolean rather than an unsigned int for STMT_ATTR_UPDATE_MAX_LENGTH. (Bug #16144)

  • Incompatible Change: Due to a change in the naming scheme for partitioning and subpartitioning files, it is not possible for the server to read partitioned tables created in previous MySQL versions. Attempting to read pre-5.1.6 partitioned tables with a MySQL 5.1.7 or later server now generates a suitable warning message.

    Two possible workarounds are:

      1. Create a nonpartitioned table with the same table schema using a standard CREATE TABLE statement (that is, with no partitioning clauses)

      2. Issue a SELECT INTO to copy the data into the nonpartitioned table before the upgrade

      Following the upgrade, you can partition the new table using ALTER TABLE ... PARTITION BY ....

    • Alternatively, you can dump the table using mysqldump prior to upgrading and reload it afterward with LOAD DATA.

    In either case, you should drop the pre-5.1.6 partitioned tables before upgrading to 5.1.6 or later.


    If any partitioned tables that were created prior to MySQL 5.1.6 are present following an upgrade to MySQL 5.1.6 or later, it is also not possible to read from the INFORMATION_SCHEMA.PARTITIONS table, nor will you be able to drop those tables or the database or databases in which they are located. In this event, you must:

    1. Shut down mysqld

    2. Manually delete the table, partition, and (if any) subpartition files

    3. Restart the MySQL Server

    (Bug #13437, Bug #16695)

  • Incompatible Change: TYPE = engine_name is no longer accepted as a synonym for the ENGINE = engine_name table option. (TYPE has been deprecated since MySQL 4.0.)

  • MySQL Cluster: Attempting to SELECT ... FROM INFORMATION_SCHEMA.FILES now raises a warning in the event that the cluster has crashed. (Bug #17087)

  • Replication: In row-based replication, when executing a Rows_log_event, the associated table was locked, the rows applied and the lock released. This did not work since there are storage engines that count locks and perform an autocommit when the number of locks reach zero. Now we ensure that all table maps come before all ROWS events in a statement.

  • Disk Data: Status messages have been added to ndb_restore to enable users to know that data files for Disk Data are being created. (Bug #16873)

  • Cluster Replication: It is now possible to replicate NDB tables having no explicit primary key. See MySQL Cluster Replication.

  • Creator privileges are now checked for all events before execution. (Bug #17289)

  • CREATE EVENT, DROP EVENT, and ALTER EVENT statements are not permitted in triggers. (Bug #16410)

  • The SQL mode in effect at the time an event is created or altered is recorded and used during event execution. (Bug #16407)

  • New charset command added to mysql command-line client. By typing charset name or \C name (such as \C UTF8), the client character set can be changed without reconnecting. (Bug #16217)

  • Added the --wait-timeout option to mysqlmanager to enable configuration of the timeout for dropping an inactive connection, and increased the default timeout from 30 seconds to 28,800 seconds (8 hours). (Bug #15980, Bug #12674)

  • All subpartitions within a given partitioned table are now guaranteed to have unique names. (Bug #15408)

  • Several changes were made to make upgrades easier:

    • Added the mysql_upgrade program that checks all tables for incompatibilities with the current version of MySQL Server and repairs them if necessary. This program should be run for each MySQL upgrade (rather than mysql_fix_privilege_tables). See mysql_upgrade — Check and Upgrade MySQL Tables.

    • Added the FOR UPGRADE option for the CHECK TABLE statement. This option checks whether tables are incompatible with the current version of MySQL Server.

    • Added the --check-upgrade to mysqlcheck that invokes CHECK TABLE with the FOR UPGRADE option. Added the --fix-db-names and --fix-table-names options to mysqlcheck.

  • Removed the have_isam and have_raid system variables.


  • mysqlimport now has a --use-threads=N option for loading data files in parallel using N threads.

  • Added the RENAME DATABASE statement.

  • Added the IN NATURAL LANGUAGE MODE and IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION modifiers for full-text searches. See Full-Text Search Functions.

Bugs Fixed

  • MySQL Cluster: Creating NDB tables containing BLOB columns but no primary key caused unpredictable behavior. (Bug #17559)

  • MySQL Cluster: Inserting the output of REPEAT('some_string', some_int) into a BLOB column resulted in the error Invalid blob attributes or invalid blob parts table. (Bug #17505)

  • MySQL Cluster: ndbd restarts could sometimes fail due to incorrect memory access. (Bug #17417)

  • MySQL Cluster: Sharing of table names containing special characters between multiple SQL nodes was not handled correctly when binary logging was enabled (a timeout error resulted). (Bug #17415)

  • MySQL Cluster: Table definitions were not shared between multiple SQL nodes in a cluster without binary logging being enabled. (Bug #17414)

  • MySQL Cluster: Cluster log file paths were truncated to 128 characters. They may now be as long as MAX_PATH (the maximum path length permitted by the operating system). (Bug #17411)

  • MySQL Cluster: SHOW CREATE TABLE failed when run against a table created in a different session. (Bug #17340)

  • MySQL Cluster: Following multiple forced shutdowns and restarts of data nodes, DROP DATABASE could fail. (Bug #17325)

  • MySQL Cluster: The REDO log would become corrupted (and thus unreadable) in some circumstances, due to a failure in the query handler. (Bug #17295)

  • MySQL Cluster: An UPDATE with an inner join failed to match any records if both tables in the join did not have a primary key. (Bug #17257)

  • MySQL Cluster: A DELETE with a join in the WHERE clause failed to retrieve any records if both tables in the join did not have a primary key. (Bug #17249)

  • MySQL Cluster: CREATE TEMPORARY TABLE of a Cluster table failed with an Unsupported error or crash the server. (Bug #17210, Bug #16552)

  • MySQL Cluster: The storage engine did not permit views to be updated. (Bug #17206)

  • MySQL Cluster: When attempting to import data into an NDB table using LOAD DATA INFILE, the server would hang in the event of a duplicate key error. (Bug #17154)

  • MySQL Cluster: In some cases, LOAD DATA INFILE did not load all data into NDB tables. (Bug #17081)

  • MySQL Cluster: CREATE TABLE new_tbl LIKE old_tbl; failed when old_tbl used the NDB storage engine. (Bug #17005)

  • MySQL Cluster: An unhandled resources issue could cause node failure with a DELETE FROM TABLE affecting thousands of rows. (Bug #16492)

  • MySQL Cluster: UNIQUE keys in Cluster tables were limited to 225 bytes in length. (Bug #15918)

  • MySQL Cluster: REPLACE failed when attempting to update a primary key value in a Cluster table. (Bug #14007)

  • MySQL Cluster: No error message was generated for setting NoOfFragmentLogFiles too low. (Bug #13966)

  • MySQL Cluster: No error message was generated for setting MaxNoOfAttributes too low. (Bug #13965)

  • MySQL Cluster: Performing large numbers of data manipulation statements on cluster tables using Disk Data could lead to a server crash.

  • Replication; Cluster Replication: Row-based replication of a cluster failed to take --binlog-ignore-db settings into account. (Bug #17188)

  • Replication: An ALTER DATABASE statement on a replication master crashed the slaves. (Bug #17521)

  • Replication: For a transaction that used MyISAM and InnoDB tables, interruption of the transaction due to a dropped connection on a master server caused slaves to lose synchrony. (Bug #16559)

  • Replication: Previously, a stored function invocation was written to the binary log as DO func_name() if the invocation changes data and occurs within a nonlogged statement, or if the function invokes a stored procedure that produces an error. These invocations now are logged as SELECT func_name() instead for better control over error code checking (slave servers could stop due to detecting a different error than occurred on the master). (Bug #14769)

  • Replication: BIT fields were not properly handled when using row-based replication. (Bug #13418)

  • Disk Data: In some cases, a cluster using Disk Data tables could not be restarted following a normal shutdown. (Bug #16872)

  • Cluster Replication: Row-based replication was not set up correctly if a backup was already in progress. For example, connecting a mysqld instance to a cluster which was being backed up would result in the message NDB: skipping setup table tbl_name being written to the error log. (Bug #17459)

  • Cluster Replication: Cluster tables not having an explicit primary key could not be replicated. (Bug #14541)

  • Column counts were encoded incorrectly in the binary log for row-based logging format. (Bug #17678)

  • Data truncations on non-UNIQUE indexes could crash InnoDB when using multibyte character sets. (Bug #17530)

  • Execution times for scheduled events were not calculated correctly: the last execution time was used as a base rather than the actual start time. (Bug #17494)

  • Creating an event and using a whitespace character other than space following the DO keyword caused a server crash. (Bug #17453)

  • Partitioning with certain SUBPARTITION BY HASH clauses caused an error when querying for a partitioned column using an IS NULL comparison. (Bug #17430, Bug #17432)

  • Race conditions between event creation, dropping, and execution could result in a server crash or hang. (Bug #17373)

  • Trying to create a partitioned table with more than 32 attributes failed. (Bug #17179)

  • Attempting to add a new partition to a table partitioned by a unique key would cause an Out of memory error. (Bug #17169)

  • myisam_ftdump did not work for FULLTEXT indexes associated with a parser plugin. (Bug #17116)

  • On Windows platforms, some attempts to create partitioned tables from the command line would cause the mysql client to hang. (Bug #17082)

  • A SELECT from the last partition of a subpartitioned table having a UNIQUE KEY could crash the MySQL Server. (Bug #16907)

  • Statements that contained Unicode characters were not logged to the log tables correctly. (Bug #16905)

  • A SELECT on a subpartitioned table having a multiple-column PRIMARY or UNIQUE KEY, and whose partitioning function used only the first column of the key, could cause mysqld to crash. (Bug #16901)

  • A RETURN statement within a trigger caused a server crash. RETURN is no longer permitted within triggers. To exit immediately, use LEAVE. (Bug #16829)

  • Using REPLACE INTO on a partitioned table having a primary key would crash the server in the event of a duplicate key error. (Bug #16782)

  • DROP TABLE would sometimes fail on a table having subpartitions that used the default storage engine. (Bug #16775)

  • If the query optimizer transformed a GROUP BY clause in a subquery, it did not also transform the HAVING clause if there was one, producing incorrect results. (Bug #16603)

  • Querying the INFORMATION_SCHEMA.PARTITIONS table on a nonmax server caused a server crash. This also happened following the creation of a table with a very large number (hundreds) of partitions. (Bug #16591, Bug #17141)

  • SHOW CREATE EVENT displayed no output. (Bug #16423)

  • DROP DATABASE did not drop events for the database. (Bug #16406)

  • The mysql_fix_privilege_tables.sql script did not properly initialize the Event_priv column to 'Y' for those accounts that should have the EVENT privilege. (Bug #16400)

  • SELECT with GROUP BY on a view could cause a server crash. (Bug #16382)

  • MySQL server dropped client connection for certain SELECT statements against views defined that used MERGE algorithm. (Bug #16260)

  • Using an XPath expression containing = with ExtractValue() caused the server to crash. (Bug #16242)

  • When used with the ExtractValue() function, an XPath expression having no leading / character would crash the server. (Bug #16234)

  • Using GROUP BY on column used in WHERE clause could cause empty set to be returned. (Bug #16203)

  • CAST(... AS TIME) operations returned different results when using versus not using prepared-statement protocol. (Bug #15805)

  • The SELECT privilege was required for triggers that performed no selects. (Bug #15196)

  • The UPDATE privilege was required for triggers that performed no updates. (Bug #15166)

  • A statement containing GROUP BY and HAVING clauses could return incorrect results when the HAVING clause contained logic that returned FALSE for every row. (Bug #14927)

  • Killing a long-running query containing a subquery could cause a server crash. (Bug #14851)

  • SUBSTRING_INDEX() could yield inconsistent results when applied with the same arguments to consecutive rows in a query. (Bug #14676)

  • SET sql_mode = N, where N > 31, did not work properly. (Bug #13897)

  • SHOW CREATE TABLE produced extraneous spaces following the keywords PRIMARY KEY. (Bug #13883)

  • InnoDB could display an incorrect error message for a cascading update. (Bug #9680)

  • CHECKSUM TABLE returned different values for MyISAM tables depending on whether the QUICK or EXTENDED option was used. (Bug #8841)

  • SET TRANSACTION ISOLATION LEVEL acted like SET SESSION TRANSACTION ISOLATION LEVEL. That is, it set the isolation level for longer than the next transaction. (Bug #7955)

  • Repeated invocation of my_init() and my_end() caused corruption of character set data and connection failure. (Bug #6536)