半同步复制原理图
#半同步启动需要主从两端都需要加载安装各自对应的semi模块,从库端支持半同步功能的数量至少一台;主库端当一个事务成功提交后,并不及时反馈给前端用户,该线程会被临时block,等待由从库端返回确认该条事务也同时成功写入到relay log中的receipt(回执确认),这时主库线程才返回给当前session告知操作完成,半同步复制并不关心在从库一端该事务是否都被执行并被提交完成。
模式实现
1、半同步复制条件
一主一从#实现主从复制 两个插件#主服务器安装rpl_semi_sync_maste#从服务器安装rpl_semi_sync_slave
2、环境搭建(虚拟机)
服务器 版本 IP地址
主服务器MariaDB-5.5.36 192.168.1.120
从服务器MariaDB-5.5.36 192.168.1.121
3、实现主从复制
3.1 主服务器安装MariaDB并配置
此处不再赘述请参考我的博客MariaDB编译安装#
配置主服务器
编辑主配置文件#vim /etc/my.cnflog-bin=/mydata/binlogs/master-bin 设置二进制日志路径及名称binlog_format=mixed 设置二进制日志存储格式为混合模式Server-id =100 设置Server-id#mkdir -pv /mydata/binlogs 创建二进制日志目录#chown -R mysql.mysql /mydata/binlogs 设置属主属组#server mysqld restart
授权用户mysql> grant relication slave,replication client on *.* to ‘rplpass’@’192.168.%.%’ identified by ‘rplpass’;mysql> flush privileges; 重读授权表
查看主服务器状态mysql > show master status;
3.2 从服务器安装MariaDB并配置
#由于使用的是Vmvare,将主服务器克隆一份做从服务器,如此一来主从服务器的数据都是从0开始。关于Vmvare如何克隆有疑问的同学请查阅资料
从服务器配置
#vim /etc/my.cnf注释掉以下两行log-bin=mysql-bin二进制日志文件binlog_format=mixed 二进制日志文件存储格式添加如下行server-id = 200设置server-id relay-log=/mydata/relaylogs/relay-bin 设置中继日志#本次我们做的为一主一从服务器复制,从服务器不需要二进制日志,需要中继日志
连接主服务器并启动
mysql > change master to master_host=’192.168.1.120′,master_user=’rpluser’,master_password=’rplpass’,master_log_file=’master-bin.000003’,master_log_pos=245;mysql > start slave; 启动从服务器复制线程mysql > show slave status; 查看从服务器状态
4、半同步复制的实现
4.1 主服务器配置
安装插件mysql > install plugin rpl_semi_sync_master soname ‘semisync_master.so’查看全局变量mysql > show global variables like ‘%semi%’;
设置主服务器的半同步复制全局变量
mysql > set global rpl_semi_sync_master_enabled=ON; 开启半同步复制mysql > set global rpl_semi_sync_master_timeout=10000; 设置为10秒
4.2 设置从服务器
安装semi插件mysql > install plugin rpl_semi_sync_slave soname ‘semisync_slav.so’;设置从服务器半同步复制全局变量mysql > set global rpl_semi_sync_slave_enabled=ON; 开启半同步复制mysql > stop slave io_thread; 关闭io线程mysql > start slave io_thread; 开启io线程
4.3 查看主从服务器半同步复制状态
主服务器状态
mysql > show global status like ‘%semi%’;
从服务器状态
mysql > show global status like ‘%semi%’;
5、数据半同步复制测试
#主服务器创建数据库mysql > create database SEMI;mysql > show databases; 查看数据库
#从服务器查看数据同步情况mysql > show databases;
数据同步完成后,我们再次来查看一下主服务器的半同步复制状态
mysql > show global status like ‘%semi%’;
离开之后,我想你不要忘记一件事:不要忘记想念我。