Mysql5.7的gtid主从半同步复制和组复制
(一)gtid主从半同步复制
一、半同步复制原理
mysql默认的复制是异步的,主库在执行完客户端提交的事务后会立即将结果返回给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主库如果crash掉了,此时主库上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。
当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。
介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。
二、操作步骤
server2 master
server3 slave
1) 在server2(master)上进行配置文件的修改
---> vim /etc/my.cnf
server-id=1 # 表示master的id
enforce_gtid-consistency=ON
---> /etc/init.d/mysqld start
2)在server3(slave)上编写配置文件
---> vim /etc/my.cnf
server-id=2
---> /etc/init.d/mysqld start
3)在slave中,基于gtid的主从复制搭建成功后,关闭slave。
(可以参照之前的博客mysql的gtid的主从复制)
4)在master中安装半同步复制所需的模块
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> set global rpl_semi_sync_master_enabled=1;
mysql> show variables like '%semi_sync%'; # 半同步复制等待时间为10s
5)在slave中安装模块并查看
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> set global rpl_semi_sync_slave_enabled=1;
mysql> stop slave io_thread;
mysql> start slave io_thread;
mysql> show global variables like '%semi%'; # 查看半同步的信息
---> start slave;
6)在master中插入一条语句,并进行检测
mysql> use student;
mysql> insert into msg values ('4','lala');
mysql> show status like '%semi_sync%'; # 可以看到半同步成功了次数加了1
注释: Rpl_semi_sync_master_yes_tx ##使用半同步成功的次数,数据一致性性能提高
Rpl_semi_sync_master_no_tx ##使用半同步失败的次数,10s后没有得到反馈信息,会转为异步复制
7)将slave的半同步关闭时候,进行插入测试
mysql> set global rpl_semi_sync_slave_enabled=OFF; ###将半同步设置为关闭
mysql> stop slave io_thread;
mysql> start slave io_thread;
mysql> show global variables like '%semi%';
# 此时在server2(master)中再插入一条数据测试。结果如下:
mysql> insert into msg values ('5','ling'); # 本次插入花费了十秒,因为异步复制有十秒等待slave发送ack的时间;若10s后还没有反映,就会转换为异步复制。
mysql> show global status like '%semi%';
# 查看异步复制的执行记录(失败次数+1)
在此过程出现问题和解决方式:
问题1:Slave_SQL_Running: No
解决方法:start slave; # 启动slave(或者关闭slave之后,---> reset slave,再启动slave)
问题2:Slave_IO_Running: Connecting,说明主从库没有连接上
解决方法:1) 在master中是否对用户进行授权
2) 密码或pos号是否正确
3) 防火墙是否关闭
(二)组复制
环境: server2 master
server3、server4 slave
参照官方文档:https://dev.mysql.com/doc/refman/5.7/en/group-replication-adding-instances.html;最终实现三台主机均可以读写,且可以同步。
2、在server2、server3、server4中修改配置文件:
---> vim /etc/my.cnf
server_id=1 # 三个节点的id不同
gtid_mode=ON # 打开gtid模式
enforce_gtid_consistency=ON
master_info_repository=TABLE # 把relay.info记录在slave_relay_log_info表中
relay_log_info_repository=TABLE
log_bin=binlog
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="c1a16382-2146-417d-a1c7-1b77fd000b42" # uuid我们可以使用uuidgen来生成
loose-group_replication_start_on_boot=off
loose-group_replication_local_address= "172.25.2.2:24901" # 填写自己主机的ip
loose-group_replication_group_seeds= "172.25.2.2:24901,172.25.2.3:24902,172.25.2.4:24901" # 三个节点ip
loose-group_replication_bootstrap_group= offloose-group_replication_enforce_update_everywhere_checks=onloose-group_replication_ip_writelist='127.0.0.1/8,172.25.2.0/24'loose-group_replication_single_primary_mode=off
---> /etc/init.d/mysqld start # 启动数据库
3、在server2中进行mysql的登陆,并进行设置。(随机密码在/var/log/mysqld下查找)
mysql> SET SQL_LOG_BIN=0; # 关闭日志同步
mysql> alter user root@localhost identified by 'Xniu+123'; # 修改root用户密码
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' identified by 'Xniu+123'; # 向rel_user用户授予所有权限(用来同步信息)
mysql> FLUSH PRIVILEGES; # 刷新授权表
mysql> reset master;
mysql> SET SQL_LOG_BIN=1; # 开启日志记录
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Xniu+123' FOR CHANNEL 'group_replication_recovery';
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so'; # 安装组复制所需的模块
mysql> SHOW PLUGINS;
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
mysql> SELECT * FROM performance_schema.replication_group_members; # 此时server2已添加到组中。(状态为online)
4、在server3和server4中进行mysql的设置。由于步骤相同,在这以server3为例显示:
mysql> SET SQL_LOG_BIN=0;
mysql> alter user root@localhost identified by 'Xniu+123';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%' IDENTIFIED BY 'Xniu+123';
mysql> reset master;
mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Xniu+123' FOR CHANNEL 'group_replication_recovery';
mysql> INSTALL PLUGIN group_replication SONAME 'group_replication.so';
mysql> START GROUP_REPLICATION;
mysql> SELECT * FROM performance_schema.replication_group_members; # 若此时server4也配置完成,则结果如下:(状态均为online)
5、测试
#当我们在server2中创建数据库时,所有节点均可以看到
mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 TEXT NOT NULL);
mysql> INSERT INTO t1 VALUES (1, 'Luis');
server2:
server3:
server4:
# 当我们在server4中插入信息时,在srver2和server3中结果如下:
mysql> INSERT INTO test.t1 VALUES (2, 'Lucy');
server2:
server3:
Mysql5.7的gtid主从半同步复制和组复制的更多相关文章
- 实现mysql的读写分离(mysql-proxy)____1(mysql的主从复制,基于gtid的主从复制,半同步复制,组复制)
主从复制原理: 从库生成两个线程,一个I/O线程,一个SQL线程: i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中:主库会生成一个 log ...
- 搭建MySQL的主从、半同步、主主复制架构
复制其最终目的是让一台服务器的数据和另外的服务器的数据保持同步,已达到数据冗余或者服务的负载均衡.一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作为主服务器.主从服务器可以位于不同的网络拓 ...
- MariaDB主从半同步复制详解
半同步复制(Semisynchronous replication) 介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay lo ...
- mysql5.7基于gtid主从重做
master上备份mysql/data/Percona-5721/scripts/xtra_sohmysql_fullbak.sh scp 备份文件到备机 关闭slave service mysql ...
- Centos7.5部署MySQL5.7基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)
之前已经详细介绍了Mysql基于GTID主从复制的概念,原理和配置,下面整体记录下MySQL5.7基于GTID主从复制+并行复制+增强半同步复制+读写分离环境的实现过程,以便加深对mysql新特性GT ...
- MySQL5.6复制技术(2)-主从部署以及半同步配置详细过程
当前环境规划 主机名称 ec2t-pgtest-01 ec2t-pgtest-02 IP地址 10.189.102.118 10.189.100.195 角色 master slave 系统版本 Ce ...
- mysql 架构篇系列 4 复制架构一主一从搭建(半同步复制)
一.概述 在mysql 5.5之前,mysql 的复制是异步操作,主库和从库的数据之间存在一定的延时,这样存在一个隐患:当主库上写入一个事务并提交成功,而从库尚未得到主库推送的Binlog日志时,主库 ...
- centos7下mysql半同步复制原理安装测试详解
原理简介: 在MySQL5.5之前,MySQL的复制其实都是异步复制(见下图),主库和从库的数据之间存在一定的延迟,这样存在一个隐患:当在主库上写入一个事务并提交成功,而从库尚未得到主库推送的BinL ...
- (5.5)mysql高可用系列——MySQL半同步复制(实践)
关键词,mysql半同步复制 [0]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数据容灾和主库备机,采用默认传统的异步复 ...
随机推荐
- 使用spring boot ,和前端thymeleaf模板进行开发路径问题
加入引用:<html xmlns:th="http://www.thymeleaf.org">1:引用templates模板下面的文件时,不要用/绝对路径. 2:引用s ...
- web http协议
http协议超文本传输协议 http协议是IOS七层协议的应用层,是基于TCP/IP协议的,为什么还要多一个协议了,其实利用TCP协议也是可以的,但是TCP三次握手后是一直保持连接的,如果单单是c/s ...
- 图解Kerberos认证工作原理
本文是我在看了这篇英文说明之后的总结 https://technet.microsoft.com/zh-cn/library/cc961976.aspx 是总结,不是翻译,所以是我看后按自己的理解写的 ...
- 使用idea 搭建Spring+mybatis
1.file-new-project 项目的结构如下: 在WEB-INF 下面新建一个 文件夹lib 右键WEB-INF ,new-Directory 所需要的jar 包有: lib下载地址: 网盘地 ...
- FlexPaper_1.2.1.swc——Flex在线显示PDF文档(使用FlexPaper)感悟
http://www.cnblogs.com/wuhenke/archive/2010/03/16/1686885.html 想想自己先前搞PDF转SWF,然后在线浏览功能时,实在是费了不少精力.后来 ...
- Flex远程调用机制RemoteObject应用技巧
转自:http://zerozone.javaeye.com/blog/60846Flex远程调用RemoteObject出现的问题及解答: 本文主要讨论Flex在客户端与J2EE中间层数据交互的过程 ...
- CentOS6.5下Cloudera安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)
不多说,直接上干货! 第一步: Cloudera Manager安装之Cloudera Manager安装前准备(CentOS6.5)(一) 第二步: Cloudera Manager安装之时间服务 ...
- 人脸识别技术大总结(1):Face Detection & Alignment
http://blog.jobbole.com/85783/ 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他技术 - 导航条 - 首页 最新文章 IT 职场 前端 - Ja ...
- 前端学习笔记之CSS属性设置
CSS属性设置 阅读目录 一 字体属性 二 文本属性 三 背景属性 四 盒子模型 五 盒子模型各部分详解 一 字体属性 1.font-weight:文字粗细 取值 描述 normal 默认值,标准 ...
- PHP多进程学习(一)__来初步了解一下PHP多进程及简单demo
php是一门单进程弱类型的语言,PHP处理多并发主要是依赖服务器或PHP-FPM的多进程及它们进程的复用,多进程的作用优点大家可以去网上了解,PHP实现多进程在实际项目中意义也是不容小觑的.比如:日常 ...