15.7.4.3 Оператор INSTALL COMPONENT
INSTALL COMPONENT component_name [, component_name ...
[SET variable = expr [, variable = expr] ...]
variable: {
{GLOBAL | @@GLOBAL.} [component_prefix.]system_var_name
| {PERSIST | @@PERSIST.} [component_prefix.]system_var_name
}
Этот оператор устанавливает один или несколько компонентов, которые становятся активными немедленно. Компонент предоставляет услуги, доступные серверу и другим компонентам; см. раздел 7.5, «Компоненты MySQL». Оператор INSTALL
COMPONENT требует привилегии INSERT для системной таблицы mysql.component, поскольку он добавляет строку в эту таблицу для регистрации компонента.
Пример:
INSTALL COMPONENT 'file://component1', 'file://component2';
Компонент имеет имя, использующее URN, начинающийся с file://, и указывающий базовое имя файла библиотеки, реализующего компонент, расположенного в каталоге, указанном системной переменной plugin_dir. Имена компонентов не содержат каких-либо зависящих от платформы суффиксов имен файлов, таких как .so или .dll. (Эти детали именования могут быть изменены, так как интерпретация имени компонента выполняется самим сервисом, а инфраструктура компонентов позволяет заменить реализацию сервиса по умолчанию альтернативными реализациями.)
Оператор INSTALL COMPONENT позволяет задавать значения системных переменных компонента при установке одного или нескольких компонентов. Оператор SET позволяет вам точно указать значения переменных, когда они нужны, без неудобств или ограничений, связанных с другими формами присваивания. В частности, вы также можете задать переменные компонента с помощью этих альтернатив:
При запуске сервера с помощью опций в командной строке или в файле опций, но это требует перезапуска сервера. Значения не вступят в силу до тех пор, пока вы не установите компонент. Вы можете указать недопустимое имя переменной для компонента в командной строке без выдачи сообщения об ошибке.
Динамически во время работы сервера с помощью оператора
SET, который позволяет изменять работу сервера без необходимости остановки и перезапуска. Установка значения для только для чтения переменной запрещена.
Необязательный оператор SET применяет значение или значения только к компоненту, указанному в операторе INSTALL COMPONENT, а не ко всем последующим установкам этого компонента. SET GLOBAL|PERSIST работает для всех типов переменных, включая переменные только для чтения, без необходимости перезапуска сервера. Системная переменная компонента, которую вы установили с помощью оператора INSTALL COMPONENT, имеет приоритет над любым конфликтующим значением, полученным из командной строки или файла опций.
Пример:
INSTALL COMPONENT 'file://component1', 'file://component2'
SET GLOBAL component1.var1 = 12 + 3, PERSIST component2.var2 = 'strings';
Пропуск PERSIST или GLOBAL эквивалентно указанию GLOBAL.
Указание PERSIST для любой переменной в SET бесшумно выполняет SET
PERSIST_ONLY сразу после того, как INSTALL COMPONENT загрузит компоненты, но перед обновлением таблицы mysql.component. Если SET
PERSIST_ONLY завершится неудачно, сервер загрузит все ранее загруженные новые компоненты без сохранения чего-либо в mysql.component.
Оператор SET принимает только допустимые имена переменных устанавливаемого компонента и выводит сообщение об ошибке для всех недопустимых имен. Подзапросы, хранимые функции и агрегатные функции не допускаются в качестве части выражения значения. Если вы устанавливаете один компонент, вам не нужно добавлять имя компонента перед именем переменной.
Хотя указание значения переменной с помощью оператора SET аналогично тому, что в командной строке — оно доступно немедленно при регистрации переменной — существует существенное различие в том, как оператор SET обрабатывает недопустимые числовые значения для булевых переменных. Например, если вы установите булеву переменную в 11 (component1.boolvar = 11), вы увидите следующее поведение:
Оператор
SETвозвращает trueКомандная строка возвращает false (11 не является ни ВКЛ, ни 1)
При возникновении любой ошибки оператор завершается неудачно и не оказывает никакого влияния. Например, это происходит, если имя компонента ошибочно, именованный компонент не существует или уже установлен, или инициализация компонента завершается неудачно.
Сервис загрузчика обрабатывает загрузку компонентов, включая добавление установленных компонентов в системную таблицу mysql.component, которая служит регистром. При последующих перезапусках сервера все компоненты, перечисленные в mysql.component, загружаются службой загрузки во время начального процесса запуска. Это происходит даже если сервер запускается с опцией --skip-grant-tables.
Если компонент зависит от служб, отсутствующих в регистре, и вы пытаетесь установить компонент без одновременной установки компонента или компонентов, которые предоставляют услуги, от которых он зависит, возникает ошибка:
ERROR 3527 (HY000): Cannot satisfy dependency for service 'component_a'
required by component 'component_b'.
Чтобы избежать этой проблемы, установите все компоненты в одном операторе или установите зависимый компонент после установки любого компонента, от которого он зависит.
Для компонентов хранилища ключей не используйте оператор INSTALL COMPONENT. Вместо этого настройте загрузку компонента хранилища ключей с помощью файла манифеста. См. раздел 8.4.4.2, «Установка компонента хранилища ключей».
© 2025 Oracle
Licensed under the GPLv2 License.