什么是插件及其在 mysql 中的工作原理?

What is plugins and how it is work in mysql?

我正在 MySql 官方网站 (https://dev.mysql.com/doc/refman/5.1/en/partitioning.html) 探索分区。 在第一页,我找到了 plugins

mysql> show plugins;
+----------------------------+----------+--------------------+---------+---------+
| Name                       | Status   | Type               | Library | License |
+----------------------------+----------+--------------------+---------+---------+
| binlog                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| mysql_native_password      | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
| mysql_old_password         | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
| sha256_password            | ACTIVE   | AUTHENTICATION     | NULL    | GPL     |
| MyISAM                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| MRG_MYISAM                 | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| MEMORY                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| CSV                        | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| InnoDB                     | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| INNODB_TRX                 | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_LOCKS               | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_LOCK_WAITS          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP                 | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_RESET           | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMPMEM              | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMPMEM_RESET        | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_PER_INDEX       | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_CMP_PER_INDEX_RESET | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_BUFFER_PAGE         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_BUFFER_PAGE_LRU     | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_BUFFER_POOL_STATS   | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_METRICS             | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_DEFAULT_STOPWORD | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_DELETED          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_BEING_DELETED    | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_CONFIG           | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_INDEX_CACHE      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_FT_INDEX_TABLE      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_TABLES          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_TABLESTATS      | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_INDEXES         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_COLUMNS         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_FIELDS          | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_FOREIGN         | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_FOREIGN_COLS    | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_TABLESPACES     | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| INNODB_SYS_DATAFILES       | ACTIVE   | INFORMATION SCHEMA | NULL    | GPL     |
| PERFORMANCE_SCHEMA         | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| FEDERATED                  | DISABLED | STORAGE ENGINE     | NULL    | GPL     |
| ARCHIVE                    | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| BLACKHOLE                  | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
| partition                  | ACTIVE   | STORAGE ENGINE     | NULL    | GPL     |
+----------------------------+----------+--------------------+---------+---------+
42 rows in set (0.05 sec)

心里有一些疑问

  1. 什么是 plugins
  2. 工作情况如何?
  3. MySql 有多少插件可用?
  4. 我可以添加其他 plugins 吗?
  5. 如果我可以添加那么如何添加?

这里是我安装的插件列表。还有很多。他们可以做很多事情。它们可以是存储引擎或处理用户功能或调度程序或...... 因此可以通过正常的 SQL and and and.

直接读取或写入 CSV 或 JSON 文件

在这里你可以找到一些Informations

MariaDB > SHOW PLUGINS;
+-----------------------------+--------+--------------------+------------------------+---------+
| Name                        | Status | Type               | Library                | License |
+-----------------------------+--------+--------------------+------------------------+---------+
| binlog                      | ACTIVE | STORAGE ENGINE     | NULL                   | GPL     |
| mysql_native_password       | ACTIVE | AUTHENTICATION     | NULL                   | GPL     |
| mysql_old_password          | ACTIVE | AUTHENTICATION     | NULL                   | GPL     |
| CSV                         | ACTIVE | STORAGE ENGINE     | NULL                   | GPL     |
| MEMORY                      | ACTIVE | STORAGE ENGINE     | NULL                   | GPL     |
| MyISAM                      | ACTIVE | STORAGE ENGINE     | NULL                   | GPL     |
| MRG_MyISAM                  | ACTIVE | STORAGE ENGINE     | NULL                   | GPL     |
| Aria                        | ACTIVE | STORAGE ENGINE     | NULL                   | GPL     |
| PERFORMANCE_SCHEMA          | ACTIVE | STORAGE ENGINE     | NULL                   | GPL     |
| InnoDB                      | ACTIVE | STORAGE ENGINE     | NULL                   | GPL     |
| XTRADB_READ_VIEW            | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| XTRADB_INTERNAL_HASH_TABLES | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| XTRADB_RSEG                 | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_TRX                  | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_LOCKS                | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_LOCK_WAITS           | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_CMP                  | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_CMP_RESET            | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_CMPMEM               | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_CMPMEM_RESET         | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_CMP_PER_INDEX        | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_CMP_PER_INDEX_RESET  | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_BUFFER_PAGE          | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_BUFFER_PAGE_LRU      | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_BUFFER_POOL_STATS    | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_METRICS              | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_FT_DEFAULT_STOPWORD  | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_FT_DELETED           | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_FT_BEING_DELETED     | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_FT_CONFIG            | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_FT_INDEX_CACHE       | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_FT_INDEX_TABLE       | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_SYS_TABLES           | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_SYS_TABLESTATS       | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_SYS_INDEXES          | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_SYS_COLUMNS          | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_SYS_FIELDS           | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_SYS_FOREIGN          | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_SYS_FOREIGN_COLS     | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_SYS_TABLESPACES      | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_SYS_DATAFILES        | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| INNODB_CHANGED_PAGES        | ACTIVE | INFORMATION SCHEMA | NULL                   | GPL     |
| partition                   | ACTIVE | STORAGE ENGINE     | NULL                   | GPL     |
| SEQUENCE                    | ACTIVE | STORAGE ENGINE     | ha_sequence.so         | GPL     |
| CONNECT                     | ACTIVE | STORAGE ENGINE     | ha_connect.so          | GPL     |
| QUERY_CACHE_INFO            | ACTIVE | INFORMATION SCHEMA | QUERY_CACHE_INFO.so    | BSD     |
| QUERY_RESPONSE_TIME         | ACTIVE | INFORMATION SCHEMA | query_response_time.so | GPL     |
| METADATA_LOCK_INFO          | ACTIVE | INFORMATION SCHEMA | metadata_lock_info.so  | GPL     |
| QUERY_RESPONSE_TIME_AUDIT   | ACTIVE | AUDIT              | query_response_time.so | GPL     |
| SPHINX                      | ACTIVE | STORAGE ENGINE     | ha_sphinx.so           | GPL     |
+-----------------------------+--------+--------------------+------------------------+---------+
50 rows in set (0.01 sec)

经过分析About Plugin,我发现了更多关于它的东西。我在深入解释。

What is plugins and How it is work?

MySQL 支持可以创建服务器组件的插件 API。插件可以在服务器启动时加载,也可以在运行时加载和卸载而无需重启服务器。 API 是通用的,没有指定插件可以做什么。该接口支持的组件包括但不限于存储引擎、全文解析器插件、服务器扩展。

例如,全文解析器插件可用于替换或扩充内置的全文解析器。插件可以使用不同于内置解析器使用的规则将文本解析为单词。如果您需要解析具有不同于内置解析器预期的特征的文本,这将很有用。

The plugin interface is more general than the older user-defined function (UDF) interface.

How much plugin available for MySql? (Types of Plugins)

插件 API 可以创建实现多种功能的插件:

  • 存储引擎
  • 全文解析器
  • 守护进程
  • INFORMATION_SCHEMAtables
  • 半同步复制
  • 审计
  • 身份验证
  • 密码验证和强度检查
  • 协议跟踪
  • 查询重写

Can i add other plugins ? / If i can add then how to add ?

使用 INSTALL PLUGIN 语句安装的插件:

可以在运行时使用 INSTALL PLUGIN 语句加载位于插件库文件中的插件。该语句还在 mysql.plugin table 中注册插件,使服务器在随后的重新启动时加载它。因此,INSTALL PLUGIN 需要 mysql.plugin table.

的 INSERT 权限
mysql> INSTALL PLUGIN myplugin SONAME 'somepluglib.so';

正在卸载插件

在运行时,UNINSTALL PLUGIN 语句禁用并卸载服务器已知的插件。该语句卸载插件并将其从 mysql.plugin table 中删除(如果它已在此处注册)。因此,UNINSTALL PLUGIN 语句需要 mysql.plugin table 的 DELETE 权限。由于插件不再在 table 中注册,服务器将不会在后续重启时自动加载插件。