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

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

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

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

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

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

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

如果事务提交了但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,半同步复制都会自动还原为常规的异步复制继续复制操作,不再使用半同步复制。

你可能感兴趣的:(深入理解MySQL,mysql,数据库,服务器)