半同步复制架构在主库提交一个事务后,commit完成即反馈客户端,无需等待推送binlog完成,如图:

半同步复制在主库完成一个事务后,需等待事务信息写入binlog日志并且至少有一个从库写入relay log日志后才能commit完成反馈客户端。架构设计如图:

半同步复制在msyql5.5使用插件实现,主库和从库使用不同的插件。

半同步复制配置:

1)查看mysql服务器是否支持动态增加插件:

mysql> select @@have_dynamic_loading;

+------------------------+

| @@have_dynamic_loading |

+------------------------+

| YES                    |

+------------------------+

1 row in set (0.00 sec)

2)确认支持动态增加插件后,检查mysql安装目录下是否存在插件,一般默认在$MYSQL_HOME/lib/plugin目录下存在主库插件semisync_master.so和从库插件semisync_slave.so:

[root@chavinking plugin]# pwd

/usr/local/mysql/lib/plugin

[root@chavinking plugin]# ll *master.so *slave.so

-rwxr-xr-x 1 mysql mysql 416897 Mar 26  2015 semisync_master.so

-rwxr-xr-x 1 mysql mysql 250126 Mar 26  2015 semisync_slave.so

在主库上安装插件semisync_master.so:

mysql> install plugin rpl_semi_sync_master SONAME 'semisync_master.so';

Query OK, 0 rows affected (0.11 sec)

mysql> select * from mysql.plugin;

+----------------------+--------------------+

| name                 | dl                 |

+----------------------+--------------------+

| rpl_semi_sync_master | semisync_master.so |

+----------------------+--------------------+

1 row in set (0.00 sec)

在从库上安装插件semisync_slave.so:

mysql> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';

Query OK, 0 rows affected (0.09 sec)

mysql> select * from mysql.plugin;

+---------------------+-------------------+

| name                | dl                |

+---------------------+-------------------+

| rpl_semi_sync_slave | semisync_slave.so |

+---------------------+-------------------+

1 row in set (0.00 sec)

3)需要分别在主库和从库上配置参数打开半同步semi_sync,默认半同步是不打开的,主库上配置全局参数:

MSYQL>set global rpl_semi_sync_master_enabled=1;

MYSQL>set global rpl_semi_sync_master_timeout=30000;

从库上配置全局参数:

MYSQL>set global rpl-semi_sync_slave_enabled=1;

重启从库上的io线程(异步复制->半同步复制,全新配置不需要):

mysql> stop slave io_thread;

Query OK, 0 rows affected (0.01 sec)

mysql> start slave io_thread;

Query OK, 0 rows affected (0.00 sec)

至此,在mysql异步复制基础上配置mysql半同步复制配置完成

检查复制状态:

mysql> show status like '%semi_sync%';                                             --主库

+--------------------------------------------+-------+

| Variable_name                              | Value |

+--------------------------------------------+-------+

| Rpl_semi_sync_master_clients               | 1     |

| 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     |

| Rpl_semi_sync_master_status                | ON    |

| 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     |

+--------------------------------------------+-------+

14 rows in set (0.00 sec)

mysql> show status like '%semi_sync%'                                             --从库

-> ;

+----------------------------+-------+

| Variable_name              | Value |

+----------------------------+-------+

| Rpl_semi_sync_slave_status | ON    |

+----------------------------+-------+

1 row in set (0.02 sec)

mysql> insert into t1 values(8),(9);

Query OK, 2 rows affected (0.05 sec)

Records: 2  Duplicates: 0  Warnings: 0

mysql> show status like '%semi_sync%';

+--------------------------------------------+-------+

| Variable_name                              | Value |

+--------------------------------------------+-------+

| Rpl_semi_sync_master_clients               | 1     |

| Rpl_semi_sync_master_net_avg_wait_time     | 20232 |

| Rpl_semi_sync_master_net_wait_time         | 20232 |

| Rpl_semi_sync_master_net_waits             | 1     |

| Rpl_semi_sync_master_no_times              | 0     |

| Rpl_semi_sync_master_no_tx                 | 0     |

| Rpl_semi_sync_master_status                | ON    |

| 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                | 1     |

+--------------------------------------------+-------+

14 rows in set (0.02 sec)

