linux--mysql(半同步复制)

本文深入探讨半同步复制机制,解析其在主从数据库系统中如何提高数据完整性和减少数据丢失风险。介绍了半同步复制的工作原理,包括在主服务器和从服务器上的配置步骤,以及在故障情况下的自动降级为异步复制机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主从同步可以同步多个数据库,也可以设置为一个数据库同步,如果设置一个数据库,在从服务器上其他数据可以写操作
半同步复制模式在主服务器和从服务器同时启用,否则主服务器默认使用异步复制模式

半同步复制:一主多从模式下,有一个从节点返回成功,即成功,不必等待多个节点全部返回

异步复制可能会造成数据丢失
半同步复制就是为了解决数据丢失的问题
master做完一步等一步,需要等待至少一个slave节点完成复制之后才开始进行下一个操作
master做大事件的时候,需要进行半同步,master节点等待一个节点即可
当半同步出现问题的时候会自动切换为异步同步
银行数据库全同步,master节点等待集群中的所有全部节点
数据库要避免慢查询问题,会造成延迟,占用数据库的IO
优点:提高了数据完整性,数据至少会存在两个节点(master节点和一个slave节点)
加了消息确认ACK,不会造成数据丢失
出现问题会自动降低为异步复制

基于gtid主从复制开启的情况下做本次实验

server1: master节点

安装插件

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

查看插件

SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME LIKE '%semi%';

在这里插入图片描述激活插件

SET GLOBAL rpl_semi_sync_master_enabled = 1;

在这里插入图片描述
查看主库的变量的值,可以查看到延迟时间(10000指10000毫秒,也就是10秒)

SHOW VARIABLES LIKE 'rpl_semi_sync%';   查看变量的值
SHOW STATUS LIKE 'Rpl_semi_sync%';  查看变量的状态

至少有一个slave接受到日志就提交
在这里插入图片描述
在这里插入图片描述

server2: slave节点

安装插件

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

查看插件

SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME LIKE '%semi%';

在这里插入图片描述
激活插件

从库重启io进程,激活插件之后必须要重启io进程,否则不会生效,如果重启不了的话就说明两端的数据不同步

SET GLOBAL rpl_semi_sync_slave_enabled = 1;
STOP SLAVE IO_THREAD;  关闭IO线程
START SLAVE IO_THREAD;   开启IO线程

在这里插入图片描述

SHOW VARIABLES LIKE 'rpl_semi_sync%';
SHOW STATUS LIKE 'Rpl_semi_sync%';

在这里插入图片描述

测试:

server2:

STOP SLAVE IO_THREAD;   关闭从库进行测试

在这里插入图片描述

server1:

写入数据

use westos
insert into usertb values ('user4','123');
等待10s,没有接收到slave的ack请求,自动转换为异步复制,需要等待一个节点完成所有的复制

在这里插入图片描述

有10秒的延迟,这是因为从库的io进程关闭了,不能及时的写入数据;主库等待10秒之后从库还没有起来,主库不再等待直接写入
等待完毕,10秒后直接写入

server2:

在这里插入图片描述

START SLAVE IO_THREAD;

在这里插入图片描述

server2:

STOP SLAVE IO_THREAD;

server1:
接收不到ack
等待10s 自动切换为异步复制
在这里插入图片描述

在这里插入图片描述

server2:

在这里插入图片描述

关闭server2上面的slave,然后在server1上面插入数据
sever1(master)等待10s发现server2(slave)没有发送ACK消息,自动变为异步同步,
然后在server2上把slave上面开启,会把之前的数据读过来
  • 也就是说只要从库的io进程恢复工作就会立即同步没有同步的数据
    半同步复制失败后会自动切换成异步复制,从库进程起来之后会检测主从库数据是否同步;若不同步,将会采用异步复制的方式同步数据
    将插件安装在数据库中是临时的,退出重新登陆会失效,永久的可以将配置写在配置文件中

还有一种情况:

server2:

STOP SLAVE IO_THREAD;

server1:

在第二步写入的时候已经转换位异步复制
在这里插入图片描述
server2:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值