Spec-Zone .ru
спецификации, руководства, описания, API
|
Server plugins must be loaded in to the server before they can be used. MySQL enables you to load a plugin at server startup or at runtime. It is also possible to control the activation of loaded plugins at startup, and to unload them at runtime.
Server plugins must be known to the server before they can be used. A plugin can be made known several ways, as
described here. In the following descriptions, plugin_name
stands for
a plugin name such as innodb
or csv
.
Built-in plugins:
A plugin that is built in to the server is known by the server automatically. Normally, the server enables the
plugin at startup, although this can be changed with the --
option. plugin_name
Plugins registered in the mysql.plugin
table:
The mysql.plugin
table serves as a registry of plugins. The server normally enables
each plugin listed in the table at startup, although whether a given plugin is enabled can be changed with the
--
option. If the server is
started with the plugin_name
--skip-grant-tables
option, it does not consult this table and does not load
the plugins listed there.
Plugins named with command-line options:
A plugin that is located in a plugin library file can be loaded at server startup with the --plugin-load
option. Normally, the server enables the plugin at startup, although
this can be changed with the --
option. plugin_name
The option value is a semicolon-separated list of
pairs. Each name
=plugin_library
name
is the name of the plugin, and plugin_library
is the name of the shared library that contains the
plugin code. If a plugin library is named without any preceding plugin name, the server loads all plugins in the
library. Each library file must be located in the directory named by the plugin_dir
system variable.
This option does not register any plugin in the mysql.plugin
table. For subsequent
restarts, the server loads the plugin again only if --plugin-load
is given again. That is, this option effects a one-time
installation that persists only for one server invocation.
--plugin-load
enables plugins to be loaded even when --skip-grant-tables
is given (which causes the server to ignore the mysql.plugin
table). --plugin-load
also enables plugins to be loaded at startup under configurations
when plugins cannot be loaded at runtime.
The --plugin-load-add
option complements the --plugin-load
option. --plugin-load-add
adds a plugin or plugins to the set of plugins to be loaded
at startup. The argument format is the same as for --plugin-load
. --plugin-load-add
can be used to avoid specifying a large set of plugins as a
single long unwieldy --plugin-load
. argument. --plugin-load-add
can be given in the absence of --plugin-load
, but any instance of --plugin-load-add
that appears before --plugin-load
. has no effect because --plugin-load
resets the set of plugins to load. In other words, these
options:
--plugin-load=x --plugin-load-add=y
are equivalent to this option:
--plugin-load="x;y"
But these options:
--plugin-load-add=y --plugin-load=x
are equivalent to this option:
--plugin-load=x
Plugins installed with the INSTALL PLUGIN
statement:
A plugin that is located in a plugin library file can be loaded at runtime with the INSTALL
PLUGIN
statement. The statement also registers the plugin in the mysql.plugin
table to cause the server to load it on subsequent restarts. For this
reason, INSTALL PLUGIN
requires the INSERT
privilege for the mysql.plugin
table.
If a plugin is named both using a --plugin-load
option and in the mysql.plugin
table,
the server starts but writes these messages to the error log:
100310 19:15:44 [ERROR] Function 'plugin_name
' already exists100310 19:15:44 [Warning] Couldn't load plugin named 'plugin_name
'with soname 'plugin_object_file
'.
Example: The --plugin-load
option installs a plugin at server startup. To install a plugin named myplugin
in a
plugin library file named somepluglib.so
, use these lines in a my.cnf
file:
[mysqld]plugin-load=myplugin=somepluglib.so
In this case, the plugin is not registered in mysql.plugin
. Restarting the server
without the --plugin-load
option causes the plugin not to be loaded at startup.
Alternatively, the INSTALL PLUGIN
statement causes the server to load the plugin code from the library file at runtime:
mysql> INSTALL PLUGIN myplugin SONAME
'somepluglib.so';
INSTALL PLUGIN
also causes "permanent" plugin registration: The server lists the plugin in the mysql.plugin
table to ensure that it is loaded on subsequent server restarts.
Many plugins can be loaded either at server startup or at runtime. However, if a plugin is designed such that it
must be loaded and initialized during server startup, use --plugin-load
rather than INSTALL PLUGIN
.
While a plugin is loaded, information about it is available at runtime from several sources, such as the INFORMATION_SCHEMA.PLUGINS
table and the SHOW PLUGINS
statement. For more information, see Section
5.1.8.2, "Obtaining Server Plugin Information".
If the server knows about a plugin when it starts (for example, because the plugin is named using a --plugin-load
option or registered in the mysql.plugin
table), the server loads and enables the plugin by default. It is
possible to control activation for such a plugin using a --
startup option named after the plugin. In the
following descriptions, plugin_name
[=value
]plugin_name
stands for a plugin name such as
innodb
or csv
. As with other options, dashes and
underscores are interchangeable in option names. For example, --my_plugin=ON
and
--my-plugin=ON
are equivalent.
--
plugin_name
=OFF
Tells the server to disable the plugin.
--
plugin_name
[=ON]
Tells the server to enable the plugin. (Specifying the option as --
without a value has the same effect.)
If the plugin fails to initialize, the server runs with the plugin disabled. plugin_name
--
plugin_name
=FORCE
Tells the server to enable the plugin, but if plugin initialization fails, the server does not start. In other words, this option forces the server to run with the plugin enabled or not at all.
--
plugin_name
=FORCE_PLUS_PERMANENT
Like FORCE
, but in addition prevents the plugin from being unloaded at
runtime. If a user attempts to do so with UNINSTALL PLUGIN
, an error occurs.
The values OFF
, ON
, FORCE
,
and FORCE_PLUS_PERMANENT
are not case sensitive.
The activation state for plugins is visible in the LOAD_OPTION
column of the INFORMATION_SCHEMA.PLUGINS
table.
Suppose that CSV
, BLACKHOLE
, and ARCHIVE
are built-in pluggable storage engines and that you want the server to load
them at startup, subject to these conditions: The server is permitted to run if CSV
initialization fails, but must require that BLACKHOLE
initialization succeeds, and
ARCHIVE
should be disabled. To accomplish that, use these lines in an option file:
[mysqld]csv=ONblackhole=FORCEarchive=OFF
The --enable-
option format is
supported as a synonym for plugin_name
--
. The plugin_name
=ON--disable-
and plugin_name
--skip-
option formats are supported as synonyms for
plugin_name
--
. plugin_name
=OFF
If a plugin is disabled, either explicitly with OFF
or implicitly because it was
enabled with ON
but failed to initialize, aspects of server operation that require
the plugin will change. For example, if the plugin implements a storage engine, existing tables for the storage
engine become inaccessible, and attempts to create new tables for the storage engine 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.
Disabling a plugin may require adjustment to other options. For example, if you start the server using --skip-innodb
to disable InnoDB
, other innodb_
options likely will need to
be omitted from the startup command. In addition, because xxx
InnoDB
is the default storage engine, it will not start unless you specify
another available storage engine with --default_storage_engine
. As of MySQL 5.6.3, you will also need to set --default_tmp_storage_engine
.
A plugin known to the server can be uninstalled to disable it at runtime with the UNINSTALL PLUGIN
statement. The statement unloads the plugin and removes it from
the mysql.plugin
table if it is registered there. For this reason, UNINSTALL PLUGIN
statement requires the DELETE
privilege for the mysql.plugin
table.
With the plugin no longer registered in the table, the server will not load the plugin automatically for
subsequent restarts.
UNINSTALL PLUGIN
can unload plugins regardless of whether they were loaded with
INSTALL PLUGIN
or --plugin-load
.
UNINSTALL PLUGIN
is subject to these exceptions:
It cannot unload plugins that are built in to the server. These can be identified
as those that have a library name of NULL
in the output from INFORMATION_SCHEMA.PLUGINS
or SHOW PLUGINS
.
It cannot unload plugins for which the server was started with --
,
which prevents plugin unloading at runtime. These can be identified from the plugin_name
=FORCE_PLUS_PERMANENTLOAD_OPTION
column of the INFORMATION_SCHEMA.PLUGINS
table.