Configuration Notes:
MySQL releases are now built on all platforms using CMake rather than the GNU autotools, so autotools support has been removed. For instructions on building MySQL with
CMake, see Section 2.11, “Installing MySQL from Source”. Third-party tools that need to extract the MySQL version number formerly found inconfigure.incan use theVERSIONfile. See Section 2.11.6, “MySQL Configuration and Third-Party Tools”.
Functionality added or changed:
Support for the
IBMDB2Istorage engine has been removed. (Bug#58079)The following words are no longer reserved words the way they are in earlier MySQL 5.5 releases:
SLOW,GENERAL,IGNORE_SERVER_IDS,MASTER_HEARTBEAT_PERIOD(Bug#57899)The client/server protocol now includes a
SERVER_QUERY_WAS_SLOWflag to indicate when a query is slow; that is, when query execution exceeds the value of thelong_query_timesystem variable. (Bug#57058)The time zone tables available at http://dev.mysql.com/downloads/timezones.html have been updated. These tables can be used on systems such as Windows or HP-UX that do not include zoneinfo files. (Bug#40230)
A
--bind-addressoption has been added to a number of MySQL client programs: mysql, mysqldump, mysqladmin, mysqlbinlog, mysqlcheck, mysqlimport, and mysqlshow. This is for use on a computer having multiple network interfaces, and enables you to choose which interface is used to connect to the MySQL server.
Bugs fixed:
Performance: InnoDB Storage Engine: Improved concurrency when several
ANALYZE TABLEorSHOW TABLE STATUSstatements are run simultaneously forInnoDBtables. (Bug#53046)Incompatible Change: Previously, tables in the
performance_schemadatabase had uppercase names. This was incompatible with thelower_case_table_namessystem variable, and caused issues when the variable value was changed after installing or upgrading.Now
performance_schematable names are lowercase, so they appear in uniform lettercase regardless of thelower_case_table_namessetting. References to these tables in SQL statements should be given in lowercase. This is an incompatible change, but provides compatible behavior across different values oflower_case_table_names.If you upgrade to MySQL 5.5.8 from an earlier version of MySQL 5.5, be sure to run mysql_upgrade (and restart the server) to change the names of existing
performance_schematables from uppercase to lowercase. If mysql_upgrade does not work, use this procedure:Stop mysqld.
Remove the
performance_schema/*.frmfiles from the data directory.Create a separate “dummy” MySQL 5.5.8 installation.
Copy the
performance_schema/*.frmfiles from the dummy installation to the installation you are upgrading.Restart mysqld and run mysqld_upgrade --force and check that it does not produce errors.
Remove the dummy installation.
Incompatible Change: The following changes were made to the
performance_schema.threadstable for conformance with the implementation in MySQL 5.6:IDcolumn: Renamed toPROCESSLIST_ID, removedNOT NULLfrom definition.NAMEcolumn: Changed fromVARCHAR(64)toVARCHAR(128).
Incompatible Change: Starvation of
FLUSH TABLES WITH READ LOCKstatements occurred when there was a constant load of concurrent DML statements in two or more connections. Deadlock occurred when a connection that had some table open through aHANDLERstatement tried to update data through a DML statement while another connection tried to executeFLUSH TABLES WITH READ LOCKconcurrently.These problems resulted from the global read lock implementation, which was reimplemented with the following consequences:
To solve deadlock in event-handling code that was exposed by this patch, the
LOCK_event_metadatamutex was replaced with metadata locks on events. As a result, DDL operations on events are now prohibited underLOCK TABLES. This is an incompatible change.The global read lock (
FLUSH TABLES WITH READ LOCK) no longer blocks DML and DDL on temporary tables. Before this patch, server behavior was not consistent in this respect: In some cases, DML/DDL statements on temporary tables were blocked; in others, they were not. Since the main use cases forFLUSH TABLES WITH READ LOCKare various forms of backups and temporary tables are not preserved during backups, the server now consistently allows DML/DDL on temporary tables under the global read lock.The set of thread states has changed:
Waiting for global metadata lockis replaced byWaiting for global read lock.Previously,
Waiting for release of readlockwas used to indicate that DML/DDL statements were waiting for release of a read lock andWaiting to get readlockwas used to indicate thatFLUSH TABLES WITH READ LOCKwas waiting to acquire a global read lock. NowWaiting for global read lockis used for both cases.Previously,
Waiting for release of readlockwas used for all statements that caused an explicit or implicit commit to indicate that they were waiting for release of a read lock andWaiting for all running commits to finishwas used byFLUSH TABLES WITH READ LOCK. NowWaiting for commit lockis used for both cases.There are two other new states,
Waiting for trigger metadata lockandWaiting for event metadata lock.
InnoDB Storage Engine: Values could be truncated in certain
INFORMATION_SCHEMAcolumns, such asREFERENTIAL_CONSTRAINTS.REFERENCED_TABLE_NAMEandKEY_COLUMN_USAGE.REFERENCED_TABLE_NAME. (Bug#57960)InnoDB Storage Engine: For an
InnoDBtable created withROW_FORMAT=COMPRESSEDorROW_FORMAT=DYNAMIC, a query using theREAD UNCOMMITTEDisolation level could cause the server to stop with an assertion error, ifBLOBor other large columns that use off-page storage were being inserted at the same time. (Bug#57799)InnoDB Storage Engine: The server could stop with an assertion error on Windows Vista and Windows 7 systems. (Bug#57720)
InnoDB Storage Engine: A followup fix to Bug#54678.
TRUNCATE TABLEcould still cause a crash (assertion error) in the debug version of the server. (Bug#57700)InnoDB Storage Engine: The
InnoDBsystem tablespace could grow continually for a server under heavy load. (Bug#57611)InnoDB Storage Engine: Heavy concurrent updates of a BLOB column in an
InnoDBtable could cause a hang. (Bug#57579)InnoDB Storage Engine: The
innodb_stats_on_metadataoption could prevent theANALYZE TABLEstatement from running. (Bug#57252)InnoDB Storage Engine: A query for an
InnoDBtable could return the wrong value if a column value was changed to a different case, and the column had a case-insensitive index. (Bug#56680)InnoDB Storage Engine: An existing
InnoDBtable could be switched toROW_FORMAT=COMPRESSEDimplicitly by aKEY_BLOCK_SIZEclause in anALTER TABLEstatement. Now, the row format is only switched to compressed if there is an explicitROW_FORMAT=COMPRESSEDclause. on theALTER TABLEstatement.Any valid, non-default
ROW_FORMATparameter takes precedence overKEY_BLOCK_SIZEwhen both are specified.KEY_BLOCK_SIZEonly enablesROW_FORMAT=COMPRESSEDifROW_FORMATis not specified on either theCREATE TABLEorALTER TABLEstatement, or is specified asDEFAULT. In case of a conflict betweenKEY_BLOCK_SIZEandROW_FORMATclauses, theKEY_BLOCK_SIZEis ignored ifinnodb_strict_modeis off, and the statement causes an error ifinnodb_strict_modeis on. (Bug#56632)InnoDB Storage Engine: The clause
KEY_BLOCK_SIZE=0is now allowed onCREATE TABLEandALTER TABLEstatements forInnoDBtables, regardless of the setting ofinnodb_strict_mode. The zero value has the effect of resetting theKEY_BLOCK_SIZEtable parameter to its default value, depending on theROW_FORMATparameter, as if it had not been specified. That default is 8 if ROW_FORMAT=COMPRESSED. Otherwise, KEY_BLOCK_SIZE is not used or stored with the table parameters.As a consequence of this fix,
ROW_FORMAT=FIXEDis not allowed when theinnodb_strict_modeis enabled. (Bug#56628)InnoDB Storage Engine: A large number of foreign key declarations could cause the output of the
SHOW CREATE STATEMENTstatement to be truncated. (Bug#56143)InnoDB Storage Engine: A compilation problem affected the
InnoDBsource code on NetBSD/sparc64. (Bug#53916)InnoDB Storage Engine: Clarified the message when a
CREATE TABLEstatement fails because a foreign key constraint does not have the required indexes. (Bug#16290)Partitioning: “Fast”
ALTER TABLEoperations (that do not involve a table copy) on a partitioned table could leave the table in an unusable state. (Bug#57985)Partitioning: An
INSERT ... ON DUPLICATE KEY UPDATEstatement on ancolumn= 0AUTO_INCREMENTcolumn caused the debug server to crash. (Bug#57890)Replication: Concurrent statements using a stored function and a
DROP DATABASEstatement that caused the same stored function to be dropped could cause statement-based replication to fail. This problem is resolved by making sure thatDROP DATABASEtakes an exclusive metadata lock on all stored functions and stored procedures that it causes to be dropped. (Bug#57663)See also Bug#30977.
Replication: When
STOP SLAVEis issued, the slave SQL thread rolls back the current transaction and stops immediately if the transaction updates only tables which use transactional storage engines are updated. Previously, this occurred even when the transaction containedCREATE TEMPORARY TABLEstatements,DROP TEMPORARY TABLEstatements, or both, although these statements cannot be rolled back. Because temporary tables persist for the lifetime of a user session (in the case, the replication user), they remain until the slave is stopped or reset. When the transaction is restarted following a subsequentSTART SLAVEstatement, the SQL thread aborts with an error that a temporary table to be created (or dropped) already exists (or does not exist, in the latter case).Following this fix, if an ongoing transaction contains
CREATE TEMPORARY TABLEstatements,DROP TEMPORARY TABLEstatements, or both, the SQL thread now waits until the transaction ends, then stops. (Bug#56118)Replication: If there exist both a temporary table and a non-temporary table having the same, updates normally apply only to the temporary table, with the exception of a
CREATE TABLE ... SELECTstatement that creates a non-temporary table having the same name as an existing temporary table. When such a statement was replicated using theMIXEDlogging format, and the statement was unsafe for row-based logging, updates were misapplied to the temporary table.Updates were also applied wrongly when a temporary table that used a transactional storage engine was dropped inside a transaction, followed by updates within the same transaction to a non-temporary table having the same name. (Bug#55478)
Replication: When making changes to relay log settings using
CHANGE MASTER TO, the I/O cache was not cleared. This could result in replication failure when the slave attempted to read stale data from the cache and then stopped with an assertion. (Bug#55263)Replication: Replication of
SETandENUMcolumns represented using more than 1 byte (that is,SETcolumns with more than 8 members andENUMcolumns with more than 256 constants) between platforms using different endianness failed when using the row-based format. This was because columns of these types are represented internally using integers, but the internal functions used by MySQL to handle them treated them as strings. (Bug#52131)See also Bug#53528.
Replication: Trying to read from a binary log containing a log event of an invalid type caused the slave to crash. (Bug#38718)
Replication: When replicating the
mysql.tables_privtable, theGrantorcolumn was not replicated, and was thus left empty on the slave. (Bug#27606)Setting the
read_onlysystem variable at server startup did not work. (Bug#58669)mysql_upgrade failed after an upgrade from MySQL 5.1. (Bug#58514)
When configuring the build with
-DBUILD_CONFIG=mysql_releaseand building with Visual Studio Express, the build failed if signtool.exe was not present. (Bug#58313)With CMake 2.8.3, the
-DBUILD_CONFIG=mysql_releaseoption did not work. (Bug#58272)When configuring the build with
-DBUILD_CONFIG=mysql_releaseon Linux,libaiois required, but the error message if it was missing was uninformative. (Bug#58227)Use of
NAME_CONST()in aHAVINGclause caused a server crash. (Bug#58199)BETWEENdid not use indexes forDATEorDATETIMEcolumns. (Bug#58190)Memory was allocated in
fn_expand()for storing path names, but not freed anywhere. (Bug#58173)In debug builds, inserting a
FLOATvalue into aCHAR(0)column could crash the server. (Bug#58137)Failure to create a thread to handle a user connection could result in a server crash. (Bug#58080)
During configuration,
ADD_VERSION_INFOincmake/mysql_version.cmakefailed ifLINK_FLAGSwas modified. (Bug#58074)Performance Schema did not account for I/O for the binary log file (no I/O was counted). (Bug#58052)
Several compilation problems were fixed. (Bug#57992, Bug#57993, Bug#57994, Bug#57995, Bug#57996, Bug#57997, Bug#58057)
After creation of a table with two foreign key constraints, the
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTStable displayed only one of them. (Bug#57904)Incorrect error handling raised an assertion if character set conversion wrapped an item that failed. (Bug#57882)
In debug builds, a missing
DBUG_RETURNmacro insql/client.ccaused mysql to be unable to connect to the server. (Bug#57744)Clients using a client library older than MySQL 5.5.7 suffered loss of connection after executing
mysql_change_user()while connected to a 5.5.7 server. (Bug#57689)The
MySQL-sharedRPM package failed to provide the lowercase virtual identifier'mysql-shared'in the RPM'Provides'tags (usually used for backward compatibility). (Bug#57596)For an upgrade to MySQL 5.5.7 from a previous release, the server exited if the
mysql.proxies_privtable did not exist, making upgrades inconvenient. Now the server treats a missingproxies_privtable as equivalent to an empty table. However, after starting the server, you should still run mysql_upgrade to create the table. (Bug#57551)SHOW PROCESSLISTdisplayed non-ASCII characters improperly. (Bug#57306)Passing a string that was not null-terminated to
UpdateXML()orExtractValue()caused the server to fail with an assertion. (Bug#57279)SET GLOBAL debugcould cause a crash on Solaris if the server failed to open the trace file. (Bug#57274)In debug builds, an assertion could be raised during conversion of strings to floating-point values. (Bug#57203)
If the
file_nameargument to the--defaults-fileor--defaults-extra-fileoption was not a full path name, it could be interpreted incorrectly in some contexts and cause a server crash. Now thefile_nameargument is intrepreted as relative to the current working directory if given as a relative path name rather than as a full path name. (Bug#57108)A user with no privileges on a stored routine or the
mysql.proctable could discover the routine's existence. (Bug#57061)Queries executed using the Index Merge access method and a temporary file could return incorrect results. (Bug#56862)
The server could crash inside
memcpy()when reading certain Performance Schema tables. (Bug#56761, Bug#58003)The server could crash as a result of accessing freed memory when populating
INFORMATION_SCHEMA.VIEWSif a view could not be opened properly. (Bug#56540)Valgrind warnings about overlapping memory when double-assigning the same variable were corrected. (Bug#56138)
If a
STOP SLAVEstatement was issued while the slave SQL thread was executing a statement that invoked theSLEEP()function, both statements hung. (Bug#56096)OPTIMIZE TABLEforInnoDBtables could raise an assertion. (Bug#55930)Warnings raised by a trigger were not cleared upon successful completion. Now warnings are cleared if the trigger completes successfully, per the SQL standard. (Bug#55850)
For CMake builds, some parts of the source were unnecessarily compiled twice if the embedded server was built. (Bug#55647)
In debug builds, an assertion could be raised if a
send_eof()method was called after an error occurred. (Bug#54812)Boolean command options caused an error if given with an option value and the
loose-option prefix. (Bug#54569)An error in a stored procedure could leave the session in a different default database. (Bug#54375)
The
CMake“wrapper” for configure (configure.pl) did not handle the--with-commentoption properly. (Bug#52275)Grouping by a
TIME_TO_SEC()function result could cause a server crash or incorrect results. Grouping by a function returning aBLOBcould cause an unexpected “Duplicate entry” error and incorrect result. (Bug#52160)The
find_files()function used bySHOWstatements performed redundant and unnecessary memory allocation. (Bug#51208)The Windows sample option files contained values more appropriate for Linux. (Bug#50021)
A failed
RENAME TABLEoperation could prevent aFLUSH TABLES WITH READ LOCKfrom completing. (Bug#47924)Error messages for several delegate-related initialization error conditions that should not occur were changed to help identify the area of failure and to instruct the user to file a bug report if they do occur. A delegate is a set of internal data structures and algorithms. (Bug#47027)
On file systems with case insensitive file names, and
lower_case_table_names=2, the server could crash due to a table definition cache inconsistency. (Bug#46941)Handling of host name lettercase in
GRANTstatements was inconsistent. (Bug#36742)SET NAMES utf8 COLLATE utf8_sinhala_cidid not work. (Bug#26474)The
utf16_bincollation uses code-point order, not byte-by-byte order, as described at Section 9.1.14.1, “Unicode Character Sets”. (The order was byte-by-byte in MySQL 5.5.7.)