mysql 数据库同步复制_mysql数据库半同步复制

mysql数据库半同步复制

目录

1.数据库配置

1.1.半同步复制的概念:

1.当Slave主机连接到Master时,能够查看其是否处于半同步复制的机制。

2.当Master上开启半同步复制的功能时,至少应该有一个Slave开启其功能。此时,一个线程在Master上提交事务将受到阻塞,直到得知一个已开启半同步复制功能的Slave已收到此事务的所有事件,或等待超时。

3.当一个事务的事件都已写入其relay-log中且已刷新到磁盘上,Slave才会告知已收到。

4.如果等待超时,也就是Master没被告知已收到,此时Master会自动转换为异步复制的机制。当至少一个半同步的Slave赶上了,Master与其Slave自动转换为半同步复制的机制。

5.半同步复制的功能要在Master,Slave都开启,半同步复制才会起作用;否则,只开启一边,它依然为异步复制。

1.2.半同步说明

在一主多从的场景中,主服务器会以同步的方式,只等待一台从服务器复制完成并返回成功信息后才停止等待过程,但是在超时后会自动降级为异步模式。

1.3.同步,异步,半同步复制的比较:

同步复制:Master提交事务,直到事务在所有的Slave都已提交,此时才会返回客户端,事务执行完毕。缺点:完成一个事务可能会有很大的延迟。

异步复制:当Slave准备好才会向Master请求binlog。缺点:不能保证一些事件都能够被所有的Slave所接收。

半同步复制:半同步复制工作的机制处于同步和异步之间,Master的事务提交阻塞,只要一个Slave已收到该事务的事件且已记录。它不会等待所有的Slave都告知已收到,且它只是接收,并不用等其完全执行且提交。

1.4.配置

环境:主从同步master1   slave2

Master ip172.16.1.41   slave2 ip :172.16.1.43

查看数据库是否支持半同步,YES代表支持。

mysql> show global variables like'have_dynamic%';

+----------------------+-------+

| Variable_name        | Value |

+----------------------+-------+

| have_dynamic_loading | YES   |

+----------------------+-------+

1 row in set (0.00 sec)

在主从复制的基础上,只需执行如下操作即可。

# On Master

mysql> INSTALL PLUGINrpl_semi_sync_master SONAME 'semisync_master.so';#插件

mysql> SET GLOBALrpl_semi_sync_master_enabled = 1;   #启动模块

mysql> SET GLOBALrpl_semi_sync_master_timeout = 1000; #设置超时时间

# On Slave

mysql> INSTALL PLUGINrpl_semi_sync_slave SONAME 'semisync_slave.so'; #插件

mysql> SET GLOBALrpl_semi_sync_slave_enabled = 1;   #启动模块

mysql> STOP SLAVE IO_THREAD; START SLAVEIO_THREAD;  #重启进程使其模块生效

2.配置文件配置

如果需要开机时,自动能够实现半同步则需要在Master和Slave的my.cnf中编辑:

# On Master

[mysqld]

rpl_semi_sync_master_enabled=1     #启动模块

rpl_semi_sync_master_timeout=1000  #此单位是毫秒

# On Slave

[mysqld]

rpl_semi_sync_slave_enabled=1

配置完后需要重启服务

3.查看是否成功

查看从服务器上的semi_sync是否开启:

mysql> SHOW GLOBAL STATUS LIKE "rpl_semi%";

+----------------------------+-------+

| Variable_name              | Value |

+----------------------------+-------+

| Rpl_semi_sync_slave_status | ON    |

+----------------------------+-------+

1 row in set (0.00 sec)

查看主服务器上的semi_sync是否开启,注意clients变为1,证明主从半同步复制连接成功:

2778a7a67e903ab757b4aa5462c4ca9e.png

Rpl_semi_sync_master_no_tx:查看有多少事务没有用半同步复制的机制进行复制。

Rpl_semi_sync_master_yes_tx:查看有多少事务是通过半同步复制机制成功复制。

rpl_semi_sync_master_timeout:是控制Master等待多长时间被告知Slave已收到,超时时间。

4、证明实践

将超时时间改为0;再测试,这个时候写入库,看看半同步了多少事务,看那些没同步,查看效果,进行比较。

在master1主库上测试:172.16.1.41

mysql> SETGLOBAL rpl_semi_sync_master_timeout = 0;

Query OK, 0 rowsaffected (0.00 sec)

