编程 MySQL 9.7 弃用 FLUSH PRIVILEGES:多数脚本里它本来就多余,顺手把 Connection Control 换成组件

2026-11-12 21:06:19

MySQL 9.7 弃用 FLUSH PRIVILEGES,Connection Control 插件换成 component_connection_control

MySQL 9.7 有两处改动会直接影响日常运维脚本。一处是 FLUSH PRIVILEGES 及其相关入口进入弃用流程;另一处是 Connection Control 从插件改成组件,失败登录计数表从 information_schema 移到 performance_schema。

手册:
9.7.4 release notes:

FLUSH PRIVILEGES 变成 warning

WL #16567:FLUSH PRIVILEGES 语句已弃用,执行时产生 warning,未来版本会移除。

同一批进入弃用、且同样会刷出 warning 的还有:

  • FLUSH_PRIVILEGES 权限本身,以及对该权限的 grant;
  • mysqladmin flush-privileges;
  • mysqladmin reload。

下面几种方式不产生 warning,但同样视为弃用:

  • 通过 SIGHUP 刷新权限;
  • 通过 FLUSH PRIVILEGES 刷新 caching_sha2 缓存;
  • mysqladmin refresh。

Windows 上的 MySQL Configurator 已经不再执行这条语句(Bug #37170330)。

多数场景下它本来就是冗余的

GRANT、REVOKE、CREATE USER、DROP USER 这类账号语句会自行重载授权表,执行完立即生效,后面再跟一句 FLUSH PRIVILEGES 只是重复动作。真正需要它的只剩一种情况:绕过 SQL 层直接改 mysql.* 系统表(比如用 INSERT/UPDATE 修 mysql.user),此时才需要手动让 mysqld 重新读表。

因此升级后大量脚本会开始刷 warning 的原因,通常不是权限模型变了,而是这类防御性写法散落在各处:

  • 初始化和部署 SQL 里固定带一行 FLUSH PRIVILEGES;;
  • 容器 entrypoint、备份恢复脚本、Ansible/Puppet 的 mysql 模块调用 mysqladmin reload 或 flush-privileges;
  • 定时巡检脚本沿用旧模板。

最省事的处理是删掉相关行;如果必须保留一次重载动作,mysqladmin refresh 暂时不刷 warning,但同样在弃用清单里,不能当作长期方案。

Connection Control:插件换成组件

WL #16573 新增 component_connection_control 取代原有的 Connection Control 插件,两个插件均已弃用并将移除。组件合并了原来的两个插件,安装只需要一条语句:

INSTALL COMPONENT 'file://component_connection_control';

插件关联的 system/status 变量一并弃用,组件对应的变量名需按手册的 Connection Control Component Configuration 页重新核对,不能照抄旧配置。

失败登录计数表的位置也变了:information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS 弃用,组件把计数放在 performance_schema.connection_control_failed_login_attempts。

替换顺序与监控改法

  1. 先导出当前插件相关变量的取值,留作对照;
  2. UNINSTALL PLUGIN 卸载旧插件,避免插件与组件同时加载;
  3. INSTALL COMPONENT 'file://component_connection_control';
  4. 按组件配置页重写变量;
  5. 把监控和告警 SQL 改到 performance_schema;
  6. 用一次失败登录验证计数是否落到新表。

监控侧只需要改表名:

SELECT * FROM performance_schema.connection_control_failed_login_attempts;

示例中的 information_schema 旧表名在告警规则、Grafana 面板、采集脚本里往往各存一份,替换时按关键字全局搜一遍比按文档逐条改更可靠。

同批其他变化

Version Tokens 插件弃用(version_tokens_* 函数、VERSION_TOKEN_ADMIN 权限、version_tokens_session* 变量);SCRAM-SHA-1(SASL LDAP)自 9.5.0 起弃用,改用 SCRAM-SHA-256;9.7.2 弃用 group_replication_communication_stack 与 group_replication_ip_allowlist,并把 thread_pool_max_unused_threads 的取值改为默认 32、最小 0、最大 4096;9.7.4 引入四段式版本号 VERSION_WITH_UPDATE() / version_with_update / mysqld --version-with-update,旧接口保持三段式兼容。

时间线

9.7.4 LTS 于 2026-10-20 发布,同期还有 26.10 Innovation 和 8.4.13 LTS。

复制全文 生成海报 MySQL 数据库运维 权限管理 升级

推荐文章

程序员茄子在线接单