#### 13.7.4.4 安装插件语句

[](<>)[](<>)[](<>)

```
INSTALL PLUGIN plugin_name SONAME 'shared_library_name'
```

此语句安装服务器插件。它需要[`插入`](privileges-provided.html#priv_insert)的特权`mysql.plugin`系统表，因为它在该表中添加一行来注册插件。

*`插件名称`*是在库文件中包含的插件描述符结构中定义的插件名称（请参阅[插件数据结构](https://dev.mysql.com/doc/extending-mysql/8.0/en/plugin-data-structures.html)）。插件名称不区分大小写。为了获得最大的兼容性，插件名称应限制为 ASCII 字母、数字和下划线，因为它们用于 C 源文件、shell 命令行、M4 和 Bourne shell 脚本以及 SQL 环境。

*`shared_library_name`*是包含插件代码的共享库的名称。该名称包括文件扩展名（例如，`libmyplugin.so`,`libmyplugin.dll`， 要么`libmyplugin.dylib`）。

共享库必须位于插件目录（由[`插件目录`](server-system-variables.html#sysvar_plugin_dir)系统变量）。该库必须在插件目录本身中，而不是在子目录中。默认，[`插件目录`](server-system-variables.html#sysvar_plugin_dir)是个`插入`目录下的目录`pkglibdir`配置变量，但可以通过设置[`插件目录`](server-system-variables.html#sysvar_plugin_dir)在服务器启动时。例如，将其值设置为`我的.cnf`文件：

```
[mysqld]
plugin_dir=/path/to/plugin/directory
```

如果值[`插件目录`](server-system-variables.html#sysvar_plugin_dir)是一个相对路径名，它被认为是相对于 MySQL 基目录（的值[`基于的`](server-system-variables.html#sysvar_basedir)系统变量）。

[`安装插件`](install-plugin.html)加载并初始化插件代码以使插件可用。插件通过执行其初始化函数来初始化，该函数处理插件在使用之前必须执行的任何设置。当服务器关闭时，它会为每个加载的插件执行去初始化函数，以便插件有机会执行任何最终清理。

[`安装插件`](install-plugin.html)还通过添加一行指示插件名称和库文件名到`mysql.plugin`系统表。在正常启动过程中，服务器会加载并初始化在`mysql.plugin`.这意味着安装了一个插件[`安装插件`](install-plugin.html)只有一次，而不是每次服务器启动。如果服务器以[`--skip-grant-tables`](server-options.html#option_mysqld_skip-grant-tables)选项，插件注册在`mysql.plugin`表未加载且不可用。

一个插件库可以包含多个插件。对于要安装的每一个，请使用单独的[`安装插件`](install-plugin.html)陈述。每个语句命名一个不同的插件，但它们都指定相同的库名称。

[`安装插件`](install-plugin.html)导致服务器读取选项（`我的.cnf`) 文件，就像在服务器启动期间一样。这使插件能够从这些文件中获取任何相关选项。甚至可以在加载插件之前将插件选项添加到选项文件中（如果`松动的`使用前缀）。也可以卸载插件，编辑`我的.cnf`，然后重新安装插件。以这种方式重新启动插件可以使其获得新的选项值，而无需重新启动服务器。

有关在服务器启动时控制单个插件加载的选项，请参阅[第 5.6.1 节，“安装和卸载插件”](plugin-loading.html).如果你需要为单个服务器启动时加载插件[`--skip-grant-tables`](server-options.html#option_mysqld_skip-grant-tables)给出选项（告诉服务器不要读取系统表），使用[`--插件加载`](server-options.html#option_mysqld_plugin-load)选项。看[第 5.1.7 节，“服务器命令选项”](server-options.html).

要删除插件，请使用[`卸载插件`](uninstall-plugin.html)陈述。

有关插件加载的更多信息，请参阅[第 5.6.1 节，“安装和卸载插件”](plugin-loading.html).

要查看安装了哪些插件，请使用[`显示插件`](show-plugins.html)声明或查询`INFORMATION_SCHEMA`这[`插件`](information-schema-plugins-table.html)桌子。

如果你重新编译了一个插件库，并且需要重新安装它，你可以使用以下两种方法之一：

-   采用[`卸载插件`](uninstall-plugin.html)卸载库中的所有插件，在插件目录下安装新的插件库文件，然后使用[`安装插件`](install-plugin.html)安装库中的所有插件。此过程的优点是可以在不停止服务器的情况下使用它。但是，如果插件库包含许多插件，则必须发出许多[`安装插件`](install-plugin.html)和[`卸载插件`](uninstall-plugin.html)陈述。

-   停止服务器，在插件目录下安装新的插件库文件，然后重启服务器。