设置到1000毫秒再试

mysql> SETGLOBAL rpl_semi_sync_master_timeout = 1000;

Query OK, 0 rowsaffected (0.00 sec)

mysql>  SHOW GLOBAL STATUS LIKE 'rpl_semi%';

5、网友的半同步数据库复制

由于Mysql的复制都是基于异步进行的,在特殊情况下不能保证数据的成功复制,因此在mysql5.5之后使用了来自google补丁,可以将Mysql的复制实现半同步模式。所以需要为主服务器加载对应的插件。在Mysql的安装目录下的lib/plugin/目录中具有对应的插件semisync_master.so,semisync_slave.so,其中semisync_master.so是主服务器上的插件,而semisync_slave.so则是从服务器上的插件。

1、在主服务器的mysql服务器上执行如下命令

mysql>install pluginrpl_semi_sync_master soname 'semisync_master.so';  安装模块

mysql>set global rpl_semi_sync_master_enabled = 1; 启用半同步复制主节点

mysql>set global rpl_semi_sync_master_timeout = 1000; 超时时间

mysql> show variables like '%semi%';   查看设置是否成功

6cc50eefbd886984d1b4ecdb3385e0bb.png

2、在从服务器的mysql服务器上执行如下命令

mysql>install pluginrpl_semi_sync_slave soname 'semisync_slave.so';  安装模块

mysql>set global rpl_semi_sync_slave_enabled = 1;  启用半同步复制从节点

mysql>stop slave io_thread;

mysql>start slave io_thread;

mysql> show variables like '%semi%'; 查看设置是否成功

75d48f31276f0490d2d2daf750eeae9d.png

3、验证半同步复制是否生效

在主服务器上执行如下命令

mysql> show global status like 'rpl_semi%';

9e7c9459cd1d68c8283802928af54b90.png

4、在主服务器上创建数据库

mysql>use magedudb;

mysql> create table tb1 (id int);

a876cf96dcb5ad37e82457daf3aff7e9.png

将slave服务器端的IO停掉

mysql>stop slave;

此时再在主服务器上创建表

ed1761da0865984ed30e2a8f6afd5dec.png

若第一次连接超时,第二次会自动降级为异步复制

5、上面的设置重启服务后会失效的,为了可以在开机时它还生效,就需要在主配置文件中修改了,在Master和Slave的my.cnf配置文件中编辑

Master:

vim/etc/my.cnf

[mysqld]   rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

Slave:

vim/etc/my.cnf

[mysqld]

rpl_semi_sync_slave_enabled=1

6、也可通过设置全局变量的方式来设置是否启动半同步插件:

Master:

mysql>set global rpl_semi_sync_master_enabled=1

取消加载插件

mysql>uninstall plugin rpl_semi_sync_master;

Slave:

mysql>set global rpl_semi_sync_slave_enabled = 1;

mysql>uninstall plugin rpl_semi_sync_slave;

上面就是半同步复制的过程以下是原文出处博客

http://www.xcoder.cn/html/Database/mysql/2013/0520/7521.html

企业级Mysql数据库复制——基于position、GTID的主从复制半同步复制,全同步(组)复制 1.Mysql是什么? Mysql是一个关系型 阅读详情

相关推荐

MYSQL 数据库半同步复制操作过程

半同步复制,是最佳安全性与最佳性能之间的一个最佳选择

weixin_46008057的博客 1217

MySQL - Show Global Status 整理

原文来源:MySQL 5.5 Reference Manual 部分翻译取自:《MySQL_5.1中文参考手册》 转载请注明原文链接http://www.cnblogs.com/lenagt/archive/2012/06/06/2538240.html谢谢。 -----------------------------------------------------------------...

weixin_30472035的博客 421

别再只看pLDDT了!AlphaFold预测结果解读保姆级指南:pLDDT、PAE、pTM、ipTM到底怎么看?

本文详细解析了AlphaFold预测结果中的关键指标pLDDT、PAE、pTM和ipTM,帮助用户从单一依赖pLDDT进阶到全面理解蛋白质结构预测。通过实际案例和技巧,指导如何正确解读这些指标,避免常见错误,并提供了从预测到发表的实用建议。

weixin_29100399的博客 300

mysql复制_MySQL半同步复制

1mysql>installpluginrpl_semi_sync_mastersoname‘semisync_master.so‘;23mysql>showplugins;#查看是否加载成功45mysql>SETGLOBALrpl_semi_sync_master_enabled=1;#开启半同步复制,默认是关闭的192.168.95.12...

