版本历史 MySQL Server 5.2.25
- InnoDB Plugin has been upgraded to version 1.0.7. This version is considered of General Availability (GA) quality. InnoDB Plugin Change History, may contain information in addition to those changes reported here.
In this release, the InnoDB Plugin is included in source and binary distributions, except RHEL3, RHEL4, SuSE 9 (x86, x86_64, ia64), and generic Linux RPM packages. It also does not work for FreeBSD 6 and HP-UX or for Linux on generic ia64.
Functionality added or changed:
- There is a new system variable, skip_name_resolve, that is set from the value of the --skip-name-resolve server option. This provides a way to determine at runtime whether the server uses name resolution for client connections. (Bug #37168)
- Performance: InnoDB Storage Engine: The redo scan during InnoDB recovery used excessive CPU. The efficiency of this scan was improved for InnoDB Plugin, significantly speeding up crash recovery. (Bug #49535, Bug #29847)
- Performance: InnoDB Storage Engine: InnoDB Plugin page-freeing operations were made faster for compressed blocks, speeding up ALTER TABLE, DROP TABLE, and other operations on compressed tables that free compressed blocks. One symptom of the older behavior could be 100% CPU use during these operations. (Bug #35077)
- 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. (Bug #39653)
See also Bug #55656.
- Security Fix: Privilege checking for UNINSTALL PLUGIN was incorrect. (Bug #51770, CVE-2010-1621)
- Important Change: When using fast ALTER TABLE, different internal ordering of indexes in the MySQL optimizer and the InnoDB storage engine could cause error messages about possibly mixed up .frm files and incorrect index use. (Bug #47622)
- InnoDB Storage Engine: Replication: TRUNCATE TABLE performed on a temporary table using the InnoDB storage engine was logged even when using row-based mode. (Bug #51251)
- InnoDB Storage Engine: Replication: Column length information generated by InnoDB did not match that generated by MyISAM, which caused invalid metadata to be written to the binary log when trying to replicate BIT columns. (Bug #49618)
- InnoDB Storage Engine: For InnoDB Plugin, bit fields were causing problems with concurrency on SMP systems because of word-packing issues. (Bug #52360)
- InnoDB Storage Engine: Fixed a performance issue on Windows systems that affected the InnoDB Plugin, by turning off atomic instructions. (Bug #52102)
- InnoDB Storage Engine: The AIX implementation of readdir_r() caused InnoDB errors. (Bug #50691)
- 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. (Bug #51830)
- 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. (Bug #50392)
- Partitioning: Foreign keys are not supported on partitioned tables. However, it was possible using 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. (Bug #50104)
- 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 incorrectly. (Bug #48229)
See also Bug #37252.
- Partitioning: REPAIR TABLE failed for partitioned ARCHIVE tables. (Bug #46565)
- Replication: When using temporary tables the binary log needs to insert a pseudo-thread ID for threads that are using temporary tables, each time a switch happens between two threads, both of which are using temporary tables. However, if a thread issued a failing statement before exit, its ID was not recorded in the binary log, and this in turn caused the ID for the next thread that tried to do something with a temporary table not to be logged as well. Subsequent replays of the binary log failed with the error Table ... doesn't exist. (Bug #51226)
- Replication: If the master was using sql_mode='TRADITIONAL', duplicate key errors were not sent to the slave, which received 0 rather than the expected error code. This caused replication to fail even when such an error was expected. (Bug #51055)
- Replication: When run with the --database option, mysqlbinlog printed ROLLBACK statements but did not print any corresponding SAVEPOINT statements. (Bug #50407)
- Replication: When a CREATE EVENT statement was followed by an additional statement and the statements were executed together as a single statement, the CREATE EVENT statement was padded with “garbage” characters when written to the binary log, which led to a syntax error when trying to read back from the log. (Bug #50095)
- Replication: The value of Slave_IO_running in the output of SHOW SLAVE STATUS did not distinguish between all 3 possible states of the slave I/O thread (not running; running but not connected; connected). Now the value Connecting (rather than No) is shown when the slave I/O thread is running but the slave is not connected to a replication master.
The server system variable Slave_running also reflects this change, and is now consistent with what is shown for Slave_IO_running. (Bug #30703, Bug #41613, Bug #51089)
- EXPLAIN EXTENDED crashed trying to resolve references to freed temporary table columns for GROUP_CONCAT() ORDER BY arguments. (Bug #52397)
- The optimizer could attempt to evaluate the WHERE clause before any rows had been read, resulting in a server crash. (Bug #52177)
- For LDML-defined collations, some data structures were not initialized properly to enable UPPER() and LOWER() to work correctly. (Bug #51976)
- On Windows, LOAD_FILE() could cause a crash for some pathnames. (Bug #51893)
- Invalid memory reads occurred for HANDLER ... READ NEXT after a failed HANDLER ... READ FIRST. (Bug #51877)
- After TRUNCATE TABLE of a MyISAM table, subsequent queries could crash the server if myisam_use_mmap was enabled. (Bug #51868)
- If myisam_sort_buffer_size was set to a small value, table repair for MyISAM tables with FULLTEXT indexes could crash the server. (Bug #51866)
- In LOAD DATA INFILE, using a SET clause to set a column equal to itself caused a server crash. (Bug #51850)
- A problem with equality propagation optimization for prepared statements and stored procedures caused a server crash upon re-execution of the prepared statement or stored procedure. (Bug #51650)
See also Bug #8115, Bug #8849.
- The optimizer performed an incorrect join type when COALESCE() appeared within an IN() operation. (Bug #51598)
- The server crashed when the optimizer attempted to determine constant tables but a table storage engine did not support exact record count. (Bug #51494)
- A unique index on a column prefix could not be upgraded to a primary index even if there was no primary index already defined. (Bug #51378)
- The server could crash populating the INFORMATION_SCHEMA.PROCESSLIST table due to lack of mutex protection. (Bug #51377)
- Use of HANDLER statements with tables that had spatial indexes caused a server crash. (Bug #51357)
- With an XA transaction active, SET autocommit = 1 could cause side effects such as memory corruption or a server crash. (Bug #51342)
- Following a bulk insert into a MyISAM table, if MyISAM failed to build indexes using repair by sort, data file corruption could occur. (Bug #51307)
- CHECKSUM TABLE could compute the checksum for BIT columns incorrectly. (Bug #51304)
- A HAVING clause on a joined table in some cases failed to eliminate rows which should have been excluded from the result set. (Bug #51242)
- The type inference used for view columns caused some columns in views to be handled as the wrong type, as compared to the same columns in base tables. DATE columns in base tables were treated as TIME columns in views, and base table TIME columns as view DATETIME columns. (Bug #50918)
- The YEAR values 2000 and 0000 could be treated as equal. (Bug #49910)
- Performing a single in-place ALTER TABLE containing ADD INDEX and DROP INDEX options that used the same index name could result in a corrupt table definition file. Now such ALTER TABLE statements are no longer performed in place. (Bug #49838)
- mysql_upgrade did not detect when CSV log tables incorrectly contained columns that could be NULL. Now these columns are altered to be NOT NULL. (Bug #49823)
- InnoDB would return an error when inserting a negative value into an auto-increment column. (Bug #49497)
- InnoDB did not reset table AUTO_INCREMENT values to the last used values after a server restart. (Bug #49032)
- If a stored function contained a RETURN statement with an ENUM value in the ucs2 character set, SHOW CREATE FUNCTION and SELECT DTD_IDENTIFIER FROM INFORMATION_SCHEMA.ROUTINES returned incorrect values. (Bug #48766)
- A trigger could change the behavior of assigning NULL to a NOT NULL column. (Bug #48525)
- The server crashed when it could not determine the best execution plan for queries involving outer joins with nondeterministic ON clauses such as the ones containing the RAND() function, a user-defined function, or a NOT DETERMINISTIC stored function. (Bug #48483)
- The MERGE engine failed to open a child table from a different database if the child table or database name contained characters that were the subject of table name to filename encoding.
Further, the MERGE engine did not properly open a child table from the same database if the child table name contained characters such as '/', '#'. (Bug #48265)
- A query that read from a derived table (of the form SELECT ... FROM (SELECT ...)) produced incorrect results when the following conditions were present:
- The table subquery contained a derived query ((SELECT ... ) AS column).
- The derived query could potentially produce zero rows or a single NULL (that is, no rows matched, or the query used an aggregate function such as SUM() running over zero rows).
- The table subquery joined at least two tables.
- The join condition involved an index.
- The optimization to read MIN() or MAX() values from an index did not properly handle comparisons with NULL values. This could produce incorrect results for MIN() or MAX()when the WHERE clause tested a NOT NULL column for NULL. (Bug #47762)
- Killing a query during the optimization phase of a subquery could cause a server crash. (Bug #47761)
- The query shown by EXPLAIN EXTENDED plus SHOW WARNINGS could produce results different from the original query. (Bug #47669)
- Renaming a column of an InnoDB table caused the server to go out of sync with the InnoDB data dictionary. To avoid this issue, renaming a column uses the older technique of copying all the table data rather than updating the table in-place. (Bug #47621)
- MyISAM could write uninitialized data to new index pages. Now zeros are written to unused bytes in the pages. (Bug #47598)
- Setting myisam_repair_threads larger than 1 could result in the cardinality for all indexes of a MyISAM table being set to 1 after parallel index repair. (Bug #47444)
- In debug builds, if the listed columns in the view definition of the table used in an INSERT ... SELECT statement mismatched, an assertion was raised in the query cache invalidation code following the failing statement. (Bug #46615)
- For a query that selected from a view and used an alias for the view, the metadata used the alias name rather than the view name in the MYSQL_FIELD.table member. (Bug #41788)
- mysql_upgrade did not create temporary files properly. (Bug #41057)
- It was possible for DROP TABLE of one MyISAM table to remove the data and index files of a different MyISAM table. (Bug #40980)
- If the arguments to a CONCAT() call included a local routine variable, selecting the return value into a user variable could produce an incorrect result. (Bug #40625)
- SHOW CREATE VIEW returned invalid SQL if the definition contained a SELECT 'string' statement where the string was longer than the maximum length of a column name, due to the fact that this text was also used as an alias (in the AS clause).
Because not all names retrieved from arbitrary SELECT statements can be used as view column names due to length and format restrictions, the server now checks the conformity of automatically generated column names and rewrites according to a predefined format any names that are not acceptable as view column names before storing the final view definition on disk.
In such cases, the name is now rewritten as Name_exp_pos, where pos is the position of the column. To avoid this conversion scheme, define explicit, valid names for view columns using the column_list clause of the CREATE VIEW statement.
As part of this fix, aliases are now generated only for top-level statements. (Bug #40277)
- mysqlbinlog had a memory leak in its option-processing code. (Bug #38468)
- The test for readline during configuration failed when trying to build MySQL in a directory other than the source tree root. (Bug #35250)
- A query on a FEDERATED table in which the data was ordered by a TEXT column returned incorrect results. For example, a query such as the following would result in incorrect results if column column1 was a TEXT column:
SELECT * FROM table1 ORDER BY column1;