MySQL半同步复制配置
从MySQL5.5开始,MySQL以插件的形式支持半同步复制,看看与异步复制的区别是什么
异步复制(Asynchronous replication)
MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。
半同步复制(Semisynchronous replication)
主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。对于一主多从的MySQL架构建议使用半同步复制。
MySQL半同步复制配置方法:
1、安装半同步复制插件
主节点:
mysql > INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
从节点(只选择一台从节点做配置):
mysql > INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
2、检查插件是否安装成功
1 SHOW PLUGINS; 3、启动主从节点的半同步复制功能
SET GLOBAL rpl_semi_sync_master_enabled=1; #主节点做该操作
SET GLOBAL rpl_semi_sync_slave_enabled=1; #从节点做该操作
上面的操作是临时生效,可以写my.cnf配置文件中永久有效
主节点
plugin-load=rpl_semi_sync_master=semisync_master.so rpl_semi_sync_master_enabled=1
从节点
plugin-load=rpl_semi_sync_slave=semisync_slave.so rpl_semi_sync_slave_enabled=1
4、重新启动从节点复制线程。如果没有重启,则默认还是异步复制。重启后Slave会在Master上注册为半同步复制的Slave角色。
START SLAVE;
5、当半同步复制发生超时时(由rpl_semi_sync_master_timeout参数控制,单位是毫秒,默认为10000,即10秒),会暂时关闭半同步复制转而使用异步。当master dump线程发送完一个事务的所有事件之后,如果在rpl_semi_sync_master_timeout内,收到了从库的响应,则主从又重新恢复为半同步复制。示例:如果从节点Down掉,那么在主节点插入一条语句,这个时候会等待10秒才会插入成功,与rpl_semi_sync_master_timeout参数的时间相吻合。等从节点恢复后,主节点再次插入数据,又会恢复正常。
6、查看半同步复制插件所生成的环境变量与状态变量,状态变量一般用于统计数据。
show global variables like '%semi%'; #半同步复制相关的环境变量 show status like '%semi%'; #半同步复制相关的状态变量