weixin_30949673的博客 210

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

年后在进行腾讯二面的时候,写完算法的后问的第一个问题就是,MySQL的半同步是什么?我当时直接懵了,我以为是问的MySQL的两阶段提交的问题呢?结果确认了一下后不是两阶段提交,然后面试官看我连问的是啥都不知道,就直接跳过这个问题,直接聊下一个问题了。所以这次总结一下这部分的知识内容,文字内容比较多,可能会有些枯燥,但对于这方面感兴趣的人来说还是比较有意思的。

jnrjian的博客 1421

mysql系列(四)异步复制、全同步复制半同步复制

这里虽然说的是Mysql数据库,但对应其他数据库,原理没有什么差异。只是在具体实现和配置上不同。 一、异步复制(Asynchronous replication) 1、逻辑上 MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从库上,如果此时,强...

xihuanyuye的博客 1万+

MYSQL数据库的主从复制半同步复制和组复制

一.数据库的主从复制 原理: 1.master节点上的binlogdump线程,在slave与其正常连接的情况下,将binlog发送到slave上。 2.slave节点上的I/O线程,通过读取master节点发送的内容,并将数据复制到本地的relaylog中。 3.slave节点上的SQL线程,读取relaylog中的日志,并将其事务在本地执行。 配置一主二从 1.server1是...

jay_youth的博客 2556

mariadb mysql同步_MySQL/MariaDB数据库半同步复制

MySQL/MariaDB数据库半同步复制作者:尹正杰版权声明:原创作品,谢绝转载!否则将追究法律责任。一.MySQL半同步复制概述1>.MySQL默认的异步复制默认情况下,MySQL复制功能是异步的,异步复制可以提供最佳的性能,主库把binlog日志发送给从库即结束,并不验证从库是否接收完毕。这意味着当主服务器或从服务器端发生故障时,有可能从服务器没有接收到主服务器发送过来的binlo...

weixin_39829501的博客 274

mysql 5.6 半同步复制_MySQL5.6 半同步复制,保证数据库一致性

MySQL5.6 半同步复制,保证数据库一致性,半同步复制需要使用插件,主从节点都需要安装插件。插件安装完之后 ,配置系统变量就可以启用和关闭半同步复制功能。1.半同步实施前提数据库版本为 5.5以上have_dynamic_loadingsystem variable 为 YES.复制已经正常运行。2.安装插件主节点INSTALLPLUGINrpl_semi_sync_masterSONAME'...

weixin_34404199的博客 211

Mysql数据库半同步复制

一、半同步复制的介绍 我们目前MySQL默认的复制模式是异步复制,主不关心从的数据到哪里了,主宕了,做切换,如果从落后太多,就会导致丢失的数据太多; 从5.5版本开始,MySQL引入了半同步复制; 简单理解:一个事务提交时,日志至少要保证有一个从接收到,那么它的提交才能继续; 异步复制可能会造成数据丢失 半同步复制就是为了解决数据丢失的问题 master做完一步等一步,需要等待至少一个slave节点完成复制之后才开始进行下一个操作; master做大事件的时候,需要进行半同步,master节点等待一个节点即

qq_46089299的博客 451

Linux运维之mysql数据库半同步复制

Linux运维之mysql数据库半同步复制mysql的几种复制模式 异步复制(Asynchronous replication) MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。...

weixin_44828950的博客 212

MYSQL数据库的主从复制,基于gtid的主从复制半同步复制和组复制

一.数据库的主从复制 原理: master端产生一个binlogdump线程,slave端产生I/O线程和SQL线程 1.master节点上的binlogdump线程,在slave与其正常连接的情况下,将binlog发送到slave上。 2.slave节点上的I/O线程,通过读取master节点发送的内容,并将数据复制到本地的relaylog中。 3.slave节点上的SQL线程,读取relay...

excellent_L的博客 410

mysql数据库异步_MySQL数据库的主从复制异步、半同步复制、主主复制环境搭建...

一、MySQL复制概述⑴、MySQL数据的复制的基本介绍目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费多久,不容乐观的未来,但是我们还是要能熟练掌握MySQL数据的架构和安全备份等功能,毕竟现在它还算是开源界的老大吧!MySQL数据库支持同步复制、单向、异步复制,在复制的过程中一个服务器充当主服务,而一个...

