7.6.1 Установка и удаление плагинов
Плагины сервера должны быть загружены на сервер перед использованием. MySQL поддерживает загрузку плагинов при запуске сервера и во время его работы. Также можно управлять состоянием активации загруженных плагинов при запуске и разгружать их во время работы.
Пока плагин загружен, информация о нём доступна, как описано в разделе 7.6.2, «Получение информации о плагинах сервера».
Установка плагинов
Прежде чем использовать плагин сервера, его необходимо установить одним из следующих способов. В описаниях plugin_name обозначает имя плагина, например, innodb, csv или validate_password.
Встроенные плагины
Встроенный плагин автоматически распознаётся сервером. По умолчанию сервер включает плагин при запуске. Для некоторых встроенных плагинов это можно изменить с помощью опции --.plugin_name[=activation_state]
Плагины, зарегистрированные в системной таблице mysql.plugin
Системная таблица mysql.plugin служит реестром плагинов (кроме встроенных плагинов, которые регистрировать не нужно). Во время нормальной последовательности запуска сервер загружает плагины, зарегистрированные в таблице. По умолчанию для плагина, загруженного из таблицы mysql.plugin, сервер также включает плагин. Это можно изменить с помощью опции --.plugin_name[=activation_state]
Если сервер запускается с опцией --skip-grant-tables, плагины, зарегистрированные в таблице mysql.plugin, не загружаются и недоступны.
Плагины, указанные с параметрами командной строки
Плагин, находящийся в файле библиотеки плагинов, может быть загружен при запуске сервера с помощью опции --plugin-load, --plugin-load-add или --early-plugin-load. Обычно, для плагина, загруженного при запуске, сервер также включает плагин. Это можно изменить с помощью опции --.plugin_name[=activation_state]
Опции --plugin-load и --plugin-load-add загружают плагины после инициализации встроенных плагинов и движков хранения во время последовательности запуска сервера. Опция --early-plugin-load используется для загрузки плагинов, которые должны быть доступны до инициализации встроенных плагинов и движков хранения.
Значение каждой опции загрузки плагинов представляет собой список, разделённый точкой с запятой, plugin_library и name=plugin_library значений. Каждое plugin_library — это имя файла библиотеки, содержащее код плагина, а каждое name — это имя загружаемого плагина. Если имя библиотеки плагина указано без предваряющего имени плагина, сервер загружает все плагины в библиотеке. При указании предваряющего имени плагина сервер загружает только указанный плагин из библиотеки. Сервер ищет файлы библиотек плагинов в каталоге, указанном переменной plugin_dir системной переменной.
Опции загрузки плагинов не регистрируют ни один плагин в таблице mysql.plugin. При последующих перезапусках сервер загружает плагин снова только в том случае, если указаны --plugin-load, --plugin-load-add или --early-plugin-load. То есть, опция выполняет однократную установку плагина, которая сохраняется только для одного вызова сервера.
--plugin-load, --plugin-load-add и --early-plugin-load позволяют загружать плагины даже при указании --skip-grant-tables (что приводит к игнорированию сервером таблицы mysql.plugin). --plugin-load, --plugin-load-add и --early-plugin-load также позволяют загружать плагины при запуске, которые нельзя загрузить во время выполнения.
Опция --plugin-load-add дополняет опцию --plugin-load:
Каждая запись
--plugin-loadсбрасывает набор плагинов для загрузки при запуске, в то время как--plugin-load-addдобавляет плагин или плагины в набор загружаемых плагинов без сброса текущего набора. Следовательно, если указано несколько записей--plugin-load, применяется только последняя. При нескольких записях--plugin-load-addприменяются все они.Формат аргумента такой же, как у
--plugin-load, но несколько записей--plugin-load-addможно использовать для избежания указания большого набора плагинов как одного длинного громоздкого аргумента--plugin-load.--plugin-load-addможет быть указана без--plugin-load, но любая запись--plugin-load-add, которая появляется до--plugin-load, не имеет эффекта, потому что--plugin-loadсбрасывает набор плагинов для загрузки.
Например, эти опции:
--plugin-load=x --plugin-load-add=y
эквивалентны этим опциям:
--plugin-load-add=x --plugin-load-add=y
и также эквивалентны этой опции:
--plugin-load="x;y"
Но эти опции:
--plugin-load-add=y --plugin-load=x
эквивалентны этой опции:
--plugin-load=x
Плагины, установленные с помощью инструкции INSTALL PLUGIN
Плагин, находящийся в файле библиотеки плагинов, может быть загружен во время выполнения с помощью инструкции INSTALL PLUGIN. Инструкция также регистрирует плагин в таблице mysql.plugin, чтобы сервер загружал его при последующих перезапусках. По этой причине INSTALL PLUGIN требует привилегии INSERT для таблицы mysql.plugin.
Имя базового файла библиотеки плагина зависит от вашей платформы. Распространённые суффиксы — .so для Unix и Unix-подобных систем и .dll для Windows.
Пример: Опция --plugin-load-add устанавливает плагин при запуске сервера. Чтобы установить плагин под названием myplugin из файла библиотеки плагинов под названием somepluglib.so, используйте эти строки в файле my.cnf:
[mysqld]
plugin-load-add=myplugin=somepluglib.so
В этом случае плагин не регистрируется в mysql.plugin. Перезапуск сервера без опции --plugin-load-add приводит к тому, что плагин не загружается при запуске.
В качестве альтернативы, инструкция INSTALL PLUGIN заставляет сервер загружать код плагина из файла библиотеки во время выполнения:
INSTALL PLUGIN myplugin SONAME 'somepluglib.so';
INSTALL PLUGIN также приводит к «постоянной» регистрации плагина: плагин перечисляется в таблице mysql.plugin, чтобы сервер загружал его при последующих перезапусках.
Многие плагины можно загрузить как при запуске сервера, так и во время выполнения. Однако, если плагин разработан таким образом, что его необходимо загрузить и инициализировать во время запуска сервера, попытки загрузить его во время выполнения с помощью INSTALL
PLUGIN приведут к ошибке:
mysql> INSTALL PLUGIN myplugin SONAME 'somepluglib.so';
ERROR 1721 (HY000): Plugin 'myplugin' is marked as not dynamically
installable. You have to stop the server to install it.
В этом случае необходимо использовать --plugin-load, --plugin-load-add или --early-plugin-load.
Если плагин называется как с помощью параметра --plugin-load, --plugin-load-add, или --early-plugin-load, так и (в результате более раннего INSTALL
PLUGIN оператора) в таблице mysql.plugin, сервер запускается, но записывает эти сообщения в журнал ошибок:
[ERROR] Function 'plugin_name' already exists
[Warning] Couldn't load plugin named 'plugin_name'
with soname 'plugin_object_file'.
Управление состоянием активации плагинов
Если сервер знает о плагине при запуске (например, потому что плагин называется с помощью параметра --plugin-load-add или зарегистрирован в таблице mysql.plugin), сервер загружает и активирует плагин по умолчанию. Можно управлять состоянием активации такого плагина с помощью параметра запуска --, где plugin_name[=activation_state]plugin_name — имя плагина, на который нужно повлиять, например innodb, csv или validate_password. Как и в других параметрах, дефисы и подчеркивания взаимозаменяемы в именах параметров. Также значения состояний активации не чувствительны к регистру. Например, --my_plugin=ON и --my-plugin=on эквивалентны.
-
--plugin_name=OFFУказывает серверу на отключение плагина. С помощью этого параметра можно отключить, например, устаревший плагин
mysql_native_passwordпри запуске сервера. -
--plugin_name[=ON]Указывает серверу на включение плагина. (Указание параметра как
--без значения имеет тот же эффект.) Если плагин не может инициализироваться, сервер запускается с отключённым плагином.plugin_name -
--plugin_name=FORCEУказывает серверу на включение плагина, но если инициализация плагина завершается ошибкой, сервер не запускается. Другими словами, этот параметр принудительно заставляет сервер работать с включенным плагином или совсем без него.
-
--plugin_name=FORCE_PLUS_PERMANENTКак
FORCE, но кроме того, предотвращает разгрузку плагина во время выполнения. Если пользователь попытается сделать это с помощьюUNINSTALL PLUGIN, произойдёт ошибка.
Состояния активации плагинов отображаются в столбце LOAD_OPTION таблицы схемы информации PLUGINS.
Предположим, что CSV, BLACKHOLE и ARCHIVE — встроенные подключаемые движки хранения, и вы хотите, чтобы сервер загружал их при запуске, с учётом этих условий: сервер должен иметь право на запуск, если инициализация CSV завершится ошибкой, инициализация BLACKHOLE должна быть успешной, и ARCHIVE должен быть отключён. Для этого используйте эти строки в файле параметров:
[mysqld]
csv=ON
blackhole=FORCE
archive=OFF
Формат параметра --enable- — синоним для plugin_name--. Параметры plugin_name=ON--disable- и plugin_name--skip- — синонимы для plugin_name--.plugin_name=OFF
Если плагин отключён, либо явно с помощью OFF, либо неявно, потому что он был включён с помощью ON, но не смог инициализироваться, аспекты работы сервера, требующие плагина, меняются. Например, если плагин реализует движок хранения, существующие таблицы для этого движка станут недоступны, а попытки создания новых таблиц для этого движка приведут к таблицам, использующим движок по умолчанию, если не включён режим SQL NO_ENGINE_SUBSTITUTION, чтобы вместо этого возникла ошибка.
Отключение плагина может потребовать корректировки других параметров.
Удаление плагинов
Во время выполнения оператор UNINSTALL PLUGIN отключает и удаляет плагин, известный серверу. Оператор разгружает плагин и удаляет его из системной таблицы mysql.plugin, если он там зарегистрирован. По этой причине оператор UNINSTALL PLUGIN требует привилегии DELETE для таблицы mysql.plugin. После того, как плагин больше не зарегистрирован в таблице, сервер не загружает плагин при последующих перезапусках.
UNINSTALL PLUGIN может разгрузить плагин независимо от того, был ли он загружен во время выполнения с помощью INSTALL PLUGIN или при запуске с параметром загрузки плагина, при соблюдении следующих условий:
Он не может разгрузить встроенные в сервер плагины. Их можно определить по имени библиотеки
NULLв выводе из таблицы схемы информацииPLUGINSилиSHOW PLUGINS.Он не может разгрузить плагины, для которых сервер был запущен с параметром
--, который предотвращает разгрузку плагина во время выполнения. Их можно определить по столбцуplugin_name=FORCE_PLUS_PERMANENTLOAD_OPTIONтаблицыPLUGINS.
Для удаления плагина, который в настоящее время загружается при запуске сервера с параметром загрузки плагина, выполните следующие действия.
Удалите из файла
my.cnfлюбые параметры и системные переменные, относящиеся к плагину. Если какие-либо системные переменные плагина были сохранены в файлmysqld-auto.cnf, удалите их, используяRESET PERSISTдля каждой из них, чтобы удалить её.var_nameПерезапустите сервер.
Плагины обычно устанавливаются либо с помощью параметра загрузки плагина при запуске, либо с помощью
INSTALL PLUGINво время выполнения, но не оба способа одновременно. Однако удаление параметров плагина из файлаmy.cnfможет быть недостаточно для его удаления, если в какой-то момент также был использованINSTALL PLUGIN. Если плагин всё ещё отображается в выводе изPLUGINSилиSHOW PLUGINS, используйтеUNINSTALL PLUGINдля удаления его из таблицыmysql.plugin. Затем снова перезапустите сервер.
Плагины и загружаемые функции
При установке плагин может также автоматически устанавливать связанные загружаемые функции. Если это так, то при удалении плагина также автоматически удаляются эти функции.
© 2025 Oracle
Licensed under the GPLv2 License.