异步复制( Asynchronous replication )
MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果down掉了,此时主.上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整
全同步复制( Fully synchronous replication )
指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响
半同步复制( Semisynchronous replication )
介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。
在2010年MySQL 5.5版本之前,一直采用的是这种异步复制的方式。主库的事务执行不会管备库的同步进度,如果备库落后,主库不幸crash,那么就会导致数据丢失。于是在MySQL在5.5中就顺其自然地引入了半同步复制,主库在应答客户端提交的事务前需要保证至少一个从库接收并写到relay log中
mysql的半同步复制
实验环境是基于主从复制!!
(1)在server1(master节点)上安装半同步复制的插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';安装半同步模块
查看插件:
SELECT PLUGIN_NAME, PLUGIN_STATUS 设置
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%semi%';
SET GLOBAL rpl_semi_sync_master_enabled = 1 激活插件

(2)在server2(slave节点)上安装半同步复制的插件
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';安装半同步模块
SET GLOBAL rpl_semi_sync_slave_enabled = 1 开启
STOP SLAVE IO_THREAD; 关闭
START SLAVE IO_THREAD; 开启
从库重启io进程,激活插件之后必须要重启io进程,否则不会生效

(3)server1:查看主库的变量的值
SHOW VARIABLES LIKE 'rpl_semi_sync%';查看变量的值
show status like '%rpl%';查看变量的状态

(4)server2:
SHOW VARIABLES LIKE 'rpl_semi_sync%';
STOP SLAVE IO_THREAD; 关闭从库进行测试

serve2先关闭io进程

(5)server1:
use westos
insert into usertb values ('user6','66666');
等待10s,没有接收到slave的ack请求,自动转换为异步复制,需要等待一个节点完成所有的复制
说明:如果再次添加数据,server1不在等待10s,因为此时已经切换到异步复制了



(6)查看
关闭server2的io线程:

在server1端查看:


本文介绍了MySQL的复制方式,包括异步、全同步和半同步复制。重点讨论了半同步复制,它在主库执行事务后等待至少一个从库确认,提高数据安全性但引入一定延迟。在MySQL 5.5版本开始引入此特性。文中还给出了半同步复制的实验配置步骤。
4595

被折叠的 条评论
为什么被折叠?



