使用半同步复制要求master和slave都支持,所以master和slave都必须是MySQL5.5 或之后的版本而且启用了半同步复制。如果某一方不支持,那就无法使用半同步复制,当然复制工作还是照常工作,不过如果没有特殊预防措施确保每个事务在新事务启动之前到达slave的话,就可能丢失不止一个事务。
启用半同步复制的步骤如下
master>INSTALL PLUGIN rpL_semi_sync_master SONAME 'semisync_master.so';
slave> INSTALL PLUGIN rpl_semi_sync_sLave SONAME 'semisync_slave.so';
[mysqld]
rpl-semi-sync-master-enabled=1
然后向slave的my.cnf文件添加选项∶
[mysqld]
rpl-semi-sync-slave-enabled=1
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,半同步复制都会自动还原为常规的异步复制继续复制操作,不再使用半同步复制。