编程 MySQL 9.7 移除了 mysql_native_password:先清配置里的三个变量,再改账号

2026-11-10 21:06:53

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-users
  • default_authentication_plugin 系统变量

从 MySQL 8.0 起,默认认证插件已经是 caching_sha2_password。因此升级到 9.7 的实际动作是:把配置文件里残留的上述变量去掉,并把仍在使用 mysql_native_password 的账号改用 caching_sha2_password 重新设置密码。

升级前检查清单

  1. 在 my.cnf、my.ini 及 include 的配置片段里搜索 mysql-native-password、mysql-native-password-proxy-users、default_authentication_plugin,删除或替换。留着会导致启动失败。
  2. 用 SELECT user,host,plugin FROM mysql.user 找出 plugin = 'mysql_native_password' 的账号。
  3. 对这些账号执行 ALTER USER ... IDENTIFIED WITH caching_sha2_password BY '...',并确认客户端驱动支持该插件。
  4. 确认客户端版本。老版本 MySQL 客户端、老版本连接器、第三方驱动都可能不带 CLIENT_PLUGIN_AUTH,升级服务端前先把它们升级。
  5. 确认应用侧 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 变更。

来源:MySQL 9.7 Release Notes — Deprecation and Removal Notes

复制全文 生成海报 MySQL 认证 升级 运维 caching_sha2_password

推荐文章

程序员茄子在线接单