MySQL 5.5 Reference Manual Including MySQL NDB Cluster 7.2 Reference Guide

1.4 What Is New in MySQL 5.5

This section summarizes what has been added to, deprecated in, and removed from MySQL 5.5.

Features Added in MySQL 5.5

The following features have been added to MySQL 5.5:

  • MySQL Enterprise Thread Pool.  The default thread-handling model in MySQL Server executes statements using one thread per client connection. As more clients connect to the server and execute statements, overall performance degrades. As of MySQL 5.5.16, MySQL Enterprise Edition distributions include a thread pool plugin that provides an alternative thread-handling model designed to reduce overhead and improve performance. The plugin implements a thread pool that increases server performance by efficiently managing statement execution threads for large numbers of client connections. For more information, see Section 5.5.3, “MySQL Enterprise Thread Pool”.

  • MySQL Enterprise Audit.  MySQL Enterprise Edition now includes MySQL Enterprise Audit, implemented using a server plugin named audit_log. MySQL Enterprise Audit uses the open MySQL Audit API to enable standard, policy-based monitoring and logging of connection and query activity executed on specific MySQL servers. Designed to meet the Oracle audit specification, MySQL Enterprise Audit provides an out of box, easy to use auditing and compliance solution for applications that are governed by both internal and external regulatory guidelines. When installed, the audit plugin enables MySQL Server to produce a log file containing an audit record of server activity. The log contents include when clients connect and disconnect, and what actions they perform while connected, such as which databases and tables they access. For more information, see Section 6.4.2, “MySQL Enterprise Audit”.

  • Pluggable authentication.  MySQL authentication supports two new capabilities, pluggable authentication and proxy users. With pluggable authentication, the server can use plugins to authenticate incoming client connections, and clients can load an authentication plugin that interacts properly with the corresponding server plugin. This capability enables clients to connect to the MySQL server with credentials that are appropriate for authentication methods other than the built-in MySQL authentication based on native MySQL passwords stored in the mysql.user table. For example, plugins can be created to use external authentication methods such as LDAP, Kerberos, PAM, or Windows login IDs. Proxy user capability enables a client who connects and authenticates as one user to be treated, for purposes of access control while connected, as having the privileges of a different user. In effect, one user impersonates another. Proxy capability depends on pluggable authentication because it is based on having an authentication plugin return to the server the user name that the connecting user impersonates. See Section 6.2.10, “Pluggable Authentication”, and Section 6.2.11, “Proxy Users”.

    As of MySQL 5.5.16, MySQL Enterprise Edition includes two plugins that enable MySQL Server to use external authentication methods to authenticate MySQL users:

    • PAM (Pluggable Authentication Modules) enables a system to access various kinds of authentication methods through a standard interface. A PAM authentication plugin enables MySQL Server to use PAM to authenticate MySQL users.

    • Distributions of MySQL for Windows include an authentication plugin that enables MySQL Server to use native Windows services to authenticate client connections. Users who have logged in to Windows can connect from MySQL client programs to the server based on the information in their environment without specifying an additional password.

    These authentication plugins enable MySQL Server to accept connections from users defined outside the MySQL grant tables. They also support the MySQL proxy-user capability. Each plugin can return to MySQL a user name different from the operating system user, which means that the plugin can return the MySQL user that defines the privileges the externally authenticated user should have.

    For more information, see Section, “PAM Pluggable Authentication”, and Section, “Windows Pluggable Authentication”.

  • Multi-core scalability.  Scalability on multi-core CPUs is improved. The trend in hardware development now is toward more cores rather than continued increases in CPU clock speeds, which renders wait until CPUs get faster a nonviable means of improving database performance. Instead, it is necessary to make better use of multiple cores to maximally exploit the processing cycles they make available. MySQL 5.5 takes advantage of features of SMP systems and tries to eliminate bottlenecks in MySQL architecture that hinder full use of multiple cores. The focus has been on InnoDB, especially locking and memory management. See Scalability Improvements.

  • Default storage engine.  The default storage engine for new tables is InnoDB rather than MyISAM. See Section 14.1, “Introduction to InnoDB”.

  • InnoDB I/O subsystem.  InnoDB I/O subsystem changes enable more effective use of available I/O capacity. See InnoDB I/O Subsystem Changes.

  • InnoDB storage engine.  MySQL 5.5 includes several InnoDB storage engine enhancements:

  • Diagnostic improvements.  There is better access to execution and performance information. Diagnostic improvements include Performance Schema (a feature for monitoring MySQL Server execution at a low level), DTrace probes, expanded SHOW ENGINE INNODB STATUS output, Debug Sync, and a new status variable. See Diagnostic and Monitoring Capabilities.

  • Solaris.  Several modifications improve operation of MySQL Server on Solaris. See Enhanced Solaris Support.

  • MySQL NDB Cluster.  MySQL NDB Cluster is released as a separate product, with version 7.2 of the NDB storage engine being based on MySQL 5.5. Clustering support is not available in mainline MySQL Server 5.5 releases. For more information about MySQL NDB Cluster 7.2, see Chapter 18, MySQL NDB Cluster 7.2.

    NDB Cluster releases are identified by a 3-part NDB version number. NDB Cluster 7.5, now available as a General Availability (GA) release beginning with version 7.5.4, incorporates version 7.5 of the NDB storage engine. Previous GA releases still available for production, NDB Cluster 7.3 and NDB Cluster 7.4, incorporate NDB versions 7.3 and 7.4, respectively. For information about NDB Cluster 7.5, see MySQL NDB Cluster 7.5 and NDB Cluster 7.6. For more information about NDB Cluster 7.4 and NDB Cluster 7.3, see MySQL NDB Cluster 7.3 and NDB Cluster 7.4.

  • Semisynchronous replication.  A commit performed on the master side blocks before returning to the session that performed the transaction until at least one slave acknowledges that it has received and logged the events for the transaction. Semisynchronous replication is implemented through an optional plugin component. See Section 17.3.8, “Semisynchronous Replication”

  • Unicode support.  Support for supplementary Unicode characters; that is, characters outside the Basic Multilingual Plane (BMP). These new Unicode character sets include supplementary characters: utf16, utf32, and utf8mb4. See Section 10.9, “Unicode Support”.

  • Partitioning.  Enhancements to table partitioning:

    • Two new types of user-defined partitioning are supported: RANGE COLUMNS partitioning is an extension to RANGE partitioning; LIST COLUMNS partitioning is an extension to LIST partitioning. Each of these extensions provides two enhancements to MySQL partitioning capabilities:

      • It is possible to define partitioning ranges or lists based on DATE, DATETIME, or string values (such as CHAR or VARCHAR).

        You can also define ranges or lists based on multiple column values when partitioning tables by RANGE COLUMNS or LIST COLUMNS, respectively. Such a range or list may refer to up to 16 columns.

      • For tables defined using these partitioning types, partition pruning can now optimize queries with WHERE conditions that use multiple comparisons between (different) column values and constants, such as a = 10 AND b > 5 or a < "2005-11-25" AND b = 10 AND c = 50.

      See Section 19.2.1, “RANGE Partitioning”, and Section 19.2.2, “LIST Partitioning”.

    • It is now possible to delete all rows from one or more partitions of a partitioned table using the ALTER TABLE ... TRUNCATE PARTITION statement. Executing the statement deletes rows without affecting the structure of the table. The partitions named in the TRUNCATE PARTITION clause do not have to be contiguous.

    • Key caches are now supported for indexes on partitioned MyISAM tables, using the CACHE INDEX and LOAD INDEX INTO CACHE statements. In addition, a key cache can be defined for and loaded with indexes from an entire partitioned table, or for one or more partitions. In the latter case, the partitions are not required to be contiguous.

    • The new TO_SECONDS() function converts a date or datetime expression to a number of seconds since the year 0. This is a general-purpose function, but is useful for partitioning. You may use it in partitioning expressions, and partition pruning is supported for tables defined using such expressions.

  • SIGNAL and RESIGNAL.  Support for the SQL standard SIGNAL and RESIGNAL statements. See Section 13.6.7, “Condition Handling”.

  • Metadata locking.  The server now prevents DDL statements from compromising transaction serializibility by using a new class of locks called metadata locks. See Section 8.11.4, “Metadata Locking”.

  • IPv6 support.  MySQL Server can accept TCP/IP connections from clients connecting over IPv6. See Section 5.1.11, “IPv6 Support”.

  • XML support.  Enhancements to XML functionality, including a new LOAD XML statement. See Section 13.2.7, “LOAD XML Statement”.

  • Build configuration.  MySQL releases are now built using CMake rather than the GNU autotools. Accordingly, the instructions for installing MySQL from source have been updated to discuss how to build MySQL using CMake. See Section 2.9, “Installing MySQL from Source”.

    The build process is now similar enough on all platforms, including Windows, that there are no longer sections dedicated to notes for specific platforms.

