贝利信息

mysql版本升级中的配置文件与参数兼容性调整

日期:2026-01-17 00:00 / 作者:P粉602998670
MySQL 5.7 升级到 8.0 后需重点处理 sql_mode 报错、认证插件变更、废弃参数忽略、系统表升级及权限校验:sql_mode 中 NO_AUTO_CREATE_USER 已移除,须用兼容集;默认认证改为 caching_sha2_password,旧客户端需指定 mysql_native_password;query_cache 相关参数被静默忽略;必须执行 mysqld --upgrade=FORCE 更新系统表;root 默认丢失 FILE 权限。

MySQL 5.7 升级到 8.0 后 sql_mode 报错:Unknown system variable 'sql_mode'

这不是配置文件写错了,而是 MySQL 8.0 默认禁用了旧版兼容模式,且 sql_mode 变量本身在某些启动场景下不可直接查询(尤其使用 --skip-grant-tables 或初始化阶段)。更关键的是,8.0 中部分模式如 NO_AUTO_CREATE_USER 已被移除。

升级后 mysql_native_password 认证插件失效,客户端连不上

MySQL 8.0 默认改用 caching_sha2_password 插件,而老版本客户端(如 MySQL 5.7 客户端、部分 Python MySQLdb 驱动、旧版 Navicat)不支持该插件,连接时抛出 Client does not support authentication protocol requested by server

my.cnf 中被忽略或行为变更的关键参数

不少参数在 8.0 中被

移除、重命名或语义变化,即使保留在配置文件中也不会报错,但实际不生效或触发意外行为。

升级脚本中容易漏掉的权限与系统表校验步骤

单纯替换二进制、拷贝配置、重启服务,大概率导致后续权限异常或 INFORMATION_SCHEMA 查询异常——因为 8.0 的系统表结构和权限模型有实质变化(如新增 password_history 表、role_edges 视图)。

mysqld --defaults-file=/etc/my.cnf --upgrade=FORCE --user=mysql
升级最麻烦的不是参数改写,而是那些没报错却悄悄失效的配置——比如你以为 query_cache_size=0 还在起作用,其实它早就不认识这个指令了。