首页
学习
活动
专区
圈层
工具
发布

mysql 半同步配置

基础概念

MySQL半同步复制是一种保证数据一致性的机制。在半同步复制中,主库在提交事务之前会等待至少一个从库确认已经接收到并记录了该事务的二进制日志。这样可以确保在主库发生故障时,至少有一个从库拥有最新的数据,从而减少数据丢失的风险。

优势

  1. 数据一致性:相比异步复制,半同步复制能更好地保证数据的一致性。
  2. 故障恢复:在主库故障时,可以从至少一个同步的从库中恢复数据,减少数据丢失。
  3. 性能平衡:虽然引入了一定的延迟,但相比全同步复制,半同步复制对性能的影响较小。

类型

MySQL半同步复制主要有两种类型:

  1. after_commit:这是默认模式。在这种模式下,主库在提交事务后会等待从库确认。如果从库未确认,则主库会回滚事务。
  2. after_sync:在这种模式下,主库在提交事务并同步到磁盘后会等待从库确认。这种方式能更好地保证数据的一致性,但可能会引入更大的延迟。

应用场景

半同步复制适用于对数据一致性要求较高的场景,如金融交易、订单处理等。

配置步骤

以下是在MySQL中配置半同步复制的步骤:

  1. 安装插件:
代码语言:txt
复制
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
  1. 启用半同步复制:

在主库上启用半同步复制:

代码语言:txt
复制
SET GLOBAL rpl_semi_sync_master_enabled = 1;

在从库上启用半同步复制:

代码语言:txt
复制
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
  1. 调整超时设置:

可以调整半同步复制的超时时间,以避免过长的等待:

代码语言:txt
复制
SET GLOBAL rpl_semi_sync_master_timeout = 1000; -- 单位为毫秒

常见问题及解决方法

  1. 主库等待从库确认超时:

如果主库等待从库确认的时间过长,可能会导致事务延迟。可以通过调整rpl_semi_sync_master_timeout参数来解决。

  1. 从库未确认:

如果从库未及时确认,可能会导致主库事务回滚。可以检查从库的网络连接、磁盘I/O等性能瓶颈,并进行优化。

  1. 插件安装失败:

如果插件安装失败,可能是由于MySQL版本不兼容或插件文件路径错误。可以检查MySQL版本和插件文件路径,并重新安装。

参考链接

MySQL半同步复制官方文档

通过以上配置和优化,可以更好地利用MySQL半同步复制机制来保证数据的一致性和可靠性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL半同步的配置

如果备库一直没有回应已收到事件,主库会自动转化为异步复制模式,后期若发现从库恢复后,主从又会自动切换成半同步。 半同步必须在master和slave上都启用才能生效,否则还是按照异步复制模式进行的。...插件: semisync_master.so   【在主库上安装】 semisync_slave.so    【在从库上安装】 MySQL5.6 上安装方式: 假设目前主从关系已经配置好,下面开始开启半同步即可...: rpl_semi_sync_slave_enabled = ON 在初次加载插件后,mysql会自动将该插件记录到mysql.plugin表中,下次启动自动加载该插件。...因此不需要在配置文件里加上加载semisync的插件(但是配置文件里面还是要写上是否启用这个semi插件的)。...这是因为半同步复制环境中,master要等slave的确认消息,而上面我们模拟slave宕机了,半同步切换异步复制要等到超时时间结束才降级,这就导致commit变慢了。