MySQL半同步复制(5.5之后引入)的更多相关文章

  1. MySQL半同步复制

    从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念 异步复制(Asynchronous replication) MySQL默认的复制即是 ...

  2. Mysql半同步复制模式说明及配置示例 - 运维小结

    MySQL主从复制包括异步模式.半同步模式.GTID模式以及多源复制模式,默认是异步模式 (如之前详细介绍的mysql主从复制).所谓异步模式指的是MySQL 主服务器上I/O thread 线程将二 ...

  3. 安装MySQL半同步复制

    一.简介 从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念 异步复制(Asynchronous replication) MySQL默认 ...

  4. MySQL半同步复制搭建

    默认情况下,MySQL 5.5/5.6/5.7和MariaDB 10.0/10.1的复制是异步的,异步复制可以提供最佳性能,主库把binlog日志发送给从库,这一动作就结束了,并不会验证从库是否接收完 ...

  5. mysql半同步复制跟无损半同步区别

    mysql半同步复制跟无损半同步复制的区别: 无损复制其实就是对semi sync增加了rpl_semi_sync_master_wait_point参数,来控制半同步模式下主库在返回给会话事务成功之 ...

  6. MySQL半同步复制的数据一致性探讨微信后台团队实践【转】

    MySQL是一个RDBMS(关系型数据库管理系统),由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.由于其体积小.速度快.拥有成本低,尤其是开放源码这一特点,广受各大企业欢迎,包括 ...

  7. mysql半同步复制实现

    mysql半同步复制和异步复制的区别如上述架构图所看到的:在mysql异步复制的情况下.Mysql Master Server将自己的Binary Log通过复制线程传输出去以后,Mysql Mast ...

  8. (5.5)mysql高可用系列——MySQL半同步复制(实践)

    关键词,mysql半同步复制 [0]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数据容灾和主库备机,采用默认传统的异步复 ...

  9. MySQL半同步复制源码解析

    今天 DBA 同事问了一个问题,MySQL在半同步复制的场景下,当关闭从节点时使得从节点的数量 < rpl_semi_sync_master_wait_for_slave_count时,show ...

随机推荐

  1. Git Step by Step – (7) Git远程仓库(续)

    上一篇文章介绍了Git远程仓库的一些使用,但是还是有些东西需要补充一下,所以有了这个续篇. .gitignore 前一篇中,我们介绍了Git的patch功能,当我们生成patch之后,"gi ...

  2. 【DVWA】Web漏洞实战之File Upload

    File Upload File Upload,即文件上传漏洞,一般的上传漏洞可能是未验证上传后缀 或者是验证上传后缀被bypass 或者是上传的文件验证了上传后缀但是文件名不重命名. LOW 直接上 ...

  3. Kafka(三)-- Kafka主要参数

    原文地址:http://debugo.com/kafka-params/ ############################# System ########################## ...

  4. 使用java中的session来记录访问次数

    <%@ page import="java.net.CookieHandler" %><%-- Created by IntelliJ IDEA. User: D ...

  5. nginx+php-fpm 报“File not found.”

    找网上找了很多帖子,大都是说nginx中的$document_root$换成绝对路径,但是依然不能解决问题 后再把php-fpm配置文件中的 [www]下边的 usr = apache group = ...

  6. Linux IPC BSD Pipe

    mkfifo() //创建有名管道(FIFO special file),创建完了就像普通文件一样open(),再读写,成功返回0,失败返回-1设errno.VS$man 3 mkfifo #incl ...

  7. IE6/IE7/IE8下float:right的异常及其解决方法

    1.最简单的方法就是调换顺序,将需要右浮动的元素写在前面.写成这样:<h2><a href="#">更多>></a>小标题</ ...

  8. 【转】java:Session(会话)机制详解

    书中讲:以下情况,Session结束生命周期,Servlet容器将Session所占资源释放:1.客户端关闭浏览器2.Session过期3.服务器端调用了HttpSession的invalidate( ...

  9. Android Studio 3.0.1 版本包下载

    Android Studio 3.0.1 发布了,这是对 Android Studio 3.0 的一个小的更新,包括一般错误修复和性能改进 下载地址: Windows 64 位:https://dl. ...

  10. 如何使用Countifs函数动态统计

    我们以前就是一个函数一个功能,一个函数一个区域,这次我们使用动态函数.我们先写好条件范围,因为我们要引用.   同样的我们写下函数出来,我们先把Countifs写出来.选择完区域之后如下图.   条件 ...