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

如何配置MySQL 8.0的主从复制环境以实现数据库的高可用?

大晨姑娘_4373

大晨姑娘_4373

发布时间:2026-06-09 07:43:26

|

199人浏览过

|

来源于php中文网

原创

MySQL 8.0主从复制本身不提供高可用,必须结合自动切换机制(如MHA、Keepalived或MGR)才能实现故障时业务不中断;仅配置主从属手动容灾,非真正高可用。

如何配置mysql 8.0的主从复制环境以实现数据库的高可用?

MySQL 8.0 主从复制本身不等于高可用,它只是高可用的基础组件。真正实现“故障时业务不中断”,必须配合自动切换机制(如 MHA、Keepalived 或 MySQL Group Replication)。只配主从,主库一挂,你得手动改应用连接地址——这不是高可用,是手动容灾。


确认 GTID 已启用且 binlog_format = ROW

MySQL 8.0 默认开启 gtid_mode = ON 和 enforce_gtid_consistency = ON,但生产环境仍需验证,不能依赖“默认”。

  • 连上主库执行:

    SHOW VARIABLES LIKE 'gtid_mode';
    SHOW VARIABLES LIKE 'binlog_format';
  • 若 binlog_format 是 STATEMENT 或 MIXED,必须改回 ROW:
    binlog_format = ROW 是数据一致性的底线,否则像 NOW()、UUID() 等非确定性函数会导致主从不一致。

  • 修改 /etc/my.cnf 的 [mysqld] 段后,必须重启 mysqld 才生效;仅 SET GLOBAL 不持久,重启即丢。


创建复制账号时注意 plugin 兼容性

MySQL 8.0 默认用 caching_sha2_password,但很多中间件(如旧版 MyCat 1.6、部分监控工具、甚至某些 JDBC 驱动)不认它。

  • 创建账号时显式指定认证方式更稳妥:

    CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'ReplPass123!';
  • 授权后立即验证插件类型:

    SELECT user, host, plugin FROM mysql.user WHERE user = 'repl';
  • 如果看到 caching_sha2_password,而下游组件连不上,别折腾驱动,直接改:

    ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'ReplPass123!';

从库启动复制前必须校验 GTID 一致性

用 GTID 搭建从库时,CHANGE REPLICATION SOURCE TO(MySQL 8.0.23+ 新语法)不接受 MASTER_LOG_FILE/MASTER_LOG_POS,只认 SOURCE_AUTO_POSITION = 1。

  • 启动复制前务必确认:

    • 主库 SHOW MASTER STATUS 中的 Executed_Gtid_Set 非空
    • 从库 SELECT @@GLOBAL.gtid_executed; 返回值为空(全新从库)或与主库兼容(已有数据需 RESET SLAVE ALL 后再导入)
  • 常见错误现象:

    ERROR 3021 (HY000): This operation cannot be performed with a running slave io_thread
    出现这个,不是配置错,是忘了先停复制线程:
    STOP REPLICA;
  • 正确启动命令示例:

    CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.1.100', SOURCE_USER='repl', SOURCE_PASSWORD='ReplPass123!', SOURCE_AUTO_POSITION = 1;
    START REPLICA;

复制延迟和数据一致性不能只看 Seconds_Behind_Master

这个值为 0 只代表 SQL 线程追上了中继日志,不代表数据已真正一致。

  • 更可靠的检查方式:

    • 主库写一行带时间戳的测试记录,比如:
      INSERT INTO test_heartbeat(ts) VALUES (NOW(6));
    • 立即在从库查该行的 ts 值,对比是否偏差超过可容忍范围(如 > 500ms)
  • 半同步复制必须显式启用,否则仍是异步:

    • 主库装插件:
      INSTALL PLUGIN rpl_semi_sync_source SONAME 'semisync_source.so';
    • 从库装插件:
      INSTALL PLUGIN rpl_semi_sync_replica SONAME 'semisync_replica.so';
    • 开关参数:rpl_semi_sync_source_enabled = ON、rpl_semi_sync_replica_enabled = ON
  • 注意:半同步不保证“永远不丢数据”,只保证“至少一个从库落盘”。如果那个从库也同时宕机,照样丢。

真正的高可用不在复制本身,而在故障检测、选主逻辑、数据补齐、服务重定向这一整套闭环。主从配得再稳,没自动切换,就只是多存了一份冷备份。

热门AI工具

更多
PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

豆包大模型

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

WorkBuddy

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

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

DeepSeek

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

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

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

UP简历
UP简历 Hot

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

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 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中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

5691

2023.08.11

mysql忘记密码
mysql忘记密码

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

4962

2023.08.14

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

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

0

2026.10.21

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
mysql8主从复制原理底层详解
mysql8主从复制原理底层详解

共1课时 | 706人学习

PHP  发表评论功能实战教程
PHP 发表评论功能实战教程

共5课时 | 4.9万人学习

燕十八nginx精品视频教程
燕十八nginx精品视频教程

共23课时 | 8万人学习

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

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