• 深入理解MySQL——配置半同步复制


    使用半同步复制要求master和slave都支持,所以master和slave都必须是MySQL5.5 或之后的版本而且启用了半同步复制。如果某一方不支持,那就无法使用半同步复制,当然复制工作还是照常工作,不过如果没有特殊预防措施确保每个事务在新事务启动之前到达slave的话,就可能丢失不止一个事务。
    启用半同步复制的步骤如下

    1. 在master上安装master插件∶
    master>INSTALL PLUGIN rpL_semi_sync_master SONAME 'semisync_master.so';
    
    • 1
    1. 在每个slave上安装slave插件∶
    slave> INSTALL PLUGIN rpl_semi_sync_sLave SONAME 'semisync_slave.so';
    
    • 1
    1. 所有插件安装完毕后,在master和slave上启用它们。通过两个服务器变量控制的同时也是选项实现,保证设置即使重启也继续生效。最好是关闭服务器,向 master 的my.cnf文件添加选项∶
    [mysqld]
    rpl-semi-sync-master-enabled=1
    
    • 1
    • 2

    然后向slave的my.cnf文件添加选项∶

    [mysqld]
    rpl-semi-sync-slave-enabled=1
    
    • 1
    • 2
    1. 重启服务器。
      如果按照以上步骤执行,就配置好了半同步复制,测试配置,考虑下面几种情况∶
    • 如果所有slave都崩溃了,无法确认事务是否写入中继日志了怎么办?如果
      master只连接一个slave,这种情况不是不可能。
    • 如果所有slave的连接都断了怎么办?这时,master就无法将事务发出去。
      除了 rpl-semi-sync-master-enabled和 rpl-semi-sync-slave-enabled,处理以上情况还需要以下两个选项∶
    rpl-semi-sync-master-timeout=milliseconds
    
    • 1

    为了防止半同步复制收不到确认被阻塞,使用rpl-semi-sync-master-timeout=milliseconds选项进行超时设置。
    如果master在超时之后仍然收不到任何确认,就还原为常规的异步复制继续操作,不再使用半同步复制。这个选项也用作服务器变量,不需要停止服务器即可设置。但是要注意,同所有服务器变量一样,一旦重启,服务器变量的值不再有效。

    rpl-semi-sync-master-wait-no-slave={ON|OFF}
    
    • 1

    如果事务提交了但master没有任何连接的slave可用,master就无法将事务发送出去。默认情况下,master会等待slave连接——在超时限制内————然后确认事务已经正确写入磁盘。
    也可以使用rpl-semi-sync-master-wait-no-slave={0N|0FF}选项关闭这个行为,这时如果没有连接的slave,master就还原为异步复制。

    注意,如果在rpl-semi-sync-master-timeout超时之前master没有收到任何确认,或者如果rpl-semi-sync-master-wait-no-slave=ON,半同步复制都会自动还原为常规的异步复制继续复制操作,不再使用半同步复制。

  • 相关阅读:
    禁忌搜索算法TS求解连续函数最值
    如何写好测试用例以及go单元测试工具testify简单介绍
    学内核之四:关于内核与硬件的衔接
    C++ | string类的使用
    文件上传漏洞(2), 文件上传实战绕过思路, 基础篇
    flutter 循环数据展示
    「学习笔记」AC 自动机
    Java编程--单例模式(饿汉模式/懒汉模式)/阻塞队列
    鸿蒙原生App开发之:套用混合app开发思路
    HarmonyOS ArkUi ArkWeb加载不出网页问题踩坑
  • 原文地址:https://blog.csdn.net/lijuncheng963375877/article/details/126056828