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 Installing MySQL from Source. If you are familiar with autotools but not CMake, you might find this transition document helpful: Autotools to CMake Transition Guide. Third-party tools that need to extract the MySQL version number formerly found in
configure.incan use the
VERSIONfile. See MySQL Configuration and Third-Party Tools.
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:
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 missing
proxies_privtable as equivalent to an empty table. However, after starting the server, you should still run mysql_upgrade to create the table. (Bug #57551)
autocommitsystem variable is enabled by default for all user connections, and the session value can be set for each new connection by setting the
init_connectsystem variable to
SET autocommit=0. However, this has no effect for users who have the
Now the global
autocommitvalue can be set at server startup, and this value is used to initialize the session value for all new connections, including those for users with the
SUPERprivilege. The variable is treated as a boolean value so it can be enabled with
--enable-autocommit. It can be disabled with
--disable-autocommit. (Bug #57316)
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 the
long_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)
Changes to replication in MySQL 5.6 make mysqlbinlog output generated by the
--base64-output=ALWAYSoption unusable, so
ALWAYSis now deprecated and will be an invalid option value in MySQL 5.6. This should not be a significant problem because
--base64-outputvalues other than
AUTOare supposed to be used only for debugging, not for production environments.
References: See also: Bug #28760.
--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.
A corresponding change was made to the
mysql_options()C API function, which now has a
MYSQL_OPT_BINDoption for specifying the interface. The argument is a host name or IP address (specified as a string).
Security Fix: A security bug was fixed. (Bug #58005)
Security Fix: A security bug was fixed. (Bug #57687)
Security Fix: A security bug was fixed. (Bug #57659)
Security Fix: A security bug was fixed. (Bug #57477)
Security Fix: A security bug was fixed. (Bug #57272)
Security Fix: A security bug was fixed. (Bug #57130)
Security Fix: A security bug was fixed. (Bug #56814)
Security Fix: A security bug was fixed. (Bug #55146, Bug #56287)
Security Fix: A security bug was fixed. (Bug #54484)
Incompatible Change: Previously, tables in the
performance_schemadatabase had uppercase names. This was incompatible with the
lower_case_table_namessystem variable, and caused issues when the variable value was changed after installing or upgrading.
performance_schematable names are lowercase, so they appear in uniform lettercase regardless of the
lower_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 of
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:
performance_schema/*.frmfiles from the data directory.
Create a separate “dummy” MySQL 5.5.8 installation.
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:
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 a
HANDLERstatement tried to update data through a DML statement while another connection tried to execute
FLUSH 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 under
LOCK 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 for
FLUSH TABLES WITH READ LOCKare various forms of backups and temporary tables are not preserved during backups, the server now consistently permits DML/DDL on temporary tables under the global read lock.
The set of thread states has changed:
Waiting for global metadata lockis replaced by
Waiting for global read lock.
Waiting for release of readlockwas used to indicate that DML/DDL statements were waiting for release of a read lock and
Waiting to get readlockwas used to indicate that
FLUSH TABLES WITH READ LOCKwas waiting to acquire a global read lock. Now
Waiting for global read lockis used for both cases.
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 and
Waiting for all running commits to finishwas used by
FLUSH TABLES WITH READ LOCK. Now
Waiting for commit lockis used for both cases.
There are two other new states,
Waiting for trigger metadata lockand
Waiting for event metadata lock.
(Bug #57006, Bug #11764195, Bug #54673, Bug #11762116)
InnoDB: Values could be truncated in certain
INFORMATION_SCHEMAcolumns, such as
KEY_COLUMN_USAGE.REFERENCED_TABLE_NAME. (Bug #57960)
InnoDB: For an
InnoDBtable created with
ROW_FORMAT=DYNAMIC, a query using the
READ UNCOMMITTEDisolation level could cause the server to stop with an assertion error, if
BLOBor other large columns that use off-page storage were being inserted at the same time. (Bug #57799)
InnoDB: The server could stop with an assertion error on Windows Vista and Windows 7 systems. (Bug #57720)
InnoDB: A followup fix to bug #54678.
TRUNCATE TABLEcould still cause a crash (assertion error) in the debug version of the server. (Bug #57700)
References: See also: Bug #54678.
InnoDB: If the MySQL Server crashed immediately after creating an
InnoDBtable, the server could quit with a
signal 11during the subsequent restart. The issue could occur if the server halted after
InnoDBcreated the primary index for the table, but before the index definition was recorded in the MySQL metadata. (Bug #57616)
References: This issue is a regression of: Bug #54582.
InnoDBsystem tablespace could grow continually for a server under heavy load. (Bug #57611)
InnoDB: Heavy concurrent updates of a
BLOBcolumn in an
InnoDBtable could cause a hang. (Bug #57579)
InnoDB: 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, Bug #11763909)
InnoDB: An existing
InnoDBtable could be switched to
ROW_FORMAT=COMPRESSEDimplicitly by a
KEY_BLOCK_SIZEclause in an
ALTER TABLEstatement. Now, the row format is only switched to compressed if there is an explicit
ROW_FORMAT=COMPRESSEDclause. on the
Any valid, nondefault
ROW_FORMATparameter takes precedence over
KEY_BLOCK_SIZEwhen both are specified.
ROW_FORMATis not specified on either the
ALTER TABLEstatement, or is specified as
DEFAULT. In case of a conflict between
KEY_BLOCK_SIZEis ignored if
innodb_strict_modeis off, and the statement causes an error if
innodb_strict_modeis on. (Bug #56632)
InnoDB: The clause
KEY_BLOCK_SIZE=0is now permitted on
ALTER TABLEstatements for
InnoDBtables, regardless of the setting of
innodb_strict_mode. The zero value has the effect of resetting the
KEY_BLOCK_SIZEtable parameter to its default value, depending on the
ROW_FORMATparameter, as if it had not been specified. That default is 8 if
KEY_BLOCK_SIZEis not used or stored with the table parameters.
As a consequence of this fix,
ROW_FORMAT=FIXEDis not permitted when
innodb_strict_modeis enabled. (Bug #56628)
InnoDB: A large number of foreign key declarations could cause the output of the
SHOW CREATE STATEMENTstatement to be truncated. (Bug #56143)
InnoDB: Clarified the message when a
CREATE TABLEstatement fails because a foreign key constraint does not have the required indexes. (Bug #16290)
ALTER TABLEoperations (that do not involve a table copy) on a partitioned table could leave the table in an unusable state. (Bug #57985)
Partitioning: In debug builds, an
INSERT ... ON DUPLICATE KEY UPDATEstatement on an
AUTO_INCREMENTcolumn caused the 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 that
DROP DATABASEtakes an exclusive metadata lock on all stored functions and stored procedures that it causes to be dropped. (Bug #57663)
References: See also: Bug #30977.
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. Previously, this occurred even when the transaction contained
CREATE 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 subsequent
START 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, Bug #11763416)
Replication: If there exist both a temporary table and a nontemporary table having the same name, updates normally apply only to the temporary table, with the exception of a
CREATE TABLE ... SELECTstatement that creates a nontemporary table having the same name as an existing temporary table. When such a statement was replicated using the
MIXEDlogging 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 nontemporary table having the same name. (Bug #55478)
References: See also: Bug #47899, Bug #55709.
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
ENUMcolumns represented using more than 1 byte (that is,
SETcolumns with more than 8 members and
ENUMcolumns 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)
References: 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
Grantorcolumn was not replicated, and was thus left empty on the slave. (Bug #27606)
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
libaiois required, but the error message if it was missing was uninformative. (Bug #58227)
HAVINGclause caused a server crash. (Bug #58199)
Memory was allocated in
fn_expand()for storing path names, but not freed anywhere. (Bug #58173)
Failure to create a thread to handle a user connection could cause a server crash. (Bug #58080)
LINK_FLAGSwas modified. (Bug #58074)
The Performance Schema did not count I/O for the binary log file. (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
sql/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)
MySQL-sharedRPM package failed to provide the lowercase virtual identifier
'mysql-shared'in the RPM
'Provides'tags (usually used for backward compatibility). (Bug #57596)
SHOW PROCESSLISTdisplayed non-ASCII characters improperly. (Bug #57306)
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)
file_nameargument to the
--defaults-extra-fileoption was not a full path name, it could be interpreted incorrectly in some contexts and cause a server crash. Now the
file_nameargument is interpreted 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)
Previously, a negative timeout value to
GET_LOCK()was interpreted as infinite timeout, but only on Windows. This is now the case on all platforms. (Bug #56836, Bug #11764049)
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)
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 a
BLOBcould cause an unexpected “Duplicate entry” error and incorrect result. (Bug #52160)
find_files()function used by
SHOWstatements performed redundant and unnecessary memory allocation. (Bug #51208)
The Windows sample option files contained values more appropriate for Linux. (Bug #50021)
ARCHIVEstorage engine could not be loaded with DTrace enabled on Solaris. (Bug #47739, Bug #11755901)
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)
FORCE INDEXdid not always force the index. (Bug #42209, Bug #11751370)
Handling of host name lettercase in
GRANTstatements was inconsistent. (Bug #36742)
SET NAMES utf8 COLLATE utf8_sinhala_cidid not work. (Bug #26474)
utf16_bincollation uses code-point order, not byte-by-byte order, as described at Unicode Character Sets. (The order was byte-by-byte in MySQL 5.5.7.)