mysql半同步模式_MySQL 半同步复制模式的实现

半同步复制原理图

17c1710c5031a0f23dedcd81c22d0e04.png

#半同步启动需要主从两端都需要加载安装各自对应的semi模块,从库端支持半同步功能的数量至少一台;主库端当一个事务成功提交后,并不及时反馈给前端用户,该线程会被临时block,等待由从库端返回确认该条事务也同时成功写入到relay log中的receipt(回执确认),这时主库线程才返回给当前session告知操作完成,半同步复制并不关心在从库一端该事务是否都被执行并被提交完成。

模式实现

1、半同步复制条件

一主一从

#实现主从复制

两个插件

#主服务器安装rpl_semi_sync_maste

#从服务器安装rpl_semi_sync_slave

2、环境搭建(虚拟机)服务器版本IP地址

主服务器MariaDB-5.5.36192.168.1.120

从服务器MariaDB-5.5.36192.168.1.121

3、实现主从复制

3.1 主服务器安装MariaDB并配置此处不再赘述请参考我的博客MariaDB编译安装

#http://jungege.blog.51cto.com/4102814/1394924

配置主服务器

编辑主配置文件

#vim /etc/my.cnf

log-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;

a1cd7166b2f373ab77845b8df60377e2.png

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; 查看从服务器状态

0010c8430ddb2d11d24ab4a8c7d671de.png

4、半同步复制的实现

4.1 主服务器配置

安装插件

mysql > install plugin rpl_semi_sync_master soname 'semisync_master.so'

查看全局变量

mysql > show global variables like '%semi%';

0619c073a01470162c3d86a61aeee133.png

设置主服务器的半同步复制全局变量

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线程

ef8c13569ce842ebb6531ec8f9cc88cb.png

4.3 查看主从服务器半同步复制状态

主服务器状态mysql > show global status like '%semi%';

3d638b02407bdefce01c6f2e79bb2f63.png

从服务器状态

mysql > show global status like '%semi%';

4a2d9a59095efc2a8b57b27272415502.png

5、数据半同步复制测试

#主服务器创建数据库

mysql > create database SEMI;

mysql > show databases; 查看数据库

a228dc32912eca00883d74b3eace600a.png

#从服务器查看数据同步情况

mysql > show databases;

c74702a6c1fd9b823dd79f6668cb1de8.png

数据同步完成后,我们再次来查看一下主服务器的半同步复制状态

mysql > show global status like '%semi%';

228eaaf33fa36a350acc62e64d29dc00.png

总结:

#MySQL半同步复制已经时间,不论一主一从,还是一主多从模型,其原理相同

拓展:

半同步复制使MHA更加完美

#半同步可以最大程度的保障主服务器MySQL执行过的语句被成功复制到从服务器MySQL的relay log中;而当主库发生故障时,使从库的状态更接近主库,保持最小的数据差异。基于半同步这个特点,可以将其与MHA一起使用,当主库故障,故障自动切换被触发,在这个过程中MHA需要比较主库与从库日志差异,由于半同步的特点,差异日志会尽可能的少,那么MHA在进行判断比较、差异生成、拷贝直至最后的差异应用,这一系列的时间消耗都会得到缩减,这样MHA的切换时间就相应减少,数据库故障可以快速恢复。

个人水平有限,如有错误及不详尽指出请指出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值