mysql主从环境如何平滑升级到8.0版本_兼容性检测与滚动升级

夜墨同学_8191

夜墨同学_8191

2026-04-14

792人浏览

原创

不能直接原地升级主库,因mysql 8.0数据字典重构为innodb表(mysql.ibd),与5.7的myisam系统表不兼容,导致binlog事件、gtid行为及系统表结构突变,从库sql线程无法解析,引发同步中断、权限失效和gtid混乱。

mysql主从环境如何平滑升级到8.0版本_兼容性检测与滚动升级

主从环境不能直接原地升级主库,必须先切走流量、停写、再升级;否则从库同步会中断甚至数据错乱。

为什么不能对运行中的主库直接 in-place 升级

MySQL 8.0 的数据字典彻底重构为 InnoDB 表(mysql.ibd),与 5.7 的 MYISAM 系统表不兼容。主库升级后,binlog event 格式、GTID 行为、系统表结构都会突变,从库用 5.7 的 SQL 线程根本解析不了,常见报错:ERROR 1236 (HY000): Could not parse relay log event entry 或 Slave SQL thread retried transaction 后卡死。

即使强行启动,也会出现:

MySQL
MySQL

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

下载
  • 从库 SHOW SLAVE STATUS 中 Seconds_Behind_Master 持续增长,实际已不同步
  • 系统表(如 mysql.user)字段缺失或类型变更,导致权限失效
  • GTID 集合混乱,SELECT @@gtid_executed 在主从间不一致

滚动升级前必须做的三件事

不是“能不能升”,而是“有没有准备好升”。漏掉任意一项,后续回滚成本极高。

  • 用 mysqlsh 运行 util.checkForServerUpgrade(),重点看 utf8mb3 字符集、NO_AUTO_CREATE_USER(8.0 已移除)、MyISAM 系统表残留这三类 ERROR 级别问题
  • 确认所有业务连接字符串已适配:JDBC 必须用 mysql-connector-java:8.0.28+,且含 ?serverTimezone=UTC&allowPublicKeyRetrieval=true;PHP mysqli 扩展需 ≥ 8.0.0
  • 主从都执行 SET GLOBAL binlog_format = 'ROW' 并重启,确保升级期间 binlog 兼容性——5.7 默认 MIXED,8.0 对 STATEMENT 格式支持更弱

主从滚动升级实操顺序(无停机窗口场景)

核心逻辑:先升从,再切主,最后升旧主为新从。全程保持至少一个节点可读可写。

  • 停止从库 IO 线程:STOP SLAVE IO_THREAD;,等 Seconds_Behind_Master = 0
  • 将该从库停机,用 8.0 二进制替换,启动时加 --upgrade=FORCE 参数(强制升级系统表)
  • 启动后立即执行:ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'xxx';,避免认证插件不兼容导致主库连不上
  • 在主库上执行 CHANGE MASTER TO ... MASTER_HOST='new_80_slave_ip' ...,把它变成新主库的从库;验证 START SLAVE; 成功
  • 业务层切 DNS 或 VIP 到新主库,确认写入正常;旧主库降级为从库后,再按同样流程升级

升级后最容易被忽略的校验点

很多人跑完 START SLAVE 就以为完了,但以下几处不查,上线后必出问题:

  • 检查 SELECT @@default_authentication_plugin; 是否为 mysql_native_password(除非你确认所有客户端都支持 caching_sha2_password)
  • 对比主从的 SELECT COUNT(*) FROM mysql.innodb_table_stats;,8.0 新增了 7 张统计表,若数量不一致说明系统表升级失败
  • 执行 SELECT * FROM performance_schema.replication_applier_status_by_coordinator;,确认 APPLIER_STATUS 是 ACTIVE,不是 ERROR
  • 用 mysqldump --no-data --skip-triggers 导出一张业务表结构,比对主从输出是否完全一致——字符集、排序规则、自增起始值都可能悄悄变化

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

2023.06.20

2353

6

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

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

2023.06.21

1419

5

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

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

2023.07.18

835

5

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

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

2023.07.19

3292

5

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

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

2023.07.25

5608

4

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

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

2023.08.08

1219

3

sqlserver和mysql区别
sqlserver和mysql区别

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

2023.08.11

5871

4

mysql忘记密码
mysql忘记密码

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

2023.08.14

5102

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

6834

11

热门下载

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

精品课程

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

共1课时 | 190人学习