编程 MySQL 9.7 LTS 升级注意:innodb_log_writer_threads 默认值按 log_bin 与 CPU 数分档,两个旧变量被移除

2026-10-06 21:02:57

MySQL 9.7 LTS 升级注意:innodb_log_writer_threads 默认值按 log_bin 与 CPU 数分档,两个旧变量被移除

MySQL 9.7 LTS 是新的长期支持线,GA 日期为 2026-04-21。升级前需要重点核对两类变化:innodb_log_writer_threads 的默认值不再固定,而是按 log_bin 和可用逻辑 CPU 数判定;group_replication_allow_local_lower_version_join、replica_parallel_type 两个系统变量被移除。

innodb_log_writer_threads 的默认值规则

innodb_log_writer_threads 的默认值现在部分取决于二进制日志是否开启。判定规则如下:

log_bin可用逻辑 CPU 数默认值
ON>= 32ON
ON< 32OFF
OFF> 4ON
OFF<= 4OFF

拆开看就是四种组合:

  • log_bin=ON 且可用逻辑 CPU 数大于等于 32,默认 ON;
  • log_bin=ON 且可用逻辑 CPU 数小于 32,默认 OFF;
  • log_bin=OFF 且可用逻辑 CPU 数大于 4,默认 ON;
  • log_bin=OFF 且可用逻辑 CPU 数小于等于 4,默认 OFF。

边界值需要留意:开 binlog 时,CPU 数达到 32 才进入 ON;关 binlog 时,CPU 数必须大于 4,也就是 4 核仍是 OFF,5 核及以上才是 ON。

用户已经显式配置的值不受该改动影响。也就是说,如果 my.cnf 里明确写了 innodb_log_writer_threads,升级后仍按显式值运行;只有依赖默认值的实例才会按上述规则重新判定。

已移除变量的升级影响

9.7 移除了以下服务器系统/状态变量:

  • group_replication_allow_local_lower_version_join
  • replica_parallel_type

如果它们仍出现在配置文件中、启动脚本里,或者被监控采集、自动化运维脚本引用,升级后会出现未知变量错误。配置文件中的引用通常会导致 mysqld 启动失败;运行期查询或设置也会报 unknown system variable。

升级前建议先做一次配置扫描:

grep -R "group_replication_allow_local_lower_version_join\|replica_parallel_type" /etc/my.cnf /etc/my.cnf.d/ 2>/dev/null

确认后从配置中删除,不要保留注释以外的引用:

[mysqld]
# 9.7 已移除,升级前删除
# group_replication_allow_local_lower_version_join = ON
# replica_parallel_type = <旧值>

# 如需固定日志写线程行为,显式配置,避免依赖自动判定
innodb_log_writer_threads = ON

使用 Group Replication 的实例要特别检查第一个变量。它涉及低版本成员加入相关校验,升级前应确认滚动升级流程不再依赖它。

使用并行复制的实例则要检查 replica_parallel_type。升级到 9.7 后该变量不可用,配置文件中残留会导致启动阶段直接失败。管理脚本、巡检项和告警规则里如果还在查询它,也需要同步清理。

排查建议

升级前先确认当前实例的 log_bin 状态、CPU 数和 innodb_log_writer_threads 实际值:

SELECT @@version, @@log_bin, @@innodb_log_writer_threads;

CPU 数按可用逻辑 CPU 判断,可以在目标主机或容器内执行:

nproc

容器环境要注意 cgroup 限制,nproc 结果可能与宿主机总核数不同。判定使用的是可用逻辑 CPU 数,不是物理核数。

如果业务希望行为稳定,建议显式设置:

[mysqld]
innodb_log_writer_threads = ON

或者按需关闭:

[mysqld]
innodb_log_writer_threads = OFF

升级后如果发现日志写线程行为与预期不符,先查 log_bin 和 nproc,再确认 my.cnf 中是否有显式配置。显式值优先,默认值只在未配置时按规则计算。

其他默认值与认证变化

binlog_transaction_dependency_history_size 的默认值在 9.5.0 已从 25000 提高到 1000000,最大可设值从 1000000 提高到 10000000。升级后如果依赖旧默认值,需要重新评估内存与依赖跟踪行为。

SASL LDAP 认证的 SCRAM-SHA-1 自 9.5.0 起弃用,改用 SCRAM-SHA-256。后者现在是 authentication_ldap_sasl_auth_method_name 的默认值。使用 LDAP SASL 认证的环境应在升级前确认客户端和服务端都支持 SCRAM-SHA-256。

参考文档:

复制全文 生成海报 MySQL 9.7 InnoDB 升级

推荐文章

程序员茄子在线接单