Features Deprecated in MySQL 5.5

The following features are deprecated in MySQL 5.5 and may be or will be removed in a future series. Where alternatives are shown, applications should be updated to use them.

For applications that use features deprecated in MySQL 5.5 that have been removed in a higher MySQL series, statements may fail when replicated from a MySQL 5.5 master to a higher-series slave, or may have different effects on master and slave. To avoid such problems, applications that use features deprecated in 5.5 should be revised to avoid them and use alternatives when possible.

  • Relying on implicit GROUP BY sorting in MySQL 5.5 is deprecated. To achieve a specific sort order of grouped results, it is preferable to use an explicit ORDER BY clause. GROUP BY sorting is a MySQL extension that may change in a future release; for example, to make it possible for the optimizer to order groupings in whatever manner it deems most efficient and to avoid the sorting overhead.

  • The YEAR(2) data type. YEAR(2) columns in existing tables are treated as before, but YEAR(2) in new or altered tables are converted to YEAR(4). For more information, see Section 11.2.5, “2-Digit YEAR(2) Limitations and Migrating to 4-Digit YEAR”.


  • The ignore_builtin_innodb system variable. It does nothing and has no effect.

  • The --language server option. Use the lc_messages_dir and lc_messages sytem variables instead.

  • The ALWAYS value for the --base64-output option for mysqlbinlog.

  • The --config-file option for mysqld_multi. Use --defaults-extra-file instead.

  • Use of unambigious option prefixes. If an unambiguous prefix is given, a warning occurs to provide feedback. Option prefixes are no longer supported in MySQL 5.7; only full options are accepted.

  • The engine_condition_pushdown system variable. Use the engine_condition_pushdown flag of the optimizer_switch variable instead.

  • The timed_mutexes system variable. It does nothing and has no effect.

  • The storage_engine system variable. Use default_storage_engine instead.

  • Use of the data directory as the location for my.cnf.

