在异步复制中,主库在将事务写入二进制日志后,不会等待从库确认接收到该事务,而是立即继续处理新的事务。
在全同步复制中,主库在提交事务后,必须等待所有从库接收到并应用该事务后,才能继续处理新的事务。
MySQL的半同步复制是一种介于异步复制和全同步复制之间的复制模式。
在半同步复制中,当主服务器执行一个事务并将其写入二进制日志后,它会等待至少一个从服务器确认已接收到该事务的日志记录。只有在收到确认后,主服务器才会继续处理新的事务。如果在指定的超时时间内没有收到确认,复制模式会自动切换回异步复制。
前提:主从架构,参考链接
master配置
修改配置安装插件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
#加载插件
plugin-load=rpl_semi_sync_master=semisync_master.so
#开启半同步
rpl_semi_sync_master_enabled=1
重启服务
systemctl restart mysql
查看插件是否激活
mysql -u root -p
select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';
show status like 'Rpl_semi_sync_master_status';
slave配置
修改配置安装插件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
plugin-load = rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1
重启服务
systemctl restart mysql
查看插件是否激活
mysql -u root -p
select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';
show status like 'Rpl_semi_sync_slave_status';
注意:如果是在高可用架构下启动半同步复制,可以采用以下配置,故障切换后能继续使用半同步复制
plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-master-enabled=1
rpl-semi-sync-slave-enabled=1