mysql数据库半同步复制

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

mysql数据库半同步复制

目录

mysql半同步复制............................................................................................................ 1

目录......................................................................................................................... 1

1.数据库配置........................................................................................................... 1

2.配置文件配置........................................................................................................ 1

3.查看是否成功........................................................................................................ 2

4.证明:................................................................................................................... 3


1.数据库配置

1.1.半同步复制的概念:

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

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

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

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

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

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.配置文件配置

如果需要开机时,自动能够实现半同步则需要在MasterSlavemy.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 变为,证明主从半同步复制连接成功:

           

wKiom1k793Pi3trnAAFy3quzj18513.jpg-wh_50

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.sosemisync_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%';   查看设置是否成功

 

wKiom1k79-7ie7yYAABaojW9UcU537.jpg-wh_50

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%'; 查看设置是否成功

 

wKioL1k7-KHDIVaNAABAcEP9nmE597.jpg-wh_50

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

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

mysql> show global status like 'rpl_semi%';

 

wKioL1k7-QWT9KOSAACLFRCEhcU036.jpg-wh_50

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

mysql>use magedudb;

mysql> create table tb1 (id int);

   

wKiom1k7-a7CPpS-AAA03yySqqU834.jpg-wh_50

slave服务器端的IO停掉

mysql>stop slave;

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

  

wKioL1k8ADXQ20ttAAAfLqlAoKE358.jpg-wh_50

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

5、上面的设置重启服务后会失效的,为了可以在开机时它还生效,就需要在主配置文件中修改了,在MasterSlavemy.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



 本文转自 wjw555 51CTO博客,原文链接:http://blog.51cto.com/wujianwei/1934150

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
安全 关系型数据库 MySQL
如何将数据从MySQL同步到其他系统
【10月更文挑战第17天】如何将数据从MySQL同步到其他系统
863 0
|
1月前
|
SQL 监控 关系型数据库
MySQL原理简介—12.MySQL主从同步
本文介绍了四种为MySQL搭建主从复制架构的方法:异步复制、半同步复制、GTID复制和并行复制。异步复制通过配置主库和从库实现简单的主从架构,但存在数据丢失风险;半同步复制确保日志复制到从库后再提交事务,提高了数据安全性;GTID复制简化了配置过程,增强了复制的可靠性和管理性;并行复制通过多线程技术降低主从同步延迟,保证数据一致性。此外,还讨论了如何使用工具监控主从延迟及应对策略,如强制读主库以确保即时读取最新数据。
MySQL原理简介—12.MySQL主从同步
|
6月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
1月前
|
SQL 存储 关系型数据库
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
201 11
|
7月前
|
运维 监控 NoSQL
【MongoDB 复制集秘籍】Secondary 同步慢怎么办?深度解析与实战指南,让你的数据库飞速同步!
【8月更文挑战第24天】本文通过一个具体案例探讨了MongoDB复制集中Secondary成员同步缓慢的问题。现象表现为数据延迟增加,影响业务运行。经分析,可能的原因包括硬件资源不足、网络状况不佳、复制日志错误等。解决策略涵盖优化硬件(如增加内存、升级CPU)、调整网络配置以减少延迟以及优化MongoDB配置(例如调整`oplogSize`、启用压缩)。通过这些方法可有效提升同步效率,保证系统的稳定性和性能。
199 4
|
3月前
|
监控 关系型数据库 MySQL
Flink CDC MySQL同步MySQL错误记录
在使用Flink CDC同步MySQL数据时,常见的错误包括连接错误、权限错误、表结构变化、数据类型不匹配、主键冲突和
234 17
|
4月前
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
5月前
|
算法 大数据 数据库
云计算与大数据平台的数据库迁移与同步
本文详细介绍了云计算与大数据平台的数据库迁移与同步的核心概念、算法原理、具体操作步骤、数学模型公式、代码实例及未来发展趋势与挑战。涵盖全量与增量迁移、一致性与异步复制等内容,旨在帮助读者全面了解并应对相关技术挑战。
102 3
|
6月前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
620 11
|
5月前
|
SQL 存储 关系型数据库
Mysql主从同步 清理二进制日志的技巧
Mysql主从同步 清理二进制日志的技巧
58 1