mysql零停机升级依赖主从切换而非原地升级,需确保版本间复制兼容(如5.7→8.0可行,反向不可),配合adminapi可自动化滚动升级,但须严控配置、时区、大小写策略及认证插件等隐性差异。
MySQL 主从切换实现零停机升级
MySQL 本身不支持原地热升级(比如从 5.7 直接升到 8.0),所谓“无停机时间升级”,本质是靠架构切换而非单实例就地升级。最成熟、可控的方式是构建主从复制拓扑,将新版本实例作为从库拉取旧版本主库的 binlog,待数据追平后执行角色切换。
关键前提是:新旧版本间必须满足 replication compatibility。例如:
- 5.7 → 8.0 支持(但需关闭
sql_mode中的NO_AUTO_CREATE_USER等已移除项) - 8.0 → 5.7 不支持(高版本 binlog event 类型低版本无法解析)
- 跨大版本时,
mysql_upgrade不可用于在线实例,只能在从库停写后执行(且仅限同版本升级场景)
使用 MySQL Shell 的 AdminAPI 自动化滚动升级
MySQL 8.0.19+ 内置的 AdminAPI(通过 mysqlsh)可管理 InnoDB Cluster,支持对集群节点逐个升级而不中断服务。它底层仍是主从切换逻辑,但封装了状态检查、故障隔离、自动重试等细节。
实操要点: