Functionality added or changed:
Incompatible Change:
The inclusion of InnoDB Plugin
as the
built-in version of InnoDB
in MySQL Server
results in an incompatibility for upgrades from MySQL 5.1.
InnoDB Plugin
is available in MySQL 5.1 as of
5.1.38, but it is an optional storage engine that must be
enabled explicitly using two server options:
[mysqld] ignore-builtin-innodb plugin-load=innodb=ha_innodb_plugin.so
If you were using InnoDB Plugin
in MySQL 5.1
by means of those options, you must remove them after an upgrade
to 5.4 or the server will fail to start.
Incompatible Change:
If you upgrade to MySQL 5.4.2 from MySQL 5.1, the server may
fail to start due to InnoDB
log
file configuration changes. MySQL 5.4 increases the default
value of
innodb_log_files_in_group
from
2 to 3. It also increases the default value of
innodb_log_file_size
from 5MB
to 128MB. (MySQL 5.4.0 increased the minimum value of
innodb_log_file_size
from 1MB
to 32MB, but this has been reverted to 1MB in 5.4.2.)
For an upgrade to MySQL 5.4.2, you should discard the old
InnoDB
log files and let MySQL
5.4.2 create new ones. It is necessary to shut down your current
server cleanly so that no outstanding transaction information
remains in the log. The procedure to use depends on the value of
innodb_fast_shutdown
used in
your current server:
If innodb_fast_shutdown
is
not set to 2: Stop your current MySQL server and make sure
that it shuts down without errors (to ensure that there is
no information for outstanding transactions in the log).
Copy the old log files into a safe place in case something
went wrong during the shutdown and you need them to recover
the tablespace. Delete the old log files and edit
my.cnf
if necessary to specify the
desired log file configuration. Then upgrade to MySQL 5.4.2
and start the new server. mysqld sees
that no InnoDB
log files exist
at startup and creates new ones.
If innodb_fast_shutdown
is
set to 2: Shut down your current server, set
innodb_fast_shutdown
to 1,
and restart the server. The server should be allowed to
recover. Then you should shut down the server again and
follow the procedure described in the preceding item to
change InnoDB
log file size.
Set innodb_fast_shutdown
back to 2 and start the MySQL 5.4.2 server.
Incompatible Change:
The following list indicates InnoDB
configuration changes in MySQL 5.4.2, compared to previous
versions of MySQL 5.4. For a description of cumulative changes
in MySQL 5.4 compared to MySQL 5.1, see
MySQL 4.1 in a Nutshell.
These system variables were added:
innodb_adaptive_flushing
:
Controls adaptive flushing of dirty pages.
innodb_change_buffering
:
Controls insert buffering.
innodb_file_format
: The
format for new InnoDB
tables.
innodb_file_format_check
:
Whether to perform file format compatibility checking.
innodb_read_ahead_threshold
:
Controls sensitivity of linear read-ahead.
innodb_replication_delay
:
The replication thread delay (in ms) on a slave server if
innodb_thread_concurrency
is reached.
innodb_spin_wait_delay
:
Maximum delay between polls for a spin lock.
innodb_stats_sample_pages
:
How many index pages to sample for statistics calculations.
innodb_strict_mode
: Whether
InnoDB
returns errors rather than
warnings for certain exceptional conditions (analogous to
strict SQL mode).
innodb_use_sys_malloc
:
Whether InnoDB
uses the OS (system) or
its own memory allocator.
innodb_version
: The current
version of InnoDB
.
More information about the new system variables can be found in
the InnoDB Plugin
Manual at
http://www.innodb.com/products/innodb_plugin/plugin-documentation.
These system variables have been made dynamic and can be modified at runtime:
innodb_adaptive_hash_index
(global value)
innodb_file_per_table
(global value)
innodb_io_capacity
(global
value)
innodb_lock_wait_timeout
(global and session values)
These system variables were removed, along with the functionality that they represented:
innodb_extra_dirty_writes
innodb_max_merged_io
innodb_thread_concurrency_timer_based
The minimum value of these system variables was changed:
Variable | Change in minimum value |
---|---|
innodb_additional_mem_pool_size
|
From 2MB to 512KB |
innodb_buffer_pool_size
|
From 64MB to 5MB |
innodb_log_buffer_size
|
From 2MB to 256KB |
innodb_log_file_size
|
From 32MB to 1MB |
These minimum value changes in most cases revert changes made in MySQL 5.4.0.
The default value of this system variable was changed:
Variable | Change in default value |
---|---|
innodb_sync_spin_loops
|
From 20 to 30 |
These status variables were renamed or removed:
Innodb_have_sync_atomic
: renamed to
Innodb_have_atomic_builtins
Innodb_heap_enabled
: Removed
Innodb_wake_ups
: Removed
Bugs fixed:
Partitioning: Security Fix:
Accessing a table having user-defined partitioning when the
server SQL mode included
ONLY_FULL_GROUP_BY
caused the
MySQL server to crash. For example, the following sequence of
statements crashed the server:
DROP TABLE IF EXISTS t1; SET SESSION SQL_MODE='ONLY_FULL_GROUP_BY'; CREATE TABLE t1 (id INT, KEY(id)) PARTITION BY HASH(id) PARTITIONS 2;
Security Fix:
The strxnmov()
library function could write a
null byte after the end of the destination buffer.
(Bug#44834)
Security Fix: Four potential format string vulnerabilities were fixed (discovered by the Veracode code analysis). (Bug#44166)
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_name
stands for a plugin name such as innodb
.
Previously, plugin options were handled like other boolean options (see Program Option Modifiers). That is, any of these options enabled the plugin:
--plugin_name
--plugin_name
=1 --enable-plugin_name
And these options disabled the plugin:
--plugin_name
=0 --disable-plugin_name
--skip-plugin_name
However, 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 InnoDB
fails to start, existing
InnoDB
tables become inaccessible, and
attempts to create new InnoDB
tables result
in tables that use the default storage engine unless the
NO_ENGINE_SUBSTITUTION
SQL
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
=OFF
Do 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
=FORCE
Enable 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
, and
FORCE
are not case sensitive.
Suppose that CSV
and
InnoDB
have 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 if
CSV
initialization fails, but must require
that InnoDB
initialization 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
--
or
plugin_name
=0--
,
which should be changed to
plugin_name
=1--
or
plugin_name
=OFF--
,
respectively.
plugin_name
=ON
--enable-
is still supported and is the same as
plugin_name
--
.
plugin_name
=ON--disable-
and
plugin_name
--skip-
are still supported and are the same as
plugin_name
--
.
(Bug#19027)plugin_name
=OFF
See also Bug#45336.