Features Removed in MySQL 5.5

The following constructs are obsolete and have been removed in MySQL 5.5. Where alternatives are shown, applications should be updated to use them.

For MySQL 5.1 applications that use features removed in MySQL 5.5, statements may fail when replicated from a MySQL 5.1 master to a MySQL 5.5 slave, or may have different effects on master and slave. To avoid such problems, applications that use features removed in MySQL 5.5 should be revised to avoid them and use alternatives when possible.

  • The language system variable (use lc_messages_dir and lc_messages).

  • The log_bin_trust_routine_creators system variable (use log_bin_trust_function_creators).

  • The myisam_max_extra_sort_file_size system variable.

  • The record_buffer system variable (use read_buffer_size).

  • The sql_log_update system variable.

  • The Innodb_buffer_pool_read_ahead_rnd and Innodb_buffer_pool_read_ahead_seq status variables (use Innodb_buffer_pool_read_ahead and Innodb_buffer_pool_read_ahead_evicted).

  • The table_lock_wait_timeout system variable.

  • The table_type system variable (use default_storage_engine).

  • The FRAC_SECOND modifier for the TIMESTAMPADD() function (use MICROSECOND).

  • The TYPE table option to specify the storage engine for CREATE TABLE or ALTER TABLE (use ENGINE).

  • The SHOW TABLE TYPES SQL statement (use SHOW ENGINES).


  • The SHOW PLUGIN SQL statement (use SHOW PLUGINS).

  • The LOAD TABLE ... FROM MASTER and LOAD DATA FROM MASTER SQL statements (use mysqldump or mysqlhotcopy to dump tables and mysql to reload dump files).

  • The BACKUP TABLE and RESTORE TABLE SQL statements (use mysqldump or mysqlhotcopy to dump tables and mysql to reload dump files).

  • TIMESTAMP(N) data type: The ability to specify a display width of N (use without N).

  • The --default-character-set and --default-collation server options (use the character_set_server and collation_server system variables).

  • The --default-table-type server option (use the default_storage_engine system variable).

  • The --delay-key-write-for-all-tables server option (set the delay_key_write system variable to ALL).

  • The --enable-locking and --skip-locking server options (use --external-locking and --skip-external-locking).

  • The --log-long-format server option.

  • The --log-update server option.

  • The --master-xxx server options to set replication parameters (use the CHANGE MASTER TO statement instead): --master-host, --master-user, --master-password, --master-port, --master-connect-retry, --master-ssl, --master-ssl-ca, --master-ssl-capath, --master-ssl-cert, --master-ssl-cipher, --master-ssl-key.

  • The --safe-show-database server option.

  • The --skip-symlink and --use-symbolic-links server options (use --skip-symbolic-links and --symbolic-links).

  • The --sql-bin-update-same server option.

  • The --warnings server option (use --log-warnings).

  • The --no-named-commands option for mysql (use --skip-named-commands).

  • The --no-pager option for mysql (use --skip-pager).

  • The --no-tee option for mysql (use --skip-tee).

  • The --position option for mysqlbinlog (use --start-position).

  • The --all option for mysqldump (use --create-options).

  • The --first-slave option for mysqldump (use --lock-all-tables).

  • The --config-file option for mysqld_multi (use --defaults-extra-file).

  • The --set-variable=var_name=value and -O var_name=value general-purpose options for setting program variables (use --var_name=value).

  • The --with-pstack option for configure and the --enable-pstack option for mysqld.

