MySQL 9.7 移除 mysql_native_password:升级前要改的配置、要重设的账号与排查语句
MySQL 9.7 的 Release Notes 里,mysql_native_password 正式从服务端移除。这个插件在 8.0 就被标记弃用,到 9.7 不再可用;连带被移除的还有一组服务端选项和系统变量。
服务端不再接受 mysql_native 认证
移除之后,服务端会拒绝来自旧客户端的 mysql_native 认证请求。这些旧客户端指不具备 CLIENT_PLUGIN_AUTH 能力的程序:它们不会在握手阶段声明插件,只会按老协议发起 native 认证。
客户端侧则保留了向后兼容:mysql_native_password 在客户端仍然可用,只是从内置插件改成了可动态加载的插件,需要时以插件方式加载。
同时被移除的服务端选项与变量:
--mysql-native-password--mysql-native-password-proxy-usersdefault_authentication_plugin系统变量
从 MySQL 8.0 起,默认认证插件已经是 caching_sha2_password。因此升级到 9.7 的实际动作是:把配置文件里残留的上述变量去掉,并把仍在使用 mysql_native_password 的账号改用 caching_sha2_password 重新设置密码。
升级前检查清单
- 在
my.cnf、my.ini及 include 的配置片段里搜索mysql-native-password、mysql-native-password-proxy-users、default_authentication_plugin,删除或替换。留着会导致启动失败。 - 用
SELECT user,host,plugin FROM mysql.user找出plugin = 'mysql_native_password'的账号。 - 对这些账号执行
ALTER USER ... IDENTIFIED WITH caching_sha2_password BY '...',并确认客户端驱动支持该插件。 - 确认客户端版本。老版本 MySQL 客户端、老版本连接器、第三方驱动都可能不带
CLIENT_PLUGIN_AUTH,升级服务端前先把它们升级。 - 确认应用侧 TLS 配置。
caching_sha2_password在非加密连接上首次认证需要 RSA 公钥交换,依赖--get-server-public-key或预先配置的公钥。
账号排查:
SELECT user, host, plugin
FROM mysql.user
WHERE plugin = 'mysql_native_password';
改账号:
ALTER USER 'app'@'%'
IDENTIFIED WITH caching_sha2_password BY 'new_password';
查看插件加载情况:
SHOW PLUGINS;
在 9.7 服务端上,这里不会再出现服务端的 mysql_native_password;客户端侧它以动态加载插件的形式存在。
确认客户端版本与能力:
mysql --version
典型失败场景有两类:一是旧客户端发起握手后,服务端拒绝 mysql_native 认证请求,连接直接失败;二是客户端连接时提示认证插件无法加载或不支持。遇到这类报错,先看客户端版本是否过旧,再看账号的 plugin 列是否仍指向被移除的插件。
同一版本里的另外三条变化
混合事务弃用警告。 MySQL 9.0.0 起,同时更新事务表与非事务表(或非 composable 表)的事务被弃用;9.7 中这类事务会向客户端和错误日志写入弃用警告。只有 InnoDB 与 BLACKHOLE 同时是事务且 composable 的引擎,因此不会触发警告的引擎组合仅为:InnoDB 与 BLACKHOLE、MyISAM 与 MERGE、performance_schema 与任意其它引擎、TempTable 与任意其它引擎。NDBCLUSTER 是事务引擎但不 composable。(WL #10495)
Performance Schema 列弃用。 variables_info 表的 MIN_VALUE、MAX_VALUE 列已弃用,后续版本会移除。应改用 variables_metadata 表同名的两列,信息一致。(WL #15585)
EVENT 语句可 PREPARE。 CREATE EVENT、ALTER EVENT、DROP EVENT 现在可以被 prepare。但这三条语句不支持位置参数(? 占位符),语句文本必须由字符串字面量、系统变量和用户变量拼接而成。
另外,9.7.4(2026-10-20)起 MySQL Server 支持 MAJOR.MINOR.PATCH.UPDATE 四段式版本标识,可通过 VERSION_WITH_UPDATE()、只读全局变量 version_with_update、mysqld --version-with-update 以及新的客户端库 API 获取。VERSION()、version、经典握手、数字版本号和既有 C API 仍保持三段式兼容语义;mysql_upgrade_history 记录精确的 update 变更。