MGR---mysql组复制多主模式
组复制有两种模式:单主模式和多主模式。
1.在单主模式下,组复制具有自动选主功能,每次只有一个 server成员接受更新。
2.在多主模式下,所有的 server 成员都可以同时接受更新。
在三台db服务器上面配置映射/etc/hosts:
[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.91.21 master
192.168.91.26 node2
192.168.91.27 node1
数据库配置文件(三台服务器):
# Group Replication
server_id = 100 #服务ID
gtid_mode = ON #全局事务
enforce_gtid_consistency = ON #强制GTID的一致性
master_info_repository = TABLE #将master.info元数据保存在系统表中
relay_log_info_repository = TABLE #将relay.info元数据保存在系统表中
binlog_checksum = NONE #禁用二进制日志事件校验
log_slave_updates = ON #级联复制
log_bin = binlog #开启二进制日志记录
binlog_format= ROW #以行的格式记录
transaction_write_set_extraction = XXHASH64 #使用哈希算法将其编码为散列
loose-group_replication_group_name = 'ce9be252-2b71-11e6-b8f4-00212844f856' #加入的组名
loose-group_replication_start_on_boot = off #为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。
loose-group_replication_local_address = 'master:33061' #以本机端口33061接受来自组中成员的传入连接 根据实际情况填写
loose-group_replication_group_seeds ='master:33061, node1:33062, node2:33063' #组中成员访问表 根据实际情况填写
loose-group_replication_bootstrap_group = off #不启用引导组
loose-group_replication_single_primary_mode = off #关闭单master模式
loose-group_replication_enforce_update_everywhere_checks = ON #多主一致性检查
重启数据库:
[root@master ~]# systemctl restart mysqld
[root@node1 ~]# systemctl restart mysqld
[root@node2 ~]# systemctl restart mysqld
安装插件(三台都需要安装):
mysql> install PLUGIN group_replication SONAME 'group_replication.so';
-- 查看group replication组件
mysql> show plugins;

master操作:
mysql> set SQL_LOG_BIN=0; #停掉日志记录
mysql> grant replication slave on *.* to repl@'192.168.91.%' identified by 'kavl7kAkkle!';
mysql> flush privileges;
mysql> set SQL_LOG_BIN=1; #开启日志记录
mysql> change master to master_user='repl',master_password='kavl7kAkkle!' for channel 'group_replication_recovery'; #构建group replication集群
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;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 775dec89-ac6e-11e9-bfe6-000c29de2cf7 | master | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
node1和node2上操作:
mysql> set SQL_LOG_BIN=0; #停掉日志记录
mysql> grant replication slave on *.* to repl@'192.168.91.%' identified by 'kavl7kAkkle!';
mysql> flush privileges;
mysql> set SQL_LOG_BIN=1; #开启日志记录
mysql> change master to master_user='repl',master_password='kavl7kAkkle!' for channel 'group_replication_recovery'; #构建group replication集群
mysql> set global group_replication_allow_local_disjoint_gtids_join=ON;
Query OK, 0 rows affected (0.01 sec)
mysql> reset master;
mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected (4.02 sec)
mysql> SELECT * FROM performance_schema.replication_group_members; 查看模块是否完成
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 775dec89-ac6e-11e9-bfe6-000c29de2cf7 | master | 3306 | ONLINE |
| group_replication_applier | cb087360-ac2c-11e9-9d6c-000c29cf4f9a | node2 | 3306 | ONLINE |
| group_replication_applier | e919c066-ac2c-11e9-be9e-000c29f2dbd7 | node1 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)
至此组搭建完成,组中有三个成员。
测试:
在三个成员上分别创建master、node1、node2库。
初始库:

库已经同步了。

