一、mysql主从复制类型
1、异步复制:
mysql默认的复制是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果down掉了,此时主上已经提交的事务可能并没有传到从库上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。
2、全同步复制
指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。
3、半同步复制
介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。
二、mysql主从复制:半同步复制
主:
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; #激活插件
从:
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;
show status like '%rpl%';
show variables like '%rpl%';
测试:
STOP SLAVE IO_THREAD; #关闭从数据库io
mysql> insert into usertb values('user4','444'); #主库会卡,等待十秒。
Rpl_semi_sync_master_status | OFF #自动关闭
select * from usertb;
START SLAVE IO_THREAD; #开启后会自动开启半同步
Rpl_semi_sync_master_status | ON