Appendix C. MySQL Change History
Table of Contents
- C.1. Changes in Release 5.1.x (Production)
- C.1.1. Changes in MySQL 5.1.36 (Not yet released)
- C.1.2. Changes in MySQL 5.1.35 (13 May 2009)
- C.1.3. Changes in MySQL 5.1.34 (02 April 2009)
- C.1.4. Changes in MySQL 5.1.33 (13 March 2009)
- C.1.5. Changes in MySQL 5.1.32 (14 February 2009)
- C.1.6. Release Notes for MySQL Enterprise 5.1.31sp1 [QSP] (19 March 2009)
- C.1.7. Changes in MySQL 5.1.31 (19 January 2009)
- C.1.8. Changes in MySQL 5.1.30 (14 November 2008 General Availability)
- C.1.9. Changes in MySQL 5.1.29 (11 October 2008)
- C.1.10. Changes in MySQL 5.1.28 (28 August 2008)
- C.1.11. Changes in MySQL 5.1.27 (Not released)
- C.1.12. Changes in MySQL 5.1.26 (30 June 2008)
- C.1.13. Changes in MySQL 5.1.25 (28 May 2008)
- C.1.14. Changes in MySQL 5.1.24 (08 April 2008)
- C.1.15. Changes in MySQL 5.1.23 (29 January 2008)
- C.1.16. Changes in MySQL 5.1.22 (24 September 2007 Release Candidate)
- C.1.17. Changes in MySQL 5.1.21 (16 August 2007)
- C.1.18. Changes in MySQL 5.1.20 (25 June 2007)
- C.1.19. Changes in MySQL 5.1.19 (25 May 2007)
- C.1.20. Changes in MySQL 5.1.18 (08 May 2007)
- C.1.21. Changes in MySQL 5.1.17 (04 April 2007)
- C.1.22. Changes in MySQL 5.1.16 (26 February 2007)
- C.1.23. Changes in MySQL 5.1.15 (25 January 2007)
- C.1.24. Changes in MySQL 5.1.14 (05 December 2006)
- C.1.25. Changes in MySQL 5.1.13 (Not released)
- C.1.26. Changes in MySQL 5.1.12 (24 October 2006)
- C.1.27. Changes in MySQL 5.1.11 (26 May 2006)
- C.1.28. Changes in MySQL 5.1.10 (Not released)
- C.1.29. Changes in MySQL 5.1.9 (12 April 2006)
- C.1.30. Changes in MySQL 5.1.8 (Not released)
- C.1.31. Changes in MySQL 5.1.7 (27 February 2006)
- C.1.32. Changes in MySQL 5.1.6 (01 February 2006)
- C.1.33. Changes in MySQL 5.1.5 (10 January 2006)
- C.1.34. Changes in MySQL 5.1.4 (21 December 2005)
- C.1.35. Changes in MySQL 5.1.3 (29 November 2005)
- C.1.36. Changes in MySQL 5.1.2 (Not released)
- C.1.37. Changes in MySQL 5.1.1 (Not released)
- C.2. MySQL Enterprise Monitor Change History
- C.2.1. Changes in MySQL Enterprise Monitor 2.1.0 (Not yet released)
- C.2.2. Changes in MySQL Enterprise Monitor 2.0.6 (Not yet released)
- C.2.3. Changes in MySQL Enterprise Monitor 2.0.5 (18th March 2009)
- C.2.4. Changes in MySQL Enterprise Monitor 2.0.4 (5th February 2009)
- C.2.5. Changes in MySQL Enterprise Monitor 2.0.3 (23rd January 2009)
- C.2.6. Changes in MySQL Enterprise Monitor 2.0.2 (14th January 2009)
- C.2.7. Changes in MySQL Enterprise Monitor 2.0.1 (15th December 2008)
- C.2.8. Changes in MySQL Enterprise Monitor 2.0.0 (11th December 2008)
- C.3. MySQL Connector/ODBC (MyODBC) Change History
- C.3.1. Changes in MySQL Connector/ODBC 5.1.6 (Not yet released)
- C.3.2. Changes in MySQL Connector/ODBC 5.1.5 (18 August 2008)
- C.3.3. Changes in MySQL Connector/ODBC 5.1.4 (15 April 2008)
- C.3.4. Changes in MySQL Connector/ODBC 5.1.3 (26 March 2008)
- C.3.5. Changes in MySQL Connector/ODBC 5.1.2 (13 February 2008)
- C.3.6. Changes in MySQL Connector/ODBC 5.1.1 (13 December 2007)
- C.3.7. Changes in MySQL Connector/ODBC 5.1.0 (10 September 2007)
- C.3.8. Changes in MySQL Connector/ODBC 5.0.12 (Never released)
- C.3.9. Changes in MySQL Connector/ODBC 5.0.11 (31 January 2007)
- C.3.10. Changes in MySQL Connector/ODBC 5.0.10 (14 December 2006)
- C.3.11. Changes in MySQL Connector/ODBC 5.0.9 (22 November 2006)
- C.3.12. Changes in MySQL Connector/ODBC 5.0.8 (17 November 2006)
- C.3.13. Changes in MySQL Connector/ODBC 5.0.7 (08 November 2006)
- C.3.14. Changes in MySQL Connector/ODBC 5.0.6 (03 November 2006)
- C.3.15. Changes in MySQL Connector/ODBC 5.0.5 (17 October 2006)
- C.3.16. Changes in Connector/ODBC 5.0.3 (Connector/ODBC 5.0 Alpha 3) (20 June 2006)
- C.3.17. Changes in Connector/ODBC 5.0.2 (Never released)
- C.3.18. Changes in Connector/ODBC 5.0.1 (Connector/ODBC 5.0 Alpha 2) (05 June 2006)
- C.3.19. Changes in MySQL Connector/ODBC 3.51.27 (20 November 2008)
- C.3.20. Changes in MySQL Connector/ODBC 3.51.26 (07 July 2008)
- C.3.21. Changes in MySQL Connector/ODBC 3.51.25 (11 April 2008)
- C.3.22. Changes in MySQL Connector/ODBC 3.51.24 (14 March 2008)
- C.3.23. Changes in MySQL Connector/ODBC 3.51.23 (09 January 2008)
- C.3.24. Changes in MySQL Connector/ODBC 3.51.22 (13 November 2007)
- C.3.25. Changes in MySQL Connector/ODBC 3.51.21 (08 October 2007)
- C.3.26. Changes in MySQL Connector/ODBC 3.51.20 (10 September 2007)
- C.3.27. Changes in MySQL Connector/ODBC 3.51.19 (10 August 2007)
- C.3.28. Changes in MySQL Connector/ODBC 3.51.18 (08 August 2007)
- C.3.29. Changes in MySQL Connector/ODBC 3.51.17 (14 July 2007)
- C.3.30. Changes in MySQL Connector/ODBC 3.51.16 (14 June 2007)
- C.3.31. Changes in MySQL Connector/ODBC 3.51.15 (07 May 2007)
- C.3.32. Changes in MySQL Connector/ODBC 3.51.14 (08 March 2007)
- C.3.33. Changes in MySQL Connector/ODBC 3.51.13 (Never released)
- C.3.34. Changes in MySQL Connector/ODBC 3.51.12 (11 February 2005)
- C.3.35. Changes in MySQL Connector/ODBC 3.51.11 (28 January 2005)
- C.4. MySQL Connector/NET Change History
- C.4.1. Changes in MySQL Connector/NET 6.0.4 (Not yet released beta)
- C.4.2. Changes in MySQL Connector/NET 6.0.3 (28 April 2009 beta)
- C.4.3. Changes in MySQL Connector/NET 6.0.2 (07 April 2009 beta)
- C.4.4. Changes in MySQL Connector/NET 6.0.1 (02 April 2009 beta)
- C.4.5. Changes in MySQL Connector/NET 6.0.0 (02 March 2009 alpha)
- C.4.6. Changes in MySQL Connector/NET 5.3.0 (Not yet released)
- C.4.7. Changes in MySQL Connector/NET 5.2.7 (Not yet released)
- C.4.8. Changes in MySQL Connector/NET 5.2.6 (28 April 2009)
- C.4.9. Changes in MySQL Connector/NET 5.2.5 (19 November 2008)
- C.4.10. Changes in MySQL Connector/NET 5.2.4 (13 November 2008)
- C.4.11. Changes in MySQL Connector/NET 5.2.3 (19 August 2008)
- C.4.12. Changes in MySQL Connector/NET 5.2.2 (12 May 2008)
- C.4.13. Changes in MySQL Connector/NET 5.2.1 (27 February 2008)
- C.4.14. Changes in MySQL Connector/NET 5.2.0 (11 February 2008)
- C.4.15. Changes in MySQL Connector/NET 5.1.8 (Not yet released)
- C.4.16. Changes in MySQL Connector/NET 5.1.7 (21 August 2008)
- C.4.17. Changes in MySQL Connector/NET 5.1.6 (12 May 2008)
- C.4.18. Changes in MySQL Connector/NET 5.1.5 (Not yet released)
- C.4.19. Changes in MySQL Connector/NET 5.1.4 (20 November 2007)
- C.4.20. Changes in MySQL Connector/NET 5.1.3 (21 September 2007 beta)
- C.4.21. Changes in MySQL Connector/NET 5.1.2 (18 June 2007)
- C.4.22. Changes in MySQL Connector/NET 5.1.1 (23 May 2007)
- C.4.23. Changes in MySQL Connector/NET 5.1.0 (01 May 2007)
- C.4.24. Changes in MySQL Connector/NET 5.0.10 (Not yet released)
- C.4.25. Changes in MySQL Connector/NET 5.0.9 (Not yet released)
- C.4.26. Changes in MySQL Connector/NET 5.0.8 (21 August 2007)
- C.4.27. Changes in MySQL Connector/NET 5.0.7 (18 May 2007)
- C.4.28. Changes in MySQL Connector/NET 5.0.6 (22 March 2007)
- C.4.29. Changes in MySQL Connector/NET 5.0.5 (07 March 2007)
- C.4.30. Changes in MySQL Connector/NET 5.0.4 (Not released)
- C.4.31. Changes in MySQL Connector/NET 5.0.3 (05 January 2007)
- C.4.32. Changes in MySQL Connector/NET 5.0.2 (06 November 2006)
- C.4.33. Changes in MySQL Connector/NET 5.0.1 (01 October 2006)
- C.4.34. Changes in MySQL Connector/NET 5.0.0 (08 August 2006)
- C.4.35. Changes in MySQL Connector/NET 1.0.11 (Not yet released)
- C.4.36. Changes in MySQL Connector/NET 1.0.10 (24 August 2007)
- C.4.37. Changes in MySQL Connector/NET 1.0.9 (02 February 2007)
- C.4.38. Changes in MySQL Connector/NET 1.0.8 (20 October 2006)
- C.4.39. Changes in MySQL Connector/NET 1.0.7 (21 November 2005)
- C.4.40. Changes in MySQL Connector/NET 1.0.6 (03 October 2005)
- C.4.41. Changes in MySQL Connector/NET 1.0.5 (29 August 2005)
- C.4.42. Changes in MySQL Connector/NET 1.0.4 (20 January 2005)
- C.4.43. Changes in MySQL Connector/NET 1.0.3 (12 October 2004 gamma)
- C.4.44. Changes in MySQL Connector/NET 1.0.2 (15 November 2004 gamma)
- C.4.45. Changes in MySQL Connector/NET 1.0.1 (27 October 2004 beta)
- C.4.46. Changes in MySQL Connector/NET 1.0.0 (01 September 2004)
- C.4.47. Changes in MySQL Connector/NET Version 0.9.0 (30 August 2004)
- C.4.48. Changes in MySQL Connector/NET Version 0.76
- C.4.49. Changes in MySQL Connector/NET Version 0.75
- C.4.50. Changes in MySQL Connector/NET Version 0.74
- C.4.51. Changes in MySQL Connector/NET Version 0.71
- C.4.52. Changes in MySQL Connector/NET Version 0.70
- C.4.53. Changes in MySQL Connector/NET Version 0.68
- C.4.54. Changes in MySQL Connector/NET Version 0.65
- C.4.55. Changes in MySQL Connector/NET Version 0.60
- C.4.56. Changes in MySQL Connector/NET Version 0.50
- C.5. MySQL Visual Studio Plugin Change History
- C.6. MySQL Connector/J Change History
- C.6.1. Changes in MySQL Connector/J 5.1.x
- C.6.2. Changes in MySQL Connector/J 5.0.x
- C.6.3. Changes in MySQL Connector/J 3.1.x
- C.6.4. Changes in MySQL Connector/J 3.0.x
- C.6.5. Changes in MySQL Connector/J 2.0.x
- C.6.6. Changes in MySQL Connector/J 1.2b (04 July 1999)
- C.6.7. Changes in MySQL Connector/J 1.2.x and lower
- C.7. MySQL Connector/MXJ Change History
- C.7.1. Changes in MySQL Connector/MXJ 5.0.6 (04 May 2007)
- C.7.2. Changes in MySQL Connector/MXJ 5.0.5 (14 March 2007)
- C.7.3. Changes in MySQL Connector/MXJ 5.0.4 (28 January 2007)
- C.7.4. Changes in MySQL Connector/MXJ 5.0.3 (24 June 2006)
- C.7.5. Changes in MySQL Connector/MXJ 5.0.2 (15 June 2006)
- C.7.6. Changes in MySQL Connector/MXJ 5.0.1 (Never released)
- C.7.7. Changes in MySQL Connector/MXJ 5.0.0 (09 December 2005)
- C.8. MySQL Connector/C++ Change History
- C.9. MySQL Proxy Change History
This appendix lists the changes from version to version in the MySQL source code through the latest version of MySQL 5.1, which is currently MySQL 5.1.36. Starting with MySQL 5.0, we began offering a new version of the Manual for each new series of MySQL releases (5.0, 5.1, and so on). For information about changes in previous release series of the MySQL database software, see the corresponding version of this Manual. For information about legacy versions of the MySQL software through the 4.1 series, see MySQL 3.23, 4.0, 4.1 Reference Manual.
We update this section as we add new features in the 5.1 series, so that everybody can follow the development process.
Note that we tend to update the manual at the same time we make changes to MySQL. If you find a recent version of MySQL listed here that you can't find on our download page (http://dev.mysql.com/downloads/), it means that the version has not yet been released.
The date mentioned with a release version is the date of the last Bazaar ChangeSet on which the release was based, not the date when the packages were made available. The binaries are usually made available a few days after the date of the tagged ChangeSet, because building and testing all packages takes some time.
The manual included in the source and binary distributions may not be fully accurate when it comes to the release changelog entries, because the integration of the manual happens at build time. For the most up-to-date release changelog, please refer to the online version instead.
- C.1.1. Changes in MySQL 5.1.36 (Not yet released)
- C.1.2. Changes in MySQL 5.1.35 (13 May 2009)
- C.1.3. Changes in MySQL 5.1.34 (02 April 2009)
- C.1.4. Changes in MySQL 5.1.33 (13 March 2009)
- C.1.5. Changes in MySQL 5.1.32 (14 February 2009)
- C.1.6. Release Notes for MySQL Enterprise 5.1.31sp1 [QSP] (19 March 2009)
- C.1.7. Changes in MySQL 5.1.31 (19 January 2009)
- C.1.8. Changes in MySQL 5.1.30 (14 November 2008 General Availability)
- C.1.9. Changes in MySQL 5.1.29 (11 October 2008)
- C.1.10. Changes in MySQL 5.1.28 (28 August 2008)
- C.1.11. Changes in MySQL 5.1.27 (Not released)
- C.1.12. Changes in MySQL 5.1.26 (30 June 2008)
- C.1.13. Changes in MySQL 5.1.25 (28 May 2008)
- C.1.14. Changes in MySQL 5.1.24 (08 April 2008)
- C.1.15. Changes in MySQL 5.1.23 (29 January 2008)
- C.1.16. Changes in MySQL 5.1.22 (24 September 2007 Release Candidate)
- C.1.17. Changes in MySQL 5.1.21 (16 August 2007)
- C.1.18. Changes in MySQL 5.1.20 (25 June 2007)
- C.1.19. Changes in MySQL 5.1.19 (25 May 2007)
- C.1.20. Changes in MySQL 5.1.18 (08 May 2007)
- C.1.21. Changes in MySQL 5.1.17 (04 April 2007)
- C.1.22. Changes in MySQL 5.1.16 (26 February 2007)
- C.1.23. Changes in MySQL 5.1.15 (25 January 2007)
- C.1.24. Changes in MySQL 5.1.14 (05 December 2006)
- C.1.25. Changes in MySQL 5.1.13 (Not released)
- C.1.26. Changes in MySQL 5.1.12 (24 October 2006)
- C.1.27. Changes in MySQL 5.1.11 (26 May 2006)
- C.1.28. Changes in MySQL 5.1.10 (Not released)
- C.1.29. Changes in MySQL 5.1.9 (12 April 2006)
- C.1.30. Changes in MySQL 5.1.8 (Not released)
- C.1.31. Changes in MySQL 5.1.7 (27 February 2006)
- C.1.32. Changes in MySQL 5.1.6 (01 February 2006)
- C.1.33. Changes in MySQL 5.1.5 (10 January 2006)
- C.1.34. Changes in MySQL 5.1.4 (21 December 2005)
- C.1.35. Changes in MySQL 5.1.3 (29 November 2005)
- C.1.36. Changes in MySQL 5.1.2 (Not released)
- C.1.37. Changes in MySQL 5.1.1 (Not released)
An overview of which features were added in MySQL 5.1 can be found here: Section 1.4.1, “What Is New in MySQL 5.1”.
For a full list of changes, please refer to the changelog sections for each individual 5.1 release.
For changes relating to MySQL Cluster NDB 6.x, see Section 17.15, “Changes in MySQL Cluster NDB 6.X and 7.X”.
Functionality added or changed:
Important Change: Replication: Previously, incident log events were represented as comments in the output from mysqlbinlog, making them effectively silent when playing back the binlog.
(An incident log event represents an incident that could cause the contents of the database to change without that event being recorded in the binary log.)
This meant that, if the SQL were applied to a server, it could potentially lead to the master and the slave having different data. To make it possible to handle incident log events without breaking applications that expect the previous behavior, the nonsense statement RELOAD DATABASE is added to the SQL output for that incident log event, which causes an error.
To use this functionality currently requires hand editing of the dump file and handling of each case on an individual basis by a database administrator before applying the output to a server. (Bug#44442)
The time zone tables for Windows available at http://dev.mysql.com/downloads/timezones.html have been updated. (Bug#39923)
The mysqltest program now has a
move_filecommand for renaming files. This should be used in test cases rather than invoking an external command that might be platform specific. (Bug#39542)from_file to_file
Bugs fixed:
Incompatible Change: The server can load plugins under the control of startup options. For example, many storage engines can be built in pluggable form and loaded when the server starts. In the following descriptions,
plugin_namestands for a plugin name such asinnodb.Previously, plugin options were handled like other boolean options (see Section 4.2.3.2, “Program Option Modifiers”). That is, any of these options enabled the plugin:
--
plugin_name--plugin_name=1 --enable-plugin_nameAnd these options disabled the plugin:
--
plugin_name=0 --disable-plugin_name--skip-plugin_nameHowever, use of a boolean option for plugin loading did not provide control over what to do if the plugin failed to start properly: Should the server exit, or start with the plugin disabled? The actual behavior has been that the server starts with the plugin disabled, which can be problematic. For example, if
InnoDBfails to start, existingInnoDBtables become inaccessible, and attempts to create newInnoDBtables result in tables that use the default storage engine unless theNO_ENGINE_SUBSTITUTIONSQL mode has been enabled to cause an error to occur instead.Now, there is a change in the options used to control plugin loading, such that they have a tristate format:
--plugin_name=OFFDo not enable the plugin.
--plugin_name[=ON]Enable the plugin. If plugin initialization fails, start the server anyway, but with the plugin disabled. Specifying the option as
--without a value also enables the plugin.plugin_name--plugin_name=FORCEEnable the plugin. If plugin initialization fails, do not start the server. In other words, force the server to run with the plugin or not at all.
The values
OFF,ON, andFORCEare not case sensitive.Suppose that
CSVandInnoDBhave been built as pluggable storage engines and that you want the server to load them at startup, subject to these conditions: The server is allowed to run ifCSVinitialization fails, but must require thatInnoDBinitialization succeed. To accomplish that, use these lines in an option file:[mysqld] csv=ON innodb=FORCE
This change is incompatible with the previous implementation if you used options of the form
--orplugin_name=0--, which should be changed toplugin_name=1--orplugin_name=OFF--, respectively.plugin_name=ON--enable-is still supported and is the same asplugin_name--.plugin_name=ON--disable-andplugin_name--skip-are still supported and are the same asplugin_name--. (Bug#19027)plugin_name=OFFReplication: When using row-based logging, the length of an event for which the field metadata exceeded 255 bytes in size was incorrectly calculated. This could lead to corruption of the binary log, or cause the server to hang. (Bug#42749)
Replication: The warning Statement is not safe to log in statement format, issued in situations when it cannot be determined that a statement or other database event can be written reliably to the binary log using the statement-based format, has been changed to Statement may not be safe to log in statement format. (Bug#42415)
Replication: When stopping and restarting the slave while it was replicating temporary tables, the slave server could crash or raise an assertion failure. This was due to the fact that, although temporary tables were saved between slave thread restarts, the reference to the thread being used (
table->in_use) was not being properly updated when restarting, continuing to reference the old thread instead of the new one. This issue affected statement-based replication only. (Bug#41725)ALTER TABLEon a view crashed the server. (Bug#44860)UNCOMPRESSED_LENGTH()returned a garbage result when passed a string shorter than 5 bytes. NowUNCOMPRESSED_LENGTH()returnsNULLand generates a warning. (Bug#44796)Several Valgrind warnings were silenced. (Bug#44774, Bug#44792)
Selecting
RAND(function whereN)Nis a column of aconstanttable (table with a single row) failed with aSIGFPEsignal. (Bug#44768)Conversion of a string to a different character set could use the same buffer for input and output, leading to incorrect results or warnings. (Bug#44743, Bug#44766)
mysqld_safe could fail to find the logger program. (Bug#44736)
A Valgrind warning related to transaction processing was silenced. (Bug#44664)
innochecksum could incorrectly determine the input file name from the arguments. (Bug#44484)
Incorrect time was reported at the end of mysqldump output. (Bug#44424)
Caching of
GROUP BYexpressions could lead to mismatches between compile-time and runtime calculations and cause a server crash. (Bug#44399)Lettercase conversion in multibyte
cp932orsjischaracter sequences could produce incorrect results. (Bug#44352)InnoDBwas missingDB_ROLL_PTRinformation in Table MonitorCOLUMNSoutput. (Bug#44320)Assertion failure could occur for duplicate-key errors in
INSERT INTO ... SELECTstatements. (Bug#44306)On 64-bit Windows systems, myisamchk did not handle
key_buffer_sizevalues larger than 4GB. (Bug#43940)EXPLAIN EXTENDEDcould crash forUNIONqueries in which the lastSELECTwas not parenthesized and included anORDER BYclause. (Bug#43612)Multiple-table updates for
InnoDBtables could produce incorrect results. (Bug#43580)For
DELETEstatements withORDER BY, wherevarvarwas a global system variable with aNULLvalue, the server could crash. (Bug#42778)Builds linked against OpenSSL had a memory leak in association with use of X509 certificates. (Bug#42158)
There was a race condition when changing
innodb_commit_concurrencyat runtime from zero to nonzero or from nonzero to zero. Now this variable cannot be changed at runtime from zero to nonzero or vice versa. The value can still be changed from one nonzero value to another. (Bug#42101)SELECT ... INTO @varcould produce values different fromSELECT ...without theINTOclause. (Bug#42009)For views created with a column list clause, column aliases were not substituted when selecting through the view using a
HAVINGclause. (Bug#40825)A multiple-table
DELETEinvolving a table self-join could cause a server crash. (Bug#39918)Creating an
InnoDBtable with a comment containing a'#'character caused foreign key constraints to be omitted. (Bug#39793)The mysql option
--ignore-spaceswas nonfunctional. (Bug#39101)If a query was such as to produce the error
1054 Unknown column '...' in 'field list', usingEXPLAIN EXTENDEDwith the query could cause a server crash. (Bug#37362)If the
MYSQL_HISTFILEenvironment variable was set to/dev/null, the mysql client overwrote the/dev/nulldevice file as a normal file. (Bug#34224)mysqld_safe mishandled certain parameters if they contained spaces. (Bug#33685)
mysqladmin kill did not work for thread IDs larger than 32 bits. (Bug#32457)
Several client programs failed to interpret
--skip-passwordas “send no password.” (Bug#28479)Output from mysql --html did not encode the
<,>, or&characters. (Bug#27884)mysql_convert_table_format did not prevent converting tables to
MEMORYorBLACKHOLEtables, which could result in data loss. (Bug#27149)
This release of MySQL has two known outstanding issues for Windows:
The
.msiinstaller does not detect an existingrootpassword on the initial configuration attempt. To work around this, install and configure MySQL as normal, but skip any changes to security. (There is a checkbox that allows this on the security screen of the configuration wizard.) Then check your settings:If the old
rootpassword and security settings are okay, you are done and can proceed to use MySQL.Otherwise, reconfigure with the wizard and make any changes on the second configuration attempt. The wizard will properly prompt for the existing
rootpassword and allow changes to be made.
This issue has been filed as Bug#45200 for correction in a future release.
The Windows configuration wizard allows changes to
InnoDBsettings during a reconfiguration operation. For an upgrade, this may cause difficulties. To work around this, use one of the following alternatives:Do not change
InnoDBsettings.Copy files from the old
InnoDBlocation to the new one.
This issue has been filed as Bug#45201 for correction in a future release.
Bugs fixed:
Important Change: Replication: The transactional behavior of
STOP SLAVEhas changed. Formerly, it took effect immediately, even inside a transaction; now, it waits until the current replication event group (if any) has finished executing, or until the user issues aKILL QUERYorKILL CONNECTIONstatement.This was done in order to solve the problem encountered when replication was stopped while a nontransactional slave was replicating a transaction on the master. (It was impossible to roll back a mixed-engines transaction when one of the engines was nontransactional, which meant that the slave could not safely re-apply any transaction that had been interrupted by
STOP SLAVE.) (Bug#319, Bug#38205)See also Bug#43217.
Partitioning: When a value was equal to a
PARTITION ... VALUES LESS THAN (value other thanvalue)MAXVALUE, the corresponding partition was not pruned. (Bug#42944)Replication: Unrelated errors occurring during the execution of
RESET SLAVEcould cause the slave to crash. (Bug#44179)Replication: The
--slave-skip-errorsoption had no effect when using row-based logging format. (Bug#39393)Replication: The following erors were not correctly reported:
Failures during slave thread initialization
Failures while initializing the relay log position (immediately following the starting of the slave thread)
Failures while processing queries passed through the
--init_slaveoption.
Information about these types of failures can now be found in the output of
SHOW SLAVE STATUS. (Bug#38197)Replication: Killing the thread executing a DDL statement, after it had finished its execution but before it had written the binlog event, caused the error code in the binlog event to be set (incorrectly) to ER_SERVER_SHUTDOWN or ER_QUERY_INTERRUPTED, which caused replication to fail. (Bug#37145)
Replication: Column alises used inside subqueries were ignored in the binary log. (Bug#35515)
Valgrind warnings for the
DECODE(),ENCRYPT(), andFIND_IN_SET()functions were corrected. (Bug#44358, Bug#44365, Bug#44367)On Windows, entries for build-vs9.bat and build-vs9_x64.bat were missing in
win/Makefile.am. (Bug#44353)Incomplete cleanup of
JOIN_TAB::selectduring the filesort of rows for aGROUP BYclause inside a subquery caused a server crash. (Bug#44290)Not all lock types had proper descriptive strings, resulting in garbage output from mysqladmin debug. (Bug#44164)
Use of
HANDLERstatements withINFORMATION_SCHEMAtables caused a server crash. NowHANDLERis prohibited with such tables. (Bug#44151)Invoking
SHOW TABLE STATUSfrom within a stored procedure could cause aPackets out of ordererror. (Bug#43962)myisamchk could display a negative
Max keyfile lengthvalue. (Bug#43950)On 64-bit systems, a
key_buffer_sizevalue larger than 4GB could couseMyISAMindex corruption. (Bug#43932)mysqld_multi incorrectly passed
--no-defaultsto mysqld_safe. (Bug#43876)SHOW VARIABLESdid not properly display the value ofslave_skip_errors. (Bug#43835)On Windows, a server crash occurred for attempts to insert a floating-point value into a
CHARcolumn with a maximum length less than the converted floating-point value length. (Bug#43833)Incorrect initialization of
MyISAMtable indexes could cause incorrect query results. (Bug#43737)libmysqldcrashed when it was reinitialized. (Bug#43706, Bug#44091)InnoDBuses random numbers to generate dives into indexes for calculating index cardinality. However, under certain conditions, the algorithm did not generate random numbers, soANALYZE TABLEdid not update cardinality estimates properly. A new algorithm has been introduced with better randomization properties, together with a system variable,innodb_use_legacy_cardinality_algorithm, that controls which algorithm to use. The default value of the variable is 1 (ON), to use the original algorithm for compatibility with existing applications. The variable can be set to 0 (OFF) to use the new algorithm with improved randomness. (Bug#43660)UNIONof floating-point numbers did unnecessary rounding. (Bug#43432)ALTER DATABASE ... UPGRADE DATA DIRECTORY NAMEfailed when the database contained views. (Bug#43385)Certain statements might open a table and then wait for an impending global read lock without noticing whether they hold a table being waiting for by the global read lock, causing a hang. Affected statements are
SELECT ... FOR UPDATE,LOCK TABLES ... WRITE,TRUNCATE TABLE, andLOAD DATA INFILE. (Bug#43230)Using an XML function such as
ExtractValue()more than once in a single query could produce erroneous results. (Bug#43183)See also Bug#43937.
Full-text prefix searches could hang the connection and cause 100% CPU consumption. (Bug#42907)
InnoDBhad excessive contention for a character set mutex. (Bug#42649)Incorrect elevation of warning messages to error messages for unsafe statements caused a server crash. (Bug#42640)
CHECK TABLEsuggested use ofREPAIR TABLEfor corrupt tables for storage engines not supported byREPAIR TABLE. NowCHECK TABLEsuggests that the user dump and reload the table. (Bug#42563)Compressing a table with the myisampack utility caused the server to produce Valgrind warnings when it opened the table. (Bug#41541)
For a
MyISAMtable withDELAY_KEY_WRITEenabled, the index file could be corrupted without the table being marked as crashed if the server was killed. (Bug#41330)Killing an
INSERT ... SELECTstatement for aMyISAMtable could cause table corruption if the table had indexes. (Bug#40827)A multiple-table
DELETE IGNOREstatement involving a foreign key constraint caused an assertion failure. (Bug#40127)Multiple-table
UPDATEstatements did not properly activate triggers. (Bug#39953)The mysql_setpermission operation for removing database privileges removed global privileges instead. (Bug#39852)
A stored routine contain a C-style comment could not be dumped and reloaded. (Bug#39559)
In an
UPDATEorDELETEvia a secondary index,InnoDBdid not store the cursor position. This madeInnoDBcrash in semi-consistent read while attempting to unlock a nonmatching record. (Bug#39320)The functions listed in Section 11.13.4.2.3, “Creating Geometry Values Using MySQL-Specific Functions”, previously accepted WKB arguments and returned WKB values. They now accept WKB or geometry arguments and return geometry values.
The functions listed in Section 11.13.4.2.2, “Creating Geometry Values Using WKB Functions”, previously accepted WKB arguments and returned geometry values. They now accept WKB or geometry arguments and return geometry values. (Bug#38990)
On WIndows, running the server with
myisam_use_mmapenabled causedMyISAMtable corruption. (Bug#38848)CHECK TABLEdid not properly check whetherMyISAMtables created by servers from MySQL 4.0 or older needed to be upgraded. This could cause problems upgrading to MySQL 5.1 or higher. (Bug#37631)An
UPDATEstatement that updated a column using the sameDES_ENCRYPT()value for each row actually updated different rows with different values. (Bug#35087)For shared-memory connections, the read and write methods did not properly handle asynchronous close events, which could lead to the client locking up waiting for a server response. For example, a call to
mysql_real_query()would block forever on the client side if the executed statement was aborted on the server side. Thanks to Armin Schöffmann for the bug report and patch. (Bug#33899)CHECKSUM TABLEwas not killable withKILL QUERY. (Bug#33146)myisamchk and myisampack were not being linked with the library that enabled support for
*filename pattern expansion. (Bug#29248)For
InnoDBtables that have their own.ibdtablespace file, a superfluousibuf cursor restoration fails!message could be written to the error log. This warning has been suppressed. (Bug#27276)COMMITdid not delete savepoints if there were no changes in the transaction. (Bug#26288)Several memory allocation functions were not being checked for out-of-memory return values. (Bug#25058)
Support Ending for AIX 5.2: Per the MySQL Support Lifecycle policy regarding ending support for OS versions that have reached vendor end of life, we plan to discontinue building or supporting MySQL binaries for AIX 5.2 as of April 30, 2009. This release of MySQL 5.1 (5.1.34) is the last MySQL 5.1 release with support for AIX 5.2. For more information, see the March 24, 2009 note at MySQL Product Support EOL Announcements.
Functionality added or changed:
The
optimizer_switchsystem variable is now available to control optimizations that can be switched on and off. See Section 7.2.18, “Usingoptimizer_switchto Control the Optimizer”.
Bugs fixed:
Replication: Important Note: Binary logging with
--binlog_format=ROWfailed when a change to be logged included more than 251 columns. This issue was not known to occur with mixed-format or statement-based logging. (Bug#42977)See also Bug#42914.
Replication: Assigning an invalid directory for the
--slave-load-tmpdircaused the replication slave to crash. (Bug#42861)Replication: The
mysql.procs_privsystem table was not replicated. (Bug#42217)Replication: An
INSERT DELAYEDinto aTIMESTAMPcolumn issued concurrently with an insert on the same column not usingDELAYED, but applied after the other insert, was logged using the same timestamp as generated by the other (non-DELAYED) insert. (Bug#41719)Replication: The
MIXEDbinary logging format did not switch to row-based mode for statements containing theLOAD_FILE()function. (Bug#39701)Replication: When the server SQL mode included
IGNORE_SPACE, statement-based replication ofLOAD DATA INFILE ... INTOfailed because the statement was read incorrectly from the binary log; a trailing space was omitted, causing the statement to fail with a syntax error when run on the slave. (Bug#22504)tbl_nameSee also Bug#43746.
An attempt by a user who did not have the
SUPERprivilege to kill a system thread could cause a server crash. (Bug#43748)On Windows, incorrectly specified link dependencies in
CMakeLists.txtresulted in link errors for mysql_embedded, mysqltest_embedded, and mysql_client_test_embedded. (Bug#43715)mysql crashed if a request for the current database name returned an empty result, such as after the client has executed a preceding
SET sql_select_limit=0statement. (Bug#43254)If the value of the
version_commentsystem variable was too long, the mysql client displayed a truncated startup message. (Bug#43153)Queries of the following form returned an empty result:
SELECT ... WHERE ... (
col=colANDcol=col) OR ... (false expression)The
strings/CHARSET_INFO.txtfile was not included in source distributions. (Bug#42937)A dangling pointer in
mysys/my_error.ccould lead to client crashes. (Bug#42675)Passing an unknown time zone specification to
CONVERT_TZ()resulted in a memory leak. (Bug#42502)With more than two arguments,
LEAST(),GREATEST(), andCASEcould unnecessarily returnIllegal mix of collationserrors. (Bug#41627)The mysql client could misinterpret its input if a line was longer than an internal buffer. (Bug#41486)
In the
helpcommand output displayed by mysql, the description for the\c(clear) command was misleading. (Bug#41268)The
load_defaults(),my_search_option_files()andmy_print_default_files()functions in the C client library were subject to a race condition in multi-threaded operation. (Bug#40552)If
--basedirwas specified, mysqld_safe did not use it when attempting to locate my_print_defaults. (Bug#39326)When MySQL was configured with the
--with-max-indexes=128option, mysqld crashed. (Bug#36751)Setting the
join_buffer_sizevariable to its minimum value produced spurious warnings. (Bug#36446)The use of
NAME_CONST()can result in a problem forCREATE TABLE ... SELECTstatements when the source column expressions refer to local variables. Converting these references toNAME_CONST()expressions can result in column names that are different on the master and slave servers, or names that are too long to be legal column identifiers. A workaround is to supply aliases for columns that refer to local variables.Now a warning is issued in such cases that indicate possible problems. (Bug#35383)
An attempt to check or repair an ARCHIVE table that had been subjected to a server crash returned a 144 internal error. The data appeared to be irrecoverable. (Bug#32880)
The
Timecolumn forSHOW PROCESSLISToutput and the value of theTIMEcolumn of theINFORMATION_SCHEMA.PROCESSLISTtable now can have negative values. Previously, the column was unsigned and negative values were displayed incorrectly as large positive values. Negative values can occur if a thread alters the time into the future withSET TIMESTAMP =or the thread is executing on a slave and processing events from a master that has its clock set ahead of the slave. (Bug#22047)valueRestoring a mysqldump dump file containing
FEDERATEDtables failed because the file contained the data for the table. Now only the table definition is dumped (because the data is located elsewhere). (Bug#21360)
Support Ending for AIX 5.2: Per the MySQL Support Lifecycle policy regarding ending support for OS versions that have reached vendor end of life, we plan to discontinue building or supporting MySQL binaries for AIX 5.2 as of April 30, 2009. The next release of MySQL 5.1 (5.1.34) will be the last MySQL 5.1 release with support for AIX 5.2. For more information, see the March 24, 2009 note at MySQL Product Support EOL Announcements.
Functionality added or changed:
mysql-test-run.pl now supports an
--experimental=option. It enables you to specify a file that contains a list of test cases that should be displayed with thefile_name[ exp-fail ]code rather than[ fail ]if they fail. (Bug#42888)The MD5 algorithm now uses the Xfree implementation. (Bug#42434)
The query cache now checks whether a
SELECTstatement begins withSQL_NO_CACHEto determine whether it can skip checking for the query result in the query cache. This is not supported whenSQL_NO_CACHEoccurs within a comment. (Bug#37416)
Bugs fixed:
Partitioning: A duplicate key error raised when inserting into a partitioned table used a different error code from that returned by such an error raised when inserting into a table that was not partitioned. (Bug#38719)
See also Bug#28842.
Partitioning: Several error messages relating to partitioned tables were incorrect or missing. (Bug#36001)
Replication: When
--binlog_formatwas set toSTATEMENT, a statement unsafe for statement-based logging caused an error or warning to be issued even ifsql_log_binwas set to 0. (Bug#41980)Replication: When using
MIXEDreplication format and temporary tables were created in statement-based mode, but a later operation in the same session caused a switch to row-based mode, the temporary tables were not dropped on the slave at the end of the session. (Bug#40013)See also Bug#43046.
This regression was introduced by Bug#20499.
Replication: When using the
MIXEDreplication format,UPDATEandDELETEstatements that searched for rows where part of the key had nullableBITcolumns failed. This occurred because operations that inserted the data were replicated as statements, butUPDATEandDELETEstatements affecting the same data were replicated using row-based format.This issue did not occur when using statement-based replication (only) or row-based replication (only). (Bug#39753)
See also Bug#39648.
Replication: The server SQL mode in effect when a stored procedure was created was not retained in the binary log. This could cause a
CREATE PROCEDUREstatement that succeeded on the master to fail on the slave.This issue was first noticed when a stored procedure was created when
ANSI_QUOTESwas in effect on the master, but could possibly cause failedCREATE PROCEDUREstatements and other problems on the slave when using other server SQL modes as well. (Bug#39526)Replication: If
--secure-file-privwas set on the slave, it was unable to executeLOAD DATA INFILEstatements sent from the master when using mixed-format or statement-based replication.As a result of this fix, this security restriction is now ignored on the slave in such cases; instead the slave checks whether the files were created and should be read by the slave in its
--slave-load-tmpdir. (Bug#38174)Replication: Server IDs greater than 2147483647 (232 – 1) were represented by negative numbers in the binary log. (Bug#37313)
Replication: When its disk becomes full, a replication slave may wait while writing the binary log, relay log or
MyISAMtables, continuing after space has been made available. The error message provided in such cases was not clear about the frequency with which checking for free space is done (once every 60 seconds), and how long the server waits after space has been freed before continuing (also 60 seconds); this caused users to think that the server had hung.These issues have been addressed by making the error message clearer, and dividing it into two separate messages:
The error message Disk is full writing '
filename' (Errcode:error_code). Waiting for someone to free space... (Expect up to 60 secs delay for server to continue after freeing disk space) is printed only once.The warning Retry in 60 secs, Message reprinted in 600 secs is printed once every for every 10 times that the check for free space is made; that is, the check is performed once each 60 seconds, but the reminder that space needs to be freed is printed only once every 10 minutes (600 seconds).
Replication: The statements
DROP PROCEDURE IF EXISTSandDROP FUNCTION IF EXISTSwere not written to the binary log if the procedure or function to be dropped did not exist. (Bug#13684)See also Bug#25705.
The IBM DB2i storage engine has been added to this release for the IBM i Series platform. For more information, see Section 13.7, “The
IBMDB2IStorage Engine”. (Bug#44217)On 64-bit debug builds, code in
safemallocresulted in errors due to use of a 32-bit value for 64-bit allocations. (Bug#43885)make distcheck failed to properly handle subdirectories of
storage/ndb. (Bug#43614)Use of
USE INDEXhints could causeEXPLAIN EXTENDEDto crash. (Bug#43354)For
InnoDBtables, overflow in anAUTO_INCREMENTcolumn could cause a server crash. (Bug#43203)On 32-bit Windows, mysqld could not use large buffers due to a 2GB user mode address limit. (Bug#43082)
stderrshould be unbuffered, but when the server redirectedstderrto a file, it became buffered. (Bug#42790)The
DATA_TYPEcolumn of theINFORMATION_SCHEMA.COLUMNStable displayed theUNSIGNEDattribute for floating-point data types. (The column should contain only the data type name.) (Bug#42758)For
InnoDBtables, spurious duplicate-key errors could occur when inserting into anAUTO_INCREMENTcolumn. (Bug#42714)mysqldump included views that were excluded with the
--ignore-tableoption. (Bug#42635)An earlier bug fix resulted in the problem that the
InnoDBplugin could not be used with a server that was compiled with the built-inInnoDB. To handle this two changes were made:The server now supports an
--ignore-builtin-innodboption that causes the server to behave as if the built-inInnoDBis not present. This option causes otherInnoDBoptions not to be recognized.For the
INSTALL PLUGINstatement, the server reads option (my.cnf) files just as during server startup. This enables the plugin to pick up any relevant options from those files. Consequently, a plugin no longer is started with each option set to its default value.Because of this change, it is possible to add plugin options to an option file even before loading a plugin (if the
looseprefix is used). It is also possible to uninstall a plugin, editmy.cnf, and install the plugin again. Restarting the plugin this way enables it to the new option values without a server restart.
Note
InnoDBPlugin versions 1.0.4 and higher will take advantage of this bug fix. Although theInnoDBPlugin is source code compatible with multiple MySQL releases, a given binaryInnoDBPlugin can be used only with a specific MySQL release. WhenInnoDBPlugin 1.0.4 is released, it is expected to be compiled for MySQL 5.1.34. For 5.1.33, you can useInnoDBPlugin 1.0.3, but you must build from source.This regression was introduced by Bug#29263.
With the
ONLY_FULL_GROUP_BYSQL mode enabled, some legal queries failed. (Bug#42567)Tables could enter open table cache for a thread without being properly cleaned up, leading to a server crash. (Bug#42419)
For
InnoDBtables, inserting into floating-pointAUTO_INCREMENTcolumns failed. (Bug#42400)The
InnoDBbtr_search_drop_page_hash_when_freed()function had a race condition. (Bug#42279)For
InnoDBtables, there was a race condition forALTER TABLE,OPTIMIZE TABLE,CREATE INDEX, andDROP INDEXoperations when periodically checking whether table copying can be committed. (Bug#42152)Parsing of the optional microsecond component of
DATETIMEvalues did not fail gracefully when that component width was larger than the allowed six places. (Bug#42146)In
InnoDBrecovery after a server crash, table lookup could fail and corrupt the data dictionary cache. (Bug#42075)mysqldumpslow parsed the
--debugand--verboseoptions incorrectly. (Bug#42027)Queries that used the loose index scan access method could return no rows. (Bug#41610)
In
InnoDBrecovery after a server crash, rollback of a transaction that updated a column fromNULLtoNULLcould cause another crash. (Bug#41571)The error message for a too-long column comment was
Unknown errorrather than a more appropriate message. (Bug#41465)Use of
SELECT *allowed users with rights to only some columns of a view to access all columns. (Bug#41354)If the tables underlying a
MERGEtable had a primary key but theMERGEtable itself did not, inserting a duplicate row into theMERGEtable caused a server crash. (Bug#41305)The server did not robustly handle problems hang if a table opened with
HANDLERneeded to be re-opened because it had been altered to use a different storage engine that does not supportHANDLER. The server also failed to set an error if the re-open attempt failed. These problems could cause the server to crash or hang. (Bug#41110, Bug#41112)SELECTstatements executed concurrently withINSERTstatements for aMyISAMtable could cause incorrect results to be returned from the query cache. (Bug#41098)For prepared statements, multibyte character sets were not taking into account when calculating
max_lengthfor string values andmysql_stmt_fetch()could return truncated strings. (Bug#41078)Deprecation warnings that referred to MySQL 5.2 were changed to refer to MySQL 6.0. (Bug#41077)
For user-defined variables in a query result, incorrect length values were returned in the result metadata. (Bug#41030)
On Windows, starting the server with an invalid value for
innodb_flush_methodcaused a crash. (Bug#40757)MySQL 5.1 crashed with index merge algorithm and merge tables.
A query in the MyISAM merge table caused a crash if the index merge algorithm was being used. (Bug#40675)
With strict SQL mode enabled, setting a system variable to an out-of-bounds value caused an assertion failure. (Bug#40657)
Table temporary scans were slower than necessary due to use of mmap rather than caching, even with the
myisam_use_mmapsystem variable disabled. (Bug#40634)For a view that references a table in another database, mysqldump wrote the view name qualified with the current database name. This makes it impossible to reload the dump file into a different database. (Bug#40345)
On platforms where long and pointer variables have different sizes,
MyISAMcould copy key statistics incorrectly, resulting in a server crash or incorrect cardinality values. (Bug#40321)DELETEtried to acquire write (not read) locks for tables accessed within a subquery of theWHEREclause. (Bug#39843)perror did not produce correct output for error codes 153 to 163. (Bug#39370)
Several functions in
libmysqldcalledexit()when an error occurred rather than returning an error to the caller. (Bug#39289)The
innodb_log_arch_dirsystem variable is no longer available but was present in some of the sample option files included with MySQL distributions (such asmy-huge.cnf). The line was present as a comment but uncommenting it would cause server startup failure so the line has been removed. (Bug#38249)Setting a savepoint with the same name as an existing savepoint incorrectly deleted any other savepoints that had been set in the meantime. For example, setting savepoints named
a,b,c,bresulted in savepointsa,b, rather than the correct savepointsa,c,b. (Bug#38187)--helpoutput for myisamchk did not list the--HELPoption. (Bug#38103)Comparisons between row constructors, such as
(a, b) = (c, d)resulted in unnecessaryIllegal mix of collationserrors for string columns. (Bug#37601)If a user created a view that referenced tables for which the user had disjoint privileges, an assertion failure occurred. (Bug#37191)
An argument to the
MATCH()function that was an alias for an expression other than a column name caused a server crash. (Bug#36737)The
event,general_log, andslow_logtables in themysqldatabase storeserver_idvalues, but did not use anUNSIGNEDcolumn and thus were not able to store the full range of ID values. (Bug#36540)On Windows, the
_PCmacro inmy_global.hwas causing problems for modern compilers. It has been removed because it is no longer used. (Bug#34309)For
DROP FUNCTIONwith names that were qualified with a database name, the database name was handled in case-sensitive fashion even withlower_case_table_namesset to 1. (Bug#33813)mysqldump --compatible=mysql40 emitted statements referring to the
character_set_clientsystem variable, which is unknown before MySQL 4.1. Now the statements are enclosed in version-specific comments. (Bug#33550)Detection by configure of several functions such as
setsockopt(),bind(),sched_yield(), andgtty()could fail. (Bug#31506)Use of MBR spatial functions such as
MBRTouches()with columns ofInnoDBtables caused a server crash rather than an error. (Bug#31435)The mysql client mishandled input parsing if a
delimitercommand was not first on the line. (Bug#31060)SHOW PRIVILEGESlisted theCREATE ROUTINEprivilege as having a context ofFunctions,Procedures, but it is a database-level privilege. (Bug#30305)mysqld --help did not work as
root. (Bug#30261)CHECK TABLE,REPAIR TABLE,ANALYZE TABLE, andOPTIMIZE TABLEerroneously reported a table to be corrupt if the table did not exist or the statement was terminated withKILL. (Bug#29458)SHOW TABLE STATUScould fail to produce output for tables with non-ASCII characters in their name. (Bug#25830)Allocation of stack space for error messages could be too small on HP-UX, leading to stack overflow crashes. (Bug#21476)
Floating-point numbers could be handled with different numbers of digits depending on whether the text or prepared-statement protocol was used. (Bug#21205)
Incorrect length metadata could be returned for
LONG TEXTcolumns when a multibyte server character set was used. (Bug#19829)ROUND()sometimes returned different results on different platforms. (Bug#15936)
Functionality added or changed:
The
libeditlibrary was upgraded to version 2.11. (Bug#42433)
Bugs fixed:
Security Fix: Using an XPath expression employing a scalar expression as a FilterExpr with
ExtractValue()orUpdateXML()caused the server to crash. Such expressions now cause an error instead. (Bug#42495)Incompatible Change: The fix for Bug#33699 introduced a change to the
UPDATEstatement such that assigningNULLto aNOT NULLcolumn caused an error even when strict SQL mode was not enabled. The original behavior before was that such assignments caused an error only in strict SQL mode, and otherwise set the column to the implicit default value for the column data type and generated a warning. (For information about implicit default values, see Section 10.1.4, “Data Type Default Values”.)The change caused compatibility problems for applications that relied on the original behavior. It also caused replication problems between servers that had the original behavior and those that did not, for applications that assigned
NULLtoNOT NULLcolumns inUPDATEstatements without strict SQL mode enabled. This change has been reverted so thatUPDATEagain had the original behavior. Problems can still occur if you replicate between servers that have the modifiedUPDATEbehavior and those that do not. (Bug#39265)Replication:
START SLAVE UNTILdid not work correctly with--replicate-same-server-idenabled; when started with this option, the slave did not perform events recorded in the relay log and that originated from a different master.Log rotation events are automatically generated and written when rotating the binary log or relay log. Such events for relay logs are usually ignored by the slave SQL thread because they have the same server ID as that of the slave. However, when
--replicate-same-server-idwas enabled, the rotation event for the relay log was treated as if it originated on the master, because the log's name and position were incorrectly updated. This caused theMASTER_POS_WAIT()function always to returnNULLand thus to fail. (Bug#38734, Bug#38934)Replication:
TRUNCATEstatements failed to replicate when statement-based binary logging mode was not available. The issue was observed when usingInnoDBwith the transaction isolation level set toREAD UNCOMMITTED(thus forcingInnoDBnot to allow statement-based logging). However, the same behavior could be reproduced using any transactional storage engine supporting only row-based logging, regardless of the isolation level. This was due to two separate problems:An error was printed by
InnoDBforTRUNCATEwhen using statement-based logging mode where the transaction isolation level was set toREAD COMMITTEDorREAD UNCOMMITTED, becauseInnoDBpermits statement-based replication for DML statements. However,TRUNCATEis not transactional; since it is the equivalent ofDROP TABLEfollowed byCREATE TABLE, it is actually DDL, and should therefore be allowed to be replicated as a statement.TRUNCATEwas not logged in mixed mode because of the error just described; however, this error was not reported to the client.
As a result of this fix,
TRUNCATEis now treated as DDL for purposes of binary logging and replication; that is, it is always logged as a statement and so no longer causes an error when replicated using a transactional storage engine such asInnoDB. (Bug#36763)See also Bug#42643.
Replication: mysqlbinlog replay of
CREATE TEMPORARY TABLE ... LIKEstatements and ofTRUNCATEstatements used on temporary tables failed with Error 1146 (Table ... doesn't exist). (Bug#35583)Replication: In statement mode, mysqlbinlog failed to issue a
SET @@autommitstatement when the autocommit mode was changed. (Bug#34541)Replication:
LOAD DATA INFILEstatements did not replicate correctly from a master running MySQL 4.1 to a slave running MySQL 5.1 or later. (Bug#31240)The use by
libeditof the__weak_reference()macro caused compilation failure on FreeBSD. (Bug#42817)A
'%'character in SQL statements could cause the server to crash. (Bug#42634)An optimization introduced for Bug#37553 required an explicit cast to be added for some uses of
TIMEDIFF()because automatic casting could produce incorrect results. (It was necessary to useTIME(TIMEDIFF(...)).) (Bug#42525)On the IBM i5 platform, the MySQL configuration process caused the system version of
pthread_setschedprio()to be used. This function returnsSIGILLon i5 because it is not supported, causing the server to crash. Now themy_pthread_setprio()function in themysyslibrary is used instead. (Bug#42524)The SSL certficates included with MySQL distributions were regenerated because the previous ones had expired. (Bug#42366)
User variables within triggers could cause a crash if the
mysql_change_user()C API function was invoked. (Bug#42188)Dependent subqueries such as the following caused a memory leak proportional to the number of outer rows:
SELECT COUNT(*) FROM t1, t2 WHERE t2.b IN (SELECT DISTINCT t2.b FROM t2 WHERE t2.b = t1.a);
Some queries using
NAME_CONST(.. COLLATE ...)led to a server crash due to a failed type cast. (Bug#42014)On Mac OS X, some of the universal client libraries were not actually universal and were missing code for one or more architectures. (Bug#41940)
String reallocation could cause memory overruns. (Bug#41868)
mysql_install_db did not pass some relevant options to mysqld. (Bug#41828)
Setting
innodb_locks_unsafe_for_binlogshould be equivalent to setting the transaction isolation level toREAD COMMITTED. However, if both of those things were done, nonmatching semi-consistently read rows were not unlocked when they should have been. (Bug#41671)REPAIR TABLEcrashed for compressedMyISAMtables. (Bug#41574)For a
TIMESTAMP NOT NULL DEFAULT ...column, storingNULLas the return value from some functions caused a “cannot be NULL” error.NULLreturns now correctly cause the column default value to be stored. (Bug#41370)The server cannot execute
INSERT DELAYEDstatements when statement-based binary logging is enabled, but the error message displayed only the table name, not the entire statement. (Bug#41121)FULLTEXTindexes did not work for Unicode columns that used a custom UCA collation. (Bug#41084)The Windows installer displayed incorrect product names in some images. (Bug#40845)
Changing
innodb_thread_concurrencyat runtime could cause errors. (Bug#40760)SELECTstatements could be blocked byINSERT DELAYEDstatements that were waiting for a lock, even withlow_priority_updatesenabled. (Bug#40536)For
InnoDBtables that usedROW_FORMAT=REDUNDANT, storage size ofNULLcolumns could be determined incorrectly. (Bug#40369)The query cache stored only partial query results if a statement failed while the results were being sent to the client. This could cause other clients to hang when trying to read the cached result. Now if a statement fails, the result is not cached. (Bug#40264)
When a
MEMORYtable became full, the error generated was returned to the client but was not written to the error log. (Bug#39886)With row-based binary logging, replication of
InnoDBtables containingNULL-valuedBITcolumns could fail. (Bug#39648)The expression
ROW(...) IN (SELECT ... FROM DUAL)always returnedTRUE. (Bug#39069)The greedy optimizer could cause a server crash due to improper handling of nested outer joins. (Bug#38795)
Use of
COUNT(DISTINCT)preventedNULLtesting in theHAVINGclause. (Bug#38637)The
innodb_stats_on_metadatasystem variable was not displayed bySHOW VARIABLESand was not settable at runtime. (Bug#38189)Enabling the
sync_frmsystem variable had no effect on the handling of.frmfiles for views. (Bug#38145)For comparison of
NULLto a subquery result insideIS NULL, the comparison could evaluate toNULLrather than toTRUEorFALSE. This occurred for expressions such as:SELECT ... WHERE NULL IN (SELECT ...) IS NULL
Setting
myisam_repair_threadsgreater than 1 caused a server crash for table repair or alteration operations forMyISAMtables with multipleFULLTEXTindexes. (Bug#37756)The mysql client sometimes improperly interpreted string escape sequences in nonstring contexts. (Bug#36391)
The query cache stored packets containing the server status of the time when the cached statement was run. This might lead to an incorrect transaction status on the client side if a statement was cached during a transaction and later served outside a transaction context (or vice versa). (Bug#36326)
If the system time was adjusted backward during query execution, the apparent execution time could be negative. But in some cases these queries would be written to the slow query log, with the negative execution time written as a large unsigned number. Now statements with apparent negative execution time are not written to the slow query log. (Bug#35396)
libmysqldwas not built with all character sets. (Bug#32831)For mysqld_multi, using the
--mysqld=mysqld_safeoption caused the--defaults-fileand--defaults-extra-fileoptions to behave the same way. (Bug#32136)Attempts to open a valid MERGE table sometimes resulted in a
ER_WRONG_MRG_TABLEerror. This happened after failure to open an invalid MERGE table had also generated anER_WRONG_MRG_TABLEerror. (Bug#32047)For Solaris package installation using pkgadd, the postinstall script failed, causing the system tables in the
mysqldatabase not to be created. (Bug#31164)If the default database was dropped, the value of
character_set_databasewas not reset tocharacter_set_serveras it should have been. (Bug#27208)
This is a Service Pack release of the MySQL Enterprise Server 5.1.
This section documents all changes and bugfixes that have been applied since the last MySQL Enterprise Server release (5.1.31).
If you would like to receive more fine-grained and personalized update alerts about fixes that are relevant to the version and features you use, please consider subscribing to MySQL Enterprise (a commercial MySQL offering). For more details please see http://www.mysql.com/products/enterprise/advisors.html.
Functionality added or changed:
The
libeditlibrary was upgraded to version 2.11. (Bug#42433)
Bugs fixed:
Security Fix: Using an XPath expression employing a scalar expression as a FilterExpr with
ExtractValue()orUpdateXML()caused the server to crash. Such expressions now cause an error instead. (Bug#42495)On the IBM i5 platform, the MySQL configuration process caused the system version of
pthread_setschedprio()to be used. This function returnsSIGILLon i5 because it is not supported, causing the server to crash. Now themy_pthread_setprio()function in themysyslibrary is used instead. (Bug#42524)The SSL certficates included with MySQL distributions were regenerated because the previous ones had expired. (Bug#42366)
User variables within triggers could cause a crash if the
mysql_change_user()C API function was invoked. (Bug#42188)Some queries using
NAME_CONST(.. COLLATE ...)led to a server crash due to a failed type cast. (Bug#42014)
Functionality added or changed:
A new status variable,
Queries, indicates the number of statements executed by the server. This includes statements executed within stored programs, unlike theQuestionsvariable which includes only statements sent to the server by clients. (Bug#41131)Performance of
SELECT *retrievals fromINFORMATION_SCHEMA.COLUMNSwas improved slightly. (Bug#38918)Previously, index hints did not work for
FULLTEXTsearches. Now they work as follows:For natural language mode searches, index hints are silently ignored. For example,
IGNORE INDEX(i)is ignored with no warning and the index is still used.For boolean mode searches, index hints with
FOR ORDER BYorFOR GROUP BYare silently ignored. Index hints withFOR JOINor noFORmodifier are honored. In contrast to how hints apply for non-FULLTEXTsearches, the hint is used for all phases of query execution (finding rows and retrieval, grouping, and ordering). This is true even if the hint is given for a non-FULLTEXTindex. (Bug#38842)
Bugs fixed:
Important Change: Replication: If a trigger was defined on an
InnoDBtable and this trigger updated a nontransactional table, changes performed on theInnoDBtable were replicated and were visible on the slave before they were committed on the master, and were not rolled back on the slave after a successful rollback of those changes on the master.As a result of the fix for this issue, the semantics of mixing nontransactional and transactional tables in a transaction in the first statement of a transaction have changed. Previously, if the first statement in a transaction contained nontransactional changes, the statement was written directly to the binary log. Now, any statement appearing after a
BEGIN(or immediately following aCOMMITifAUTOCOMMIT= 0) is always considered part of the transaction and cached. This means that nontransactional changes do not propagate to the slave until the transaction is committed and thus written to the binary log.See Section 16.3.1.25, “Replication and Transactions”, for more information about this change in behavior. (Bug#40116)
Partitioning: Replication: Changing the transaction isolation level while replicating partitioned
InnoDBtables could cause statement-based logging to fail. (Bug#39084)Partitioning: A comparison with an invalid
DATEvalue in a query against a partitioned table could lead to a crash of the MySQL server.Note
Invalid
DATEandDATETIMEvalues referenced in theWHEREclause of a query on a partitioned table are treated asNULL. See Section 18.4, “Partition Pruning”, for more information.Partitioning: This bug was introduced in MySQL 5.1.29. (Bug#40954)
This regression was introduced by Bug#30573, Bug#33257, Bug#33555.
Partitioning: With
READ COMMITTEDtransaction isolation level,InnoDBuses a semi-consistent read that releases nonmatching rows after MySQL has evaluated theWHEREclause. However, this was not happening if the table used partitions. (Bug#40595)Partitioning: A query that timed out when run against a partitioned table failed silently, without providing any warnings or errors, rather than returning Lock wait timeout exceeded. (Bug#40515)
Partitioning:
ALTER TABLE ... REORGANIZE PARTITIONcould crash the server when the number of partitions was not changed. (Bug#40389)See also Bug#41945.
Partitioning: For a partitioned table having an
AUTO_INCREMENTcolumn: If the first statement following a start of the server or aFLUSH TABLESstatement was anUPDATEstatement, theAUTO_INCREMENTcolumn was not incremented correctly. (Bug#40176)Partitioning: The server attempted to execute the statements
ALTER TABLE ... ANALYZE PARTITION,ALTER TABLE ... CHECK PARTITION,ALTER TABLE ... OPTIMIZE PARTITION, andALTER TABLE ... REORGANIZE PARTITIONon tables that were not partitioned. (Bug#39434)See also Bug#20129.
Partitioning: The value of the
CREATE_COLUMNScolumn inINFORMATION_SCHEMA.TABLESwas notpartitionedfor partitioned tables. (Bug#38909)Partitioning: When executing an
ORDER BYquery on a partitionedInnoDBtable using an index that was not in the partition expression, the results were sorted on a per-partition basis rather than for the table as a whole. (Bug#37721)Partitioning: Dropping or creating an index on a partitioned table managed by the
InnoDBPlugin locked the table. (Bug#37453)Partitioning: Partitioned table checking sometimes returned a warning with an error code of 0, making proper response to errors impossible. The fix also renders the error message subject to translation in non-English deployments. (Bug#36768)
Partitioning:
SHOW TABLE STATUScould show a nonzero value for theMean record lengthof a partitionedInnoDBtable, even if the table contained no rows. (Bug#36312)Partitioning: When
SHOW CREATE TABLEwas used on a partitioned table, all of the table'sPARTITIONandSUBPARTITIONclauses were output on a single line, making it difficult to read or parse. (Bug#14326)Replication: Per-table
AUTO_INCREMENToption values were not replicated correctly forInnoDBtables. (Bug#41986)Replication: Some
log_eventtypes did not skip the post-header when reading. (Bug#41961)Replication: Attempting to read a binary log containing an
Incident_log_eventhaving an invalid incident number could cause the debug server to crash. (Bug#40482)Replication: When using row-based replication, an update of a primary key that was rolled back on the master due to a duplicate key error was not rolled back on the slave. (Bug#40221)
Replication: When rotating relay log files, the slave deletes relay log files and then edits the relay log index file. Formerly, if the slave shut down unexpectedly between these two events, the relay log index file could then reference relay logs that no longer existed. Depending on the circumstances, this could when restarting the slave cause either a race condition or the failure of replication. (Bug#38826, Bug#39325)
Replication: With row-based replication,
UPDATEandDELETEstatements usingLIMITand a table's primary key could produce different results on the master and slave. (Bug#38230)resolve_stack_dump was unable to resolve the stack trace format produced by mysqld in MySQL 5.1 and up (see Section 22.5.1.5, “Using a Stack Trace”). (Bug#41612)
In example option files provided in MySQL distributions, the
thread_stackvalue was increased from 64K to 128K. (Bug#41577)The optimizer could ignore an error and rollback request during a filesort, causing an assertion failure. (Bug#41543)
DATE_FORMAT()could cause a server crash for year-zero dates. (Bug#41470)SET PASSWORDcaused a server crash if the account name was given asCURRENT_USER(). (Bug#41456)When a repair operation was carried out on a
CSVtable, the debug server crashed. (Bug#41441)When substituting system constant functions with a constant result, the server was not expecting
NULLfunction return values and could crash. (Bug#41437)Queries such as
SELECT ... CASE AVG(...) WHEN ...that used aggregate functions in aCASEexpression crashed the server. (Bug#41363)INSERT INTO .. SELECT ... FROMandCREATE TABLE ... SELECT ... FROMa TEMPORARY table could inadvertently change the locking type of the temporary table from a write lock to a read lock, causing statement failure. (Bug#41348)The
INFORMATION_SCHEMA.SCHEMA_PRIVILEGEStable was limited to 7680 rows. (Bug#41079)In debug builds, obsolete debug code could be used to crash the server. (Bug#41041)
Some queries that used a “range checked for each record” scan could return incorrect results. (Bug#40974)
Certain
SELECTqueries could fail with aDuplicate entryerror. (Bug#40953)For debug servers,
OPTIMIZE TABLEon a compressed table caused a server crash. (Bug#40949)Accessing user variables within triggers could cause a server crash. (Bug#40770)
IF(..., CAST(as an argument to an aggregate function could cause an assertion failure. (Bug#40761)longtext_valAS UNSIGNED),signed_val)For single-table
UPDATEstatements, an assertion failure resulted from a runtime error in a stored function (such as a recursive function call or an attempt to update the same table as in theUPDATEstatement). (Bug#40745)TRUNCATE TABLEfor anInnoDBtable did not flush cached queries for the table. (Bug#40386)Prepared statements allowed invalid dates to be inserted when the
ALLOW_INVALID_DATESSQL mode was not enabled. (Bug#40365)mc.exe is no longer needed to compile MySQL on Windows. This makes it possible to build MySQL from source using Visual Studio Express 2008. (Bug#40280)
The
':'character was incorrectly disallowed in table names. (Bug#40104)Support for the
revisionfield in.frmfiles has been removed. This addresses the downgrading problem introduced by the fix for Bug#17823. (Bug#40021)Retrieval speed from the following
INFORMATION_SCHEMAtables was improved by shortening theVARIABLE_VALUEcolumn to 1024 characters:GLOBAL_VARIABLES,SESSION_VARIABLES,GLOBAL_STATUS, andSESSION_STATUS.As a result of this change, any variable value longer than 1024 characters will be truncated with a warning. This affects only the
init_connectsystem variable. (Bug#39955)For an
InnoDBtable,DROP TABLEorALTER TABLE ... DISCARD TABLESPACEcould take a long time or cause a server crash. (Bug#39939)If the operating system is configured to return leap seconds from OS time calls or if the MySQL server uses a time zone definition that has leap seconds, functions such as
NOW()could return a value having a time part that ends with:59:60or:59:61. If such values are inserted into a table, they would be dumped as is by mysqldump but considered invalid when reloaded, leading to backup/restore problems.Now leap second values are returned with a time part that ends with
:59:59. This means that a function such asNOW()can return the same value for two or three consecutive seconds during the leap second. It remains true that literal temporal values having a time part that ends with:59:60or:59:61are considered invalid.For additional details about leap-second handling, see Section 9.7.2, “Time Zone Leap Second Support”. (Bug#39920)
The server could crash during a sort-order optimization of a dependent subquery. (Bug#39844)
For a server started with the
--temp-pooloption on Windows, temporary file creation could fail. This option now is ignored except on Linux systems, which was its original intended scope. (Bug#39750)ALTER TABLEon a table withFULLTEXTindex that used a pluggableFULLTEXTparser could cause debug servers to crash. (Bug#39746)With the
ONLY_FULL_GROUP_BYSQL mode enabled, the check for nonaggregated columns in queries with aggregate functions, but without aGROUP BYclause was treating all the parts of the query as if they were in the select list. This is fixed by ignoring the nonaggregated columns in theWHEREclause. (Bug#39656)The server crashed if an integer field in a CSV file did not have delimiting quotes. (Bug#39616)
Creating a table with a comment of 62 characters or longer caused a server crash. (Bug#39591)
The do_abi_check program run during the build process depends on
mysql_version.hbut that file was not created first, resulting in build failure. (Bug#39571)CHECK TABLEfailed forMyISAMINFORMATION_SCHEMAtables. (Bug#39541)On 64-bit Windows systems, the server accepted
key_buffer_sizevalues larger than 4GB, but allocated less. (For example, specifying a value of 5GB resulted in 1GB being allocated.) (Bug#39494)InnoDBcould hang trying to open an adaptive hash index. (Bug#39483)Following
ALTER TABLE ... DISCARD TABLESPACEfor anInnoDBtable, an attempt to determine the free space for the table before theALTER TABLEoperation had completely finished could cause a server crash. (Bug#39438)Use of the
PACK_KEYSorMAX_ROWStable option inALTER TABLEshould have triggered table reconstruction but did not. (Bug#39372)The server returned a column type of
VARBINARYrather thanDATEas the result from theCOALESCE(),IFNULL(),IF(),GREATEST(), orLEAST()functions orCASEexpression if the result was obtained usingfilesortin an anonymous temporary table during the query execution. (Bug#39283)A server built using yaSSL for SSL support would crash if configured to use an RSA key and a client sent a cipher list containing a non-RSA key as acceptable. (Bug#39178)
When built with Valgrind, the server failed to access tables created with the
DATA DIRECTORYorINDEX DIRECTORYtable option. (Bug#39102)With binary logging enabled
CREATE VIEWwas subject to possible buffer overwrite and a server crash. (Bug#39040)The fast mutex implementation was subject to excessive lock contention. (Bug#38941)
Use of
InnoDBmonitoring (SHOW ENGINE INNODB STATUSor one of theInnoDBMonitor tables) could cause a server crash due to invalid access to a shared variable in a concurrent environment. (Bug#38883)InnoDBcould fail to generateAUTO_INCREMENTvalues after anUPDATEstatement for the table. (Bug#38839)If delayed insert failed to upgrade the lock, it did not free the temporary memory storage used to keep newly constructed
BLOBvalues in memory, resulting in a memory leak. (Bug#38693)On Windows, a five-second delay occurred at shutdown of applications that used the embedded server. (Bug#38522)
On Solaris, a scheduling policy applied to the main server process could be unintentionally overwritten in client-servicing threads. (Bug#38477)
Building MySQL on FreeBSD would result in a failure during the gen_lex_hash phase of the build. (Bug#38364)
On Windows, the embedded server would crash in
mysql_library_init()if the language file was missing. (Bug#38293)A mix of
TRUNCATE TABLEwithLOCK TABLESandUNLOCK TABLESfor anInnoDBcould cause a server crash. (Bug#38231)The
ExtractValue()function did not work correctly with XML documents containing aDOCTYPEdeclaration. (Bug#38227)Queries with a
HAVINGclause could return a spurious row. (Bug#38072)The Event Scheduler no longer logs “started in thread” or “executed” successfully messages to the error log. (Bug#38066)
Use of spatial data types in prepared statements could cause memory leaks or server crashes. (Bug#37956, Bug#37671)
An error in a debugging check caused crashes in debug servers. (Bug#37936)
A
SELECTwith aNULL NOT INcondition containing a complex subquery from the same table as in the outer select caused an assertion failure. (Bug#37894)The presence of a
/* ... */comment preceding a query could causeInnoDBto use unnecessary gap locks. (Bug#37885)Use of an uninitialized constant in
EXPLAINevaluation caused an assertion failure. (Bug#37870)When using
ALTER TABLEon anInnoDBtable, theAUTO_INCREMENTvalue could be changed to an incorrect value. (Bug#37788)Primary keys were treated as part of a covering index even if only a prefix of a key column was used. (Bug#37742)
Renaming an
ARCHIVEtable to the same name with different lettercase and then selecting from it could cause a server crash. (Bug#37719)The
MONTHNAME()andDAYNAME()functions returned a binary string, so that usingLOWER()orUPPER()had no effect. NowMONTHNAME()andDAYNAME()return a value incharacter_set_connectioncharacter set. (Bug#37575)TIMEDIFF()was erroneously treated as always returning a positive result. Also,CAST()ofTIMEvalues toDECIMALdropped the sign of negative values. (Bug#37553)See also Bug#42525.
SHOW PROCESSLISTdisplayed “copy to tmp table” when no such copy was occurring. (Bug#37550)mysqlcheck used
SHOW FULL TABLESto get the list of tables in a database. For some problems, such as an empty.frmfile for a table, this would fail and mysqlcheck then would neglect to check other tables in the database. (Bug#37527)Updating a view with a subquery in the
CHECKoption could cause an assertion failure. (Bug#37460)Statements that displayed the value of system variables (for example,
SHOW VARIABLES) expect variable values to be encoded incharacter_set_system. However, variables set from the command line such asbasedirordatadirwere encoded usingcharacter_set_filesystemand not converted correctly. (Bug#37339)CREATE INDEXcould crash withInnoDBplugin 1.0.1. (Bug#37284)Certain boolean-mode
FULLTEXTsearches that used the truncation operator did not return matching records and calculated relevance incorrectly. (Bug#37245)On a 32-bit server built without big tables support, the offset argument in a
LIMITclause might be truncated due to a 64-bit to 32-bit cast. (Bug#37075)For an
InnoDBtable with aFOREIGN KEYconstraint,TRUNCATE TABLEmay be performed using row by row deletion. If an error occurred during this deletion, the table would be only partially emptied. Now if an error occurs, the truncation operation is rolled back and the table is left unchanged. (Bug#37016)The code for the
ut_usectime()function inInnoDBdid not handle errors from thegettimeofday()system call. Now it retriesgettimeofday()several times and updates the value of theInnodb_row_lock_time_maxstatus variable only ifut_usectime()was successful. (Bug#36819)Use of
CONVERT()withGROUP BYto convert numeric values toCHARcould return truncated results. (Bug#36772)The mysql client, when built with Visual Studio 2005, did not display Japanese characters. (Bug#36279)
CREATE INDEXforInnoDBtables could under very rare circumstances cause the server to crash.. (Bug#36169)A read past the end of the string could occur while parsing the value of the
--innodb-data-file-pathoption. (Bug#36149)Setting the
slave_compressed_protocolsystem variable toDEFAULTfailed in the embedded server. (Bug#35999)For upgrades to MySQL 5.1 or higher, mysql_upgrade did not re-encode database or table names that contained nonalphanumeric characters. (They would still appear after the upgrade with the
#mysql50#prefix described in Section 8.2.3, “Mapping of Identifiers to File Names”.) To correct this problem, it was necessary to run mysqlcheck --all-databases --check-upgrade --fix-db-names --fix-table-names manually. mysql_upgrade now runs that command automatically after performing the initial upgrade. (Bug#35934)SHOW CREATE TABLEdid not display a printable value for the default value ofBITcolumns. (Bug#35796)The columns that store character set and collation names in several
INFORMATION_SCHEMAtables were lengthened because they were not long enough to store some possible values:SCHEMATA,TABLES,COLUMNS,CHARACTER_SETS,COLLATIONS, andCOLLATION_CHARACTER_SET_APPLICABILITY. (Bug#35789)The
max_lengthmetadata value was calculated incorrectly for theFORMAT()function, which could cause incorrect result set metadata to be sent to clients. (Bug#35558)InnoDBwas not updating theHandler_deleteorHandler_updatestatus variables. (Bug#35537)InnoDBcould fail to generateAUTO_INCREMENTvalues if rows previously had been inserted containing literal values for theAUTO_INCREMENTcolumn. (Bug#35498, Bug#36411, Bug#39830)The
CREATE_OPTIONScolumn forINFORMATION_SCHEMA.TABLESdid not display theKEY_BLOCK_SIZEoption. (Bug#35275)Selecting from an
INFORMATION_SCHEMAtable into an incorrectly definedMERGEtable caused an assertion failure. (Bug#35068)perror on Windows did not know about Win32 system error codes. (Bug#34825)
EXPLAIN EXTENDEDevaluation of aggregate functions that required a temporary table caused a server crash. (Bug#34773)SHOW GLOBAL STATUSshows values that aggregate the session status values for all threads. This did not work correctly for the embedded server. (Bug#34517)mysqldumpslow did not aggregate times. (Bug#34129)
mysql_config did not output
-ldl(or equivalent) when needed for--libmysqld-libs, so its output could be insufficient to build applications that use the embedded server. (Bug#34025)The mysql client incorrectly parsed statements containing the word “delimiter” in mid-statement.
This fix is different from the one applied for this bug in MySQL 5.1.26. (Bug#33812)
See also Bug#38158.
For a stored procedure containing a
SELECT * ... RIGHT JOINquery, execution failed for the second call. (Bug#33811)Previously, use of index hints with views (which do not have indexes) produced the error ERROR 1221 (HY000): Incorrect usage of USE/IGNORE INDEX and VIEW. Now this produces ERROR 1176 (HY000): Key '...' doesn't exist in table '...', the same error as for base tables without an appropriate index. (Bug#33461)
Three conditions were discovered that could cause an upgrade from MySQL 5.0 to 5.1 to fail: 1) Triggers associated with a table that had a
#mysql50#prefix in the name could cause assertion failure. 2)ALTER DATABASE ... UPGRADE DATA DIRECTORY NAMEfailed for databases that had a#mysql50#prefix if there were triggers in the database. 3) mysqlcheck --fix-table-name didn't use UTF8 as the default character set, resulting in parsing errors for tables with nonlatin symbols in their names and trigger definitions. (Bug#33094, Bug#41385)Execution of a prepared statement that referred to a system variable caused a server crash. (Bug#32124)
Some division operations produced a result with incorrect precision. (Bug#31616)
Queries executed using join buffering of
BITcolumns could produce incorrect results. (Bug#31399)ALTER TABLE CONVERT TO CHARACTER SETdid not convertTINYTEXTorMEDIUMTEXTcolumns to a longer text type if necessary when converting the column to a different character set. (Bug#31291)Server variables could not be set to their current values on Linux platforms. (Bug#31177)
See also Bug#6958.
For installation on Solaris using pkgadd packages, the mysql_install_db script was generated in the
scriptsdirectory, but the temporary files used during the process were left there and not deleted. (Bug#31052)Static storage engines and plugins that were disabled and dynamic plugins that were installed but disabled were not listed in the
INFORMATION_SCHEMAappropriatePLUGINSorENGINEStable. (Bug#29263)Some
SHOWstatements and retrievals from theINFORMATION_SCHEMATRIGGERSandEVENTStables used a temporary table and incremented theCreated_tmp_disk_tablesstatus variable, due to the way thatTEXTcolumns are handled. TheTRIGGERS.SQL_MODE,TRIGGERS.DEFINER, andEVENTS.SQL_MODEcolumns now areVARCHARto avoid this problem. (Bug#29153)For several read only system variables that were viewable with
SHOW VARIABLES, attempting to view them withSELECT @@or set their values withvar_nameSETresulted in anunknown system variableerror. Now they can be viewed withSELECT @@and attempting to set their values results in a message indicating that they are read only. (Bug#28234)var_nameOn Windows, Visual Studio does not take into account some x86 hardware limitations, which led to incorrect results converting large
DOUBLEvalues to unsignedBIGINTvalues. (Bug#27483)SSL support was not included in some “generic” RPM packages. (Bug#26760)
The
Questionsstatus variable is intended as a count of statements sent by clients to the server, but was also counting statements executed within stored routines. (Bug#24289)Setting the session value of the
max_allowed_packetornet_buffer_lengthsystem variable was allowed but had no effect. The session value of these variables is now read only. (Bug#22891)A race condition between the mysqld.exe server and the Windows service manager could lead to inability to stop the server from the service manager. (Bug#20430)
On Windows, moving an
InnoDB.ibdfile and then symlinking to it in the database directory using a.symfile caused a server crash. (Bug#11894)
Bugs fixed:
Partitioning: A
SELECTusing a rangeWHEREcondition with anORDER BYon a partitioned table caused a server crash. (Bug#40494)Replication: Row-based replication failed with nonpartitioned
MyISAMtables having no indexes. (Bug#40004)With statement-based binary logging format and a transaction isolation level of
READ COMMITTEDor stricter,InnoDBprinted an error because statement-based logging might lead to inconsistency between master and slave databases. However, this error was printed even when binary logging was not enabled (in which case, no such inconsistency can occur). (Bug#40360)The
CHECK TABLE ... FOR UPGRADEstatement did not check for incompatible collation changes made in MySQL 5.1.24 (Bug#27877). This also affects mysqlcheck and mysql_upgrade, which cause that statement to be executed. See Section 2.12.3, “Checking Whether Table Indexes Must Be Rebuilt”.Prior to this fix, a binary upgrade (performed without dumping tables with mysqldump before the upgrade and reloading the dump file after the upgrade) would corrupt tables that have indexes that use the
utf8_general_ciorucs2_general_cicollation for columns that contain'ß'LATIN SMALL LETTER SHARP S (German). After the fix,CHECK TABLE ... FOR UPGRADEproperly detects the problem and warns about tables that need repair.However, the fix is not backward compatible and can result in a downgrading problem under these circumstances:
Perform a binary upgrade to a version of MySQL that includes the fix.
Run
CHECK TABLE ... FOR UPGRADE(or mysqlcheck or mysql_upgrade) to upgrade tables.Perform a binary downgrade to a version of MySQL that does not include the fix.
The solution is to dump tables with mysqldump before the downgrade and reload the dump file after the downgrade. Alternatively, drop and recreate affected indexes. (Bug#40053)
Some recent releases for Solaris 10 were built on Solaris 10 U5, which included a new version of
libnsl.sothat does not work on U4 or earlier. To correct this, Solaris 10 builds now are created on machines that do not have that upgradedlibnsl.so, so that they will work on Solaris 10 installations both with and without the upgradedlibnsl.so. (Bug#39074)XA transaction rollbacks could result in corrupted transaction states and a server crash. (Bug#28323)
ALTER TABLEfor anENUMcolumn could change column values. (Bug#23113)
Functionality added or changed:
Important Change: The
--skip-thread-priorityoption is now deprecated in MySQL 5.1 and is removed in MySQL 6.0 such that the server won't change the thread priorities by default. Giving threads different priorities might yield marginal improvements in some platforms (where it actually works), but it might instead cause significant degradation depending on the thread count and number of processors. Meddling with the thread priorities is a not a safe bet as it is very dependent on the behavior of the CPU scheduler and system where MySQL is being run. (Bug#35164, Bug#37536)Important Change: The
--logoption now is deprecated and will be removed (along with thelogsystem variable) in the future. Instead, use the--general_logoption to enable the general query log and the--general_log_file=option to set the general query log file name. The values of these options are available in thefile_namegeneral_logandgeneral_log_filesystem variables, which can be changed at runtime.Similar changes were made for the
--log-slow-queriesoption andlog_slow_queriessystem variable. You should use the--slow_query_logand--slow_query_log_file=options instead (and thefile_nameslow_query_logandslow_query_log_filesystem variables).The
BUILD/compile-solaris-*scripts now compile MySQL with themtmalloclibrary rather thanmalloc. (Bug#38727)
Bugs fixed:
Incompatible Change: Replication: The default binary logging mode has been changed from
MIXEDtoSTATEMENTfor compatibility with MySQL 5.0. (Bug#39812)Incompatible Change:
CHECK TABLE ... FOR UPGRADEdid not check for incompatible collation changes made in MySQL 5.1.21 (Bug#29499) and 5.1.23 (Bug#27562, Bug#29461). This also affects mysqlcheck and mysql_upgrade, which cause that statement to be executed. See Section 2.12.3, “Checking Whether Table Indexes Must Be Rebuilt”. (Bug#39585)See also Bug#40984.
Incompatible Change: In connection with view creation, the server created
arcdirectories inside database directories and maintained useless copies of.frmfiles there. Creation and renaming procedures of those copies as well as creation ofarcdirectories has been discontinued.This change does cause a problem when downgrading to older server versions which manifests itself under these circumstances:
Create a view
v_origin MySQL 5.1.29 or higher.Rename the view to
v_newand then back tov_orig.Downgrade to an older 5.1.x server and run mysql_upgrade.
Try to rename
v_origtov_newagain. This operation fails.
As a workaround to avoid this problem, use either of these approaches:
Dump your data using mysqldump before downgrading and reload the dump file after downgrading.
Instead of renaming a view after the downgrade, drop it and recreate it.
The downgrade problem introduced by the fix for this bug has been addressed as Bug#40021. (Bug#17823)
Important Change: Replication: The
SUPERprivilege is now required to change the session value ofbinlog_formatas well as its global value. For more information aboutbinlog_format, see Section 16.1.2, “Replication Formats”. (Bug#39106)Partitioning: Replication: Replication to partitioned
MyISAMtables could be slow with row-based binary logging. (Bug#35843)Partitioning: If an error occurred when evaluating a column of a partitioned table for the partitioning function, the row could be inserted anyway. (Bug#38083)
Partitioning: Using
INSERT ... SELECTto insert records into a partitionedMyISAMtable could fail if some partitions were empty and others are not. (Bug#38005)Partitioning: Ordered range scans on partitioned tables were not always handled correctly. In some cases this caused some rows to be returned twice. The same issue also caused
GROUP BYquery results to be aggregated incorrectly. (Bug#30573, Bug#33257, Bug#33555)Replication: Server code used in binary logging could in some cases be invoked even though binary logging was not actually enabled, leading to asserts and other server errors. (Bug#38798)
Replication: Replication of
BLACKHOLEtables did not work with row-based binary logging. (Bug#38360)Replication: In some cases, a replication master sent a special event to a reconnecting slave to keep the slave's temporary tables, but they still had references to the “old” slave SQL thread and used them to access that thread's data. (Bug#38269)
Replication: Replication filtering rules were inappropiately applied when executing
BINLOGpseudo-queries. One way in which this problem showed itself was that, when replaying a binary log with mysqlbinlog, RBR events were sometimes not executed if the--replicate-do-dboption was specified. Now replication rules are applied only to those events executed by the slave SQL thread. (Bug#36099)Replication: For a
CREATE TABLE ... SELECTstatement that creates a table in a database other than the current one, the table could be created in the wrong database on replication slaves if row-based binary logging is used. (Bug#34707)Replication: A statement did not always commit or roll back correctly when the server was shut down; the error could be triggered by having a failing
UPDATEorINSERTstatement on a transactional table, causing an implicit rollback. (Bug#32709)See also Bug#38262.
The Sun Studio compiler failed to build debug versions of the server due to use of features specific to gcc. (Bug#39451)
For a
TIMESTAMPcolumn in anInnoDBtable, testing the column with multiple conditions in theWHEREclause caused a server crash. (Bug#39353)References to local variables in stored procedures are replaced with
NAME_CONST(when written to the binary log. However, an “illegal mix of collation” error might occur when executing the log contents if the value's collation differed from that of the variable. Now information about the variable collation is written as well. (Bug#39182)name,value)Queries of the form
SELECT ... REGEXP BINARY NULLcould lead to a hung or crashed server. (Bug#39021)Statements of the form
INSERT ... SELECT .. ON DUPLICATE KEY UPDATEcould result in a server crash. (Bug#39002)col_name= DEFAULTColumn names constructed due to wild-card expansion done inside a stored procedure could point to freed memory if the expansion was performed after the first call to the stored procedure. (Bug#38823)
Repeated
CREATE TABLE ... SELECTstatements, where the created table contained anAUTO_INCREMENTcolumn, could lead to an assertion failure. (Bug#38821)For deadlock between two transactions that required a timeout to resolve, all server tables became inaccessible for the duration of the deadlock. (Bug#38804)
When inserting a string into a duplicate-key error message, the server could improperly interpret the string, resulting in a crash. (Bug#38701)
A race condition between threads sometimes caused unallocated memory to be addressed. (Bug#38692)
A server crash resulted from concurrent execution of a multiple-table
UPDATEthat used aNATURALorUSINGjoin together withFLUSH TABLES WITH READ LOCKorALTER TABLEfor the table being updated. (Bug#38691)On ActiveState Perl, mysql-test-run.pl --start-and-exit started but did not exit. (Bug#38629)
An uninitialized variable in the query profiling code was corrected (detected by Valgrind). (Bug#38560)
A server crash resulted from execution of an
UPDATEthat used a derived table together withFLUSH TABLES. (Bug#38499)Stored procedures involving substrings could crash the server on certain platforms due to invalid memory reads. (Bug#38469)
The handlerton-to-plugin mapping implementation did not free handler plugin references when the plugin was uninstalled, resulting in a server crash after several install/uninstall cycles. Also, on Mac OS X, the server crashed when trying to access an
EXAMPLEtable after theEXAMPLEplugin was installed. (Bug#37958)The server crashed if an argument to a stored procedure was a subquery that returned more than one row. (Bug#37949)
When analyzing the possible index use cases, the server was incorrectly reusing an internal structure, leading to a server crash. (Bug#37943)
Access checks were skipped for
SHOW PROCEDURE STATUSandSHOW FUNCTION STATUS, which could lead to a server crash or insufficient access checks in subsequent statements. (Bug#37908)The
<=>operator could return incorrect results when comparingNULLtoDATE,TIME, orDATETIMEvalues. (Bug#37526)The combination of a subquery with a
GROUP BY, an aggregate function calculated outside the subquery, and aGROUP BYon the outerSELECTcould cause the server to crash. (Bug#37348)The
NO_BACKSLASH_ESCAPESSQL mode was ignored forLOAD DATA INFILEandSELECT INTO ... OUTFILE. The setting is taken into account now. (Bug#37114)In some cases, references to views were confused with references to anonymous tables and privilege checking was not performed. (Bug#36086)
For crash reports on Windows, symbol names in stack traces were not correctly resolved. (Bug#35987)
ALTER EVENTchanged thePRESERVEattribute of an event even whenPRESERVEwas not specified in the statement. (Bug#35981)Host name values in SQL statements were not being checked for
'@', which is illegal according to RFC952. (Bug#35924)mysql_install_db failed on machines that had the host name set to
localhost. (Bug#35754)Dynamic plugins failed to load on i5/OS. (Bug#35743)
With the
PAD_CHAR_TO_FULL_LENGTHSQL mode enabled, aucs2CHARcolumn returned additional garbage after trailing space characters. (Bug#35720)With binary logging enabled,
CREATE TABLE ... SELECTfailed if the source table was a log table. (Bug#34306)A trigger for an
InnoDBtable activating multiple times could lead toAUTO_INCREMENTgaps. (Bug#31612)mysqldump could fail to dump views containing a large number of columns. (Bug#31434)
The server could improperly type user-defined variables used in the select list of a query. (Bug#26020)
For access to the
INFORMATION_SCHEMA.VIEWStable, the server did not check theSHOW VIEWandSELECTprivileges, leading to inconsistency between output from that table and theSHOW CREATE VIEWstatement. (Bug#22763)mysqld_safewould sometimes fail to remove the pid file for the oldmysqlprocess after a crash. As a result, the server would fail to start due to a falseA mysqld process already exists...error. (Bug#11122)
Functionality added or changed:
Important Change: mysqlbinlog now supports
--verboseand--base64-output=DECODE-ROWSoptions to display row events as commented SQL statements. (The default otherwise is to display row events encoded as base-64 strings usingBINLOGstatements.) See Section 4.6.7.2, “mysqlbinlog Row Event Display”. (Bug#31455)MySQL source distributions are now available in Zip format. (Bug#27742)
Added the
SHOW PROFILESandSHOW PROFILEstatements to display statement profile data, and the accompanyingINFORMATION_SCHEMA.PROFILINGtable. Profiling is controlled via theprofilingandprofiling_history_sizesession variables. see Section 12.5.5.33, “SHOW PROFILESSyntax”, and Section 20.26, “TheINFORMATION_SCHEMA PROFILINGTable”. (Community contribution by Jeremy Cole)The profiling feature is enabled via the
--enable-community-featuresand--enable-profilingoptions to configure. These options are enabled by default; to disable them, use--disable-community-featuresand--disable-profiling. (Bug#24795)
Bugs fixed:
Important Change: Security Fix: Additional corrections were made for the symlink-related privilege problem originally addressed in MySQL 5.1.24. The original fix did not correctly handle the data directory path name if it contained symlinked directories in its path, and the check was made only at table-creation time, not at table-opening time later. (Bug#32167, CVE-2008-2079)
See also Bug#39277.
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)Incompatible Change: There were some problems using
DllMain()hook functions on Windows that automatically do global and per-thread initialization forlibmysqld.dll:Per-thread initialization: MySQL internally counts the number of active threads, which causes a delay in
my_end()if not all threads have exited. But there are threads that can be started either by Windows internally (often in TCP/IP scenarios) or by users. Those threads do not necessarily uselibmysql.dllfunctionality but still contribute to the open-thread count. (One symptom is a five-second delay in times for PHP scripts to finish.)Process-initialization:
my_init()callsWSAStartupthat itself loads DLLs and can lead to a deadlock in the Windows loader.
To correct these problems, DLL initialization code now is not invoked from
libmysql.dllby default. To obtain the previous behavior (DLL initialization code will be called), set theLIBMYSQL_DLLINITenvironment variable to any value. This variable exists only to prevent breakage of existing Windows-only applications that do not callmysql_thread_init()and work okay today. Use ofLIBMYSQL_DLLINITis discouraged and is removed in MySQL 6.0. (Bug#37226, Bug#33031)Incompatible Change: Some performance problems of
SHOW ENGINE INNODB STATUSwere reduced by removingused cellsandTotal number of lock structs in row lock hash tablefrom the output. Now these values are present only if theUNIV_DEBUGsymbol is defined at MySQL build time. (Bug#36941, Bug#36942)Incompatible Change:
SHOW STATUStook a lot of CPU time for calculating the value of theInnodb_buffer_pool_pages_latchedstatus variable. Now this variable is calculated and included in the output ofSHOW STATUSonly if theUNIV_DEBUGsymbol is defined at MySQL build time. (Bug#36600)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/etcfrom being considered different, for example. (Bug#20748)See also Bug#38180.
Partitioning: When a partitioned table had a
TIMESTAMPcolumn defined withCURRENT_TIMESTAMPas the default but with noON UPDATEclause, the column's value was incorrectly set toCURRENT_TIMESTAMPwhen updating across partitions. (Bug#38272)Partitioning: myisamchk failed with an assertion error when analyzing a partitioned
MyISAMtable. (Bug#37537)Partitioning: A
LISTpartitionedMyISAMtable returned erroneous results when an index was present on a column in theWHEREclause andNOT INwas used on that column.Searches using the index were also much slower then if the index were not present. (Bug#35931)
Partitioning:
SELECT COUNT(*)was not correct for some partitioned tables using a storage engine that did not supportHA_STATS_RECORDS_IS_EXACT. Tables using theARCHIVEstorage engine were known to be affected.This was because
ha_partition::records()was not implemented, and so the defaulthandler::records()was used in its place. However, this is not correct behavior if the storage engine does not supportHA_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 PARTITIONSnow includes the total number of records in the partitioned table. (Bug#35745)Partitioning:
MyISAMrecovery enabled with the--myisam-recoveroption did not work for partitionedMyISAMtables. (Bug#35161)Partitioning: When one user was in the midst of a transaction on a partitioned table, a second user performing an
ALTER TABLEon this table caused the server to hang. (Bug#34604)Replication: Some kinds of internal errors, such as Out of memory errors, could cause the server to crash when replicating statements with user variables.
certain internal errors. (Bug#37150)
Replication: Row-based replication did not correctly copy
TIMESTAMPvalues from a big-endian storage engine to a little-endian storage engine. (Bug#37076)Replication:
INSTALL PLUGINandUNINSTALL PLUGINcaused row-based replication to fail.Note
These statements are not replicated; however, when using row-based logging, the changes they introduce in the
mysqlsystem tables are written to the binary log.Server-side cursors were not initialized properly, which could cause a server crash. (Bug#38486)
A server crash or Valgrind warnings could result when a stored procedure selected from a view that referenced a function. (Bug#38291)
A failure to clean up binary log events was corrected (detected by Valgrind). (Bug#38290)
Incorrect handling of aggregate functions when loose index scan was used caused a server crash. (Bug#38195)
Queries containing a subquery with
DISTINCTandORDER BYcould cause a server crash. (Bug#38191)Over-aggressive lock acquisition by
InnoDBwhen calculating free space for tablespaces could result in performance degradation when multiple threads were executing statements on multi-core machines. (Bug#38185)The fix for Bug#20748 caused a problem such that on Unix, MySQL programs looked for options in
~/my.cnfrather than the standard location of~/.my.cnf. (Bug#38180)If the table definition cache contained tables with many
BLOBcolumns, much memory could be allocated to cachingBLOBvalues. Now a size limit on the cachedBLOBvalues is enforced. (Bug#38002)For
InnoDBtables,ORDER BY ... DESCsometimes returned results in ascending order. (Bug#37830)If a table has a
BIT NOT NULLcolumnc1with a length shorter than 8 bits and some additionalNOT NULLcolumnsc2, ..., and aSELECTquery has aWHEREclause of the form(c1 =, the query could return an unexpected result set. (Bug#37799)constant) AND c2 ...The server returned unexpected results if a right side of the
NOT INclause consisted of theNULLvalue 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);
Setting the session value of the
innodb_table_lockssystem variable caused a server crash. (Bug#37669)Nesting of
IF()inside ofSUM()could cause an extreme server slowdown. (Bug#37662)Killing a query that used an
EXISTSsubquery as the argument toSUM()orAVG()caused a server crash. (Bug#37627)When using indexed
ORDER BYsorting, incorrect query results could be produced if the optimizer switched from a covering index to a noncovering index. (Bug#37548)After
TRUNCATE TABLEfor anInnoDBtable, inserting explicit values into anAUTO_INCREMENTcolumn could fail to increment the counter and result in a duplicate-key error for subsequent insertion ofNULL. (Bug#37531)Within stored programs or prepared statements,
REGEXPcould return incorrect results due to improper initialization. (Bug#37337)For a
MyISAMtable withCHECKSUM = 1andROW_FORMAT = DYNAMICtable options, a data consistency check (maximum record length) could fail and cause the table to be marked as corrupted. (Bug#37310)The
max_lengthresult set metadata value was calculated incorrectly under some circumstances. (Bug#37301)If the length of a field was 3, internal
InnoDBto integer type conversion didn't work on big-endian machines in therow_search_autoinc_column()function. (Bug#36793)A query which had an
ORDER BY DESCclause that is satisfied with a reverse range scan could cause a server crash for some specific CPU/compiler combinations. (Bug#36639)The
CSVstorage engine returned success even when it failed to open a table's data file. (Bug#36638)SELECT DISTINCTfrom a simple view on anInnoDBtable, where all selected columns belong to the same unique index key, returned incorrect results. (Bug#36632)Dumping information about locks in use by sending a
SIGHUPsignal 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)If initialization of an
INFORMATION_SCHEMAplugin failed,INSTALL PLUGINfreed some internal plugin data twice. (Bug#36399)For
InnoDBtables, theDATA_FREEcolumn of theINFORMATION_SCHEMA.TABLESdisplayed free space in kilobytes rather than bytes. Now it displays bytes. (Bug#36278)When the fractional part in a multiplication of
DECIMALvalues overflowed, the server truncated the first operand rather than the longest. Now the server truncates so as to produce more precise multiplications. (Bug#36270)The mysql client failed to recognize comment lines consisting of
--followed by a newline. (Bug#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 was that it should terminate with a “Subquery returns more than 1 row” error. (Bug#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)The configure script did not allow
utf8_hungarian_cito be specified as the default collation. (Bug#35808)On 64-bit systems, assigning values of 2 63 – 1 or larger to
key_buffer_sizecaused memory overruns. (Bug#35616)For
InnoDBtables,REPLACEstatements used “traditional” style locking, regardless of the setting ofinnodb_autoinc_lock_mode. NowREPLACEworks the same way as “simple inserts” instead of using the old locking algorithm. (REPLACEstatements are treated in the same way as asINSERTstatements.) (Bug#35602)Freeing of an internal parser stack during parsing of complex stored programs caused a server crash. (Bug#35577, Bug#37269, Bug#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)
Index scans performed with the
sort_union()access method returned wrong results, caused memory to be leaked, and caused temporary files to be deleted when the limit set bysort_buffer_sizewas reached. (Bug#35477, Bug#35478)Table checksum calculation could cause a server crash for
FEDERATEDtables withBLOBcolumns containingNULLvalues. (Bug#34779)A significant slowdown occurred when many
SELECTstatements that return many rows fromInnoDBtables were running concurrently. (Bug#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)Changes to build files were made to enable the MySQL distribution to compile on Microsoft Visual C++ Express 2008. (Bug#33907)
Fast
ALTER TABLEoperations were not fast for columns that used multibyte character sets. (Bug#33873)The internal functions
my_getsystime(),my_micro_time(), andmy_micro_time_and_time()did not work correctly on Windows. One symptom was that uniqueness ofUUID()values could be compromised. (Bug#33748)Cached queries that used 256 or more tables were not properly cached, so that later query invalidation due to a
TRUNCATE TABLEfor one of the tables caused the server to hang. (Bug#33362)mysql_upgrade attempted to use the
/procfile system even on systems that do not have it. (Bug#31605)mysql_install_db failed if the default storage engine was
NDB. Now it explicitly usesMyISAMas the storage engine when running mysqld --bootstrap. (Bug#31315)Several MySQL programs could fail if the
HOMEenvironment variable had an empty value. (Bug#30394)On NetWare, mysql_install_db could appear to execute normally even if it failed to create the initial databases. (Bug#30129)
The Serbian translation for the
ER_INCORRECT_GLOBAL_LOCAL_VARerror was corrected. (Bug#29738)TRUNCATE TABLEforInnoDBtables returned a count showing too many rows affected. Now the statement returns 0 forInnoDBtables. (Bug#29507)The BUILD/check-cpu build script failed if gcc had a different name (such as gcc.real on Debian). (Bug#27526)
In some cases, the parser interpreted the
;character as the end of input and misinterpreted stored program definitions. (Bug#26030)The
FLUSH PRIVILEGESstatement did not produce an error when it failed. (Bug#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, Bug#21294)
Functionality added or changed:
Bugs fixed:
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)
Partitioning: Important Note: The statements
ANALYZE TABLE,CHECK TABLE,OPTIMIZE TABLE, andREPAIR TABLEare now supported for partitioned tables.Also as a result of this fix, the following statements which were disabled in MySQL 5.1.24 have been re-enabled:
ALTER TABLE ... ANALYZE PARTITIONALTER TABLE ... CHECK PARTITIONALTER TABLE ... OPTIMIZE PARTITIONALTER TABLE ... REPAIR PARTITION
See also Bug#39434.
Replication: Issuing a
DROP DATABASEwhile any temporary tables were open caused the server to switch to statement-based mode. (Bug#38773)Replication: The
--replicate-options were not evaluated correctly when replicating multi-table updates.*-tableAs 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)
The fix for Bug#33812 had 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)
Functionality added or changed:
Important Change: Incompatible Change: The
FEDERATEDstorage engine is now disabled by default in binary distributions. The engine is still available and can be enabled by starting the server with the--federatedoption. (Bug#37069)mysqltest was changed to be more robust in the case of a race condition that can occur for rapid disconnect/connect sequences with the server. The account used by mysqltest could reach its allowed simultaneous-sessions user limit if the connect attempt occurred before the server had fully processed the preceding disconnect. mysqltest now checks specificaly for a user-limits error when it connects; if that error occurs, it delays briefly before retrying. (Bug#23921)
Bugs fixed:
Replication: Row-based replication broke for
utf8CHARcolumns longer than 85 characters. (Bug#37426)Replication: Performing an insert on a table having an
AUTO_INCREMENTcolumn and anINSERTtrigger that was being replicated from a master running MySQL 5.0 or any version of MySQL 5.1 up to and including MySQL 5.1.11 to a slave running MySQL 5.1.12 or later caused the replication slave to crash. (Bug#36443)See also Bug#33029.
Some binary distributions had a duplicate “-64bit” suffix in the file name. (Bug#37623)
NOT INsubqueries that selectedMIN()orMAX()values but produced an empty result could cause a server crash. (Bug#37004)ha_innodb.sowas incorrectly installed in thelib/mysqldirectory rather than inlib/mysql/plugin. (Bug#36434)An empty bit-string literal (
b'') caused a server crash. Now the value is parsed as an empty bit value (which is treated as an empty string in string context or 0 in numeric context). (Bug#35658)The code for detecting a byte order mark (BOM) caused mysql to crash for empty input. (Bug#35480)
The mysql client incorrectly parsed statements containing the word “delimiter” in mid-statement.
The fix for this bug had the side effect of causing the problem reported in Bug#38158, so it was reverted in MySQL 5.1.27. (Bug#33812)
Functionality added or changed:
Incompatible Change: A change has been made to the way that the server handles prepared statements. This affects prepared statements processed at the SQL level (using the
PREPAREstatement) and those processed using the binary client-server protocol (using themysql_stmt_prepare()C API function).Previously, changes to metadata of tables or views referred to in a prepared statement could cause a server crash when the statement was next executed, or perhaps an error at execute time with a crash occurring later. For example, this could happen after dropping a table and recreating it with a different definition.
Now metadata changes to tables or views referred to by prepared statements are detected and cause automatic repreparation of the statement when it is next executed. Metadata changes occur for DDL statements such as those that create, drop, alter, rename, or truncate tables, or that analyze, optimize, or repair tables. Repreparation also occurs after referenced tables or views are flushed from the table definition cache, either implicitly to make room for new entries in the cache, or explicitly due to
FLUSH TABLES.Repreparation is automatic, but to the extent that it occurs, performance of prepared statements is diminished.
Table content changes (for example, with
INSERTorUPDATE) do not cause repreparation, nor doSELECTstatements.An incompatibility with previous versions of MySQL is that a prepared statement may now return a different set of columns or different column types from one execution to the next. For example, if the prepared statement is
SELECT * FROM t1, alteringt1to contain a different number of columns causes the next execution to return a number of columns different from the previous execution.Older versions of the client library cannot handle this change in behavior. For applications that use prepared statements with the new server, an upgrade to the new client library is strongly recommended.
Along with this change to statement repreparation, the default value of the
table_definition_cachesystem variable has been increased from 128 to 256. The purpose of this increase is to lessen the chance that prepared statements will need repreparation due to referred-to tables/views having been flushed from the cache to make room for new entries.A new status variable,
Com_stmt_reprepare, has been introduced to track the number of repreparations. (Bug#27420, Bug#27430, Bug#27690)Important Change: Some changes were made to
CHECK TABLE ... FOR UPGRADEandREPAIR TABLEwith respect to detection and handling of tables with incompatible.frmfiles (files created with a different version of the MySQL server). These changes also affect mysqlcheck because that program usesCHECK TABLEandREPAIR TABLE, and thus also mysql_upgrade because that program invokes mysqlcheck.If your table was created by a different version of the MySQL server than the one you are currently running,
CHECK TABLE ... FOR UPGRADEindicates that the table has an.frmfile with an incompatible version. In this case, the result set returned byCHECK TABLEcontains a line with aMsg_typevalue oferrorand aMsg_textvalue ofTable upgrade required. Please do "REPAIR TABLE `tbl_name`" to fix it!REPAIR TABLEwithoutUSE_FRMupgrades the.frmfile to the current version.If you use
REPAIR TABLE ...USE_FRMand your table was created by a different version of the MySQL server than the one you are currently running,REPAIR TABLEwill not attempt to repair the table. In this case, the result set returned byREPAIR TABLEcontains a line with aMsg_typevalue oferrorand aMsg_textvalue ofFailed repairing incompatible .FRM file.Previously, use of
REPAIR TABLE ...USE_FRMwith a table created by a different version of the MySQL server risked the loss of all rows in the table.
mysql_upgrade now has a
--tmpdiroption to enable the location of temporary files to be specified. (Bug#36469)mysqldump now adds the
LOCALqualifier to theFLUSH TABLESstatement that is sent to the server when the--master-dataoption is enabled. This prevents theFLUSH TABLESstatement from replicating to slaves, which is disadvantageous because it would cause slaves to block while the statement executes. (Bug#35157)See also Bug#38303.
Bugs fixed:
Important Change: The server no longer issues warnings for truncation of excess spaces for values inserted into
CHARcolumns. This reverts a change in the previous release that caused warnings to be issued. (Bug#30059)Replication:
CREATE PROCEDUREandCREATE FUNCTIONstatements containing extended comments were not written to the binary log correctly, causing parse errors on the slave. (Bug#36570)See also Bug#32575.
Replication: When flushing tables, there was a slight chance that the flush occurred between the processing of one table map event and the next. Since the tables were opened one by one, subsequent locking of tables would cause the slave to crash. This problem was observed when replicating
NDBCLUSTERorInnoDBtables, when executing multi-table updates, and when a trigger or a stored routine performed an (additional) insert on a table so that two tables were effectively being inserted into in the same statement. (Bug#36197)Replication:
CREATE VIEWstatements containing extended comments were not written to the binary log correctly, causing parse errors on the slave. Now, all comments are stripped from such statements before being written to the binary log. (Bug#32575)See also Bug#36570.
On Windows 64-bit systems, temporary variables of
longtypes were used to storeulongvalues, causing key cache initialization to receive distorted parameters. The effect was that settingkey_buffer_sizeto values of 2GB or more caused memory exhaustion to due allocation of too much memory. (Bug#36705)Multiple-table
UPDATEstatements that used a temporary table could fail to update all qualifying rows or fail with a spurious duplicate-key error. (Bug#36676)A
REGEXPmatch could return incorrect rows when the previous row matched the expression and usedCONCAT()with an empty string. (Bug#36488)mysqltest ignored the value of
--tmpdirin one place. (Bug#36465)When updating an existing instance (for example, from MySQL 5.0 to 5.1, or 5.1 to 6.0), the Instance Configuration Wizard unnecessarily prompted for a
rootpassword when there was an existingrootpassword. (Bug#36305)Conversion of a
FLOAT ZEROFILLvalue to string could cause a server crash if the value wasNULL. (Bug#36139)On Windows, the installer attempted to use JScript to determine whether the target data directory already existed. On Windows Vista x64, this resulted in an error because the installer was attempting to run the JScript in a 32-bit engine, which wasn't registered on Vista. The installer no longer uses JScript but instead relies on a native WiX command. (Bug#36103)
mysqltest was performing escape processing for the
--replace_resultcommand, which it should not have been. (Bug#36041)An error in calculation of the precision of zero-length items (such as
NULL) caused a server crash for queries that employed temporary tables. (Bug#36023)For
EXPLAIN EXTENDED, execution of an uncorrelatedINsubquery caused a crash if the subquery required a temporary table for its execution. (Bug#36011)The
MERGEstorage engine did a table scan forSELECT COUNT(*)statements when it could calculate the number of records from the underlying tables. (Bug#36006)The server crashed inside
NOT INsubqueries with an impossibleWHEREorHAVINGclause, such asNOT IN (SELECT ... FROM t1, t2, ... WHERE 0). (Bug#36005)The Event Scheduler was not designed to work under the embedded server. It is now disabled for the embedded server, and the
event_schedulersystem variable is not displayed. (Bug#35997)Grouping or ordering of long values in unindexed
BLOBorTEXTcolumns with thegbkorbig5character set crashed the server. (Bug#35993)SET GLOBAL debug=''resulted in a Valgrind warning inDbugParse(), which was reading beyond the end of the control string. (Bug#35986)The “prefer full scan on clustered primary key over full scan of any secondary key” optimizer rule introduced by Bug#26447 caused a performance regression for some queries, so it has been disabled. (Bug#35850)
The server ignored any covering index used for
refaccess of a table in a query withORDER BYif this index was incompatible with theORDER BYlist and there was another covering index compatible with this list. As a result, suboptimal execution plans were chosen for some queries that used anORDER BYclause. (Bug#35844)mysql_upgrade did not properly update the
mysql.eventtable. (Bug#35824)An incorrect error and message was produced for attempts to create a
MyISAMtable with an index (.MYI) file name that was already in use by some otherMyISAMtable that was open at the same time. For example, this might happen if you use the same value of theINDEX DIRECTORYtable option for tables belonging to different databases. (Bug#35733)Enabling the
read_onlysystem variable while autocommit mode was enabled causedSELECTstatements for transactional storage engines to fail. (Bug#35732)The combination of
GROUP_CONCAT(),DISTINCT, andLEFT JOINcould crash the server when the right table is empty. (Bug#35298)Some binaries produced stack corruption messages due to being built with versions of bison older than 2.1. Builds are now created using bison 2.3. (Bug#34926)
The
log_outputsystem variable could be set to an illegal value. (Bug#34820)On Windows 64-bit builds, an apparent compiler bug caused memory overruns for code in
innobase/mem/*. Removed optimizations so as not to trigger this problem. (Bug#34297)Several additional configuration scripts in the
BUILDdirectory now are included in source distributions. These may be useful for users who wish to build MySQL from source. (See Section 2.10.3, “Installing from the Development Source Tree”, for information about what they do.) (Bug#34291)Executing a
FLUSH PRIVILEGESstatement after creating a temporary table in themysqldatabase with the same name as one of the MySQL system tables caused the server to crash.Note
While it is possible to shadow a system table in this way, the temporary table exists only for the current user and connection, and does not effect any user privileges.
UNIONconstructs cannot containSELECT ... INTOexcept in the finalSELECT. However, if aUNIONwas used in a subquery and anINTOclause appeared in the top-level query, the parser interpreted it as having appeared in theUNIONand raised an error. (Bug#32858)Assignment of relative path names to
general_log_fileorslow_query_log_filedid not always work. (Bug#32748)The
mysql.serverstable was not created during installation on Windows. (Bug#28680, Bug#32797)The
jptest suite was not working. (Bug#28563)The internal
init_time()library function was renamed tomy_init_time()to avoid conflicts with external libraries. (Bug#26294)The parser used signed rather than unsigned values in some cases that caused legal lengths in column declarations to be rejected. (Bug#15776)
Functionality added or changed:
Important Change: MySQL Cluster: Packaging: Beginning with this release, standard MySQL 5.1 binaries are no longer built with support for the
NDBCLUSTERstorage engine, and theNDBCLUSTERcode included in 5.1 mainline sources is no longer guaranteed to be maintained or supported. Those using MySQL Cluster in MySQL 5.1.23 and earlier MySQL 5.1 mainline releases should upgrade to MySQL Cluster NDB 6.2.15 or a later MySQL Cluster NDB 6.2 or 6.3 release. (Bug#36193)Important Change: The
FEDERATEDstorage engine is not included in binary distributions of MySQL 5.1.24. (It will be included again in 5.1.25.)Replication: Introduced the
slave_exec_modesystem variable to control whether idempotent or strict mode is used for replication conflict resolution. Idempotent mode suppresses duplicate-key, no-key-found, and some other errors, and is needed for circular replication, multi-master replication, and some other complex replication setups when using MySQL Cluster. Strict mode is the default. (Bug#31609)Replication: When running the server with
--binlog-format=MIXEDor--binlog-format=STATEMENT, a query that referred to a system variable used the slave's value when replayed on the slave. This meant that, if the value of a system variable was inserted into a table, the slave differed from the master. Now, statements that refer to a system variable are marked as “unsafe”, which means that:When the server is using
--binlog-format=MIXED, the row-based format is used automatically to replicate these statements.When the server is using
--binlog-format=STATEMENT, these statements produce a warning.
See also Bug#34732.
The
PROCESSprivilege now is required to start or stop theInnoDBmonitor tables (see Section 13.6.13.2, “SHOW ENGINE INNODB STATUSand theInnoDBMonitors”). Previously, no privilege was required. (Bug#34053)For binary
.tar.gzpackages, mysqld and other binaries now are compiled with debugging symbols included to enable easier use with a debugger. If you do not need debugging symbols and are short on disk space, you can use strip to remove the symbols from the binaries. (Bug#33252)Formerly, when the MySQL server crashed, the generated stack dump was numeric and required external tools to properly resolve the names of functions. This is not very helpful to users having a limited knowledge of debugging techniques. In addition, the generated stack trace contained only the names of functions and was formatted differently for each platform due to different stack layouts.
Now it is possible to take advantage of newer versions of the GNU C Library provide a set of functions to obtain and manipulate stack traces from within the program. On systems that use the ELF binary format, the stack trace contains important information such as the shared object where the call was generated, an offset into the function, and the actual return address. Having the function name also makes possible the name demangling of C++ functions.
The library generates meaningful stack traces on the following platforms: i386, x86_64, PowerPC, IA64, Alpha, and S390. On other platforms, a numeric stack trace is still produced, and the use of the resolve_stack_dump utility is still required. (Bug#31891)
mysqltest now has
mkdirandrmdircommands for creating and removing directories. (Bug#31004)The server uses less memory when loading privileges containing table grants. (Patch provided by Google.) (Bug#25175)
Added the
Uptime_since_flush_statusstatus variable, which indicates the number of seconds since the most recentFLUSH STATUSstatement. (Community contribution by Jeremy Cole) (Bug#24822)SHOW OPEN TABLESnow supportsFROMandLIKEclauses. (Bug#12183)The new read-only global system variables
report_host,report_password,report_port, andreport_usersystem variables provide runtime access to the values of the corresponding--report-host,--report-password,--report-port, and--report-useroptions.Formerly it was possible to specify an
innodb_flush_methodvalue offdatasyncto obtain the default flush behavior of usingfdatasync()for flushing. This is no longer possible because it can be confusing that a value offdatasynccauses use offsync()rather thanfdatasync().The use of
InnoDBhash indexes now can be controlled by setting the newinnodb_adaptive_hash_indexsystem variable at server startup. By default, this variable is enabled. See Section 13.6.10.4, “Adaptive Hash Indexes”.
Bugs fixed:
Important Change: Security Fix: It was possible to circumvent privileges through the creation of
MyISAMtables employing theDATA DIRECTORYandINDEX DIRECTORYoptions to overwrite existing table files in the MySQL data directory. Use of the MySQL data directory inDATA DIRECTORYandINDEX DIRECTORYis now disallowed. This is now also true of these options when used with partitioned tables and individual partitions of such tables.Note
Additional fixes were made in MySQL 5.1.28.
See also Bug#39277.
Security Fix: A client that connects to a malicious server could be tricked by the server into sending files from the client host to the server. This occurs because the
libmysqlclientclient library would respond to aFETCH LOCAL FILErequest from the server even if the request is sent for statements from the client other thanLOAD DATA LOCAL INFILE. The client library has been modified to respond to aFETCH LOCAL FILErequest from the server only if is is sent in response to aLOAD DATA LOCAL INFILEstatement from the client.The client library now also checks whether
CLIENT_LOCAL_FILEis set and refuses to send a local file if not.Note
Binary distributions ship with the
local-infilecapability enabled. Applications that do not use this functionality should disable it to be safe.Important Change: Security Enhancement: On Windows Vista and Windows Server 2008, a user without administrative privileges does not have write permissions to the
Program Filesdirectory where MySQL and the associated data files are normally installed. Using data files located in the standardProgram Filesinstallation directory could therefore cause MySQL to fail, or lead to potential security issues in an installed instance.To address the problem, on Windows XP, Windows Vista and Windows Server 2008, the datafiles and data file configuration are now set to the Microsoft recommended
AppDatafolder. TheAppDatafolder is typically located within the user's home directory.Important
When upgrading an existing 5.1.23 or 6.0.4 installation of MySQL you must take a backup of your data and configuration file (
my.inibefore installing the new version. To migrate your data, either extract the data and re-import (using mysqldump, then upgrade and re-import using mysql), or back up your data, upgrade to the new version, and copy your existing data files from your olddatadirdirectory to the new directory located withinAppData.Failure to back up your data and follow these procedures may lead to data loss.
Incompatible Change: In MySQL 5.1.23, the
last_errnoandlast_errormembers of theNETstructure inmysql_com.hwere renamed toclient_last_errnoandclient_last_error. This was found to cause problems for connectors that use the internalNETstructure for error handling. The change has been reverted. (Bug#34655)See also Bug#12713.
Incompatible Change: It was possible to use
FRAC_SECONDas a synonym forMICROSECONDwithDATE_ADD(),DATE_SUB(), andINTERVAL; now, usingFRAC_SECONDwith anything other thanTIMESTAMPADD()orTIMESTAMPDIFF()produces a syntax error.It is now possible (and preferable) to use
MICROSECONDwithTIMESTAMPADD()andTIMESTAMPDIFF(), andFRAC_SECONDis now deprecated. (Bug#33834)Incompatible Change: The
UPDATEstatement allowedNULLto be assigned toNOT NULLcolumns (the implicit default value for the column data type was assigned). This was changed so that on error occurs.This change was reverted, because the original report was determined not to be a bug: Assigning
NULLto aNOT NULLcolumn in anUPDATEstatement should produce an error only in strict SQL mode and set the column to the implicit default with a warning otherwise, which was the original behavior. See Section 10.1.4, “Data Type Default Values”, and Bug#39265. (Bug#33699)Incompatible Change: For packages that are built within their own prefix (for example,
/usr/local/mysql) the plugin directory will belib/plugin. For packages that are built to be installed into a system-wide prefix (such as RPM packages with a prefix of/usr), the plugin directory will belib/mysql/pluginto ensure a clean/usr/libhierarchy. In both cases, the$pkglibdirconfiguration setting is used at build time to set the plugin directory.The current plugin directory location is available as the value of the
plugin_dirsystem variable as before, but the mysql_config script now has a--plugindiroption that can be used externally to the server by third-party plugin writers to obtain the default plugin directory path name and configure their installation directory appropriately. (Bug#31736)Incompatible Change: The
utf8_general_cianducs2_general_cicollations did not sort the letter "U+00DF SHARP S" equal to's'.As a result of this bug fix, indexes must be rebuilt for columns that use the
utf8_general_ciorucs2_general_cicollation for columns that contain SHARP S. See Section 2.12.3, “Checking Whether Table Indexes Must Be Rebuilt”. (Bug#27877)See also Bug#37046.
Important Change: Replication: When the master crashed during an update on a transactional table while in
autocommitmode, the slave failed. This fix causes every transaction (includingautocommittransactions) to be recorded in the binlog as starting with aBEGINand ending with aCOMMITorROLLBACK. (Bug#26395)Important Change:
InnoDBfree space information is now shown in theData_freecolumn ofSHOW TABLE STATUSand in theDATA_FREEcolumn of theINFORMATION_SCHEMA.TABLEStable. (Bug#32440)See also Bug#11379.
Important Change: The server handled truncation of values having excess trailing spaces into
CHAR,VARCHAR, andTEXTcolumns in different ways. This behavior has now been made consistent for columns of all three of these types, and now follows the existing behavior ofVARCHARcolumns in this regard; that is, aNoteis always issued whenever such truncation occurs.This change does not affect columns of these three types when using a binary encoding;
BLOBcolumns are also unaffected by the change, since they always use a binary encoding. (Bug#30059)Important Change: An
AFTER UPDATEtrigger was not invoked when theUPDATEdid not make any changes to the table for which the trigger was defined. NowAFTER UPDATEtriggers behave the same in this regard as doBEFORE UPDATEtriggers, which are invoked whether theUPDATEmakes any changes in the table or not. (Bug#23771)Partitioning: Important Note: The following statements did not function correctly with corrupted or crashed tables and have been disabled:
ALTER TABLE ... ANALYZE PARTITIONALTER TABLE ... CHECK PARTITIONALTER TABLE ... OPTIMIZE PARTITIONALTER TABLE ... REPAIR PARTITION
ALTER TABLE ... REBUILD PARTITIONis unaffected by this change and continues to be available. This statement andALTER TABLE ... REORGANIZE PARTITIONmay be used to analyze and optimize partitioned tables, since these operations cause the partition files to be rebuilt. (Bug#20129)See also Bug#39434.
Replication: Important Note: Network timeouts between the master and the slave could result in corruption of the relay log. This fix rectifies a long-standing replication issue when using unreliable networks, including replication over wide area networks such as the Internet. If you experience reliability issues and see many You have an error in your SQL syntax errors on replication slaves, we strongly recommend that you upgrade to a MySQL version which includes this fix. (Bug#26489)
Partitioning: In some cases, matching rows from a partitioned
MyISAMusing aBITcolumn as the primary key were not found by queries. (Bug#34358)Partitioning: Enabling
innodb_file_per_tableproduced problems with partitioning and tablespace operations on partitionedInnoDBtables, in some cases leading to corrupt partitions or causing the server to crash. (Bug#33429)Partitioning: A table defined using
PARTITION BY KEYand having aBITcolumn referenced in the partitioning key did not behave correctly; some rows could be inserted into the wrong partition, causing wrong results to be returned from queries. (Bug#33379)Partitioning: For
InnoDBtables, there was a race condition involving the data dictionary and repartitioning. (Bug#33349)Partitioning: When
ALTER TABLE DROP PARTITIONwas executed on a table on which there was a trigger, the statement failed with an error. This occurred even if the trigger did not reference any tables. (Bug#32943)Partitioning: Currently, all partitions of a partitioned table must use the same storage engine. One may optinally specify the storage engine on a per-partition basis; however, where this is the done, the storage engine must be the same as used by the table as a whole.
ALTER TABLEdid not enforce these rules correctly, the result being that incaccurate error messages were shown when trying to use the statement to change the storage engine used by an individual partition or partitions. (Bug#31931)Partitioning: Using the DATA DIRECTORY and INDEX DIRECTORY options for partitions with CREATE TABLE or ALTER TABLE statements appeared to work on Windows, although they are not supported by MySQL on Windows systems, and subsequent attempts to use the tables referenced caused errors. Now these options are disabled on Windows, and attempting to use them generates a warning. (Bug#30459)
Replication: The failure of a
CREATE TABLE ... ENGINE=InnoDB ... SELECTstatement caused the slave to lose data. (Bug#35762)Replication: When using row-based replication, a slave could crash at startup because it received a row-based replication event that
InnoDBcould not handle due to an incorrect test of the query string provided by MySQL, which wasNULLfor row-based replication events. (Bug#35226)Replication:
insert_idwas not written to the binary log for inserts intoBLACKHOLEtables. (Bug#35178)Replication: When using statement-based replication and a
DELETE,UPDATE, orINSERT ... SELECTstatement using aLIMITclause is encountered, a warning that the statement is not safe to replicate in statement mode is now issued; when usingMIXEDmode, the statement is now replicated using the row-based format. (Bug#34768)Replication: mysqlbinlog did not output the values of
auto_increment_incrementandauto_increment_offsetwhen both were equal to their default values (for both of these variables, the default is 1). This meant that a binary log recorded by a client using the defaults for both variables and then replayed on another client using its own values for either or both of these variables produced erroneous results. (Bug#34732)See also Bug#31168.
Replication: When the Windows version of mysqlbinlog read 4.1 binlogs containing
LOAD DATA INFILEstatements, it output backslashes as path separators, causing problems for client programs expecting forward slashes. In such cases, it now converts\\to/in directory paths. (Bug#34355)Replication:
SHOW SLAVE STATUSfailed when slave I/O was about to terminate. (Bug#34305)Replication: The character sets and collations used for constant identifiers in stored procedures were not replicated correctly. (Bug#34289)
Replication: mysqlbinlog from a 5.1 or later MySQL distribution could not read binary logs generated by a 4.1 server when the logs contained
LOAD DATA INFILEstatements. (Bug#34141)This regression was introduced by Bug#32407.
Replication: A
CREATE USER,DROP USER, orRENAME USERstatement that fails on the master, or that is a duplicate of any of these statements, is no longer written to the binlog; previously, either of these occurrences could cause the slave to fail.See also Bug#29749.
Replication:
SHOW BINLOG EVENTScould fail when the binlog contained one or more events whose size was close to the value ofmax_allowed_packet. (Bug#33413)Replication: An extraneous
ROLLBACKstatement was written to the binary log by a connection that did not use any transactional tables. (Bug#33329)Replication: mysqlbinlog failed to release all of its memory after terminating abnormally. (Bug#33247)
Replication: When a stored routine or trigger, running on a master that used MySQL 5.0 or MySQL 5.1.11 or earlier, performed an insert on an
AUTO_INCREMENTcolumn, theinsert_idvalue was not replicated correctly to a slave running MySQL 5.1.12 or later (including any MySQL 6.0 release). (Bug#33029)See also Bug#19630.
Replication: The error message generated due to lack of a default value for an extra column was not sufficiently informative. (Bug#32971)
Replication: When a user variable was used inside an
INSERTstatement, the corresponding binlog event was not written to the binlog correctly. (Bug#32580)Replication: When using row-based replication, deletes from a table with a foreign key constraint failed on the slave. (Bug#32468)
Replication: The
--base64-outputoption for mysqlbinlog was not honored for all types of events. This interfered in some cases with performing point-in-time recovery. (Bug#32407)Replication: SQL statements containing comments using
--syntax were not replayable by mysqlbinlog, even though such statements replicated correctly. (Bug#32205)Replication: When using row-based replication from a master running MySQL 5.1.21 or earlier to a slave running 5.1.22 or later, updates of integer columns failed on the slave with Error in Unknown event: row application failed. (Bug#31583)
This regression was introduced by Bug#21842.
Replication: Replicating write, update, or delete events from a master running MySQL 5.1.15 or earlier to a slave running 5.1.16 or later caused the slave to crash. (Bug#31581)
Replication: When using row-based replication, the slave stopped when attempting to delete nonexistent rows from a slave table without a primary key. In addition, no error was reported when this occurred. (Bug#31552)
Replication: Errors due to server ID conflicts were reported only in the slave's error log; now these errors are also shown in the
Server_IO_Statecolumn in the output ofSHOW SLAVE STATUS. (Bug#31316)Replication:
STOP SLAVEdid not stop connection attempts properly. If the IO slave thread was attempting to connect,STOP SLAVEwaited for the attempt to finish, sometimes for a long period of time, rather than stopping the slave immediately. (Bug#31024)See also Bug#30932.
Replication: Issuing a
DROP VIEWstatement caused replication to fail if the view did not actually exist. (Bug#30998)Replication: Replication of
LOAD DATA INFILEcould fail whenread_buffer_sizewas larger thanmax_allowed_packet. (Bug#30435)Replication: Replication crashed with the
NDBstorage engine when mysqld was started with--character-set-server=ucs2. (Bug#29562)Replication: The effects of scheduled events were not always correctly reproduced on the slave when using row-based replication. (Bug#29020)
Replication: Setting
server_iddid not update its value for the current session. (Bug#28908)Replication: Some older servers wrote events to the binary log using different numbering from what is currently used, even though the file format number in the file is the same. Slaves running MySQL 5.1.18 and later could not read these binary logs properly. Binary logs from these older versions now are recognized and event numbers are mapped to the current numbering so that they can be interpreted properly. (Bug#27779, Bug#32434)
This regression was introduced by Bug#22583.
Replication:
MASTER_POS_WAIT()did not returnNULLwhen the server was not a slave. (Bug#26622)Replication: The inspecific error message Wrong parameters to function register_slave resulted when
START SLAVEfailed to register on the master due to excess length of any the slave server options--report-host,--report-user, or--report-password. An error message specific to each of these options is now returned in such cases. The new error messages are:Failed to register slave: too long 'report-host'
Failed to register slave: too long 'report-user'
Failed to register slave; too long 'report-password'
See also Bug#19328.
Replication:
START SLAVE UNTIL MASTER_LOG_POS=issued on a slave that was usingposition--log-slave-updatesand that was involved in circular replication would cause the slave to run and stop one event later than that specified by the value ofposition. (Bug#13861)Replication:
PURGE BINARY LOGS TOandPURGE BINARY LOGS BEFOREdid not handle missing binary log files correctly or in the same way. Now for both of these statements, if any files listed in the.indexfile are missing from the file system, the statement fails with an error.Manually replacing a binary log file with a directory having the same name caused an error that was not handled correctly. (Bug#35675)
Using
LOAD DATA INFILEwith a view could crash the server. (Bug#35469)Selecting from
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTScould cause a server crash. (Bug#35406)See also Bug#35108.
For a
TEMPORARYtable,DELETEwith noWHEREclause could fail when preceded byDELETEstatements with aWHEREclause. (Bug#35392)If the server crashed with an
InnoDBerror due to unavailability of undo slots, errors could persist during rollback when the server was restarted: There are twoUNDOslot caches (forINSERTandUPDATE). If all slots end up in one of the slot caches, a request for a slot from the other slot cache would fail. This can happen if the request is for anUPDATEslot and all slots are in theINSERTslot cache, or vice versa. (Bug#35352)In some cases, when too many clients tried to connect to the server, the proper
SQLSTATEcode was not returned. (Bug#35289)Memory-allocation failures for attempts to set
key_buffer_sizeto large values could result in a server crash. (Bug#35272)For
InnoDBtables,ALTER TABLE DROPfailed if the name of the column to be dropped began with “foreign”. (Bug#35220)Queries could return different results depending on whether
ORDER BYcolumns were indexed. (Bug#35206)When a view containing a reference to
DUALwas created, the reference was removed when the definition was stored, causing some queries against the view to fail with invalid SQL syntax errors. (Bug#35193)SELECT ... FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTScaused the server to crash if the table referenced by a foreign key had been dropped. This issue was observed on Windows platforms only. (Bug#35108)See also Bug#35406.
Debugging symbols were missing for some executables in Windows binary distributions. (Bug#35104)
Nonconnection threads were being counted in the value of the
Max_used_connectionsstatus variable. (Bug#35074)A query that performed a
ref_or_nulljoin where the second table used a key having one or columns that could beNULLand had a column value that wasNULLcaused the server to crash. (Bug#34945)This regression was introduced by Bug#12144.
For some queries, the optimizer used an ordered index scan for
GROUP BYorDISTINCTwhen it was supposed to use a loose index scan, leading to incorrect results. (Bug#34928)Creating a foreign key on an
InnoDBtable that was created with an explicitAUTO_INCREMENTvalue caused that value to be reset to 1. (Bug#34920)mysqldump failed to return an error code when using the
--master-dataoption without binary logging being enabled on the server. (Bug#34909)Under some circumstances, the value of
mysql_insert_id()following aSELECT ... INSERTstatement could return an incorrect value. This could happen when the lastSELECT ... INSERTdid not involve anAUTO_INCREMENTcolumn, but the value ofmysql_insert_id()was changed by some previous statements. (Bug#34889)Table and database names were mixed up in some places of the subquery transformation procedure. This could affect debugging trace output and further extensions of that procedure. (Bug#34830)
If
fsync()returnedENOLCK,InnoDBcould treat this as fatal and cause abnormal server termination.InnoDBnow retries the operation. (Bug#34823)CREATE SERVERandALTER SERVERcould crash the server if out-of-memory conditions occurred. (Bug#34790)DROP SERVERdoes not release memory cached for server structures created byCREATE SERVER, so repeated iterations of these statements resulted in a memory leak.FLUSH PRIVILEGESnow releases the memory allocated forCREATE SERVER. (Bug#34789)A malformed URL used for a
FEDERATEDtable'sCONNECTIONoption value in aCREATE TABLEstatement was not handled correctly and could crash the server. (Bug#34788)Queries such as
SELECT ROW(1, 2) IN (SELECT t1.a, 2) FROM t1 GROUP BY t1.a(combining row constructors and subqueries in theFROMclause) could lead to assertion failure or unexpected error messages. (Bug#34763)Using
NAME_CONST()with a negative number and an aggregate function caused MySQL to crash. This could also have a negative impact on replication. (Bug#34749)A memory-handling error associated with use of
GROUP_CONCAT()in subqueries could result in a server crash. (Bug#34747)For an indexed integer column
col_nameand a valueNthat is one greater than the maximum value allowed for the data type ofcol_name, conditions of the formWHEREfailed to return rows where the value ofcol_name<Ncol_nameis. (Bug#34731)N- 1A server running with the
--debugoption could attempt to dereference a null pointer when opening tables, resulting in a crash. (Bug#34726)Assigning an “incremental” value to the
debugsystem variable did not add the new value to the current value. For example, if the currentdebugvalue was'T', the statementSET debug = '+P'resulted in a value of'P'rather than the correct value of'P:T'. (Bug#34678)For debug builds, reading from
INFORMATION_SCHEMA.TABLESorINFORMATION_SCHEMA.COLUMNScould cause assertion failures. This could happen under rare circumstances whenINFORMATION_SCHEMAfails to get information about a table (for example, when a connection is killed). (Bug#34656)Executing a
TRUNCATEstatement on a table having both a foreign key reference and aDELETEtrigger crashed the server. (Bug#34643)Some subqueries using an expression that included an aggregate function could fail or in some cases lead to a crash of the server. (Bug#34620)
Dangerous pointer arithmetic crashed the server on some systems. (Bug#34598)
Creating a view inside a stored procedure could lead to a crash of the MySQL Server. (Bug#34587)
A server crash could occur if
INFORMATION_SCHEMAtables built in memory were swapped out to disk during query execution. (Bug#34529)CAST(AVG(produced incorrect results for non-arg) AS DECIMAL)DECIMALarguments. (Bug#34512)The per-thread debugging settings stack was not being deallocated before thread termination, resulting in a stack memory leak. (Bug#34424)
Executing an
ALTER VIEWstatement on a table crashed the server. (Bug#34337)InnoDBcould crash if overflow occurred for anAUTO_INCREMENTcolumn. (Bug#34335)For
InnoDB, exporting and importing a table could corruptTINYBLOBcolumns, and a subsequentALTER TABLEcould corruptTINYTEXTcolumns as well. (Bug#34300)DEFAULT 0was not allowed for theYEARdata type. (Bug#34274)Under some conditions, a
SET GLOBAL innodb_commit_concurrencyorSET GLOBAL innodb_autoextend_incrementstatement could fail. (Bug#34223)mysqldump attempts to set the
character_set_resultssystem variable after connecting to the server. This failed for pre-4.1 servers that have no such variable, but mysqldump did not account for this and 1) failed to dump database contents; 2) failed to produce any error message alerting the user to the problem. (Bug#34192)Use of stored functions in the
WHEREclause forSHOW OPEN TABLEScaused a server crash. (Bug#34166)For a
FEDERATEDtable with an index on a nullable column, accessing the table could crash a server, return an incorrect result set, or returnERROR 1030 (HY000): Got error 1430 from storage engine. (Bug#33946)Passing anything other than a integer to a
LIMITclause in a prepared statement would fail. (This limitation was introduced to avoid replication problems; for example, replicating the statement with a string argument would cause a parse failure in the slave). Now, arguments to theLIMITclause are converted to integer values, and these converted values are used when logging the statement. (Bug#33851)An internal buffer in mysql was too short. Overextending it could cause stack problems or segmentation violations on some architectures. (This is not a problem that could be exploited to run arbitrary code.) (Bug#33841)
A query using
WHERE (column1=', wherestring1' AND column2=constant1) OR (column1='string2' AND column2=constant2)col1used a binary collation andstring1matchedstring2except for case, failed to match any records even when matches were found by a query using the equivalent clauseWHERE column2=. (Bug#33833)constant1OR column2=constant2Large unsigned integers were improperly handled for prepared statements, resulting in truncation or conversion to negative numbers. (Bug#33798)
Reuse of prepared statements could cause a memory leak in the embedded server. (Bug#33796)
The server crashed when executing a query that had a subquery containing an equality X=Y where Y referred to a named select list expression from the parent select. The server crashed when trying to use the X=Y equality for
ref-based access. (Bug#33794)Some queries using a combination of
IN,CONCAT(), and an implicit type conversion could return an incorrect result. (Bug#33764)In some cases a query that produced a result set when using
ORDER BY ASCdid not return any results when this was changed toORDER BY DESC. (Bug#33758)Disabling concurrent inserts caused some cacheable queries not to be saved in the query cache. (Bug#33756)
ORDER BY ... DESCsorts could produce misordered results. (Bug#33697)The server could crash when
REPEATor another control instruction was used in conjunction with labels and aLEAVEinstruction. (Bug#33618)The parser allowed control structures in compound statements to have mismatched beginning and ending labels. (Bug#33618)
make_binary_distribution passed the
--print-libgcc-fileoption to the C compiler, but this does not work with the ICC compiler. (Bug#33536)Threads created by the event scheduler were incorrectly counted against the
max_connectionsthread limit, which could lead to client lockout. (Bug#33507)Dropping a function after dropping the function's creator could cause the server to crash. (Bug#33464)
Certain combinations of views, subselects with outer references and stored routines or triggers could cause the server to crash. (Bug#33389)
SET GLOBAL myisam_max_sort_file_size=DEFAULTsetmyisam_max_sort_file_sizeto an incorrect value. (Bug#33382)See also Bug#31177.
ENUM- orSET-valued plugin variables could not be set from the command line. (Bug#33358)Loading plugins via command-line options to mysqld could cause an assertion failure. (Bug#33345)
SLEEP(0)failed to return on 64-bit Mac OS X due to a bug inpthread_cond_timedwait(). (Bug#33304)Using Control-R in the mysql client caused it to crash. (Bug#33288)
For
MyISAMtables,CHECK TABLE(non-QUICK) and any form ofREPAIR TABLEincorrected treated rows as corrupted under the combination of the following conditions:The table had dynamic row format
The table had a
CHAR(notVARCHAR) column longer than 127 bytes (for multi-byte character sets this could be less than 127 characters)The table had rows with a signifcant length of more than 127 bytes significant length in that
CHARcolumn (that is, a byte beyond byte position 127 must be a nonspace character)
This problem affected
CHECK TABLE,REPAIR TABLE,OPTIMIZE TABLE,ALTER TABLE.CHECK TABLEreported and marked the table as crashed if any row was present that fulfilled the third condition. The other statements deleted these rows. (Bug#33222)Granting the
UPDATEprivilege on one column of a view caused the server to crash. (Bug#33201)For
DECIMALcolumns used with theROUND(orX,D)TRUNCATE(function with a nonconstant value ofX,D)D, adding anORDER BYfor the function result produced misordered output. (Bug#33143)The
CSVengine did not honor update requests forBLOBcolumns when the new column value had the same length as the value to be updated. (Bug#33067)After receiving a
SIGHUPsignal, the server could crash, and user-specified log options were ignored when reopening the logs. (Bug#33065)When MySQL was built with OpenSSL, the SSL library was not properly initialized with information of which endpoint it was (server or client), causing connection failures. (Bug#33050)
Under some circumstances a combination of aggregate functions and
GROUP BYin aSELECTquery over a view could lead to incorrect calculation of the result type of the aggregate function. This in turn could lead to incorrect results, or to crashes on debug builds of the server. (Bug#33049)For
DISTINCTqueries, 4.0 and 4.1 stopped reading joined tables as soon as the first matching row was found. However, this optimization was lost in MySQL 5.0, which instead read all matching rows. This fix for this regression may result in a major improvement in performance forDISTINCTqueries in cases where many rows match. (Bug#32942)Repeated creation and deletion of views within prepared statements could eventually crash the server. (Bug#32890)
See also Bug#34587.
Incorrect assertions could cause a server crash for
DELETEtriggers for transactional tables. (Bug#32790)In some cases where setting a system variable failed, no error was sent to the client, causing the client to hang. (Bug#32757)
Enabling the
PAD_CHAR_TO_FULL_LENGTHSQL mode caused privilege-loading operations (such asFLUSH PRIVILEGES) to include trailing spaces from grant table values stored inCHARcolumns. Authentication for incoming connections failed as a result. Now privilege loading does not include trailing spaces, regardless of SQL mode. (Bug#32753)The
SHOW ENGINE INNODB STATUSandSHOW ENGINE INNODB MUTEXstatements incorrectly required theSUPERprivilege rather than thePROCESSprivilege. (Bug#32710)Inserting strings with a common prefix into a table that used the
ucs2character set corrupted the table. (Bug#32705)Tables in the
mysqldatabase that stored the currentsql_modevalue as part of stored program definitions were not updated with newer mode values (NO_ENGINE_SUBSTITUTION,PAD_CHAR_TO_FULL_LENGTH). This causes various problems defining stored programs if those modes were included in the currentsql_modevalue. (Bug#32633)A view created with a string literal for one of the columns picked up the connection character set, but not the collation. Comparison to that field therefore used the default collation for that character set, causing an error if the connection collation was not compatible with the default collation. The problem was caused by text literals in a view being dumped with a character set introducer even when this was not necessary, sometimes leading to a loss of collation information. Now the character set introducer is dumped only if it was included in the original query. (Bug#32538)
See also Bug#21505.
Queries using
LIKEon tables having indexedCHARcolumns using either of theeucjpmsorujischaracter sets did not return correct results. (Bug#32510)Executing a prepared statement associated with a materialized cursor sent to the client a metadata packet with incorrect table and database names. The problem occurred because the server sent the name of the temporary table used by the cursor instead of the table name of the original table.
The same problem occured when selecting from a view, in which case the name of the table name was sent, rather than the name of the view. (Bug#32265)
InnoDBadaptive hash latches could be held too long, resulting in a server crash. This fix may also provide significant performance improvements on systems on which many queries using filesorts with temporary tables are being performed. (Bug#32149)On Windows, mysqltest_embedded.exe did not properly execute the
sendcommand. (Bug#32044)A variable named
read_onlycould be declared even though that is a reserved word. (Bug#31947)On Windows, the build process failed with four parallel build threads. (Bug#31929)
Queries testing numeric constants containing leading zeroes against
ZEROFILLcolumns were not evaluated correctly. (Bug#31887)If an error occurred during file creation, the server sometimes did not remove the file, resulting in an unused file in the file system. (Bug#31781)
When upgrading from MySQL 5.1.19 to any version between MySQL 5.1.20 to MySQL 5.1.23, the MySQL Instance Configuration Wizard would fail to account for the change in name for the mysqld-nt.exe to mysqld.exe, causing MySQL to fail to start properly after the upgrade. (Bug#31674)
The server returned the error message Out of memory; restart server and try again when the actual problem was that the sort buffer was too small. Now an appropriate error message is returned in such cases. (Bug#31590)
A table having an index that included a
BLOBorTEXTcolumn, and that was originally created with a MySQL server using version 4.1 or earlier, could not be opened by a 5.1 or later server. (Bug#31331)The
-,*, and/operators and the functionsPOW()andEXP()could misbehave when used with floating-point numbers. Previously they might return+INF,-INF, orNaNin cases of numeric overflow (including that caused by division by zero) or when invalid arguments were used. NowNULLis returned in all such cases. (Bug#31236)The
mysql_change_user()C API function caused globalCom_status variable values to be incorrect. (Bug#31222)xxxWhen sorting privilege table rows, the server treated escaped wildcard characters (
\%and\_) the same as unescaped wildcard characters (%and_), resulting in incorrect row ordering. (Bug#31194)On Windows,
SHOW PROCESSLISTcould display process entries with aStatevalue of*** DEAD ***. (Bug#30960)ROUND(orX,D)TRUNCATE(for nonconstant values ofX,D)Dcould crash the server if these functions were used in anORDER BYthat was resolved usingfilesort. (Bug#30889)Resetting the query cache by issuing a
SET GLOBAL query_cache_size=0statement caused the server to crash if it concurrently was saving a new result set to the query cache. (Bug#30887)Manifest problems prevented MySQLInstanceConfig.exe from running on Windows Vista. (Bug#30823)
If an alias was used to refer to the value returned by a stored function within a subselect, the outer select recognized the alias but failed to retrieve the value assigned to it in the subselect. (Bug#30787)
Binary logging for a stored procedure differed depending on whether or not execution occurred in a prepared statement. (Bug#30604)
An orphaned PID file from a no-longer-running process could cause mysql.server to wait for that process to exit even though it does not exist. (Bug#30378)
The
Table_locks_waitedwaited variable was not incremented in the cases that a lock had to be waited for but the waiting thread was killed or the request was aborted. (Bug#30331)The
Com_create_functionstatus variable was not incremented properly. (Bug#30252)View metadata returned from
INFORMATION_SCHEMA.VIEWSwas changed by the fix for Bug#11986, causing the information returned in MySQL 5.1 to differ from that returned in 5.0. (Bug#30217)mysqld displayed the
--enable-pstackoption in its help message even if MySQL was configured without--with-pstack. (Bug#29836)The mysql_config command would output
CFLAGSvalues that were incompatible with C++ for the HP-UX platform. (Bug#29645)Views were treated as insertable even if some base table columns with no default value were omitted from the view definition. (This is contrary to the condition for insertability that a view must contain all columns in the base table that do not have a default value.) (Bug#29477)
myisamchk always reported the character set for a table as
latin1_swedish_ci (8)regardless of the table' actual character set. (Bug#29182)InnoDBcould return an incorrect rows-updated value forUPDATEstatements. (Bug#29157)The MySQL preferences pane did not work to start or stop MySQL on Mac OS X 10.5 (Leopard). (Bug#28854)
For upgrading to a new major version using RPM packages (such as 4.1 to 5.0), if the installation procedure found an existing MySQL server running, it could fail to shut down the old server, but also erroneously removed the server's socket file. Now the procedure checks for an existing server package from a different vendor or major MySQL version. In such case, it refuses to install the server and recommends how to safely remove the old packages before installing the new ones. (Bug#28555)
mysqlhotcopy silently skipped databases with names consisting of two alphanumeric characters. (Bug#28460)
No information was written to the general query log for the
COM_STMT_CLOSE,COM_STMT_RESET, andCOM_STMT_SEND_LONG_DATAcommands. (These occur when a client invokes themysql_stmt_close(),mysql_stmt_reset()andmysql_stmt_send_long_data()C API functions.) (Bug#28386)Previously, the parser accepted the ODBC
{ OJ ... LEFT OUTER JOIN ...}syntax for writing left outer joins. The parser now allows{ OJ ... }to be used to write other types of joins, such asINNER JOINorRIGHT OUTER JOIN. This helps with compatibility with some third-party applications, but is not official ODBC syntax. (Bug#28317)The
FEDERATEDstorage engine did not perform identifier quoting for column names that are reserved words when sending statements to the remote server. (Bug#28269)The SQL parser did not accept an empty
UNION=()clause. This meant that, when there were no underlying tables specified for aMERGEtable,SHOW CREATE TABLEand mysqldump both output statements that could not be executed.Now it is possible to execute a
CREATE TABLEorALTER TABLEstatement with an emptyUNION=()clause. However,SHOW CREATE TABLEand mysqldump do not output theUNION=()clause if there are no underlying tables specified for aMERGEtable. This also means it is now possible to remove the underlying tables for aMERGEtable usingALTER TABLE ... UNION=(). (Bug#28248)It was possible to exhaust memory by repeatedly running
index_mergequeries and never performing anyFLUSH TABLESstatements. (Bug#27732)When
utf8was set as the connection character set, usingSPACE()with a non-Unicode column produced an error. (Bug#27580)See also Bug#23637.
The parser rules for the
SHOW PROFILEstatement were revised to work with older versions of bison. (Bug#27433)resolveip failed to produce correct results for host names that begin with a digit. (Bug#27427)
In
ORDER BYclauses, mixing aggregate functions and nongrouping columns is not allowed if theONLY_FULL_GROUP_BYSQL mode is enabled. However, in some cases, no error was thrown because of insufficient checking. (Bug#27219)For the
--record_log_posoption, mysqlhotcopy now determines the slave status information from the result ofSHOW SLAVE STATUSby using theRelay_Master_Log_FileandExec_Master_Log_Posvalues rather than theMaster_Log_FileandRead_Master_Log_Posvalues. This provides a more accurate indication of slave execution relative to the master. (Bug#27101)The MySQL Instance Configuration Wizard would not allow you to choose a service name, even though the criteria for the service name were valid. The code that checks the name has been updated to support the correct criteria of any string less than 256 character and not containing either a forward or backward slash character. (Bug#27013)
Memory corruption, a crash of the MySQL server, or both, could take place if a low-level I/O error occurred while an
ARCHIVEtable was being opened. (Bug#26978)DROP DATABASEfailed for attempts to drop databases with names that contained the legacy#mysql50#name prefix. (Bug#26703)config-win.hunconditionally definedboolasBOOL, causing problems on systems whereboolis 1 byte andBOOLis 4 bytes. (Bug#26461)On Windows, for distributions built with debugging support, mysql could crash if the user typed Control-C. (Bug#26243)
The XPath
boolean()function did not cast string and nodeset values correctly in some cases. It now returnsTRUEfor any nonempty string or nodeset and 0 for aNULLstring, as specified in the XPath standard.. (Bug#26051)When symbolic links were disabled, either with a server startup option or by enabling the
NO_DIR_IN_CREATESQL mode,CREATE TABLEsilently ignored theDATA DIRECTORYandINDEX DIRECTORYtable options. Now the server issues a warning if symbolic links are disabled when these table options are used. (Bug#25677)Attempting to create an index with a prefix on a
DECIMALcolumn appeared to succeed with an inaccurate warning message. Now, this action fails with the error Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys. (Bug#25426)mysqlcheck -A -r did not correctly identify all tables that needed repairing. (Bug#25347)
On Windows, an error in
configure.jscaused installation of source distributions to fail. (Bug#25340)The
Qcache_free_blocksstatus variable did not display a value of 0 if the query cache was disabled. (Bug#25132)The client library had no way to return an error if no connection had been established. This caused problems such as
mysql_library_init()failing silently if noerrmsg.sysfile was available. (Bug#25097)On Mac OS X, the StartupItem for MySQL did not work. (Bug#25008)
For Windows 64-bit builds, enabling shared-memory support caused client connections to fail. (Bug#24992)
mysql did not use its completion table. Also, the table contained few entries. (Bug#24624)
If a user installed MySQL Server and set a password for the
rootuser, and then uninstalled and reinstalled MySQL Server to the same location, the user could not use the MySQL Instance Config wizard to configure the server because the uninstall operation left the previous data directory intact. The config wizard assumed that any new install (not an upgrade) would have the default data directory where therootuser has no password. The installer now writes a registry key namedFoundExistingDataDir. If the installer finds an existing data directory, the key will have a value of 1, otherwise it will have a value of 0. When MySQLInstanceConfig.exe is run, it will attempt to read the key. If it can read the key, and the value is 1 and there is no existing instance of the server (indicating a new installation), the Config Wizard will allow the user to input the old password so the server can be configured. (Bug#24215)Logging of statements to log tables was incorrect for statements that contained
utf8-incompatible binary strings. Incompatible sequences are hex-encoded now. (Bug#23924)The MySQL header files contained some duplicate macro definitions that could cause compilation problems. (Bug#23839)
SHOW COLUMNSon aTEMPOARYtable caused locking issues. (Bug#23588)For distributions compiled with the bundled
libeditlibrary, there were difficulties using the mysql client to enter input for non-ASCII or multi-byte characters. (Bug#23097)perror reported incomplete or inaccurate information. (Bug#23028, Bug#25177)
InnoDBexhibited thread thrashing with more than 50 concurrent connections under an update-intensive workload. (Bug#22868)After stopping and starting the event scheduler, disabled events could remain in the execution queue. (Bug#22738)
The server produced a confusing error message when attempting to open a table that required a storage engine that was not loaded. (Bug#22708)
For views or stored programs created with an invalid
DEFINERvalue, the error message was confusing (did not tie the problem to theDEFINERclause) and has been improved. (Bug#21854)Warnings for deprecated syntax constructs used in stored routines make sense to report only when the routine is being created, but they were also being reported when the routine was parsed for loading into the execution cache. Now they are reported only at routine creation time. (Bug#21801)
On Mac OS X, mysqld did not react to Ctrl-C when run under gdb, even when run with the
--gdboption. (Bug#21567)CREATE ... SELECTdid not always setDEFAULTcolumn values in the new table. (Bug#21380)mysql_config output did not include
-lmygccon some platforms when it was needed. (Bug#21158)mysql-stress-test.pl and mysqld_multi.server.sh were missing from some binary distributions. (Bug#21023, Bug#25486)
The
BENCHMARK()function, invoked with more than 2147483648 iterations (the size of a signed 32-bit integer), terminated prematurely. (Bug#20752)mysqldumpslow returned a confusing error message when no configuration file was found. (Bug#20455)
MySQLInstanceConfig.exe could lose the
innodb_data_home_dirsetting when reconfiguring an instance. (Bug#19797)DROP DATABASEdid not drop orphanedFOREIGN KEYconstraints. (Bug#18942)CREATE TABLEallowed 0 as the default value for aTIMESTAMPcolumn when the server was running inNO_ZERO_DATEmode. (Bug#18834)A
SETcolumn whose definition specified 64 elements could not be updated using integer values. (Bug#15409)If a
SELECTcalls a stored function in a transaction, and a statement within the function fails, that statement should roll back. Furthermore, ifROLLBACKis executed after that, the entire transaction should be rolled back. Before this fix, the failed statement did not roll back when it failed (even though it might ultimately get rolled back by aROLLBACKlater that rolls back the entire transaction). (Bug#12713)See also Bug#34655.
The parser incorrectly allowed
SQLSTATE '00000'to be specified for a condition handler. (This is incorrect because the condition must be a failure condition and'00000'indicates success.) (Bug#8759)MySQLInstanceConfig.exe did not save the
innodb_data_home_dirvalue to themy.inifile under certain circumstances. (Bug#6627)
Functionality added or changed:
Important Change: Partitioning: Security Fix: It was possible, by creating a partitioned table using the
DATA DIRECTORYandINDEX DIRECTORYoptions to gain privileges on other tables having the same name as the partitioned table. As a result of this fix, any table-levelDATA DIRECTORYorINDEX DIRECTORYoptions are now ignored for partitioned tables. (Bug#32091, CVE-2007-5970)Incompatible Change: In MySQL 5.1.6, when log tables were implemented, the default log destination for the general query and slow query log was
TABLE. This default has been changed toFILE, which is compatible with MySQL 5.0, but incompatible with earlier releases of MySQL 5.1 from 5.1.6 to 5.1.20. If you are upgrading from MySQL 5.0 to 5.1.21 or higher, no logging option changes should be necessary. However, if you are upgrading from 5.1.6 through 5.1.20 to 5.1.21 or higher and were usingTABLElogging, use the--log-output=TABLEoption explicitly to preserve your server's table-logging behavior.The MySQL 5.1.23 fix is in addition to a fix in 5.1.21 because it turned out that the default was set in two places, only one of which was fixed the first time. (Bug#29993)
Incompatible Change
The parser accepted statements that contained
/* ... */that were not properly closed with*/, such asSELECT 1 /* + 2. Statements that contain unclosed/*-comments now are rejected with a syntax error.This fix has the potential to cause incompatibilities. Because of Bug#26302, which caused the trailing
*/to be truncated from comments in views, stored routines, triggers, and events, it is possible that objects of those types may have been stored with definitions that now will be rejected as syntactically invalid. Such objects should be dropped and re-created so that their definitions do not contain truncated comments. (Bug#28779)MySQL Cluster: The following improvements have been made in the ndb_size.pl utility:
The script can now be used with multiple databases; lists of databases and tables can also be excluded from analysis.
Schema name information has been added to index table calculations.
The database name is now an optional parameter, the exclusion of which causes all databases to be examined.
If selecting from
INFORMATION_SCHEMAfails, the script now attempts to fall back toSHOW TABLES.A
--real_table_nameoption has been added; this designates a table to handle unique index size calculations.The report title has been amended to cover cases where more than one database is being analyzed.
Support for a
--socketoption was also added.For more information, see Section 17.6.21, “ndb_size.pl — NDBCLUSTER Size Requirement Estimator”. (Bug#28683, Bug#28253)
MySQL Cluster: Mapping of
NDBerror codes to MySQL storage engine error codes has been improved. (Bug#28423)MySQL Cluster: The output from the cluster management client showing the progress of data node starts has been improved. (Bug#23354)
Partitioning: Error messages for partitioning syntax errors have been made more descriptive. (Bug#29368)
Replication: Replication of the following SQL functions now switches to row-based logging in
MIXEDmode, and generates a warning inSTATEMENTmode:CURRENT_USER()and its aliasCURRENT_USER
See Section 5.2.4.3, “Mixed Binary Logging Format”, for more information. (Bug#12092, Bug#28086, Bug#30244)
mysqltest now has a
change_usercommand to change the user for the current connection. (It invokes themysql_change_user()C API function.) (Bug#31608)mysql-test-run.pl now allows a suite name prefix to be specified in command-line arguments that name test cases. The test name syntax now is
[. For example, mysql-test-run.pl binlog.mytest runs thesuite_name.]test_name[.suffix]mytest.testtest in thebinlogtest suite. (Bug#31400)The
--event-scheduleroption without a value disabled the event scheduler. Now it enables the event scheduler. (Bug#31332)mysqldump produces a
-- Dump completed oncomment at the end of the dump ifDATE--commentsis given. The date causes dump files for identical data take at different times to appear to be different. The new options--dump-dateand--skip-dump-datecontrol whether the date is added to the comment.--skip-dump-datesuppresses date printing. The default is--dump-date(include the date in the comment). (Bug#31077)Server parser performance was improved for expression parsing by lowering the number of state transitions and reductions needed. (Bug#30625)
Server parser performance was improved for identifier lists, expression lists, and UDF expression lists. (Bug#30333)
Server parser performance was improved for boolean expressions. (Bug#30237)
The
LAST_EXECUTEDcolumn of theINFORMATION_SCHEMA.EVENTStable now indicates when the event started executing rather than when it finished executing. As a result, theENDScolumn is never less thanLAST_EXECUTED. (Bug#29830)The
mysql_odbc_escape_string()C API function has been removed. It has multi-byte character escaping issues, doesn't honor theNO_BACKSLASH_ESCAPESSQL mode and is not needed anymore by Connector/ODBC as of 3.51.17. (Bug#29592)If a
MyISAMtable is created with noDATA DIRECTORYoption, the.MYDfile is created in the database directory. By default, ifMyISAMfinds an existing.MYDfile in this case, it overwrites it. The same applies to.MYIfiles for tables created with noINDEX DIRECTORYoption. To suppress this behavior, start the server with the new--keep_files_on_createoption, in which caseMyISAMwill not overwrite existing files and returns an error instead. (Bug#29325)The default value of the
connect_timeoutsystem variable was increased from 5 to 10 seconds. This might help in cases where clients frequently encounter errors of the formLost connection to MySQL server at '. (Bug#28359)XXX', system error:errnoMySQL now can be compiled with gcc 4.2.x. There was a problem involving a conflict with the
min()andmax()macros inmy_global.h. (Bug#28184)mysql-test-run.pl now supports a
--combinationoption for specifying options to the mysqld server. This option is similar to--mysqldbut should be given two or more times. mysql-test-run.pl executes multiple test runs, using the options for each instance of--combinationin successive runs.For test runs specific to a given test suite, an alternative to the use of
--combinationis to create acombinationsfile in the suite directory. The file should contain a section of options for each test run.The argument for the mysql-test-run.pl
--do-testand--skip-testoptions is now interpreted as a Perl regular expression if there is a pattern metacharacter in the argument value. This allows more flexible specification of which tests to perform or skip.
Bugs fixed:
Security Fix: Replication: It was possible for any connected user to issue a
BINLOGstatement, which could be used to escalate privileges.Use of the
BINLOGstatement now requires theSUPERprivilege. (Bug#31611, CVE-2007-6313)Security Fix: Three vulnerabilities in yaSSL versions 1.7.5 and earlier were discovered that could lead to a server crash or execution of unauthorized code. The exploit requires a server with yaSSL enabled and TCP/IP connections enabled, but does not require valid MySQL account credentials. The exploit does not apply to OpenSSL.
Note
The proof-of-concept exploit is freely available on the Internet. Everyone with a vulnerable MySQL configuration is advised to upgrade immediately.
Security Fix: Using
RENAME TABLEagainst a table with explicitDATA DIRECTORYandINDEX DIRECTORYoptions can be used to overwrite system table information by replacing the symbolic link points. the file to which the symlink points.MySQL will now return an error when the file to which the symlink points already exists. (Bug#32111, CVE-2007-5969)
Security Fix:
ALTER VIEWretained the originalDEFINERvalue, even when altered by another user, which could allow that user to gain the access rights of the view. NowALTER VIEWis allowed only to the original definer or users with theSUPERprivilege. (Bug#29908)Security Fix: When using a
FEDERATEDtable, the local server could be forced to crash if the remote server returned a result with fewer columns than expected. (Bug#29801)Security Enhancement: It was possible to force an error message of excessive length which could lead to a buffer overflow. This has been made no longer possible as a security precaution. (Bug#32707)
Incompatible Change: It is no longer possible to create
CSVtables withNULLcolumns. However, for backwards compatibility, you can continue to use such tables that were created in previous MySQL releases. (Bug#32050)Incompatible Change: With
ONLY_FULL_GROUP_BYSQL mode enabled, queries such asSELECT a FROM t1 HAVING COUNT(*)>2were not being rejected as they should have been.This fix results in the following behavior:
There is a check against mixing group and nongroup columns only when
ONLY_FULL_GROUP_BYis enabled.This check is done both for the select list and for the
HAVINGclause if there is one.
This behavior differs from previous versions as follows:
Previously, the
HAVINGclause was not checked whenONLY_FULL_GROUP_BYwas enabled; now it is checked.Previously, the select list was checked even when
ONLY_FULL_GROUP_BYwas not enabled; now it is checked only whenONLY_FULL_GROUP_BYis enabled.
Incompatible Change: Inserting a row with a
NULLvalue for aDATETIMEcolumn results in aCSVfile that the storage engine cannot read.All
CSVtables now need to be defined with each column marked asNOT NULL. An error is raised if you try to create aCSVtable with columns that are not defined withNOT NULL. (Bug#31473, Bug#32817)Incompatible Change:
SET PASSWORDstatements now cause an implicit commit, and thus are prohibited within stored functions and triggers. (Bug#30904)Incompatible Change: The
mysql_install_dbscript could fail to locate some components (including resolveip) during execution if the--basediroption was specified on the command-line or within themy.cnffile. This was due to a conflict when comparing the compiled-in values and the supplied values.The
--source-installcommand-line option to the script has been removed and replaced with the--srcdiroption. mysql_install_db now locates components either using the compiled-in options, the--basediroption or--srcdiroption. (Bug#30759)Incompatible Change: Multiple-table
DELETEstatements containing ambiguous aliases could have unintended side effects such as deleting rows from the wrong table. Example:DELETE FROM t1 AS a2 USING t1 AS a1 INNER JOIN t2 AS a2;
Now alias declarations can be declared only in the
table_referencespart. Elsewhere in the statement, alias references are allowed but not alias declarations. Statements containing aliases that are no longer allowed must be rewritten. (Bug#30234)See also Bug#27525.
Incompatible Change: Within a stored routine, it is no longer allowable to declare a cursor for a
SHOWorDESCRIBEstatement. This happened to work in some instances, but is no longer supported. In many cases, a workaround for this change is to use the cursor with aSELECTquery to read from anINFORMATION_SCHEMAtable that produces the same information as theSHOWstatement. (Bug#29223)Incompatible Change: It was possible to create a view having a column whose name consisted of an empty string or space characters only.
One result of this bug fix is that aliases for columns in the view
SELECTstatement are checked to ensure that they are legal column names. In particular, the length must be within the maximum column length of 64 characters, not the maximum alias length of 256 characters. This can cause problems for replication or loading dump files. For additional information and workarounds, see Section D.4, “Restrictions on Views”. (Bug#27695)See also Bug#31202.
Incompatible Change: Several type-preserving functions and operators returned an incorrect result type that does not match their argument types:
COALESCE(),IF(),IFNULL(),LEAST(),GREATEST(),CASE. These now aggregate using the precise SQL types of their arguments rather than the internal type. In addition, the result type of theSTR_TO_DATE()function is nowDATETIMEby default. (Bug#27216)Incompatible Change:
GRANTandREVOKEstatements now cause an implicit commit, and thus are prohibited within stored functions and triggers. (Bug#21975, Bug#21422, Bug#17244)Incompatible Change: It was possible for option files to be read twice at program startup, if some of the standard option file locations turned out to be the same directory. Now duplicates are removed from the list of files to be read.
Also, users could not override system-wide settings using
~/.my.cnfbecausewas read last. The latter file now is read earlier so thatSYSCONFDIR/my.cnf~/.my.cnfcan override system-wide settings.The fix for this problem had a side effect such that on Unix, MySQL programs looked for options in
~/my.cnfrather than the standard location of~/.my.cnf. That problem was addressed as Bug#38180. (Bug#20748)Incompatible Change: A number of problems existed in the implementation of
MERGEtables that could cause problems. The problems are summarized below:Bug#26379 - Combination of
FLUSH TABLEandREPAIR TABLEcorrupts aMERGEtable. This was caused in a number of situations:A thread trying to lock a
MERGEtable performs busy waiting whileREPAIR TABLEor a similar table administration task is ongoing on one or more of its MyISAM tables.A thread trying to lock a
MERGEtable performs busy waiting until all threads that didREPAIR TABLEor similar table administration tasks on one or more of its MyISAM tables in LOCK TABLES segments do UNLOCK TABLES. The difference against problem #1 is that the busy waiting takes place after the administration task. It is terminated byUNLOCK TABLESonly.Two
FLUSH TABLESwithin aLOCK TABLESsegment can invalidate the lock. This does not require aMERGEtable. The firstFLUSH TABLEScan be replaced by any statement that requires other threads to reopen the table. In 5.0 and 5.1 a singleFLUSH TABLEScan provoke the problem.
Bug#26867 - Simultaneously executing
LOCK TABLESandREPAIR TABLEon aMERGEtable would result in memory/cpu hogging.Trying DML on a
MERGEtable, which has a child locked and repaired by another thread, made an infinite loop in the server.Bug#26377 - Deadlock with
MERGEandFLUSH TABLELocking a MERGE table and its children in parent-child order and flushing the child deadlocked the server.
Truncating a MERGE child, while the MERGE table was in use, let the truncate fail instead of waiting for the table to become free.
Bug#25700 -
MERGEbase tables get corrupted byOPTIMIZE/ANALYZE/REPAIR TABLERepairing a child of an open
MERGEtable corrupted the child. It was necessary toFLUSHthe child first.Bug#30275 -
MERGEtables:FLUSH TABLESorUNLOCK TABLEScauses server to crash.Flushing and optimizing locked
MERGEchildren crashed the server.Bug#19627 - temporary merge table locking
Use of a temporary
MERGEtable with nontemporary children could corrupt the children.Temporary tables are never locked. Creation of tables with nontemporary children of a temporary
MERGEtable is now prohibited.Bug#27660 -
Falcon:MERGEtable possibleIt was possible to create a
MERGEtable with non-MyISAMchildren.Bug#30273 -
MERGEtables: Can't lock file (errno: 155)This was a Windows-only bug. Table administration statements sometimes failed with "Can't lock file (errno: 155)".
The fix introduces the following changes in behavior:
This patch changes the behavior of temporary
MERGEtables. TemporaryMERGEmust have temporary children. The old behavior was wrong. A temporary table is not locked. Hence even nontemporary children were not locked. See Bug#19627.You cannot change the union list of a nontemporary
MERGEtable when LOCK TABLES is in effect. The following does not work:CREATE TABLE m1 ... ENGINE=MRG_MYISAM ...; LOCK TABLES t1 WRITE, t2 WRITE, m1 WRITE; ALTER TABLE m1 ... UNION=(t1,t2) ...;
However, you can do this with a temporary
MERGEtable.You cannot create a
MERGEtable withCREATE ... SELECT, neither as a temporaryMERGEtable, nor as a nontemporaryMERGEtable. For example,CREATE TABLE m1 ... ENGINE=MRG_MYISAM ... SELECT ...;causes the error message: table is not BASE TABLE.
(Bug#19627, Bug#25038, Bug#25700, Bug#26377, Bug#26379, Bug#26867, Bug#27660, Bug#30275, Bug#30491)
Important Change: MySQL Cluster:
AUTO_INCREMENTcolumns had the following problems when used inNDBtables:The
AUTO_INCREMENTcounter was not updated correctly when such a column was updated.AUTO_INCREMENTvalues were not prefetched beyond statement boundaries.AUTO_INCREMENTvalues were not handled correctly withINSERT IGNOREstatements.After being set,
ndb_autoincrement_prefetch_szshowed a value of 1, regardless of the value it had actually been set to.
As part of this fix, the behavior of
ndb_autoincrement_prefetch_szhas changed. Setting this to less than 32 no longer has any effect on prefetching within statements (where IDs are now always obtained in batches of 32 or more), but only between statements. The default value for this variable has also changed, and is now1. (Bug#25176, Bug#31956, Bug#32055)Partitioning: Important Note: An apostrophe or single quote character (
') used in theDATA DIRECTORY,INDEX DIRECTORY, orCOMMENTfor aPARTITIONclause caused the server to crash. When used as part of aCREATE TABLEstatement, the crash was immediate. When used in anALTER TABLEstatement, the crash did not occur until trying to perform aSELECTor DML statement on the table. In either case, the server could not be completely restarted until the.FRMfile corresponding to the newly created or altered table was deleted.Note
Upgrading to the current (or later) release solves this problem only for tables that are newly created or altered. Tables created or altered in previous versions of the server to include
'characters inPARTITIONoptions must still be removed by deleting the corresponding.FRMfiles and re-creating them afterwards.Important Note: The
RENAME DATABASEstatement was removed and replaced withALTER DATABASE. Thedb_nameUPGRADE DATA DIRECTORY NAMERENAME DATABASEstatement was intended for upgrading database directory names to the encoding format used in 5.1 for representing identifiers in the file system (see Section 8.2.3, “Mapping of Identifiers to File Names”). However, the statement was found to be dangerous because it could result in loss of database contents. See Section 12.1.32, “RENAME DATABASESyntax”, and Section 12.1.1, “ALTER DATABASESyntax”. (Bug#17565, Bug#21741, Bug#28360)Replication: MySQL Cluster: Row-based replication from or to a big-endian machine where the table used the
NDBstorage engine failed, if the same table on the other machine was either non-NDBor the other machine was little-endian. (Bug#29549, Bug#30790)MySQL Cluster: An improperly reset internal signal was observed as a hang when using events in the
NDBAPI but could result in various errors. (Bug#33206)MySQL Cluster: Incorrectly handled parameters could lead to a crash in the Transaction Coordinator during a node failure, causing other data nodes to fail. (Bug#33168)
MySQL Cluster: A memory leak occurred if a subscription start request was received by the subscription manager before the node making the request was fully connected to the cluster. (Bug#32652)
MySQL Cluster: A local checkpoint could sometimes be started before the previous LCP was restorable from a global checkpoint. (Bug#32519)
MySQL Cluster: High numbers of API nodes on a slow or congested network could cause connection negotiation to time out prematurely, leading to the following issues:
Excessive retries
Excessive CPU usage
Partially connected API nodes
MySQL Cluster: When a mysqld acting as a cluster SQL node starts the
NDBCLUSTERstorage engine, there is a delay during which some necessary data structures cannot be initialized until after it has connected to the cluster, and all MySQL Cluster tables should be opened as read-only. This worked correctly when theNDBbinlog thread was running, but when it was not running, Cluster tables were not opened as read-only even when the data structures had not yet been set up. (Bug#32275, Bug#33763)MySQL Cluster: The failure of a master node could lead to subsequent failures in local checkpointing. (Bug#32160)
MySQL Cluster: The management server was slow to respond when no data nodes were connected to the cluster. This was most noticeable when running
SHOWin the management client. (Bug#32023)MySQL Cluster: An error with an
ifstatement insql/ha_ndbcluster.cccould potentially lead to an infinite loop in case of failure when working withAUTO_INCREMENTcolumns inNDBtables. (Bug#31810)MySQL Cluster: The
NDBstorage engine code was not safe for strict-alias optimization in gcc 4.2.1. (Bug#31761)MySQL Cluster: It was possible in some cases for a node group to be “lost” due to missed local checkpoints following a system restart. (Bug#31525)
MySQL Cluster: A query against a table with
TEXTorBLOBcolumns that would return more than a certain amount of data failed with Got error 4350 'Transaction already aborted' from NDBCLUSTER. (Bug#31482)This regression was introduced by Bug#29102.
MySQL Cluster:
NDBtables having names containing nonalphanumeric characters (such as “$”) were not discovered correctly. (Bug#31470)MySQL Cluster: A node failure during a local checkpoint could lead to a subsequent failure of the cluster during a system restart. (Bug#31257)
MySQL Cluster: A cluster restart could sometimes fail due to an issue with table IDs. (Bug#30975)
MySQL Cluster: When handling
BLOBcolumns, the addition of read locks to the lock queue was not handled correctly. (Bug#30764)MySQL Cluster: Discovery of
NDBtables did not work correctly withINFORMATION_SCHEMA. (Bug#30667)MySQL Cluster: A file system close operation could fail during a node or system restart. (Bug#30646)
MySQL Cluster: Transaction timeouts were not handled well in some circumstances, leading to excessive number of transactions being aborted unnecessarily. (Bug#30379)
MySQL Cluster: The cluster management client could not connect, and would hang instead. This issue affected Mac OS X 64-bit only. (Bug#30366)
MySQL Cluster: Attempting to restore a backup made on a cluster host using one endian to a machine using the other endian could cause the cluster to fail. (Bug#29674)
MySQL Cluster: Log event requests to ndb_mgmd could time out, causing it to fail. (Bug#29621)
MySQL Cluster: In some cases, the cluster managment server logged entries multiple times following a restart of mgmd. (Bug#29565)
MySQL Cluster: ndb_mgm
--helpdid not display any information about the-aoption. (Bug#29509)MySQL Cluster: An interpreted program of sufficient size and complexity could cause all cluster data nodes to shut down due to buffer overruns. (Bug#29390)
MySQL Cluster: ndb_size.pl failed on tables with
FLOATcolumns whose definitions included commas (for example,FLOAT(6,2)). (Bug#29228)MySQL Cluster: The error message for
NDBerror code 275 (Out of transaction records for complete phase) was missing. (Bug#29139)MySQL Cluster: Reads on
BLOBcolumns were not locked when they needed to be to guarantee consistency. (Bug#29102)See also Bug#31482.
MySQL Cluster: A query using joins between several large tables and requiring unique index lookups failed to complete, eventually returning Uknown Error after a very long period of time. This occurred due to inadequate handling of instances where the Transaction Coordinator ran out of
TransactionBufferMemory, when the cluster should have returned NDB error code 4012 (Request ndbd time-out). (Bug#28804)MySQL Cluster: There was a short interval during the startup process prior to the beginning of heartbeat detection such that, were an API or management node to reboot or a network failure to occur, data nodes could not detect this, with the result that there could be a lingering connection. (Bug#28445)
MySQL Cluster: The description of the
--printoption provided in the output from ndb_restore--helpwas incorrect. (Bug#27683)MySQL Cluster: Restoring a backup made on a cluster host using one endian to a machine using the other endian failed for
BLOBandDATETIMEcolumns. (Bug#27543, Bug#30024)MySQL Cluster: An invalid subselect on an
NDBtable could cause mysqld to crash. (Bug#27494)MySQL Cluster: An attempt to perform a
SELECT ... FROM INFORMATION_SCHEMA.TABLESwhose result included information aboutNDBtables for which the user had no privileges crashed the MySQL Server on which the query was performed. (Bug#26793)MySQL Cluster: Performing
DELETEoperations after a data node had been shut down could lead to inconsistent data following a restart of the node. (Bug#26450)MySQL Cluster:
UPDATE IGNOREcould sometimes fail onNDBtables due to the use of unitialized data when checking for duplicate keys to be ignored. (Bug#25817)MySQL Cluster: The cluster log was formatted inconsistently and contained extraneous newline characters. (Bug#25064)
MySQL Cluster: A restart of the cluster failed when more than 1 REDO phase was in use. (Bug#22696)
MySQL Cluster: When inserting a row into an
NDBtable with a duplicate value for a nonprimary unique key, the error issued would reference the wrong key.This improves on an initial fix for this issue made in MySQL 5.1.13. (Bug#21072)
MySQL Cluster: An insufficiently descriptive and potentially misleading Error 4006 (Connect failure - out of connection objects...) was produced when either of the following two conditions occurred:
There were no more transaction records in the transaction coordinator
An
NDBobject in the NDB API was initialized with insufficient parallelism
Separate error messages are now generated for each of these two cases. (Bug#11313)
Partitioning: Replication: Replication of partitioned tables using the