MySQL升级后报错Unknown system变量本质是旧配置项残留:query_cache_size、tx_isolation、validate_password_policy等在8.0中被移除或改名,需清理my.cnf中相关行,并升级JDBC驱动、修正SQL语法(如用transaction_isolation替代tx_isolation、SET NAMES 'utf8mb4'无等号)。

MySQL升级后报错Unknown system variable,本质是旧配置项残留
MySQL 5.7+ 和 8.0 彻底移除了多个系统变量,但宝塔或手动迁移时常常直接复用旧 my.cnf,导致 mysqld 启动失败。这不是权限或语法问题,而是配置文件里写了 MySQL 已经不认识的参数。
哪些变量在升级后必然报错
常见被移除的变量有:query_cache_size、query_cache_type、tx_isolation、validate_password_policy、NAMES(非变量,是语法)、character_set_name(拼写错误)等。其中前三个最常出现在配置文件或连接字符串中。
-
query_cache_size:MySQL 8.0 完全删除,5.7 已废弃;若my.cnf中仍保留该行,服务无法启动 -
tx_isolation:5.7.20+ 起改名为transaction_isolation;旧脚本或监控语句中写@@tx_isolation会直接报错ERROR 1193 -
validate_password_policy:8.0 中变量名改为validate_password.policy(点号分隔),且默认插件行为更严格;直接SET GLOBAL validate_password_policy = 0会失败
怎么快速定位并清理配置项
别靠猜,用命令直击问题源头:
- 先停掉 MySQL:
systemctl stop mysqld(宝塔用户可用面板停止按钮) - 检查当前生效的配置路径:
mysqld --help --verbose 2>/dev/null | grep "Default options" | head -1,确认是否读取了/etc/my.cnf或/www/server/mysql/etc/my.cnf - 打开对应配置文件,搜索以下关键词并整行删除:
query_cache、tx_isolation、validate_password、character_set_name - 特别注意注释行——有些用户把废弃参数用
#注释但仍保留,MySQL 8.0 会解析注释后的等号内容,导致误判
连接层报错也要同步处理驱动和语句
即使配置文件干净了,应用层仍可能报 Unknown system variable,因为 JDBC 驱动或 SQL 语句没适配:
- JDBC 连接必须升级驱动:5.1.x 系列不兼容 8.0,必须换
mysql-connector-java:8.0.33+或至少5.1.49 - 连接 URL 中删掉过时参数:如
&useSSL=true&userUnicode=true(应为useUnicode=true),&serverTimezone=...必须加上,否则可能触发其他变量解析异常 - SQL 里禁用
SET NAMES = 'utf8mb4'这类带等号的写法;正确是SET NAMES 'utf8mb4'(无等号,这是 MySQL 专用语法,不是变量赋值) - 查事务隔离级别别再用
SELECT @@tx_isolation,统一改成SELECT @@transaction_isolation
最容易被忽略的是:宝塔面板后台“数据库”页里点击“配置修改”弹出的编辑框,它默认加载的是旧版模板,保存时会把已删除的变量重新写回去。务必手工清空再保存,不要依赖面板自动生成。


















