讲师中心 微信公众号
AI工具推荐 视频效率加速

生产环境MySQL跨版本主从复制升级步骤是什么

浅杰君_1000

浅杰君_1000

发布时间:2026-09-06 09:35:31

|

235人浏览过

|

来源于php中文网

原创

安全路径唯一:5.7主→8.0从,反向不可行;必须确认主库GTID状态并统一配置,主库设binlog_format=ROW+binlog_row_image=FULL,从库强制binlog_row_metadata=NONE、禁用binlog_transaction_compression,复制用户须显式指定mysql_native_password插件,初始同步必须用mysqldump逻辑备份并校验一致性。

生产环境mysql跨版本主从复制升级步骤是什么

跨版本主从复制升级在生产环境只有一条安全路径:5.7 主 → 8.0 从,反向绝对不可行。任何试图让 8.0 做主、5.7 做从的配置,启动 START REPLICA 就会失败,且无法修复。

确认主库是 5.7 且已开启 GTID(或明确关闭)

这是最常被跳过却直接导致复制卡死的环节。8.0 从库对 GTID 状态极其敏感,而 5.7 主库默认可能未启用 GTID(尤其老版本或未升级到 5.7.29+)。必须在主库和从库上分别执行:

SELECT @@gtid_mode, @@enforce_gtid_consistency, @@binlog_format, @@server_id;

若主库返回 gtid_mode=OFF,从库也必须设为 OFF,不能用 AUTO_POSITION=1;若主库已开 GTID,则需检查 SHOW MASTER STATUS 中的 Executed_Gtid_Set 是否与 binlog 文件范围一致——不一致时,优先在主库执行:SET GLOBAL enforce_gtid_consistency = OFF; → SET GLOBAL gtid_mode = OFF_PERMISSIVE; → SET GLOBAL gtid_mode = OFF;,再重启复制链路。

主库配 ROW + FULL,从库强制禁用 binlog_row_metadata

8.0 默认启用 binlog_row_metadata=FULL,它会在 row event 中插入表元数据哈希,5.7 主库完全不识别这个字段,但问题出在——8.0 从库自己生成的中继日志(relay log)也会带该字段,导致后续如果做级联复制或故障切换,下游解析直接报 Unknown binlog event type。

所以必须显式干预:

  • 主库(5.7)确保:binlog_format=ROW 且 binlog_row_image=FULL(避免部分更新引发列偏移)
  • 从库(8.0)配置文件中必须写:binlog_row_metadata=NONE(不能依赖默认值)
  • 验证命令:SELECT @@binlog_row_image, @@binlog_row_metadata; —— 主库应为 FULL/FULL,从库应为 FULL/NONE

另外注意:8.0.33+ 默认开启 binlog_transaction_compression,若主库没开压缩而从库开了,IO_THREAD 会静默失败,务必在从库关掉:binlog_transaction_compression=OFF。

创建复制用户时必须指定 mysql_native_password

MySQL 8.0 默认认证插件是 caching_sha2_password,而旧版 JDBC/ODBC 驱动(尤其未更新到 8.0-compatible 版本的)连接时会卡在 AUTH 或报 Access denied for user。这不是权限问题,是协议握手失败。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载

解决方式只有一种:主库上创建用户时显式指定旧插件:

CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';

切记不要用 ALTER USER 'repl'@'%' IDENTIFIED BY 'xxx'; —— 它默认沿用当前用户的 plugin,很可能悄悄把认证方式切回 caching_sha2_password,导致某天凌晨突然断连。

同步前必须做逻辑备份并校验 checksum

物理备份(如 xtrabackup)在跨版本场景下风险极高:8.0 的数据字典格式与 5.7 不兼容,直接拷贝 .ibd 文件大概率启动失败。唯一稳妥路径是 mysqldump 导出 + 导入。

但 dump 本身不保证一致性,必须加关键参数:

  • --single-transaction(确保 InnoDB 表一致性)
  • --routines --triggers --events(导出存储过程、触发器、事件)
  • --master-data=2(嵌入 CHANGE MASTER TO 所需的 binlog 位置)

导入后,别急着启复制。先在主从两端跑一遍 SELECT COUNT(*) FROM table_name; 对比关键表行数,再用 pt-table-checksum(Percona Toolkit)做逐行校验——很多“看起来同步了”的实例,其实早就在某次大事务后开始丢数据,只是没暴露。

真正麻烦的从来不是配置命令是否敲对,而是那些没报错却持续静默偏移的数据不一致。上线前多花十分钟校验,比半夜翻 error.log 强十倍。

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2293

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

1399

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

835

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3192

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

5408

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

1199

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5671

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

4942

2023.08.14

Playwright 测试失败怎么办
Playwright 测试失败怎么办

Playwright测试失败专题汇集超时、定位器匹配、浏览器提前关闭、依赖与插件配置、文件上传、SSL及Docker启动等故障文章,并介绍通过截图、报告和Trace定位错误。

0

2026.10.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 188人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn