首页/数据/数据库速查/复制版本兼容规则
主从复制与高可用53 条

复制版本兼容规则

复制方向有硬约束:从库版本必须 ≥ 源端(5.7 → 8.0 可行;8.0 → 5.7 不可行);升级顺序先升从库后升主库,保持复制可回退。

数据库速查数据更新于 2026-10-13

复制版本兼容是什么

MySQL 复制有明确的版本方向约束:从库版本必须不低于源端(5.7 主 → 8.0 从可行;8.0 主 → 5.7 从不可行)。这条规则决定了升级顺序——先升从库、再切换主库、最后升旧主,整个过程中复制链路始终可回退。跨版本复制还要注意字符集默认值、认证插件(caching_sha2_password)、sql_mode 与保留字变化带来的行为差异。

基本信息

兼容方向从库版本 ≥ 源端版本
可行路径5.7 → 8.0,8.0 → 8.0(注意小版本行为变更)
不可行路径8.0 → 5.7,复制无法正常运行
升级顺序先升从库 → 切换主 → 再升其余节点与旧主
兼容检查mysqlsh -- util.check-for-server-upgrade、mysqlcheck --check-upgrade
关注差异字符集默认值、认证插件、sql_mode、保留字与弃用语法

典型使用场景

  • 制定大版本升级方案时的顺序设计
  • 新从库加入时的版本校验,避免方向写反
  • 跨版本搭建临时复制做数据验证
  • 灾备实例版本评估:灾备库版本不应低于主库
  • 升级回归测试范围确定:按已知差异项逐条验证

兼容矩阵

源端从库结论
5.78.0可行,官方支持的升级路径
8.08.0可行,注意小版本行为变更
8.05.7不支持,复制无法正常运行
5.75.7可行,小版本差异仍需核对

升级前的兼容检查

升级前的兼容检查
# MySQL Shell 官方升级检查器(连接待升级实例)
mysqlsh -- util check-for-server-upgrade root@localhost:3306 \
  --output-format=text --config-path=/tmp/upgrade_check

# 客户端侧的兼容检查
mysqlcheck -uroot -p --all-databases --check-upgrade

# 确认当前复制方向与版本
mysql -e "SELECT VERSION();"
mysql -e "SHOW REPLICA STATUS\G" | grep -E 'Source_Host|Source_UUID|Replicate_Do'

滚动升级顺序

滚动升级顺序
# 1) 先升级一台从库到 8.0,观察重放是否报错、延迟是否正常
# 2) 计划内 switchover:把主库切到该从库(走切换清单)
# 3) 依序升级其余从库,最后升级旧主并让它作为从库挂回
# 4) 每步之后都要验证:复制状态、延迟、应用关键查询结果
# 5) 保留一份回退方案:物理备份 + 旧版本二进制 + 配置快照
跨版本复制最常见的报错来自 sql_mode 与字符集:源端宽松模式写入的数据在从库严格模式下重放失败(如零日期、超长字符串),升级前应先在从库模拟重放验证。
先升主库是典型的错误顺序:旧从库无法消费新版本写入的格式与行为,链路立刻断裂,且此时既无法回退主库版本,也没有可用从库顶替。

易错点

  • 升级顺序写反(先升主库):复制链路断裂,回退与切换都失去余地
  • 忽略 sql_mode 差异:从库重放报错或静默截断,主从数据出现偏差
  • 认证插件变化未同步客户端:8.0 默认 caching_sha2_password,老客户端连不上,表现为升级后账号全部失效
  • 小版本升级不做行为变更核对:默认参数变化导致执行计划或复制行为悄悄改变
  • 升级完成就删掉旧版本二进制与备份:出现问题时无路可退

数据来源与参考

  • MySQL 8.0 Reference Manual: Replication Compatibility
  • MySQL Shell: util.checkForServerUpgrade

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