weixin_35090568的博客 204

MySQL - 异步复制半同步复制,增强半同步复制,组复制,全告诉你(最!清晰透彻,好文章!!)

1.什么是主从复制 主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库。 可以理解为,主数据库的数据的任何变化,从数据库都会跟着发生变化。 2.主从复制的作用 在从服务器可以执行查询工作,降低主服务器压力;(主库写,从库读,降压)读写分离 在从主服务器进行备份,避免备份期间影响主服务器服务;容灾 当主服务器出现问题时,可以切换到从服务器。提高可用性 3.主从复制的基本原理 步骤含义: SQL语句操作变化存入BinLog...

HD243608836的博客 3403

十二、 Mysql - 主从复制 - 半同步复制

在Master里面有数据改变的时候,数据会记录到二进制日志里面,然后load dump线程会通知slave机器上面的I/O线程来取二进制日志,然后将数据放到relay log(中继日志)里面 与异步复制不一样的地方在于,半同步复制会在数据成功存入relay log以后给Master发送一个ACK确认包,Master收到以后才会进行事务的提交,同时,slave也成功将数据读取,执行,达到数据一致性,如果Master没有收到ACK确认包的话,会等待slave 10 s的时间,如果没有收到的话,就会开启异步复.

qq_48391148的博客 1903

谈谈mysql——主从模式下的同步方式及半同步、MGR的部署方式

为了解决异步存在的问题,MySQL5.5版本推出半同步复制,在master执行完毕后,commit之前,slave的io进程开始把Binlog写入到relaylog中,写完之后,反馈给master,master收到任何一个slave的反馈后,执行commit并返回结果给客户端。因为需要等待所有的从库都执行完该事务才能返回,所以全同步复制的性能较差。这里讲一个小技巧,为了减少主从延迟的问题,主库和备库的硬件性能尽可能保持一致,如果主备硬件差距比较大,从主从延迟的角度上看,应该在性能更好的机器上面安装备库。

qq_39962403的博客 2208

数据库主从复制架构:异步复制 vs 半同步复制 vs 全同步复制

特性异步复制半同步复制同步复制数据一致性弱(可能丢失数据)中等(减少丢失风险)强(无数据丢失)写入延迟低(无需等待)中等(等待一个从节点)高(等待所有从节点)性能影响最小中等最大可用性高(故障切换快)高(部分节点故障可容忍)低(节点故障导致失败)适用场景容忍数据丢失的应用平衡可靠性与性能的应用强一致性要求的应用典型实现MySQL 异步复制MySQL 半同步复制PostgreSQL 同步复制

2501_93895004的博客 814

一文看懂MySQL的异步复制、全同步复制半同步复制

今天主要聊一下MySQL的异步复制、全同步复制半同步复制。一、异步复制(Asynchronous replication)1、逻辑上MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从库上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。2、...

AI天才研究院 1万+

深度探索MySQL主从复制原理

概要 MySQL Replication (MySQL 主从复制) 是什么? 为什么要主从复制以及它的实现原理是什么? MySQL 主从复制概念MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制数据库中的所有数据库或者...

Andy_Singh的博客 271

2025_NIPS_RAGRouter: Learning to Route Queries to Multiple Retrieval-Augmented Language Models

该研究聚焦检索增强生成(RAG)场景下的大语言模型(LLM)路由问题,提出了首个RAG感知的路由框架RAGRouter。核心解决现有路由方法依赖静态参数知识、忽略检索文档动态影响的缺陷,通过融合文档嵌入、RAG能力嵌入与对比学习,捕捉RAG引发的模型知识表征变化,为每个查询-文档对选择最优LLM。实验覆盖5个知识密集型任务、15个开源/闭源LLM,验证了RAGRouter在性能上超越最佳单LLM和非RAG感知路由方法,且通过阈值机制实现低延迟约束下的性能-效率平衡。

UnknownBody_2的博客 250

STM32F103C8T6 串口IAP Bootloader+上位机.zip

STM32F103C8T6 串口IAP的Bootloader 里面有上位机的使用说明,使用的是TCP协议,APP大小不受RAM限制,最大为44K,一键下载

上一篇: dataframe转化为list_【掘金使用技巧4】list[dict]类型数据的提取与储存
下一篇: mysql outfile禁用_Into outfile禁用情况下另类方法拿webshell
陈柏龄
博客等级 码龄10年 33粉丝 86原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值