`

mysql 5.5中的半同步复制

 
阅读更多

先来看下MYSQL异步复制的概念: 
  异步复制:MySQL本身支持单向的、异步的复制。异步复制意味着在把数据从一台机器拷贝到另一台机器时有一个延时 – 最重要的是这意味着当应用系统的事务提交已经确认时数据并不能在同一时刻拷贝/应用到从机。通常这个延时是由网络带宽、资源可用性和系统负载决定的。然而,使用正确的组件并且调优,复制能做到接近瞬时完成。 
  
   当主库有更新的时候,主库会把更新操作的SQL写入二进制日志(Bin log),并维护一个二进制日志文件的索引,以便于日志文件轮回(Rotate)。在从库启动异步复制的时候,从库会开启两个I/O线程,其中一个线程连接主库,要求主库把二进制日志的变化部分传给从库,并把传回的日志写入本地磁盘。另一个线程则负责读取本地写入的二进制日志,并在本地执行,以反映出这种变化。较老的版本在复制的时候只启用一个I/O线程,实现这两部分的功能。 




同步复制:同步复制可以定义为数据在同一时刻被提交到一台或多台机器,通常这是通过众所周知的“两阶段提交”做到的。虽然这确实给你在多系统中保持一致性,但也由于增加了额外的消息交换而造成性能下降。 



使用MyISAM或者InnoDB存储引擎的MySQL本身并不支持同步复制,然而有些技术,例如分布式复制块设备(简称DRBD),可以在下层的文件系统提供同步复制,允许第二个MySQL服务器在主服务器丢失的情况下接管(使用第二服务器的复本)。要了解更多信息, 

  MYSQL 5。5开始,支持半自动复制。之前版本的MySQL Replication都是异步(asynchronous)的,主库在执行完一些事务后,是不会管备库的进度的。如果备库不幸落后,而更不幸的是主库此时又出现Crash(例如宕机),这时备库中的数据就是不完整的。简而言之,在主库发生故障的时候,我们无法使用备库来继续提供数据一致的服务了。 

Semisynchronous Replication则一定程度上保证提交的事务已经传给了至少一个备库。 

   
Semi synchronous中,仅仅保证事务的已经传递到备库上,但是并不确保已经在备库上执行完成了。 

此外,还有一种情况会导致主备数据不一致。在某个session中,主库上提交一个事务后,会等待事务传递给至少一个备库,如果在这个等待过程中主库Crash,那么也可能备库和主库不一致,这是很致命的。(在主库恢复后,可以通过参数Rpl_semi_sync_master_no_tx观察) 

     如果主备网络故障或者备库挂了,主库在事务提交后等待10秒(rpl_semi_sync_master_timeout的默认值)后,就会继续。这时,主库就会变回原来的异步状态。 

    MySQL在加载并开启Semi-sync插件后,每一个事务需等待备库接收日志后才返回给客户端。如果做的是小事务,两台主机的延迟又较小,则Semi-sync可以实现在性能很小损失的情况下的零数据丢失。 

   主机Crash时的处理 

备库Crash时,主库会在某次等待超时后,关闭Semi-sync的特性,降级为普通的异步复制,这种情况比较简单。 

主库Crash后,那么可能存在一些事务已经在主库Commit,但是还没有传给任何备库,我们姑且称这类事务为"墙头事务"。"墙头事务"都是没有返回给客户端的,所以发起事务的客户端并不知道这个事务是否已经完成。 

这时,如果客户端不做切换,只是等Crash的主库恢复后,继续在主库进行操作,客户端会发现前面的"墙头事务"都已经完成,可以继续进行后续的业务处理;另一种情况,如果客户端Failover到备库上,客户端会发现前面的“墙头事务”都没有成功,则需要重新做这些事务,然后继续进行后续的业务处理。 

   可以做多个备库,任何一个备库接收完成日志后,主库就可以返回给客户端了。 

网络传输在并发线程较多时,一次可能传输很多日志,事务的平均延迟会降低。 

"墙头事务"在墙头上的时候,是可以被读取的,但是这些事务在上面Failover的场景下,是被认为没有完成的。 

     默认情况下MySQL的复制是异步的,Master上所有的更新操作写入Binlog之后并不确保所有的更新都被复制到Slave之上。异步操作虽然效率高,但是在Master/Slave出现问题的时候,存在很高数据不同步的风险,甚至可能丢失数据。 
MySQL5.5引入半同步复制功能的目的是为了保证在master出问题的时候,至少有一台Slave的数据是完整的。在超时的情况下也可以临时转入异步复制,保障业务的正常使用,直到一台salve追赶上之后,继续切换到半同步模式。 
Master: 
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’; 
SET GLOBAL rpl_semi_sync_master_enabled=1; 
SET GLOBAL rpl_semi_sync_master_timeout=1000; (1s, default 10s) 
Slave: 
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’; 
SET GLOBAL rpl_semi_sync_slave_enabled=1; 
复制心跳(用户检测复制是否中断) 

MySQL5.5提供的新的配置master_heartbeat_period,能够在复制停止工作和出现网络中断的时候帮助我们迅速发现问题。 

启用方法: 

STOP SLAVE; 

CHANGE MASTER TO master_heartbeat_period= milliseconds; 

START SLAVE; 

Slave自动恢复同步 

在MySQL5.5版本之前,MySQL Slave实例在异常终止服务之后,可能导致复制中断,并且relay binlog可能损坏,在MySQL再次启动之后并不能正常恢复复制。在MySQL5.5中这一问题得到了解决,MySQL可以自行丢弃顺坏的而未处理的数据,重新从master上获取源数据,进而回复复制。 

跳过指定复制事件 

在多Master或环形复制的情况下,处于复制链条中间的服务器异常,可以通过 

CHANGE MASTER TO MASTER_HOST=xxx IGNORE_SERVER_IDS=y 

跳过出问题的MySQL实例。 

自动转换字段类型 

MySQL5.1在基于语句的复制下,支持部分的字段转换,但是行级的会报错。MySQL5.5语句和行级复制都已支持。还可以通过 SLAVE_TYPE_CONVERSIONS 控制转换的方向。 

分享到:
评论

相关推荐

    Mysql5.5数据库双向同步

    根据给定的文件信息,“Mysql5.5数据库双向同步”这一主题深入探讨了如何在两个MySQL 5.5服务器之间建立稳定的数据同步机制,确保数据的一致性和高可用性。以下是对该知识点的详细解析: ### 一、理解MySQL双向同步...

    MySQL5.5.zip_mySql chm_mysql 5.5_mysql 中文_mysql5.5_mysql5.5.chm

    3. **复制功能强化**:MySQL 5.5提供了半同步复制(Semi-Synchronous Replication),确保主服务器上的事务在被复制到至少一个从服务器之前不会提交,增强了数据的一致性。 4. **查询优化器改进**:优化器加入了新...

    MySQL 5.5中文参考手册

    8. **复制与集群**:MySQL的复制功能使得数据可以在多个服务器间同步,提高可用性和容错性。手册会讲述主从复制的配置和故障切换策略。同时,也会涉及MySQL Cluster,这是一种分布式多节点的高可用解决方案。 9. **...

    MySQL安装文件MySQL5.5.zip

    4. **并行复制**:MySQL 5.5引入了半同步复制,确保数据在主从复制中的可靠性,防止数据丢失。此外,支持多个线程并行复制,提高了复制性能。 5. **性能优化**:包括查询缓存的改进,更有效的内存管理,以及查询...

    MySQL5.5中文版

    5. **复制改进**:增强了主从复制功能,支持半同步复制,确保数据在主从之间的一致性。 6. **并行复制**:在MySQL5.5中,可以配置多个线程来并行复制二进制日志事件,提高数据复制速度。 7. **更大的元数据限制**:...

    mysql5.5 for windows

    5. **复制功能**:MySQL 5.5改进了复制特性,包括半同步复制,确保主库上的事务在被复制到从库之前已经提交,增强了数据一致性。 6. **Performance Schema**:MySQL 5.5引入了Performance Schema,这是一个内置的...

    mysql5.5免安装.rar

    这个“mysql5.5免安装.rar”文件是一个绿色免安装版的MySQL 5.5.22,适用于那些希望快速部署数据库而不想经历传统安装过程的用户。下面我们将详细探讨MySQL 5.5的一些关键知识点。 首先,MySQL 5.5在性能上的提升...

    MySQL5.5.zip

    - 数据库复制功能在5.5版本中得到改进,支持半同步复制(Semi-Synchronous Replication),以确保主从复制的数据一致性。 8. **安全性和权限**: - MySQL5.5加强了安全机制,提供了更细粒度的权限控制,包括GRANT...

    mysql5.5免安装版

    这个版本引入了半同步复制,确保至少有一个从服务器接收到并写入数据后,主服务器才确认事务的完成,从而提高了数据的一致性。同时,复制也支持多线程,使得从服务器可以并行处理主服务器的binlog事件,加快了数据...

    Mysql5.5安装文件,里面有安装教程

    3. **增强的复制功能**:引入半同步复制,确保数据在主从服务器间的一致性。 4. **InnoDB默认存储引擎**:从这个版本开始,InnoDB成为默认的存储引擎,提供事务处理和行级锁定。 5. **分区功能的增强**:支持更多...

    mysql5.5安装包 Windows (x86, 64-bit)

    4. **复制功能改进**:增强了主从复制的可靠性,支持半同步复制,以减少数据丢失风险。 5. **线程池支持**:对于高并发场景,线程池可以有效地限制并发连接,降低系统资源消耗。 6. **内存管理优化**:减少了内存...

    MySQL5.5官方版

    5. **复制功能强化**:增加了半同步复制(Semi-Synchronous Replication)选项,确保主服务器上的事务在被复制到从服务器之前已经完成,增强了数据的一致性。 6. **更多的SQL优化**:包括查询优化器的改进,如更好...

    Mysql 5.5和Navicat 10

    7. **半同步复制**:为了解决数据丢失问题,MySQL 5.5提供了半同步复制选项,确保在主节点上的事务提交后,至少有一个从节点接收到这些更改。 8. **支持更多的Unicode字符集**:MySQL 5.5支持更多Unicode字符集,如...

    Mysql5.5数据库安装包

    3. **半同步复制**:此版本引入了半同步复制(Semi-Synchronous Replication),确保至少有一个从服务器接收到主服务器的数据更改,提高了数据的一致性。 4. **分区功能增强**:MySQL 5.5对分区表进行了扩展,支持...

    MySQL 5.5 使用手册 英文版

    4. **半同步复制**:新引入的半同步复制确保了主库上的事务在被复制到从库之前至少被一个从库确认,从而提高了数据一致性和安全性。 5. **存储过程和触发器**:MySQL 5.5提供了更多高级的数据库编程特性,如存储...

    mysql5.5安装软件

    MySQL 5.5引入了更强大的SQL查询优化器,提升了InnoDB存储引擎的性能,并增强了复制功能,使得数据同步更加可靠。 总之,MySQL 5.5是一个强大且广泛使用的数据库管理系统,其安装过程相对简单,但配置和管理需要...

    mysql5.5安装程序

    - **复制功能增强**:添加了半同步复制选项,确保主库的数据被复制到从库后才返回确认,增强了数据一致性。 2. **安装过程**: - **下载**:可以从MySQL官方网站下载适用于Windows的安装包,如`mysql-5.5.28-win...

    MySql 5.5 + SqlManager

    7. **半同步复制**:确保至少一个从服务器接收到主服务器的数据更改后,主服务器才会确认事务完成,增强了数据安全性。 8. **更多的复制选项**:如GTID(全局事务标识符)复制,使得复制过程更易于管理和监控。 Sql...

Global site tag (gtag.js) - Google Analytics