MySQL 8.0作为重要的长期支持版本,在性能、安全性和功能层面做了大量升级,同时也移除了部分过时、冗余或者存在安全隐患的系统变量与配置选项,很多从5.7及以下版本升级的用户会因此遇到各类问题。

MySQL 8.0中被删除的常用选项和变量
已删除的配置选项
以下配置选项在MySQL 8.0中已被彻底移除,若配置文件中仍保留这些选项,会导致服务启动失败:
- innodb_locks_unsafe_for_binlog:该选项原本用于控制InnoDB的锁行为,存在数据一致性风险,8.0版本中完全移除,相关功能由事务隔离级别替代。
- log_warnings:原本用于控制警告日志的输出级别,8.0版本中被
log_error_verbosity替代,保留该选项会触发配置错误。 - sql_log_bin:该选项原本是会话级变量,8.0版本中调整为只读系统变量,无法再通过配置文件设置。
- sync_frm:原本用于控制.frm文件的同步行为,8.0版本中取消了.frm文件机制,该选项自然失效被删除。
已删除的系统变量
部分系统变量在8.0版本中被移除或者修改了作用范围:
| 变量名 | 原作用 | 移除原因 |
|---|---|---|
| innodb_stats_sample_pages | 控制InnoDB采样页面数量 | 被innodb_stats_transient_sample_pages替代,功能更细化 |
| query_cache_type | 控制查询缓存开关 | 查询缓存功能整体被移除,相关变量全部删除 |
| tx_isolation | 设置事务隔离级别 | 被transaction_isolation替代,命名更规范 |
| have_query_cache | 显示是否支持查询缓存 | 查询缓存功能移除,该变量无存在意义 |
如何排查升级后的兼容性问题
1. 预检查升级兼容性
MySQL官方提供了升级检查工具,可以在升级前扫描当前配置和变量使用情况,提前发现不兼容的内容:
# 使用mysql shell执行升级检查 mysqlsh -- util checkForServerUpgrade root@localhost:3306 --target-version=8.0 --output-format=JSON
该命令会输出所有不兼容的配置项、变量以及对应的修改建议,按照提示调整即可。
2. 启动阶段排查
如果升级后MySQL服务无法启动,可以查看错误日志定位问题:
# 查看MySQL错误日志,默认路径根据安装方式不同有所区别 tail -n 100 /var/log/mysql/error.log
若日志中出现unknown variable或者unknown option的提示,直接删除配置文件中对应的选项或变量即可。
3. 运行阶段排查
服务启动后,可以查询系统变量表确认是否有变量失效:
-- 查询所有已删除的变量,若返回空则说明无残留问题
SELECT * FROM performance_schema.variables_info
WHERE VARIABLE_SOURCE = 'COMPILED' AND VARIABLE_NAME IN ('query_cache_type', 'sync_frm');
如果业务中出现变量相关的报错,也可以通过SHOW VARIABLES LIKE '变量名'确认变量是否存在,不存在则需要根据官方文档替换为新的替代变量。
升级注意事项
在升级到MySQL 8.0之前,建议先备份原有配置文件,然后对照官方发布的版本变更说明,逐一核对配置项和系统变量。如果业务依赖被删除的变量功能,需要先评估替代方案的可行性,再执行升级操作,避免升级后业务功能异常。
注意:不要直接删除所有未知的配置项,部分配置项可能是自定义插件使用的,删除前需要确认是否和核心业务相关。