Scalability Improvements

MySQL 5.5 modifications improve performance on SMP systems to increase scalability on multi-core systems. The changes affect InnoDB locking and memory management.

MySQL 5.5 incorporates changes in InnoDB that improve the performance of RW-locks by using atomic CPU instructions (on platforms where they are available), rather than less scalable mutexes. It is also possible for InnoDB memory allocation to be disabled and replaced by the normal malloc library, or by a different library that implements malloc such as tcmalloc on Linux or mtalloc on Solaris.

The reimplementation of RW-locks requires atomic instructions. A status variable, Innodb_have_atomic_builtins, shows whether the server was built with atomic instructions.

InnoDB I/O Subsystem Changes

MySQL 5.5 changes to the InnoDB I/O subsystem enable more effective use of available I/O capacity. The changes also provide more control over configuration of the I/O subsystem.

Background I/O Threads

InnoDB uses background threads to perform I/O for several kinds of activities, two of which are prefetching disk blocks and flushing dirty pages. Previously, InnoDB used only one thread each to perform these activities, but that can underutilize server capacity. MySQL 5.5 enables use of multiple background read and write threads, making it possible to read and write pages faster.

The patch makes the number of background I/O threads configurable using system variables: innodb_read_io_threads controls the number of threads to use for read prefetch requests. innodb_write_io_threads controls the number of threads to use for writing dirty pages from the buffer cache to disk. The default for both variables is 4.

