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

如何配置MySQL在主从切换时不丢失数据_启用半同步复制增强插件

秋墨君_9115

秋墨君_9115

发布时间:2026-06-07 10:46:38

|

377人浏览过

|

来源于php中文网

原创

半同步复制不能完全避免主从切换时的数据丢失,但能显著降低概率;需正确安装匹配版本的插件、主从分别启用对应参数、重启从库IO线程,并将rpl_semi_sync_master_wait_point设为AFTER_COMMIT以兼顾一致性与可见性。

如何配置mysql在主从切换时不丢失数据_启用半同步复制增强插件

半同步复制不能完全避免主从切换时的数据丢失,但能显著降低概率——前提是正确安装插件、启用参数,并确认 rpl_semi_sync_master_wait_point 设置合理。盲目开启 rpl_semi_sync_master_enabled=1 不等于数据不丢。

确认 MySQL 版本与插件文件是否存在

MySQL 5.5+ 才支持半同步,但 5.7+ 才默认带 semisync_master.so 和 semisync_slave.so;低于 5.7 需手动下载对应版本的 Google 官方插件(注意架构匹配:x86_64 vs aarch64)。常见错误是直接执行 INSTALL PLUGIN 报错 “Can’t open shared library”,本质就是插件文件缺失或路径不对。

检查方式:

mysql> SELECT @@version;
mysql> SHOW VARIABLES LIKE 'plugin_dir';

然后在系统中确认文件存在:

ls -l $(mysql -Nse "SELECT @@plugin_dir")/semisync_*.so
  • 若无输出,需先拷贝插件到该目录(如从 MySQL 官方 tar 包解压提取)
  • 插件名大小写敏感:semisync_master.so ≠ semisync_master.SO
  • MySQL 8.0.26+ 默认启用 group_replication,可能与半同步冲突,需先禁用或确认兼容性

主库和从库必须分别安装对应插件并动态启用

主库只装 rpl_semi_sync_master,从库只装 rpl_semi_sync_slave;装反或漏装会导致 Rpl_semi_sync_master_clients 始终为 0,看似开启实则未生效。

操作顺序必须严格:

MySQL
MySQL

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

下载
  • 主库执行:INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';,再 SET GLOBAL rpl_semi_sync_master_enabled = 1;
  • 从库执行:INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';,再 SET GLOBAL rpl_semi_sync_slave_enabled = 1;
  • 关键一步:从库必须重启 IO 线程才能激活插件响应能力:STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
  • 仅 START SLAVE 不够,因为 SQL 线程不参与半同步确认流程

调整 rpl_semi_sync_master_wait_point 避免幽灵事务

MySQL 5.7+ 默认值是 after_sync,主库在收到从库 relay log 写入 ACK 后才提交事务——这看似安全,但若主库在发 ACK 前崩溃,从库已有该事务而客户端未收到成功响应,故障切换后就出现“幽灵事务”(phantom transaction)。

更稳妥的选择是 after_commit:

  • 主库先在存储引擎层提交事务(其他会话可见),再等 ACK;即使主库宕机,从库回放后数据状态与主库一致
  • 设置命令:SET GLOBAL rpl_semi_sync_master_wait_point = 'AFTER_COMMIT';
  • 该参数必须在插件启用后设置,且只对后续事务生效
  • 注意:after_commit 下主库性能略低(因多一次等待),但数据一致性更强

验证是否真正进入半同步状态

别只看 rpl_semi_sync_master_enabled=ON,要查实时运行态指标:

mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

重点关注:

  • Rpl_semi_sync_master_status:必须为 ON(不是 OFF 或 TIMEOUT)
  • Rpl_semi_sync_master_clients:至少为 1,否则说明从库没连上或插件未激活
  • Rpl_semi_sync_master_no_times:该值持续增长,说明频繁超时降级,需检查网络延迟或 rpl_semi_sync_master_timeout 是否过小(建议设为 3000–5000ms)
  • Rpl_semi_sync_master_yes_tx 与 Rpl_semi_sync_master_no_tx 比值应远大于 1,否则大部分事务仍走异步

最容易被忽略的是:主库重启后,rpl_semi_sync_master_enabled 会重置为 OFF,除非你在 my.cnf 中显式配置了 rpl-semi-sync-master-enabled = 1 并重启 mysqld —— 动态 SET 只作用于当前会话生命周期。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

豆包大模型

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

UpDream
UpDream Hot

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

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

蛙蛙写作

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

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

WorkBuddy

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

DeepSeek

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

相关专题

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

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

2313

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中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

3212

2023.07.19

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

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

5468

2023.07.25

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

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

1199

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

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

5731

2023.08.11

mysql忘记密码
mysql忘记密码

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

5002

2023.08.14

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

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

精品课程

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

共1课时 | 189人学习

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

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