mysql 5.5半同步复制_MySQL5.5 Semi-synchronous Replication(半同步复制)

MySQL5.5有很多的改进和增强,也引入了很多新功能。在可用性方面有如下几点新特性:Semi-synchronous Replication

Replication Heartbeat

Automatic Relay Log Recovery

Replication Per Server Filtering

Replication Slave Side Data Type Conversions

Semi-synchronous Replication(半同步复制)

我们知道在5.5之前,MySQL的复制其实是异步操作,而不是同步,也就意味着允许主从之间的数据存在一定的延迟,mysql当初这样设计的目的可能也是基于可用性的考虑,为了保证master不受slave的影响,并且异步复制使得master处于一种性能最优的状态:写完binlog后即可提交而不需要等待slave的操作完成。这样存在一个隐患,当你使用slave作为备份时,如果master挂掉,那么会存在部分已提交的事务未能成功传输到slave的可能,这就意味着数据丢失!

在MySQL5.5版本中,引入了半同步复制模式(Semi-synchronous Replication)能够成功避免上述数据丢失的隐患。在这种模式下:master会等到binlog成功传送并写入至少一个slave的delay log之后才会提交,否则一直等待,直到timeout(默认10s)。当出现timeout的时候,master会自动切换半同步为异步,直到至少有一个slave成功收到并发送Acknowledge,master会再切换回半同步模式。结合这个新功能,我们可以做到,在允许损失一定的事务吞吐量的前提下来保证同步数据的绝对安全,因为当你设置timeout为一个足够大的值的情况下,任何提交的数据都会安全抵达slave。

1NVZI.jpg

半同步模式其实是作为MySQL5.5的一个plugin实现的,master和slave使用不同的plugin。默认情况下没有安装该plugin,官方提供的MySQL Server RPM包默认安装后,会在/usr/lib(64)/mysql/plugin/下面找到该插件。安装完插件之后,还需要手动设置系统参数以开启半同步复制模式。详细的过程可参考下面步骤。

——————————————————————————

设置步骤:

【Master】

安装插件

mysql>install plugin rpl_semi_sync_master soname ‘semisync_master.so’;

(文档中给的插件名用单引号引起来了,我执行却提示语法错误,把引号去掉后方能执行成功)

然后会出现以下4个系统参数:rpl_semi_sync_master_enabledOFF

rpl_semi_sync_master_timeout10000

rpl_semi_sync_master_trace_level32

rpl_semi_sync_master_wait_no_slaveON

动态修改rpl_semi_sync_master_enabled=ON,同时根据情况需要修改timeout=1000  (单位毫秒)

在show global status中也会出现如下的几个状态:Rpl_semi_sync_master_clients                0      ##表示有多少slave设置了半同步模式。

Rpl_semi_sync_master_net_avg_wait_time      0

Rpl_semi_sync_master_net_wait_time          0

Rpl_semi_sync_master_net_waits              0

Rpl_semi_sync_master_no_times               0

Rpl_semi_sync_master_no_tx                  0      ##表示没有成功接收slave回执的提交次数

Rpl_semi_sync_master_status                 OFF    ##表示当前是异步模式还是半同步模式。

Rpl_semi_sync_master_timefunc_failures      0

Rpl_semi_sync_master_tx_avg_wait_time       0

Rpl_semi_sync_master_tx_wait_time           0

Rpl_semi_sync_master_tx_waits               0

Rpl_semi_sync_master_wait_pos_backtraverse  0

Rpl_semi_sync_master_wait_sessions          0

Rpl_semi_sync_master_yes_tx                 0      ##表示成功接收slave回执的提交次数

————————————————————————-

【Slave】

安装插件

mysql>install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’;

然后会出现下列2个参数:rpl_semi_sync_slave_enabledOFF

rpl_semi_sync_slave_trace_level32

动态设置rpl_semi_sync_slave_enabled=ON,然后重启replication(stop slave;start slave;)即可。记得一定要重启,否则master无法确认该slave是否开启了半同步。相同的操作可以在任意多个slave中进行设置。

show global status会出现下面的系统状态:Rpl_semi_sync_slave_statusON   ##表示当前处于异步模式还是半同步模式

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值