The ability to increase the number of I/O threads can benefit systems that use multiple disks for InnoDB. However, the type of I/O being done should be considered. On systems that use buffered writes rather than direct writes, increasing the write thread count higher than 1 might yield little benefit because writes will be quick already.

Adjustable I/O Rate

Previously, the number of input/output operations per second (IOPS) that InnoDB will perform was a compile-time parameter. The rate was chosen to prevent background I/O from exhausting server capacity and the compiled-in value of 100 reflected an assumption that the server can perform 100 IOPS. However, many modern systems can exceed this, so the value is low and unnecessarily restricts I/O utilization.

MySQL 5.5 exposes this I/O rate parameter as a system variable, innodb_io_capacity. This variable can be set at server startup, which enables higher values to be selected for systems capable of higher I/O rates. Having a higher I/O rate can help the server handle a higher rate of row changes because it may be able to increase dirty-page flushing, deleted-row removal, and application of changes in the change buffer. The default value of innodb_io_capacity is 200. In general, you can increase the value as a function of the number of drives used for InnoDB I/O.

The ability to raise the I/O limit should be especially beneficial on platforms that support many IOPS. For example, systems that use multiple disks or solid-state disks for InnoDB are likely to benefit from the ability to control this parameter.

Diagnostic and Monitoring Capabilities

MySQL 5.5 provides improved access to execution and performance information. Diagnostic improvements include Performance Schema, Dtrace probes, expanded SHOW ENGINE INNODB STATUS output, Debug Sync, and a new status variable.

Performance Schema

Performance Schema is a feature for monitoring MySQL Server execution at a low level. See Chapter 22, MySQL Performance Schema.

DTrace Support

The DTrace probes work on Solaris, OS X, and FreeBSD. For information on using DTrace in MySQL, see Section 5.8, “Tracing mysqld Using DTrace”.


The output from SHOW ENGINE INNODB STATUS includes more information due to changes made for InnoDB Plugin. A description of revisions to statement output follows.

A new BACKGROUND THREAD section has srv_master_thread lines that show work done by the main background thread.

srv_master_thread loops: 53 1_second, 44 sleeps, 5 10_second, 7 background,
  7 flush
srv_master_thread log flush and writes: 48

The SEMAPHORES section includes a line to show the number of spinlock rounds per OS wait for a mutex.

Spin rounds per wait: 0.00 mutex, 20.00 RW-shared, 0.00 RW-excl

Debug Sync

The Debug Sync facility provides synchronization points for debugging, see MySQL Internals: Test Synchronization.

New Status Variable

The Innodb_have_atomic_builtins status variable provides information about availability of atomic instructions; see Scalability Improvements.

Enhanced Solaris Support

MySQL 5.5 incorporates several modifications for improved operation of MySQL Server on Solaris:

  • DTrace support for execution monitoring. See Diagnostic and Monitoring Capabilities.

  • Atomic instructions, which are needed for the improvements to RW-locking described in Scalability Improvements. Atomic instructions now are supported for Sun Studio on SPARC and x86 platforms. This extends their previous availability (supported for gcc 4.1 and up on all platforms).

  • The SMP improvements described in Scalability Improvements, were originally intended for x86 platforms. In MySQL 5.5, these also work on SPARC platforms. Also, Solaris optimizations have been implemented.

  • Large page support is enhanced for recent SPARC platforms. Standard use of large pages in MySQL attempts to use the largest size supported, up to 4MB. Under Solaris, a super large pages feature enables uses of pages up to 256MB. This feature can be enabled or disabled by using the --super-large-pages or --skip-super-large-pages option.

  • Inline handling for InnoDB and processor instruction prefetching support, previously not enabled for builds created using Sun Studio, now are supported for that build environment.