复制版本兼容是什么
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.7 | 8.0 | 可行,官方支持的升级路径 |
| 8.0 | 8.0 | 可行,注意小版本行为变更 |
| 8.0 | 5.7 | 不支持,复制无法正常运行 |
| 5.7 | 5.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 与字符集:源端宽松模式写入的数据在从库严格模式下重放失败(如零日期、超长字符串),升级前应先在从库模拟重放验证。
先升主库是典型的错误顺序:旧从库无法消费新版本写入的格式与行为,链路立刻断裂,且此时既无法回退主库版本,也没有可用从库顶替。