MySQL 5.5的半同步复制

在保证数据库性能的前提下,怎么保证数据的一致性呢?

在MySQL 5.5版本中即支持异步复制又支持半同步复制。

1、当slave 连接master的时候,它会指出它是否支持半同步复制。

2、当master启用 semisynchronous  replication.并且至少有一台slave也启用了该功能,master端的事务会被阻塞,并且等到该事务会等待其中任何一个slave接受到该事务,或者超过等待时间才会提交。

3、slave端回复给master的信息依据是slave事务已经写入到relay-log并且已经刷写到了磁盘。

4、如果master端等待超时的话,没有任何slave给出该事务已经写入relay-log的信息,那么他会自动转到异步复制,当其中一个支持异步复制的slave追赶上了master,那么master会进入到半同步复制状态。

5、半同步复制必须是两端都支持。

当master的线程处于被阻塞(等待slave端返回的消息时),并不会给该会话session返回任何消息。当阻塞结束的时候,master会返回给该session消息。

如果一个事务中包含对非事务表的修改,在发生rollback的情况下,master也是会这些信息写入到binlog上面,并且也会发生阻塞,等待slave端写入。

半同步复制需要在数据一致性和性能上作出权衡。

5.5半同步功能的安装步骤

1、这个首先需要5.5支持动态加载模块:查看变量:             have_dynamic_loading是否是yes;

2、基本的复制架构已经搭建

3、master端和slave端的模块是随着版本发布的,在master端执行:

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

在slave端执行:

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

如果在安装的时候出现如下错误,请下载缺失的组件:http://dev.mysql.com/downloads/os-linux.html.

ERROR 1126 (HY000): Can't open shared library

'/usr/local/mysql/lib/plugin/semisync_master.so' (errno: 22 libimf.so: cannot open

shared object file: No such file or directory)

安装完成后,还需要设置变量才能正常启动:

SET GLOBAL rpl_semi_sync_master_enabled =1;

本栏目更多精彩内容:http://www.bianceng.cn/database/MySQL/

SET GLOBAL rpl_semi_sync_master_timeout =N 设置好超时时间,默认是10s (有点长啦)

在slave 端执行:

SET GLOBAL rpl_semi_sync_slave_enabled =1

(以上信息都可以写到my.cnf文件中)

这个时候复制还是属于异步复制,只有重启slave或者 重启 slave I/O线程,才能真正使用半同步复制功能。

stop slave io_thread;start slave io_thread;

监控半同步复制状态;

几个重要的变量是:

rpl_semi_sync_master_clients  支持和已经注册半同步复制的已连接的slave数量。

rpl_semi_sync_master_status  Master的半同步复制状态,1是活动状态,0表示非活动,要么是没有启用该功能,要么以切换至异步复制状态

rpl_semi_sync_slave_status Slave 上的半同步复制状态,1,表示已经启用而且I/O线程正在运行,0表示非活动状态。

使用半同步复制需要思考的几个问题:

1、当所有的slave崩溃,半同步复制的状态如何变化?

为防止半同步复制在没有收到确认的情况下发生阻塞,使用rpl-semi-sync-mastertimeout=millseconds(毫秒) 设置一个超时时间,在规定时间内master没有收到任何slave的回应,那么复制将装变为异步复制。注意事项:该选项在server重启之后不会保存,所以可以考虑写入到my.cnf中。

2、当master产生新的事件,此时没有slave与之保持连接,这个时候master该如何变化?

默认情况下,和1上面所说的一样,有一个超时时间,。为了更高效的进行复制,我们可以设置 rpl-semi-sync-master-wait-no-slave=on|off ,来关闭默认的行为,直接转变为异步复制

3、对于比较繁忙的master,如何在master出现故障时,保持数据主从的一致性?对于出现partial transaction的情况,可以利用第三方自动截取部分 roll back 字段。具体参考:http://www.woqutech.com/files/Partial_Transaction.pdf

时间: 2024-08-04 15:48:27

MySQL 5.5的半同步复制的相关文章

MySQL基于SSL的半同步复制

MySQL的主从复制应用场景非常多,默认的MySQL复制是基于异步且明文传输的,也就是说,速度快,但是从服务器的数据会有着一定的滞后性,明文也就意味着数据传输的不安全.因此笔者这里构建一个简单的基于加密并半同步的主从MySQL,当然由于其半同步的特性,主服务器的写操作速度必会有所降低.究竟如何选择,这取决于场景需要了. 实验环境:RHEL5.8  MySQL5.5.28 192.168.88.21       master.mos.com  master 192.168.88.22      

