InnoDB Plugin Notes:
As of MySQL 5.1.38, the InnoDB Plugin
is
included in MySQL 5.1 releases, in addition to the
built-in version of InnoDB
that has been
included in previous releases. The version of the
InnoDB Plugin
in this release is 1.0.4 and is
considered of Beta quality.
The InnoDB Plugin
offers new features,
improved performance and scalability, enhanced reliability and
new capabilities for flexibility and ease of use. Among the
features of the InnoDB Plugin
are “Fast
index creation,” table and index compression, file format
management, new INFORMATION_SCHEMA
tables,
capacity tuning, multiple background I/O threads, and group
commit.
For information about these features, see the InnoDB
Plugin
Manual at
http://www.innodb.com/products/innodb_plugin/plugin-documentation.
For general information about using InnoDB
in
MySQL, see Section 13.6, “The InnoDB
Storage Engine”.
The InnoDB Plugin
is included in source and
binary distributions, except RHEL3, RHEL4, SuSE 9 (x86, x86_64,
ia64), and generic Linux RPM packages.
To use the InnoDB Plugin
, you must disable
the built-in version of InnoDB
that is also
included and instruct the server to use InnoDB
Plugin
instead. To accomplish this, use the following
lines in your my.cnf
file:
[mysqld] ignore-builtin-innodb plugin-load=innodb=ha_innodb_plugin.so
For the plugin-load
option,
innodb
is the name to associate with the
plugin and ha_innodb_plugin.so
is the name
of the shared object library that contains the plugin code. The
extension of .so
applies for Unix (and
similar) systems. For HP-UX on HPPA (11.11) or Windows, the
extension should be .sl
or
.dll
, respectively, rather than
.so
.
If the server has problems finding the plugin when it starts up,
specify the pathname to the plugin directory. For example, if
plugins are located in the lib/mysql/plugin
directory under the MySQL installation directory and you have
installed MySQL at /usr/local/mysql
, use
these lines in your my.cnf
file:
[mysqld] ignore-builtin-innodb plugin-load=innodb=ha_innodb_plugin.so plugin_dir=/usr/local/mysql/lib/mysql/plugin
The previous examples show how to activate the storage engine
part of InnoDB Plugin,
but the plugin also
implements several InnoDB-related
INFORMATION_SCHEMA
tables. (For information
about these tables, see
http://www.innodb.com/doc/innodb_plugin-1.0/innodb-information-schema.html.)
To enable these tables, include additional
pairs in the value of the
name
=library
plugin-load
option:
[mysqld] ignore-builtin-innodb plugin-load=innodb=ha_innodb_plugin.so ;innodb_trx=ha_innodb_plugin.so ;innodb_locks=ha_innodb_plugin.so ;innodb_lock_waits=ha_innodb_plugin.so ;innodb_cmp=ha_innodb_plugin.so ;innodb_cmp_reset=ha_innodb_plugin.so ;innodb_cmpmem=ha_innodb_plugin.so ;innodb_cmpmem_reset=ha_innodb_plugin.so
The plugin-load
option value as
shown here is formatted on multiple lines for display purposes
but should be written in my.cnf
using a
single line without spaces in the option value. On Windows,
substitute .dll
for each instance of the
.so
extension.
After the server starts, verify that InnoDB
Plugin
has been loaded by using the
SHOW PLUGINS
statement. For
example, if you have loaded the storage engine and the
INFORMATION_SCHEMA
tables, the output should
include lines similar to these:
mysql> SHOW PLUGINS;
+---------------------+--------+--------------------+...
| Name | Status | Type |...
+---------------------+--------+--------------------+...
...
| InnoDB | ACTIVE | STORAGE ENGINE |...
| INNODB_TRX | ACTIVE | INFORMATION SCHEMA |...
| INNODB_LOCKS | ACTIVE | INFORMATION SCHEMA |...
| INNODB_LOCK_WAITS | ACTIVE | INFORMATION SCHEMA |...
| INNODB_CMP | ACTIVE | INFORMATION SCHEMA |...
| INNODB_CMP_RESET | ACTIVE | INFORMATION SCHEMA |...
| INNODB_CMPMEM | ACTIVE | INFORMATION SCHEMA |...
| INNODB_CMPMEM_RESET | ACTIVE | INFORMATION SCHEMA |...
+---------------------+--------+--------------------+...
An alternative to using the
plugin-load
option at server
startup is to use the INSTALL
PLUGIN
statement at runtime. First start the server
with the ignore-builtin-innodb
option to disable the built-in version of
InnoDB
:
[mysqld] ignore-builtin-innodb
Then issue an INSTALL PLUGIN
statement for each plugin that you want to load:
mysql>INSTALL PLUGIN InnoDB SONAME 'ha_innodb_plugin.so';
mysql>INSTALL PLUGIN INNODB_TRX SONAME 'ha_innodb_plugin.so';
mysql>INSTALL PLUGIN INNODB_LOCKS SONAME 'ha_innodb_plugin.so';
...
INSTALL PLUGIN
need be issued
only once for each plugin. Installed plugins will be loaded
automatically on subsequent server restarts.
If you build MySQL from a source distribution, InnoDB
Plugin
is one of the storage engines that is built by
default. Build MySQL the way you normally do; for example, by
using the instructions at Section 2.3, “MySQL Installation Using a Source Distribution”.
After the build completes, you should find the plugin shared
object file under the storage/innodb_plugin
directory, and make install should install it
in the plugin directory. Configure MySQL to use InnoDB
Plugin
as described earlier for binary distributions.
If you use gcc, InnoDB
Plugin
cannot be compiled with gcc
3.x; you must use gcc 4.x instead.
In MySQL 5.5, the InnoDB Plugin
is also
included, but it becomes the built-in version of
InnoDB
in MySQL Server, replacing the
version previously included as the built-in
InnoDB
engine. This means that if you use
InnoDB Plugin
in MySQL 5.1 using the
instructions just given, you will need to remove
ignore-builtin-innodb
and
plugin-load
from your startup
options after an upgrade to MySQL 5.5 or the server will fail
to start.
Functionality added or changed:
Replication:
With statement-based logging (SBL), repeatedly calling
statements that are unsafe for SBL caused a warning message to
be written to the error log for each statement, and there was no
way to disable this behavior. Now the server logs messages about
statements that are unsafe for statement-based logging only if
the log_warnings
variable is greater than 0.
(Bug#46265)
The undocumented TRANSACTIONAL
and
PAGE_CHECKSUM
keywords were removed from the
grammar.
(Bug#45829)
Previously, mysqldump would not dump the
INFORMATION_SCHEMA
database and ignored it if
it was named on the command line. Now,
mysqldump will dump
INFORMATION_SCHEMA
if it is named on the
command line. Currently, this requires that the
--skip-lock-tables
(or --skip-opt
) option be
given.
(Bug#33762)
Previously, SELECT ...
INTO OUTFILE
dumped column values without character
set conversion, which could produce data files that cannot be
imported without error if different columns used different
character sets. A consequence of this is that
mysqldump ignored the
--default-character-set
option
if the --tab
option was given
(which causes SELECT ...
INTO OUTFILE
to be used to dump data.)
INTO OUTFILE
now can be followed by a
CHARACTER SET
clause indicating the character
set to which dumped values should be converted. Also,
mysqldump adds a CHARACTER
SET
clause to the
SELECT ... INTO
OUTFILE
statement used to dump data, so that
--default-character-set
is no
longer ignored if --tab
is
given.
Other changes are that
SELECT ... INTO
OUTFILE
enforces that ENCLOSED BY
and ESCAPED BY
arguments must be a single
character, and SELECT
... INTO OUTFILE
and
LOAD DATA
INFILE
produce warnings if non-ASCII field or line
separators are specified.
(Bug#30946)
Pluggable storage engines now can be built for Windows.
The MySQL euckr
character set now can store
extended codes [81...FE][41..5A,61..7A,81..FE], which makes
euckr
compatible with the Microsoft
cp949
character set.
Bugs fixed:
Performance:
The table cache lock (LOCK_open
) is now an
adaptive mutex, which should improve performance in workloads
where this lock is heavily contended.
(Bug#43435)
Partitioning: Attempting to create a table using an invalid or inconsistent subpartition definition caused the server to crash. An example of such a statement is shown here:
CREATE TABLE t2 (s1 INT, s2 INT) PARTITION BY LIST (s1) SUBPARTITION BY HASH (s2) SUBPARTITIONS 1 ( PARTITION p1 VALUES IN (1), PARTITION p2 VALUES IN (2) (SUBPARTITION p3) );
Partitioning:
When using a debug build of MySQL, if a query against a
partitioned table having an index on one or more
DOUBLE
columns used that index,
the server failed with an assertion.
(Bug#45816)
Partitioning:
A failed RENAME TABLE
operation
on a table with user-defined partitioning left the table in an
unusable state, due to only some of the table files having been
renamed.
(Bug#30102)
Replication:
When a statement that changes a nontransactional table failed,
the transactional cache was flushed, causing a mismatch between
the execution and logging histories. Now we avoid flushing the
transactional cache unless a
COMMIT
or
ROLLBACK
is
issued.
(Bug#46129)
Replication:
The internal function
get_master_version_and_clock()
(defined in
sql/slave.cc
) ignored errors and passed
directly when queries failed, or when queries succeeded but the
result retrieved was empty. Now this function tries to reconnect
the master if a query fails due to transient network problems,
and to fail otherwise. The I/O thread now prints a warning if
the same system variables do not exist on master (in the event
the master is a very old version of MySQL, compared to the
slave.)
(Bug#45214)
Replication:
When using the MIXED
logging format, after
creating a temporary table and performing an update that
switched the logging format to ROW
, the
format switch persisted following the update. This prevented any
subsequent DDL statements on temporary tables from being written
to the binary log until the temporary table was dropped.
(Bug#43046)
See also Bug#40013.
This regression was introduced by Bug#20499.
Replication:
If the
--log-bin-trust-function-creators
option is not enabled,
CREATE
FUNCTION
requires one of the modifiers
DETERMINISTIC
, NO SQL
, or
READS SQL DATA
. When using statement-based
mode, the execution of a stored function should follow the same
rules; however, only functions defined with
DETERMINISTIC
could actually be executed. In
addition, the wrong error was generated
(ER_BINLOG_ROW_RBR_TO_SBR instead of
ER_BINLOG_UNSAFE_ROUTINE).
Now execution of stored functions is compatible with creation in
this regard; when a stored function without one of the modifiers
above is executed in STATEMENT
mode, the
correct error is raised, and functions defined using NO
SQL
, READS SQL DATA
, or both (that
is, without using DETERMINISTIC
) can be
excuted.
(Bug#41166)
The test suite was missing from RPM packages. (Bug#46834)
Incorrect index optimization could lead to incorrect results or server crashes. (Bug#46454)
The server printed warnings at startup about adjusting the value
of the max_join_size
system
variable. (These were harmless, but might be seen by users as
significant.)
(Bug#46385)
mysql did not handle backspace properly for
multi-byte characters. This has been fixed now if
mysql is linked with the
readline
library. It is not fixed if
mysql
is linked with
libedit
, which does not contain the necessary
support for multi-byte character sets.
(Bug#46310)
After an error such as a table-full condition,
INSERT IGNORE
could cause an assertion failure for debug builds.
(Bug#46075)
An optimization that moved an item from a subquery to an outer query could cause a server crash. (Bug#46051)
Several Valgrind warnings were corrected. (Bug#46003, Bug#46034, Bug#46042)
CREATE TABLE ...
SELECT
could cause a server crash if no default
database was selected.
(Bug#45998)
The MySQL Server crashed when performing a
REPLACE
into a MERGE
table
if there was a duplicate.
(Bug#45800)
An infinite hang and 100% CPU usage occurred after handler tried to open a merge table.
If the command mysqladmin shutdown was executed during the hang, the debug server generated the following assert:
mysqld: table.cc:407: void free_table_share(TABLE_SHARE*): Assertion `share->ref_count == 0' failed. 090610 14:54:04 - mysqld got signal 6 ;
For problems reading SSL files during SSL initialization, the
server wrote error messages to stderr
rather
than to the error log.
(Bug#45770)
The vendor name change from MySQL AB to Sun Microsystems, Inc. in RPM packages was not handled gracefully when upgrading MySQL using an RPM package. (Bug#45534)
A Windows Installation using the GUI installer would fail with:
MySQL Server 5.1 Setup Wizard ended prematurely The wizard was interrupted before MySQL Server 5.1. could be completely installed. Your system has not been modified. To complete installation at another time, please run setup again. Click Finish to exit the wizard
This was due to an step in the MSI installer that could fail to execute correctly on some environments. (Bug#45418)
Invalid memory reads could occur using the compressed client/server protocol. (Bug#45031)
The mysql_real_connect()
C API
function only attempted to connect to the first IP address
returned for a hostname. This could be a problem if a hostname
mapped to multiple IP address and the server was not bound to
the first one returned. Now
mysql_real_connect()
attempts to
connect to all IPv4 or IPv6 addresses that a domain name maps
to.
(Bug#45017)
See also Bug#47757.
Invalid input could cause invalid memory reads by the parser. (Bug#45010)
Some files in an AIX tar file distribution unpacked with incorrect permissions. (Bug#44647)
For debug builds, executing a stored procedure as a prepared statement could sometimes cause an assertion failure. (Bug#44521)
Using mysql_stmt_execute()
to
call a stored procedure could cause a server crash.
(Bug#44495)
Creating a new instance after previously removing an instance would fail to complete the installation properly because the security settings could not be applied correctly. (Bug#44428)
mysqlslap ignored the
--csv
option if it was given
without an argument.
(Bug#44412)
Enabling the event scheduler from within the file specified by
--init-file
caused a server
crash.
(Bug#43587)
The server did not always check the return value of calls to the
hash_init()
function.
(Bug#43572)
mysqladmin --count=X
--sleep=Y
incorrectly
delayed Y
seconds after the last
iteration before exiting.
(Bug#42639)
A test for stack growth failed on some platforms, leading to server crashes. (Bug#42213)
mysqladmin did not have enough space
allocated for tracking all variables when using
--vertical
or
--relative
with
extended-status
.
(Bug#40395)
Partitioning a log table caused a server crash. (Bug#40281)
When using quick access methods to search for rows in
UPDATE
and DELETE
statements, there was no check whether a fatal error had already
been sent to the client while evaluating the quick condition.
Consequently, a false OK (following the error) was sent to the
client, causing the error to be incorrectly transformed into a
warning.
(Bug#40113)
SHOW PROCESSLIST
could access freed memory of
a stored procedure run in a concurrent session.
(Bug#38816)
During installation on Windows, the MySQL Instance Configuration Wizard window could be opened at a size too small to be usable. (Bug#38723)
make_binary_distribution did not always generate correct distribution names. (Bug#37808)
The server crashed when executing a prepared statement
containing a duplicated MATCH()
function call
in the select list and ORDER BY
clause; for
example, SELECT MATCH(a) AGAINST('test') FROM t1 ORDER
BY MATCH(a) AGAINST('test')
.
(Bug#37740)
The output of mysqldump --tab for views
included a DROP TABLE
statement
without the IF EXISTS
qualifier.
(Bug#37377)
mysql_upgrade silently ignored the
--basedir
and
--datadir
options, which
it accepts for backward compatibility. Now it prints a warning.
(Bug#36558)
mysqlimport was not always compiled correctly
to enable thread support, which is required for the
--use-threads
option.
(Bug#32991)
mysqlcheck failed to fix table names when the
--fix-table-names
and
--all-in-1
options were both
specified.
(Bug#31821)
If the MySQL server was killed without the PID file being removed, attempts to stop the server with mysql.server stop waited 900 seconds before giving up. (Bug#31785)
When performing an installation on Windows using the GUI
installer, the installer would fail to wait long enough during
installation for the MySQL service to be installed, which would
cause the installation to fail and may cause security settings,
such as the root
password to not be applied
correctly.
(Bug#30525)
mysql included extra spaces at the end of some result set lines. (Bug#29622)
The mysql client inconsistently handled NUL bytes in column data in various output formats. (Bug#28203)
mysqlimport did not correctly quote and escape table identifiers and file names. (Bug#28071)
When installing the Windows service, using quotes around command-line configuration parameters could cause the quotes to incorrectly placed around the entire command-line option, and not just the value. (Bug#27535)
If the mysql client was built with the
readline
library and the
.inputrc
file mapped
Space
to the magic-space
function, it became impossible to enter spaces.
(Bug#27439)
If InnoDB
reached its limit on the number of
concurrent transactions (1023), it wrote a descriptive message
to the error log but returned a misleading error message to the
client, or an assertion failure occurred.
(Bug#18828)
See also Bug#46672.
User Comments
Add your own comment.