zoukankan      html  css  js  c++  java
  • mysql5.6配置semi_sync

    测试环境:
    Red Hat Enterprise Linux Server release 6.3 (Santiago)
    Server version: 5.6.22-log MySQL Community Server (GPL)

    mysql的replication协议是异步的,虽然异步效率、性能很好,但是却无法保证主从数据一致性,
    如果master crash,已经commit的事务不会被传送到任何的slave上,
    从mysql5.5之后,mysql为了保证主从库数据一致性,引进了semi-sync功能,
    semi-sync意思是MASTER只需要接收到其中一台SLAVE的返回信息,就会commit;否则需等待直至切换成异步再提交。

    优点:
    当事务返回客户端成功后,则日志一定在至少两台主机上存在。
    MySQL的Semi-sync适合小事务,且两台主机的延迟又较小,则Semi-sync可以实现在性能很小损失的情况下的零数据丢失。

    缺点:
    完成单个事务增加了额外的等待延迟,延迟的大小取决于网络的好坏。

    配置方法:
    在主库安装semisync_master插件:
    mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; //linux
    mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.dll'; //windows

    在备库安装semisync_slave插件
    mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; //linux
    mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';//windows


    主库上,新增如下参数:
    $vi /etc/my.cnf

    [mysqld]
    ...
    rpl_semi_sync_master_enabled=1
    rpl_semi_sync_master_timeout=1000
    ...

    备库上新增:

    $vi /etc/my.cnf

    [mysqld]
    ...
    rpl_semi_sync_slave_enabled=1

    重启master和slave,semi_sync插件会自动加载

    重启后,master显示如下:
    mysql> show variables like '%rpl_semi%';
    +------------------------------------+-------+
    | Variable_name | Value |
    +------------------------------------+-------+
    | rpl_semi_sync_master_enabled | ON |
    | rpl_semi_sync_master_timeout | 1000 |
    | rpl_semi_sync_master_trace_level | 32 |
    | rpl_semi_sync_master_wait_no_slave | ON | #表示即使没有SLAVE也会等待过期时间结束,是默认值
    +------------------------------------+-------+
    4 rows in set (0.00 sec)

    mysql> show status like '%semi%';
    +--------------------------------------------+----------+
    | Variable_name | Value |
    +--------------------------------------------+----------+
    | Rpl_semi_sync_master_clients | 3 | #有多少个Semi-sync的备库,我配置了3个
    | Rpl_semi_sync_master_net_avg_wait_time | 2525 | #事务提交后,等待备库响应的平均时间
    | Rpl_semi_sync_master_net_wait_time | 45892342 | #总的网络等待时间
    | Rpl_semi_sync_master_net_waits | 18174 | #等待网络响应的总次数
    | Rpl_semi_sync_master_no_times | 0 | #一共有几次从Semi-sync跌回普通状态
    | Rpl_semi_sync_master_no_tx | 0 | #备库未及时响应的事务数
    | Rpl_semi_sync_master_status | ON | #主库上Semi-sync是否正常开启
    | Rpl_semi_sync_master_timefunc_failures | 0 | #时间函数未正常工作的次数
    | Rpl_semi_sync_master_tx_avg_wait_time | 1196 | #开启Semi-sync,事务返回需要等待的平均时间
    | Rpl_semi_sync_master_tx_wait_time | 7918635 | #事务等待备库响应的总时间
    | Rpl_semi_sync_master_tx_waits | 6620 | #事务等待备库响应的总次数
    | Rpl_semi_sync_master_wait_pos_backtraverse | 0 | #改变当前等待最小二进制日志的次数
    | Rpl_semi_sync_master_wait_sessions | 0 | #当前有几个线程在等备库响应
    | Rpl_semi_sync_master_yes_tx | 6549 | #Semi-sync模式下,成功的事务数
    +--------------------------------------------+----------+
    14 rows in set (0.00 sec)

    slave上显示如下:
    mysql> show variables like '%rpl_semi%';
    +---------------------------------+-------+
    | Variable_name | Value |
    +---------------------------------+-------+
    | rpl_semi_sync_slave_enabled | ON |
    | rpl_semi_sync_slave_trace_level | 32 |
    +---------------------------------+-------+
    2 rows in set (0.01 sec)

    mysql> show status like '%semi%';
    +----------------------------+-------+
    | Variable_name | Value |
    +----------------------------+-------+
    | Rpl_semi_sync_slave_status | ON |
    +----------------------------+-------+
    1 row in set (0.00 sec)

  • 相关阅读:
    算法学习(十五)
    学习正则表达式笔记(三)
    学习正则表达式笔记(二)
    事件监听器
    socket(套接字)
    (转载)表驱动法
    C++文件读写
    齐次表示
    线性插值(linear interpolation)
    向上取整Ceil,向下取整Floor,四舍五入Round
  • 原文地址:https://www.cnblogs.com/caibird2005/p/4311544.html
Copyright © 2011-2022 走看看