MYSQL半同步
sync:
主库接收一个事务,提交时,需要SLAVE已经写RELAY LOG之后,主库才会完事这个事务的提交,返回给客户端提交成功的提示。
当从库DOWN机或者网络问题,超过一定的时间设置, SYNC就会自动转为ASYNC。
当主库DOWN机时,因为数据已全部保证的同步到了从库, 因此而完成了0数据丢失。
优化点: 开启SEMI_SYNC后,每一个事务需等待备库接收日志后才返回给客户端, 如果是小事务, 两台主机的延迟又较小,则
SEMI-SYNC可以实现在性能很小损失的情况下0数据丢失。
缺点: 完成单条事务增加了额外的等待延迟,延迟的大小取决于网络的好坏。
SEMI-SYNC不是分布式事务, 主库会在自己完成事务后, 等待备库接收事务日志。
async:
这个是默认的同步方式,主库接收一个事务,提交时,不需要去管SLAVE是否写日志了就直接返回给客户端已提交成功。这种情况当主库
DOWN机了,从库上面是会有数据损失的,又或者当从库DOWN机后有可能造成从库无法追上主库的问题。
操作过程::
1. 加载模块:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
2. 主库操作:
install plugin rpl_semi_sync_master soname 'semisync_master.so';
set global rpl_semi_sync_master_enabled=1;
set global rpl_semi_sync_master_timeout=1000;
3. 从库操作:
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
set global rpl_semi_sync_slave_enabled=1;
stop slave;
start slave;
sync: 主库接收一个事务,提交时,需要SLAVE已经写RELAY LOG之后,主库才会完事这个事务的提交,返回给客户端提交成功的提示。 当从库DOWN机或者网络问题,超过一定的时间设置, SYNC就会自动转为ASYNC。 当主库DOWN机时,因为数据已全部保证的同步到了从库, 因此而完成了0数据丢失。 优化点: 开启SEMI_SYNC后,每一个事务需等待备库接收日志后才返回给客户端, 如果是小事务, 两台主机的延迟又较小,则 SEMI-SYNC可以实现在性能很小损失的情况下0数据丢失。 缺点: 完成单条事务增加了额外的等待延迟,延迟的大小取决于网络的好坏。 SEMI-SYNC不是分布式事务, 主库会在自己完成事务后, 等待备库接收事务日志。 async: 这个是默认的同步方式,主库接收一个事务,提交时,不需要去管SLAVE是否写日志了就直接返回给客户端已提交成功。这种情况当主库 DOWN机了,从库上面是会有数据损失的,又或者当从库DOWN机后有可能造成从库无法追上主库的问题。 操作过程:: 1. 加载模块: INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; 2. 主库操作: install plugin rpl_semi_sync_master soname 'semisync_master.so'; set global rpl_semi_sync_master_enabled=1; set global rpl_semi_sync_master_timeout=1000; 3. 从库操作: install plugin rpl_semi_sync_slave soname 'semisync_slave.so'; set global rpl_semi_sync_slave_enabled=1; stop slave; start slave;