Spec-Zone.ru › MySQL 9.2

7.6.1 Установка и удаление плагинов

Плагины сервера должны быть загружены на сервер перед использованием. MySQL поддерживает загрузку плагинов при запуске сервера и во время его работы. Также можно управлять состоянием активации загруженных плагинов при запуске и разгружать их во время работы.

Пока плагин загружен, информация о нём доступна, как описано в разделе 7.6.2, «Получение информации о плагинах сервера».

  • Установка плагинов

  • Управление состоянием активации плагинов

  • Удаление плагинов

  • Плагины и загружаемые функции

Установка плагинов

Прежде чем использовать плагин сервера, его необходимо установить одним из следующих способов. В описаниях plugin_name обозначает имя плагина, например, innodb, csv или validate_password.

  • Встроенные плагины

  • Плагины, зарегистрированные в системной таблице mysql.plugin

  • Плагины, указанные с параметрами командной строки

  • Плагины, установленные с помощью инструкции INSTALL PLUGIN

Встроенные плагины

Встроенный плагин автоматически распознаётся сервером. По умолчанию сервер включает плагин при запуске. Для некоторых встроенных плагинов это можно изменить с помощью опции --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

    Указывает серверу отключить плагин.

  • --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_PERMANENT, что предотвращает разгрузку плагина во время выполнения. Их можно определить по столбцу LOAD_OPTION таблицы PLUGINS.

Для удаления плагина, который в настоящее время загружается при запуске сервера с помощью опции загрузки плагинов, выполните следующую процедуру.

  1. Удалите из файла my.cnf любые опции и системные переменные, связанные с плагином. Если какие-либо переменные системы плагинов были сохранены в файле mysqld-auto.cnf, удалите их с помощью команды RESET PERSIST var_name для каждой из них, чтобы удалить её.

  2. Перезапустите сервер.

  3. Плагины обычно устанавливаются либо с помощью опции загрузки плагинов при запуске, либо с помощью команды INSTALL PLUGIN во время выполнения, но не оба способа одновременно. Однако удаление опций плагина из файла my.cnf может быть недостаточно для его удаления, если в какой-то момент также была использована команда INSTALL PLUGIN. Если плагин всё ещё отображается в выводе от PLUGINS или SHOW PLUGINS, используйте UNINSTALL PLUGIN для удаления его из таблицы mysql.plugin. Затем перезапустите сервер ещё раз.

Плагины и загружаемые функции

При установке плагин может также автоматически установить связанные загружаемые функции. Если это так, при удалении плагина также автоматически удаляются эти функции.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/plugin-loading.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API