mysql 5.5+默认内置innodb,不可用install plugin加载;仅tokudb等少数第三方引擎支持动态安装,且须匹配版本、路径、权限及严格语法。

MySQL 5.5 及以后版本中,InnoDB 已是默认内置引擎,**不能也不该再用 INSTALL PLUGIN 加载**;真正能通过该命令动态加载的第三方存储引擎(如 TokuDB、MyRocks、ColumnStore)必须满足严格前提——否则会报错 Plugin 'xxx' is not loaded 或直接启动失败。
确认目标引擎是否支持动态安装
不是所有存储引擎都允许运行时加载。MySQL 官方只对少数引擎提供 .so 形式的可插拔实现,且仅限特定分支:
-
TokuDB:仅 Percona Server 5.6/5.7 支持,MySQL 官方版不提供tokudb.so -
MyRocks:仅 Facebook/MariaDB 分支支持,MySQL 官方未集成ha_rocksdb.so -
ColumnStore:MariaDB 和 SingleStore 提供,非 MySQL 原生 -
InnoDB、MyISAM、Crypt等:全部硬编码进服务进程,INSTALL PLUGIN innodb SONAME 'ha_innodb.so'在 MySQL 5.5+ 中必然失败
检查 plugin_dir 路径与文件权限
即使你拿到了第三方引擎的 .so 文件,它也必须放在 MySQL 实际读取的插件目录里,且 MySQL 进程要有读取权限:
- 先执行
SHOW VARIABLES LIKE 'plugin_dir';查真实路径,别信文档里写的默认值 - 用
ls -l /path/to/plugin_dir/tokudb.so确认文件存在、属主是mysql用户、权限为0755或至少0644 - 若路径含空格或中文,MySQL 会静默忽略该文件——改用纯英文路径
- SELinux 或 AppArmor 启用时,
audit.log可能记录 “denied { read } for … comm="mysqld" name="tokudb.so",需手动放行
INSTALL PLUGIN 的实际可用语法与陷阱
语法看似简单,但参数名、大小写、扩展名必须完全匹配,且依赖引擎自身注册逻辑:
- 引擎名(第一个参数)是插件注册时声明的逻辑名,不一定是文件名:例如
tokudb.so对应的插件名是TokuDB,不是tokudb—— 大小写敏感 -
SONAME必须带扩展名:'tokudb.so'✅,'tokudb'❌(报错Can't open shared library) - 执行前需有
SUPER权限,普通用户即使有GRANT OPTION也无法执行 - 某些引擎(如早期 TokuDB)要求先设置全局变量:
SET GLOBAL tokudb_version='5.7.21-30',否则INSTALL PLUGIN会卡住无响应
验证是否真生效:别只看 SHOW PLUGINS
SHOW PLUGINS 显示 ACTIVE 不代表引擎可用。必须进一步验证:
- 执行
SHOW ENGINES;,确认目标引擎的SUPPORT列为YES或DEFAULT,而非NO或DISABLED - 建表测试:
CREATE TABLE t1 (id INT) ENGINE = TokuDB;—— 若报错Unknown storage engine 'TokuDB',说明加载失败 - 查
information_schema.PLUGINS表时,注意PLUGIN_TYPE应为STORAGE ENGINE,避免和审计类插件混淆 - MySQL 错误日志(
mysqld.err)里若有[ERROR] Plugin 'TokuDB' init function returned error,说明引擎初始化阶段崩溃,需查兼容性
最常被忽略的一点:第三方存储引擎往往绑定特定 MySQL 版本的 ABI,比如为 MySQL 5.7.32 编译的 tokudb.so 在 5.7.40 上大概率无法加载——别试图“差不多就行”。











