mysql 8.4 中被彻底删除的变量包括:binlog_transaction_dependency_tracking、group_replication_recovery_complete_at、avoid_temporal_upgrade、show_old_temporals、have_ssl、have_openssl,以及命令行选项--no-dd-upgrade、--old、--new、--language;这些变量已从源码移除,配置文件中出现会直接启动失败,set语句执行则报unknown system variable错误。

MySQL 8.4 直接报 Unknown system variable 错误,不是配置写错了,而是变量本身已被源码移除。 你看到的 binlog_transaction_dependency_tracking、group_replication_recovery_complete_at、show_old_temporals 这些变量,在 8.4 启动时解析配置或执行 SET 语句就会触发 ERROR 1238 (HY000): Variable 'xxx' is a read only variable 或更直接的 ERROR 1193 (HY000): Unknown system variable。这不是兼容性警告,是硬性删除。
哪些变量在 8.4 中被彻底删了?
官方明确从源码中移除,不再接受任何形式的设置(配置文件、SET GLOBAL、启动参数):
-
binlog_transaction_dependency_tracking:自 8.0.35 弃用,8.4 起完全消失;writeset 依赖已固化为服务端默认行为,无需配置 -
group_replication_recovery_complete_at:8.0.34 弃用,8.4 删除;恢复策略现在固定为TRANSACTIONS_APPLIED,不可调 -
avoid_temporal_upgrade和show_old_temporals:5.6 就弃用了,8.4 彻底清理,无替代项 -
--no-dd-upgrade:改用--upgrade=NONE;--old/--new、--language等命令行选项也一并删除 -
have_ssl、have_openssl:8.0.27 弃用,8.4 删除;改用--tls-version和--admin-tls-version
为什么删?删了之后怎么查是否还在用?
删除不是拍脑袋决定的。比如 binlog_transaction_dependency_tracking,它原本控制是否用 writeset 做事务依赖判断;但 8.4 中多线程复制已强制启用 writeset,变量失去存在意义。再如 show_old_temporals,MySQL 5.6 时代用于兼容旧时间类型显示逻辑,现在所有 temporal 类型行为已统一,留着纯属冗余。
实操建议:
- 升级前用
mysqld --validate-config扫描配置文件,它会直接标出哪一行含未知变量 - 检查应用初始化 SQL(尤其是连接池
connectionInitSql)、ORM 框架自动注入的SET语句,搜SET.*binlog_、SET.*group_replication这类关键词 - 登录后执行
SELECT VARIABLE_NAME FROM performance_schema.variables_info WHERE VARIABLE_NAME LIKE '%dependency%';,若返回空,说明该变量确实没了
配置文件里写了已删变量,会怎样?
MySQL 启动时解析 [mysqld] 段,遇到不认识的变量名,直接报错退出,日志里是 Unknown variable: xxx,不会跳过、不会警告、不会静默忽略。
常见错误操作:
- 只注释掉变量行(如
# binlog_transaction_dependency_tracking = writeset),但某些 MySQL 版本解析器仍会因注释符号位置异常而报错 - 把变量误放在
[client]或[mysql]段下——这些段只认客户端变量,binlog_*类根本不在其白名单里 - 拼写错误(如
binlog_transaction_dependecy_tracking少个n),也会被当未知变量处理
正确做法:整行删除,别留注释,别放错段落,重启前必跑 --validate-config。
最易被忽略的是:有些变量虽未被删,但行为已变(比如 innodb_adaptive_hash_index 默认值从 ON 变成 OFF),表面不报错,实际性能表现和预期不符。验证不能只看“有没有”,得查 SHOW VARIABLES LIKE 'xxx' 的实时值。











