MySQL 半同步复制模式的实现

半同步复制原理图

#半同步启动需要主从两端都需要加载安装各自对应的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%’;

离开之后,我想你不要忘记一件事:不要忘记想念我。

MySQL 半同步复制模式的实现

相关文章:

你感兴趣的文章:

标签云: