上一篇提出了一种改进主从延迟的方案。虽然能够实现主从无延迟同步,但在维护上比较复杂,还存在网络消耗问题,这里是一个改进的版本。
一、之前方案简述及问题分析
方案如图。其中用多个MySQL充当transfer的角色。每个transfer负责同步master的一部分表。在我的试验中有8个transfer,也就是有8个MySQL实例。
问题: 1、维护复杂。在从库及其上需要增加8个实例,增加维护成本,而且不利于加表操作。
2、增加网络开销。虽然在transfer的IO线程作了过滤,减少每个transfer的写盘量和SQL线程的空转,但master还是向每个tranfer发了所有的数据。网络传输的日志量是原来的n倍。
二、改进方案
基于上述的两个问题考虑,考虑将transfer的多进程改成多线程。
如图:
1、用一个MySQL充当transfer。 transfer设置为master的主库。IO线程负责接收Master传过来的日志。但不是写到一套relay-log文件,而是SLAVE_THREAD套。每个表的日志固定分配到一套relay-log中
2、相应地起SLAVE_THEAD个SQL线程,负责读取对应目录下的relaylog,发送给slave。
三、方案对比
从上面描述中看出,master发给transfer的日志总量只有一份。只需要增加SLAVE_THREAD 和 slave信息的配置,维护简单。
两个方案的相同点是使用文件队列(多套relaylog),保证在transfer出现异常时不丢数据。
效果对比,原生版本
上个方案
改进方案
说明:改进方案也能保证无延迟同步,性能都是原生版本的7倍左右。由于线程更少,从库的QPS表现很稳定,cpu idle也比上个方案高。
四、两个为什么
1、为什么不直接把transfer当slave用?
实际上是可以的,作了简单实验发现与“改进方案”的从库QPS相同,好处是减少了一层transfer的逻辑。一般来说这种工具也不会放到和slave一个机器,直接用作slave就少了一个机器。
不过直接改slave的代码还是推广比较麻烦。而且不得不承认的是,这个方案存在一个硬伤:跨表更新的语句顺序无法严格保证。――这也是这两个方案的应用前提:没有跨表语句或者对这种出现的情况要求不严格。
2、为什么不直接写一个工具而用MySQL?
其实作transfer的MySQL并不像想象的那么庞大。不需要的引擎可以都不编译进去,其实只需要框架层的逻辑和一个myisam引擎即可。而它提供了很多管理命令,比如一个现成的客户端,能够方便的stop slave、change master,能够用show slave status看同步状态。这些作为这个工具的基本功能,自己一个个实现重复轮子太多了。
好吧,我就是偷懒。。。
- 大小: 27.8 KB
- 大小: 41.4 KB
- 大小: 31.1 KB
- 大小: 39.5 KB
- 大小: 39.9 KB
- 大小: 37.9 KB
分享到:
相关推荐
MySQL 主从同步配置是指将 MySQL 数据库的数据从一台服务器(主服务器)同步到另一台服务器(从服务器)的过程。这种配置可以实现数据的高可用性和灾难恢复,提高系统的整体性能和安全性。 二、 主从同步配置的基本...
在数据库管理领域,MySQL主从同步是一种常见的数据复制技术,它可以帮助我们构建高可用性和数据冗余性,从而提高系统的稳定性和可靠性。本文将详细介绍如何在Linux环境下配置MySQL的主从同步,并通过具体的步骤演示...
MySQL主从同步是一种常见的数据库高可用性和数据冗余策略,它允许数据在多个服务器之间实时复制,确保即使在一台服务器故障时,数据仍然可以被访问。以下是对搭建、修改和优化MySQL主从同步过程的详细解释: 1. **...
MySQL主从同步是一种数据库复制技术,它允许数据从一个服务器(主服务器)自动复制到一个或多个其他服务器(从服务器)。这种同步机制提高了系统的可扩展性、数据安全性以及提供了灾难恢复的可能性。 ### 主从同步...
MySQL主从同步是一种数据库复制技术,它允许数据从一个MySQL服务器(称为“主服务器”)实时复制到另一个或多个服务器(称为“从服务器”)。这种配置对于数据备份、负载均衡和高可用性至关重要。在Java开发中,了解...
MySQL主从架构是一种常见的数据冗余和负载均衡解决方案,它允许数据在多个服务器之间实时或近实时地复制,以提高系统的可用性和可扩展性。下面将详细讲解如何实现MySQL主从架构,包括一主一从、一主多从以及半同步...
在Windows环境下,MySQL主从同步备份是一种常见的高可用性和数据冗余策略,确保数据的安全性和一致性。以下是详细步骤,适用于MySQL 5.0版本: 1. **创建备份账户**: 在主服务器A上,我们需要创建一个用于复制的...
### MySQL主从复制类型简介入门 #### 一、复制原理 MySQL作为一种广泛使用的开源关系型数据库管理系统,提供了强大的数据复制功能。数据复制是构建大型、高性能应用程序的基础之一,通过将MySQL的数据分布到多个...
在Debian系统中实现MySQL主从同步复制是一种常见的数据库高可用性和负载均衡策略。这种技术可以确保数据的安全性并提高系统的整体性能。接下来,我们将详细介绍如何在Debian环境下配置MySQL的主从同步复制。 #### 1...
binlog 是 MySQL 的一种二进制日志文件,它记录了 MySQL 服务器上的所有操作,包括增删改查等。binlog 的格式可以是 Statement、Row 或 Mixed, Statement 格式记录的是 SQL 语句,Row 格式记录的是行级别的操作,...
MySQL主从半同步复制是介于异步复制和全同步复制之间的一种模式,它提供了更好的数据安全性和一致性,同时也尽可能地减少了性能损失。 首先,我们来了解一下什么是MySQL半同步复制。在半同步复制模式下,主服务器在...
MySQL主从同步是一种数据库复制技术,它允许一个MySQL服务器(主服务器)的数据被实时地复制到其他服务器(从服务器)上。这种同步可以确保数据的一致性,并在主服务器出现问题时提供故障转移的能力。实现主从同步的...
### MySQL主从同步备份 #### 一、MySQL主从同步的作用与原理 ##### 作用 MySQL主从同步机制主要用于实现以下几种应用场景: 1. **数据分布**:通过将数据复制到多个从服务器,可以在不同地理位置分发数据,提高...
【Linux下MySQL主从同步复制】是MySQL数据库在分布式环境中实现数据备份和高可用性的一种常见策略。在Linux操作系统上,这一过程涉及到一系列步骤,包括安装MySQL服务、配置主从服务器、设置复制参数以及验证复制...
MySQL 主从复制是一种常见的数据备份和负载均衡技术,在多个服务器之间同步数据。通过设置一个或多个从服务器来复制主服务器上的数据变更操作,从而实现数据冗余和故障转移。主从复制不仅可以提高系统的可用性和容错...
MySQL主从同步是数据库架构中常见的一种高可用性解决方案。它可以实现数据的实时备份,分担主库读写操作压力,并提供数据的热备份。在Windows操作系统下配置MySQL主从同步涉及多个步骤,以下将详细解读配置的原理、...
MySQL 主从同步是一种常见的数据库高可用性和负载均衡解决方案,它允许数据从一个主数据库(Master)实时复制到一个或多个从数据库(Slave)。在这种配置下,所有写操作都在主库上执行,然后由从库自动并异步地复制...
MySQL主从同步是一种数据库复制技术,它允许数据从一个服务器(主服务器)实时地复制到一个或多个其他服务器(从服务器)。这一特性对于构建高可用性、负载均衡和数据安全的系统至关重要。以下是对MySQL主从同步的...
MySQL半同步复制(Semi-Synchronous Replication)是一种增强主从复制一致性的方法,它确保在主服务器上的事务提交之前,至少有一个从服务器接收到并应用了该事务的日志。 1. **半同步插件**:MySQL提供了一个名为`...