1.7K20
  • mysql 半同步复制

    如果出现异常,没有收到ack,那么将自动降级为普通的复制,直到异常修复后又会自动变为半同步复制。 半同步复制具体特性: 从库会在连接到主库时告诉主库,它是不是配置了半同步。...如果在等待过程中,等待时间已经超过了配置的超时时间,没有任何一个从节点通知当前事务,那么此时主库会自动转换为异步复制,当至少一个半同步从节点赶上来时,主库便会自动转换为半同步方式的复制。...三、MySQL 5.6半同步复制配置 具体完整配置可参考:MySQL基于日志点做主从复制(二) Master配置 1)安装半同步模块并启动(此模块就在/usr/local/mysql/lib/plugin...rpl_semi_sync_master_timeout = 2000; Slave配置 1)安装半同步模块并启动 mysql> install plugin rpl_semi_sync_slave soname...MySQL 5.7半同步复制技术 sync_relay_log的配置 源码剖析 sql/rpl_slave.cc handle_slave_io 5764 ``if (queue_event(mi, event_buf

    2.8K31

    MySQL半同步复制

    要开启半同步,我们需要安装插件,基本的要求是在满足异步复制的情况下,版本在5.5以上,并且变量have_dynamic_loading为YES,即判断是否支持动态插件。 1....半同步插件部署 在base目录下,可以很容易找到所需的插件。当前的base目录为/usr,可以根据关键字找到插件。 # find . -name "semisync_master.so" ....半同步在MySQL 5.6、5.7的变化 MySQL 5.7中新增了一个参数来控制半同步模式下主库在返回给会话事务成功之前提交事务的方式,如下。...这两个参数该怎么理解,我们先来一个基本的半同步流程图,如下图所示。 ?...ACK后master才将commit OK结果反馈给客户端 而MySQL 5.7中的半同步复制,有个叫法是Loss-Less半同步复制。

    2.6K20

    MySQL半同步复制

    1、半同步复制简介   何为半同步复制模式呢?在此我们先了解异步复制模式,这是MySQL的默认复制选项。异步复制即是master数据库把binlog日志发送给slave数据库,然后就没有了然后了。...为了解决上面的问题,MySQL5.5引入一种叫做半同步复制模式。...6 7 #重启从服务器IO线程,手动将异步模式切换为半同步模式 8 9 mysql>STOP SLAVE IO_THREAD; 10 11 mysql>START SLAVE IO_THREAD...;   3.3、配置文件 1 rpl_semi_sync_master_enabled=1 #主库配置文件添加,表示以后启动MySQL将会自动开启半同步复制 2 3 rpl_semi_sync_slave_enabled...Rpl_semi_sync_master_status表示主服务器使用是异步还是半同步复制   Rpl_semi_sync_master_client表示从服务器有多少个配置成半同步复制   Rpl_semi_sync_master_yes_tx

    1.8K30

    MYSQL 半同步 (GDB查看)

    基础概念mysql默认是异步复制, 但是可以使用半同步插件(semisync_master.so和semisync_slave.so)来做半同步复制, 等待至少N个(rpl_semi_sync_master_wait_for_slave_count...当然超时(rpl_semi_sync_master_timeout默认10秒)后就变成异步了半同步有两种模式 AFTER_SYNC(默认) 和 AFTER_COMMIT 其实从名字就可以看出来: 前者是在...SYNC完成之后的阶段等待从库ACK, 后者是在commit阶段完成之后等待从库ACK写在前面本文主要是用GDB验证半同步等待ACK的阶段....感兴趣的自己去模拟.GDB的使用可以看前面的文章https://cloud.tencent.com/developer/article/2226040环境准备搭建半同步复制主从搭建(略)完成之后, 主从执行如下...=1;set global rpl_semi_sync_master_wait_point=AFTER_SYNC; -- 设置半同步模式为AFTER_SYNC/0stop slave; -- 从库执行即可

    3.5K31

    MySQL的半同步是什么?

    MySQL的主从复制 我们的一般在大规模的项目上,都是使用MySQL的复制功能来创建MySQL的主从集群的。主要是可以通过为服务器配置一个或多个备库的方式来进行数据同步。...上面我也说了,这种异步复制模式虽然效率高,但是数据丢失的风险很大,所以就有了后面要介绍的半同步复制模式。 半同步模式 MySQL从5.5版本开始通过以插件的形式开始支持半同步的主从复制模式。...当出现异常时,Slave没有ACK事务,那么将自动降级为异步复制,直到异常修复后再自动变为半同步复制 MySQL半同步复制的流程如下: ?...MySQL 5.7.2版本新增了一个参数来进行配置:rpl_semi_sync_master_wait_point,此参数有两个值可配置: AFTER_SYNC:参数值为AFTER_SYNC时,代表采用的是新的半同步复制方式...rpl_semi_sync_master_wait_for_slave_count -- 此值代表当前集群中的slave数量是否还能够满足当前配置的半同步复制模式,默认为ON,当不满足半同步复制模式后,

    1.4K00

    Mysql半同步复制模式说明及配置示例 - 运维小结

    半同步复制模式下,主从同步配置要是基于整个数据库的同步,而不要使用"binlog_do_db" 和"binlog_ingore_db"进行过滤库的同步配置,否则会造成半同步复制模式下的数据同步失败。...=120; 以上配置的mysql主从同步是针对kevin这个具体的库的,在后续半同步复制模式下,主从数据同步失败。...而且在这种情况下,删除半同步复制模式配置,恢复到异步同步模式,主从数据同步还是失败。...并且删除半同步复制模式配置,恢复到异步同步模式,主从数据同步一样正常。...如果业务数比较多的情况下,就使用mysql多实例方式进行同步,一个业务一个mysql实例,主从同步配置中不要进行过滤库或表的配置,即基于整个数据库同步。

    3.3K40

    MySQL 8 复制(二)——半同步复制

    于是在MySQL在5.5中就顺其自然地引入了半同步复制,可用作异步复制的替代方案,它具有以下特性: 从库在连接主库时表明它是否支持半同步复制。...当至少有一个半同步从库赶上时,主库恢复半同步复制。 必须在主库和从库都启用半同步复制,否则使用异步复制。 当主库阻塞(等待来自从库确认)时,它不会返回执行事务的会话。...图3 一主两从的半同步复制 使用这个功能,可以在不同机房部署主服务器和两个从服务器,并配置半同步复制以将事务复制到至少两个从库,以便在多个服务器一次性崩溃的情况下减少数据丢失的可能,从库越多...五、在MySQL 8上安装配置半同步复制 实验环境: 主机IP 172.16.1.125(主) 172.16.1.126(从)...至此,MySQL半同步复制搭建完毕。 3. 监控半同步复制 半同步复制功能的插件公开了几个状态变量,可以检查这些变量以确定其操作状态。这些变量仅当安装了半同步复制插件以后才可用。

    6.3K42

    异步、半同步、同步

    异步、半同步、同步 在软件开发中,编程模型的选择对于应用程序的性能和响应速度具有重要影响。异步、半同步和同步是常见的编程模型,本文将详细讲解它们的原理、案例以及Java中的具体实现。...半同步编程模型概述 半同步编程模型是一种介于同步和异步之间的编程方式。在半同步模型中,部分任务是同步执行的,即需要等待其他任务完成后才能继续执行;而另一部分任务是异步执行的,即不会阻塞程序的执行。...半同步编程的特点 部分同步,部分异步: 半同步编程模型中,部分任务是同步执行的,部分任务是异步执行的,可以根据具体需求灵活选择。...Java中的半同步编程 在Java中实现半同步编程的方式多种多样,可以结合使用同步锁、线程池、异步任务等技术。...应用场景:半同步编程在GUI开发中的应用 在GUI(图形用户界面)开发中,半同步编程模型经常被应用。

    2.5K10

    MySQL的异步复制、全同步复制与半同步复制

    今天主要聊一下MySQL的异步复制、全同步复制与半同步复制,目前我们生产库实际上用的就是异步复制了,后面再转成半同步复制。...于是在MySQL在5.5中就顺其自然地引入了半同步复制,主库在应答客户端提交的事务前需要保证至少一个从库接收并写到relay log中。...下图对应MySQL几种复制类型,分别是异步、半同步、全同步 image.png 二、异步复制(Asynchronous replication) 1....总之,mysql主从模式默认是异步复制的,而MySQL Cluster是同步复制的,只要设置为相应的模式即是在使用相应的同步策略。 从MySQL5.5开始,MySQL以插件的形式支持半同步复制。...其实说明半同步复制是更好的方式,兼顾了同步和性能的问题。

    10.9K44

    mysql复制系列4-半同步复制

    mysql复制包括异步复制和半同步复制: 异步复制:主库将事件写入二进制日志,但不知道从库是否接收成功,也不知道从库什么时候重放二进制日志,如果主库崩溃,则在主库提交的事务可能还没有传输到从库,这种情况下如果主从故障切换...mysql对复制进行了改进,引入了半同步复制,半同步复制是以插件的形式进行安装。...半同步复制,主库提交事务产生的二进制日志,需要至少被一个从库接收并写入relay log中等待ACK消息被主库成功接收之后主库才确认事务以提交。...mysql5.7增强半同步复制: rpl_semi_sync_master_wait_point的配置(控制半同步复制中在主库返回事务提交状态信息给客户端之前,等待从库ack消息的位点) after_sync...系统变量 rpl_semi_sync_master_enabled:控制是否在主库上启用半同步复制 rpl_semi_sync_slave_enabled:控制是否在从库上启用半同步复制 rpl_semi_sync_master_timeout

    1.2K41

    利用MySQL半同步打造无损切换平台

    MySQL半同步复制MySQL从5.5开始,用插件的形式支持半同步复制。MySQL复制默认是异步的。源将事件写入其二进制日志,副本在准备就绪时请求它们。...半同步复制介于异步复制和完全同步复制之间。源等待至少一个副本接收并记录事件(所需的副本数量是可配置的),然后提交事务。...与完全同步复制相比,半同步复制速度更快,因为它可以配置为平衡数据完整性要求(确认收到事务的副本数量,参数rpl_semi_sync_master_wait_for_slave_count控制)与提交速度...MySQL支持半同步复制后,使用半同步复制打造无损切换平台成为了可能。初看起来似乎实现比较简单,主机下挂载多个半同步备机,设置至少1个半同步备机接受到日志就提交事务。...发生主备切换的时候,会切换到优先级高的半同步备机,即先切同机房半同步备机,再切跨机房半同步备机(AZ1)MySQL参数设置:3个半同步备机至少有2台收到日志rpl_semi_sync_master_wait_for_slave_count

    1.1K10

    MySQL半同步(四)流程和相关参数

    数据结构和流程参考: MySQL:半同步(一)主库端初始化流程 https://www.jianshu.com/p/9437e9059697 MySQL:半同步(二)主库端回调函数 https://www.jianshu.com.../p/d55d6383434d MySQL:半同步(三)从库端初始化和回调函数 https://www.jianshu.com/p/9fecae89f82c 此处不再单独列出 一、半同步的总体流程图 ?...查看大图请移步 https://www.jianshu.com/p/5ebf4f4c1cf8 二、半同步中几个重要的状态值(主库) 半同步插件是否注册:半同步插件注册状态 ReplSemiSyncMaster...如果设置半同步开启状态,需要进行判断是否rpl_semi_sync_master_clients(现有存在的半同步从库数量)是否小于了pl_semi_sync_master_wait_for_slave_count...,并且此状态不会由于主库问题在运行期间改变,因此不能做判断半同步复制方式的根据,应该在主库判断。

    1.6K20

    MySQL 主从同步配置

    一主一从同步,传统方式指定文件和位置同步 假设有mysql_1、mysql_2 ,1为master,2为slave,配置如下: master 端的配置文件中加入: server-id=1 log-bin...,则这个值为0,如果没有开启执行同步,则这个值在MySQL8中是NULL MySQL 配置互为主备同步,使用gtid 模式同步 假设 我们目标是 mysql_1 和 mysql_3 互为主备 在mysql...,将同步过来的更新也写入binlog,这样其他的从库以此为主的话,可以获得更新 配置文件改好后,在sql终端执行命令开启同步: change master to master_host='mysql_3...最近是在看MyCat的分库分表怎么做,里面有配置DataNode节点可以配置WriteHost和ReadHost,用于区分读写分离时候用的Server,所以需要先实现从库同步主库的配置。...就研究了下,怎么简单的配置主从设置,其实这块有很多细节。再生产环境中配置的话,需要深入的理解同步的机制,在出现同步问题的时候需要能够快速的解决。

    3.6K10

    MySQL复制全解析 Part 3 MySQL半同步复制设置

    11.12.14.30 从库(半同步) repl Row-Based 上节我们介绍了如何一步步搭建MySQL复制 这节说如何启用半同步功能 1....半同步介绍 我们在Part 2中搭建的复制实际上是异步的复制,主库将二进制日志发送到从库后并不需要确认从库是否接受并应用,这时就可能会造成数据丢失 MySQL 从5.5版本后推出了半同步的功能,相当于Oracle...启用半同步 首先我们启用半同步插件 主库 mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1; 从库 mysql> SET GLOBAL rpl_semi_sync_slave_enabled...查看半同步状态 我们使用如下命令查看半同步是否正常工作 主库的master和从库的slave都需要为ON 主库 mysql> show status like 'Rpl_semi_sync_master_status...写入配置文件 接下来我们将命令写在配置文件中以使重启后自动启动 考虑到后面主从可能需要切换,这里在主从库上半同步的master和slave都设置为启动 主库和从库 plugin_dir = /usr/local

    1.5K31

    MYSQL 通过 python 监控半同步参数设置

    MYSQL 的半同步是MYSQL 复制的核心,通过半同步可以让MYSQL复制在一定的时间和状态下尽量两端的数据是一致的。...要监控半同步的情况,首选需要安装python connector for mysql , pip3 install mysql-connector-python 通过安装 mysql-connector-python...下面的PTYHON 是针对8.026 检查和打开半同步功能的程序 请配置一个远程的账号,在MYSQL 中以及对应的主机地址 程序会进行两次判断 1 如果MYSQL的版本不是8.026 及以上...,可以通过选择退出程序 2 如果半同步未打开,可以通过选择 直接打开当前主机的半同步功能 同时程序后面会针对关键的半同步参数进行展示和相关参数的说明 下图为程序运行结果 以下为相关的代码...') print('如上面有问题,程序将开启source 和 replica 半同步,同意请按 1 不同意请按 0') code = input("请输入1 或 0")

    1.5K10

    使用Docker快速体验MySQL半同步复制机制

    近期研究了下MySQL的半同步复制机制(可参考《使用MySQL半同步复制保障关键数据可靠性和一致性》),想要体验一下。搭建环境是件麻烦事,然后就想到用Docker快速搭建环境。 1....docker pull mysql 默认拉取的是latest版本,也可指定具体版本,如: docker pull mysql:5.7 但需要注意的是,半同步复制是从5.5版本开始支持的,所以最低需要5.5...搭建一主两备DB 2.1 配置DB MySQL官方Image提供的my.cnf只包含基本配置,假如有自己定制的DB配置,可以放到/etc/mysql/conf.d目录下,这个目录下后缀为.cnf文件内的配置...半同步复制可以在启动DB后安装semisync_master.so,这里在配置文件中加上,启动DB时自动加载。...rpl_semi_sync_master_enabled=1启用半同步复制的主DB角色功能。体验时设置半同步复制超时时间rpl_semi_sync_master_timeout为1秒。

    3.6K183
    领券