CREATE PLUGIN
CREATE PLUGIN plugin_name TYPE 'plugin_type' SONAME 'plugin_library'
Loads the given library (if it is not loaded yet) and loads the specified plugin from it. The known plugin types are:
ranker
index_token_filter
query_token_filter
Refer to plugins for more information regarding writing the plugins.
mysql> CREATE PLUGIN myranker TYPE 'ranker' SONAME 'myplugins.so';
Query OK, 0 rows affected (0.00 sec)
DELETE PLUGIN
DROP PLUGIN plugin_name TYPE 'plugin_type'
Marks the specified plugin for unloading. The unloading is not immediate, because the concurrent queries might be using it. However, after a DROP
new queries will not be able to use it. Then, once all the currently executing queries using it are completed, the plugin will be unloaded. Once all the plugins from the given library are unloaded, the library is also automatically unloaded.
mysql> DROP PLUGIN myranker TYPE 'ranker';
Query OK, 0 rows affected (0.00 sec)
RELOADING PLUGINS
RELOAD PLUGINS FROM SONAME 'plugin_library'
Reloads all plugins (UDFs, rankers, etc) from a given library. Reload is, in a sense, transactional: a successful reload guarantees that:
- all the plugins were successfully updated with their new versions;
- the update was atomic, all the plugins were replaced at once. Atomicity means that queries using multiple functions from a reloaded library will never mix the old and new versions.
The set of plugins is guaranteed to always be consistent during the RELOAD
, it will be either all old, or all new.
Reload also is seamless, meaning that some version of a reloaded plugin will be available to concurrent queries at all times, and there will be no temporary disruptions. Note how this improves on using a pair of DROP
and CREATE
statements for reloading: with those, there is a tiny window between the DROP
and the subsequent CREATE
, during which the queries technically refer to an unknown plugin and will thus fail.
In case of any failure RELOAD PLUGINS
does absolutely nothing, keeps the old plugins, and reports an error.
On Windows, either overwriting or deleting a DLL library currently in use seems to be an issue. However, you can still rename it, then put a new version under the old name, and RELOAD
will then work. After a successful reload you will also be able to delete the renamed old library, too.
mysql> RELOAD PLUGINS FROM SONAME 'udfexample.dll';
Query OK, 0 rows affected (0.00 sec)