Spec-Zone.ru › MySQL 5.7

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

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

Пока плагин загружен, информация о нём доступна, как описано в разделе 5.5.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 и подобных систем, .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, чтобы вместо этого произошла ошибка.

Отключение плагина может потребовать корректировки других опций. Например, если вы запускаете сервер с помощью --skip-innodb для отключения InnoDB, другие опции innodb_xxx, скорее всего, нужно опустить при запуске. Кроме того, поскольку InnoDB является хранилищем данных по умолчанию, он не может запуститься, если вы не укажете другое доступное хранилище данных с помощью --default_storage_engine. Также необходимо установить --default_tmp_storage_engine.

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

Во время выполнения оператор UNINSTALL PLUGIN отключает и удаляет плагин, известный серверу. Оператор выгружает плагин и удаляет его из таблицы системы mysql.plugin, если он там зарегистрирован. По этой причине оператору UNINSTALL PLUGIN требуется привилегия DELETE для таблицы mysql.plugin. Поскольку плагин больше не зарегистрирован в таблице, сервер не загружает плагин при последующих перезапусках.

UNINSTALL PLUGIN может выгрузить плагин независимо от того, был ли он загружен во время выполнения с INSTALL PLUGIN или при запуске с опцией загрузки плагина, при следующих условиях:

  • Он не может выгружать встроенные в сервер плагины. Эти плагины можно определить по имени библиотеки, равному NULL, в выводе от INFORMATION_SCHEMA.PLUGINS или SHOW PLUGINS.

  • Он не может выгружать плагины, для которых сервер был запущен с опцией --plugin_name=FORCE_PLUS_PERMANENT, что препятствует выгрузке плагинов во время выполнения. Эти плагины можно определить по столбцу LOAD_OPTION в таблице Информационной схемы PLUGINS.

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

  1. Удалите из файла my.cnf любые опции, относящиеся к плагину.

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

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

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

Spec-Zone.ru

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