在master上创建数据:
mysql> use master;
Database changed
mysql> create table t1 (id int primary key,name varchar(20));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t1 values(1,'master');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 values(2,'node1');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 values(3,'node3');
Query OK, 1 row affected (0.01 sec)
在另外两台数据库上查看,数据已经同步了。
模拟一个人节点宕机:
[root@master ~]# systemctl stop mysqld
在node1上查看组成员信息发现master节点已经不再组中了:
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | cb087360-ac2c-11e9-9d6c-000c29cf4f9a | node2 | 3306 | ONLINE |
| group_replication_applier | e919c066-ac2c-11e9-be9e-000c29f2dbd7 | node1 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
2 rows in set (0.00 sec)
在node1上写入数据:
mysql> insert into t1 values(4,'test1');
Query OK, 1 row affected (0.00 sec)
mysql> select * from t1;
+----+--------+
| id | name |
+----+--------+
| 1 | master |
| 2 | node1 |
| 3 | node3 |
| 4 | test1 |
+----+--------+
4 rows in set (0.00 sec)
启动master节点的数据库:
[root@master ~]# systemctl start mysqld
mysql> use master;
Database changed
查看数据此时数据没有同步过来
mysql> select * from t1;
+----+--------+
| id | name |
+----+--------+
| 1 | master |
| 2 | node1 |
| 3 | node3 |
+----+--------+
3 rows in set (0.00 sec)
加入组中:
mysql> start group_replication;
Query OK, 0 rows affected (3.22 sec)
mysql> select * from performance_schema.replication_group_members; 此时master节点已经加入到组中了。
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 775dec89-ac6e-11e9-bfe6-000c29de2cf7 | master | 3306 | ONLINE |
| group_replication_applier | cb087360-ac2c-11e9-9d6c-000c29cf4f9a | node2 | 3306 | ONLINE |
| group_replication_applier | e919c066-ac2c-11e9-be9e-000c29f2dbd7 | node1 | 3306 | ONLINE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)
查看数据,此时已经同步了。
mysql> select * from t1;
+----+--------+
| id | name |
+----+--------+
| 1 | master |
| 2 | node1 |
| 3 | node3 |
| 4 | test1 |
+----+--------+
4 rows in set (0.00 sec)
MGR---mysql组复制多主模式的更多相关文章
- Mysql组复制之单主模式(一)
环境 系统:CentOS release 6.9 (Final) Mysql:5.7 机器: S1 10.0.0.7 lemon S2 10.0.0.8 lemon2 S3 10.0.0.9 lemo ...
- MySQL中间件之ProxySQL(15):ProxySQL代理MySQL组复制
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.ProxySQL+组复制前言 在以前的ProxySQL版本中,要支 ...
- 【MySQL 组复制】1.组复制技术简介
组复制有两种模式 单主模式(single-primary/single-master)下自动选举出一个主节点,从而只允许在同一时刻只有该主节点可以更新数据. 对于MySQL的高级使用人员,可以通过复制 ...
- mysql组复制集群简介
mysql组复制集群拓扑: 环境: centos6.5 mysql5.7.19 一.组复制搭建: 配置hosts文件 再三台服务器上分别启动一个mysql实例,共三个. 参考配置文件如下: serve ...
- 使用MySQL组复制的限制和局限性
本节列出和解释了组复制相关的要求和限制. 1.组复制的要求 要使用组复制,每个MySQL节点必须满足以下条件: 1.1 基本要求 InnoDB存储引擎:数据必须存储在事务型的InnoDB存储引擎中.事 ...
- MySQL组复制MGR(四)-- 单主模式与多主模式
(一)概述 组复制可以运行在单主模式下,也可以运行在多主模式下,默认为单主模式.组的不同成员不能部署在不同模式下,要切换模式,需要使用不同配置重新启动组而不是单个server. 相关参数如下: # 该 ...
- MySQL组复制MGR(一)-- 技术概述
(一)复制技术的发展 MySQL的复制技术主要经历了异步主从复制,半同步复制,组复制(Group Replication)3个阶段. (1)传统的异步主从复制 传统的MySQL提供了一种简单的主从复制 ...
- MySQL组复制MGR(二)-- 组复制搭建
(一)主机操作 (1)路由信息vmnet5 192.168.10.0 (2)主机信息 主机名称 IP地址 操作系统版本 数据库版本 mgr-node1 192.168.10.11 centos 7.4 ...
- mysql组复制安装
参考文档 https://blog.csdn.net/li123128/article/details/80744568 https://www.cnblogs.com/ctulzq/p/863109 ...
随机推荐
- (十)springmvc之文件的处理
一.同步上传文件 导入common-fileupload这个jar包. 配置 springmvc-servlet.xml <?xml version="1.0" en ...
- ASP.NET WEB应用程序(.network4.5)MVC 工作原理
MVC就是模型.视图.控制器. 项目中控制器对应Controllers目录,视图对应Views目录,模型对应Models目录. 1.当我们创建一个控制器时,比如在Controllers目录新建一个名字 ...
- ElementUi使用表单验证出现验证问题
问题: 使用vue element-ui中的form表单验证出现了输入框或者下拉框中明明有值, 但是却还是提示请输入或请选择,错误如下: <el-form status-icon :ref=&q ...
- PHP代码多人开发
我们一定遇到过这样的情况:许多项目是由多个人同时开发的,涉及到不同的开发环境和测试环境我们的许多PHP工程师在windows上开发代码虽然nginx+PHP+MySQL的环境也可以在windows上配 ...
- 第三方应用如何在SAP Kyma上进行服务注册
Jerry之前的公众号文章 什么?在SAP中国研究院里还需要会PHP开发?提到了一个SAP Kyma的应用场景: 旅行兼社交达人伊森,使用经过SAP Kyma扩展之后的WordPress这个网站来写博 ...
- DNS zone file
zone file格式最初由Berkeley Internet Name Domain(BIND)软件包使用,但已被其他DNS server software广泛采用.它们中的一些(例如NSD,Pow ...
- Linux学习之八-配置FTP连接Linux服务器
配置ftp连接Linux服务器 通过配置ftp服务器,可以实现局域网内共享文件,甚至不同用户具有不同权限,需要的工具有Windows平台ftp客户端FileZilla(免费开源) 下载地址:https ...
- waitpid()
waitpid() pid_t waitpid(pid_t pid, int *status, int options); 参数: pid>0 只等待进程ID等于pid的子进程,不管其它已经有多 ...
- 【产品对比】Word开发工具Aspose.Words和Spire.Doc性能和优劣对比一览
转:evget.com/article/2018/4/3/27885.html 概述:Microsoft Office Word是微软公司的一个文字处理器应用程序,作为办公软件必不可少的神器之一,Wo ...
- Qt中使用匿名函数lambda表达式
一.为什么要使用匿名函数lamdba 首先,lambda表达式可以使代码变得简单,C++中,一个lambda表达式表示一个可调用的代码单元.如代码: #include <QCoreApplica ...