mysql 5.5中的半同步复制

先来看下MYSQL异步复制的概念:   异步复制:MySQL本身支持单向的.异步的复制.异步复制意味着在把数据从一台机器拷贝到另一台机器时有一个延时 – 最重要的是这意味着当应用系统的事务提交已经确认时数据并不能在同一时刻拷贝/应用到从机.通常这个延时是由网络带宽.资源可用性和系统负载决定的.然而,使用正确的组件并且调优,复制能做到接近瞬时完成.      当主库有更新的时候,主库会把更新操作的SQL写入二进制日志(Bin log),并维护一个二进制日志文件的索引,以便于日志文件轮回(Rotat

MySQL · 源码分析 · MySQL 半同步复制数据一致性分析

简介 MySQL Replication为MySQL用户提供了高可用性和可扩展性解决方案.本文介绍了MySQL Replication的主要发展历程,然后通过三个参数rpl_semi_sync_master_wait_point.sync_binlog.sync_relay_log的配置简要分析了MySQL半同步的数据一致性. MySQL Replication的发展 在2000年,MySQL 3.23.15版本引入了Replication.Replication作为一种准实时同步方式,得到广泛

MySQL · 源码分析 · MySQL BINLOG半同步复制数据安全性分析

半同步复制(semisynchronous replication)MySQL使用广泛的数据复制方案,相比于MySQL内置的异步复制它保证了数据的安 全,本文从主机在Server层提交事务开始一直到主机确认收到备机回复进行一步步解析,来看MySQL的半同步复制是怎么保证数 据安全的.本文基于MySQL 5.6源码,为了简化本文只分析DML的核心的事务处理过程,并假定事务只涉及innodb存储引擎. MySQL的事务提交流程 在MySQL中事务的提交Server层最后会调用函数ha_commit_

mysql semi-sync(半同步复制)

半同步复制: 5.5集成到MySQL,以插件的形式存在,需要单独安装 确保事务提交后bnog至少传输到一个从库 不保证从库应用完这个事务的binlog 性能有一定的降低,响应时间会更长 网络异常或从库宕机,卡住主库直到超时或从库恢复 异步复制的逻辑 半同步复制的逻辑 安装 主库上 mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so'; Query OK, 0 rows affected (0.01 sec)

MySQL中的半同步复制(r11笔记第65天)

关于MySQL的复制架构,大体有下面三种方式,异步,全同步复制,半同步复制. 三种复制方式     第一种是异步复制,是比较经典的主从复制,搭建主从默认的架构方式,就是属于异步的,相对来说性能要好一些.但是还是会有丢失数据的情况.     第二种是全复制,比如说MySQL Cluster这样的方式,是属于全复制的,实际上MySQL Cluster其实发展并不大顺利,更多时候是一个实验室产品,但是时间定格在2016年12月12日,MySQL  5.7.17 GA的重大特性group replica

MySQL5.7 & AliSQL5.6 半同步复制 rpl_semi_sync_master_wait_point参数

MySQL5.5 开始支持半同步复制,但实现的不完善,slave ack 是在 master commit 之后.如果 master 宕机,会有数据丢失的风险.如下图可以看出,主库在 commit 之后宕机,如果从库还未收到 binlog ,主从切换后可能会出现数据丢失的现象. MySQL5.7 & AliSQL5.6 增加了 rpl_semi_sync_master_wait_point 参数来修复这个问题.先来看看这个参数是做什么用的.官方文档解释如下: The rpl_semi_sync_

MySQL 5.5中如何配置安装半同步复制

确认master和slave上是否开启have_dynamic_loading master MASTER(none) 10:54:58>show variables like 'have_dynamic_loading'; +----------------------+-------+ | Variable_name        | Value | +----------------------+-------+ | have_dynamic_loading | YES   | +----

MySQL5.5配置安装半同步复制

确认master和slave上是否开启have_dynamic_loading master MASTER(none) 10:54:58>show variables like 'have_dynamic_loading';+----------------------+-------+| Variable_name | Value |+----------------------+-------+| have_dynamic_loading | YES |+------------------