disabled_storage_engines 在 MySQL 8.4 中有效,仅适用于 MyISAM、ARCHIVE 等存储引擎,需满足版本≥8.4.0、置于[mysqld]段、双引号包裹、重启生效,且不可禁用 InnoDB 等核心引擎。

disabled_storage_engines 在 MySQL 8.4 中是否有效?
有效,但仅限存储引擎类插件(如 MyISAM、ARCHIVE、FEDERATED、BLACKHOLE),且必须是 MySQL 8.0.19+ 或 8.4.x(8.4.0 及以上均支持)。SELECT VERSION(); 必须返回 8.4.0 或更高,否则会启动失败并报错 unknown variable 'disabled_storage_engines'。
该配置只在 [mysqld] 段生效,不能用 SET GLOBAL 动态设置。值必须是英文双引号包裹的字符串,逗号分隔,无空格:disabled_storage_engines = "MyISAM,ARCHIVE,FEDERATED"。写成单引号、漏引号、多空格,都会静默失效——mysqld 不报错,但实际不生效。
- 确认无依赖:先执行
SELECT table_schema, table_name, engine FROM information_schema.tables WHERE engine IN ('MyISAM', 'ARCHIVE');,结果为空才可安全禁用 - 注意绕过行为:执行
CREATE TABLE t2 AS SELECT * FROM t1时,若t1是MyISAM表,t2仍会被建为MyISAM,完全不校验disabled_storage_engines - 安全写法是显式指定引擎:
CREATE TABLE t2 ENGINE=InnoDB AS SELECT * FROM t1;
mysql_native_password 插件必须手动启用才能连旧客户端
MySQL 8.4 默认**不加载** mysql_native_password 插件,哪怕配置了 default_authentication_plugin=mysql_native_password 也无效——这个变量本身已在 8.4 中被移除。旧版 PHP、Navicat、Python MySQLdb 等直连会直接报错 Plugin caching_sha2_password could not be loaded 或连接拒绝,不是密码问题,是插件根本没加载。
必须在 [mysqld] 段中同时写两行:
mysql_native_password = ON authentication_policy = "caching_sha2_password,mysql_native_password"
注意:mysql_native_password=ON 是启用插件,authentication_policy 是声明可用策略顺序。改完必须重启 mysqld,mysqladmin reload 无效。
- 仅当业务确实依赖旧客户端时才启用;该插件将在 MySQL 9.0 彻底移除
- 若启用后仍连不上,检查客户端是否强制指定了
--default-auth=mysql_native_password - 不要写
default_authentication_plugin,8.4 解析失败会导致启动中断
plugin-load 类插件(如 mysqlx、validate_password)要靠注释禁用
disabled_storage_engines 对 mysqlx、validate_password、keyring_file 等非存储引擎插件完全无效。它们由 plugin-load 或 plugin-load-add 控制,必须手动注释掉对应行。
在 my.cnf 的 [mysqld] 段中找到类似:
# plugin-load = mysqlx.so # plugin-load-add = validate_password.so
注意:plugin-load 是覆盖式加载,plugin-load-add 是追加式;两者都得注释才真正禁用。某些插件(如 keyring_file)若已加载,还需提前删掉对应 key 文件,否则重启时可能因找不到 key 而失败。
- 禁用前先查当前状态:
SHOW PLUGINS;,重点关注ACTIVE但业务未使用的插件 - 禁用
mysqlx后,mysqlsh将无法通过 X Protocol 连接,但传统 TCP 连接不受影响 - 注释后必须重启,reload 不触发插件卸载
哪些插件绝对不能碰?
innodb、binlog、performance_schema 是核心功能,禁用等于让 MySQL 8.4 启动失败。尤其 innodb:8.4 的系统表(mysql.*、performance_schema.*)全部基于 InnoDB,写入 disabled_storage_engines = "InnoDB" 语法合法,但初始化阶段就会崩溃,日志里出现 Table 'mysql.user' doesn't exist 或更早的段错误。
validate_password 和 mysqlx 属于“可禁”,但 performance_schema 虽耗内存,禁用后会导致大量监控视图不可用(如 sys schema 失效),且部分复制/诊断功能异常,不建议关。
- 别信“skip-innodb”——8.4 已彻底移除该参数,写入即启动失败
- 如果
SHOW ENGINES里看到InnoDB显示为DISABLED,说明配置有误或版本不匹配,不是正常状态 - 升级前务必验证:临时注释掉所有
disabled_storage_engines和插件相关配置,确保能干净启动
启动慢真正卡点往往不在插件本身,而在 MyISAM 表扫描、keyring 初始化或 mysqlx 的 TLS handshake —— 但这些只有禁用后重启才暴露。配置写错、版本不匹配、路径没读到、重启没执行,这四件事比“禁什么”更容易导致失败。


















