MySQL8.4组复制

https://dev.mysql.com/doc/refman/8.4/en/group-replication.html

1 什么是组复制
  • 组复制主要解决传统异步复制主机宕机可能造成主从节点数据不一致问题
  • MySQL Group Replication简称MGR
  • 原有gtid复制功能进行增强支持模式模式
  • 组复制数据库层面到了只要集群大多数主机可用服务可用也就是3服务器集群允许其中1宕机

  • 组复制提供了分布式状态机复制服务器之间具有很强协调性
  • 当服务器属于同一组它们自动进行协调
  • 传统的主从复制方式一个不等数据量主节点执行事务异步发送节点从节点重新执行
  • 组复制采用整组写入避免单点问题
  • 组复制传输数据使用Paxos协议Paxos协议保证了数据传输一致性原子
  • 基于Paxos协议组复制构建一个分布式状态复制机制这是实现多主复制核心技术
  • 组复制提供多写方案
  • MGR保证数据库服务连续可用但是存在以下问题
    • 一个成员不可用连接到客户不能自主转移其他组成员
    • MySQL Router提供故障转移能力

2 单主模式
2.1 什么是单主模式
  • 模式下只有一个主服务器
  • 主服务器被设置读写模式
  • 组中其他所有成员设置只读模式

2.2 单主模式部署示例

https://dev.mysql.com/doc/refman/8.4/en/group-replication-configuring-instances.html

2.2.1 准备MySQL实例10000
  • 创建目录
mkdir -p /opt/mysql/10000/{data,log,tmp}

  • 准备配置文件
vi /opt/mysql/10000/my.cnf[mysql]
#设置mysql客户端默认编码
default-character-set=utf8
[mysqld]
port=10000
pid-file= /opt/mysql/10000/mysqld.pid
socket= /opt/mysql/10000/mysqld.sock
datadir= /opt/mysql/10000/data
log-error=/opt/mysql/10000/log/mysqld.log
tmpdir=/opt/mysql/10000/tmp
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#服务器唯一ID,默认是1
server-id=10000
#启用二进制日志
log-bin=mysql-bin
#最大连接数
max_connections=1000
#设置默认时区
default-time_zone='+8:00'
# 0:区分大小写
# 1:不区分大小写
lower_case_table_names=1
user = mysql
#启用全局事务标识符(GTID)模式
gtid_mode=on
#强制GTID的一致性。这意味着在执行事务时,MySQL将确保所有涉及的服务器都使用相同的GTID集。
enforce_gtid_consistency=on

  • 初始化
chown -R mysql:mysql /opt/mysql/10000
mysqld --defaults-file=/opt/mysql/10000/my.cnf --initialize

mysqld --defaults-file=/opt/mysql/10000/my.cnf &

  • 初始化密码
#查看临时密码
cat /opt/mysql/10000/log/mysqld.log|grep "A temporary password"
#登录
mysql -uroot -p'EG+Pvd&jj0N=' --socket=/opt/mysql/10000/mysqld.sock
>ALTER USER 'root'@'localhost' identified by '123456';
  flush privileges;

  • 创建同步用户
 mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock
 >CREATE USER 'repl'@'%' IDENTIFIED  BY '123456';
  GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
  flush privileges;

  • 添加组复制配置
vi /opt/mysql/10000/my.cnf
#组复制设置
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "192.168.221.100:33061"
group_replication_group_seeds= "192.168.221.100:33061,192.168.221.100:33062,192.168.221.100:33063"
group_replication_bootstrap_group=off
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"

2.2.2 复制MySQL实例10001
cp -rf /opt/mysql/10000 /opt/mysql/10001
sed -i "s#10000#10001#g" /opt/mysql/10001/my.cnf
rm -f /opt/mysql/10001/data/auto.cnf
sed -i  "s#group_replication_local_address= '192.168.221.100:33061'#group_replication_local_address= '192.168.221.100:33062'#g" /opt/mysql/10001/my.cnf
chown -R mysql:mysql /opt/mysql/10001
mysqld --defaults-file=/opt/mysql/10001/my.cnf &

2.2.3 复制MySQL实例10002
cp -rf /opt/mysql/10000 /opt/mysql/10002
sed -i "s#10000#10002#g" /opt/mysql/10002/my.cnf
rm -f /opt/mysql/10002/data/auto.cnf
sed -i  "s#group_replication_local_address= '192.168.221.100:33061'#group_replication_local_address= '192.168.221.100:33063'#g" /opt/mysql/10002/my.cnf
chown -R mysql:mysql /opt/mysql/10002
mysqld --defaults-file=/opt/mysql/10002/my.cnf &

2.2.3 配置组复制
  • 主库实例10000执行
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock
> set global group_replication_recovery_get_public_key=on;CHANGE REPLICATION SOURCE TO SOURCE_USER='repl', SOURCE_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';SET GLOBAL group_replication_bootstrap_group=ON;START GROUP_REPLICATION;SET GLOBAL group_replication_bootstrap_group=OFF;

  • 从库实例10001执行
mysql -uroot -p'123456' --socket=/opt/mysql/10001/mysqld.sock
> START GROUP_REPLICATION;

  • 从库实例10002执行
mysql -uroot -p'123456' --socket=/opt/mysql/10002/mysqld.sock
> START GROUP_REPLICATION;

  • 查看成员
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock
> SELECT CHANNEL_NAME,MEMBER_ID,MEMBER_HOST,MEMBER_PORT, MEMBER_ROLE FROM performance_schema.replication_group_members;
2.2.4 组复制数据同步测试
  • 主库实例10000插入数据
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock
> create database test;use test;
   create table test (id int,name varchar(10));
   ALTER TABLE test ADD PRIMARY KEY id(id);
   insert into test values(1,'a'),(2,'b'),(3,'c');

  • 从库实例10001查询数据
mysql -uroot -p'123456' --socket=/opt/mysql/10001/mysqld.sock
>  use test;
   select * from test;

  • 从库实例10002查询数据
mysql -uroot -p'123456' --socket=/opt/mysql/10002/mysqld.sock
>  use test;
   select * from test;

2.2.5 组复制主库宕机测试
  • kill主库实例10000
  • 查看成员

3 多主模式

https://dev.mysql.com/doc/refman/8.4/en/group-replication-multi-primary-mode.html

3.1 什么是多主模式
  • 多主模式下没有成员具有特殊角色
  • 任何组成员加入复制读背设置读写模式可都以处理写事物
3.2 多主模式部署示例
  • 关闭实例10000,10001,10002模式
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock
>  stop GROUP_REPLICATION;
set global group_replication_single_primary_mode=off;
set global group_replication_enforce_update_everywhere_checks=ON;mysql -uroot -p'123456' --socket=/opt/mysql/10001/mysqld.sock
>  stop GROUP_REPLICATION;
set global group_replication_single_primary_mode=off;
set global group_replication_enforce_update_everywhere_checks=ON;mysql -uroot -p'123456' --socket=/opt/mysql/10002/mysqld.sock
>  stop GROUP_REPLICATION;
set global group_replication_single_primary_mode=off;
set global group_replication_enforce_update_everywhere_checks=ON;

  • 使用实例10000引导组复制
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock
> SET GLOBAL group_replication_bootstrap_group=ON;
  START GROUP_REPLICATION;
  SET GLOBAL group_replication_bootstrap_group=OFF;

  • 实例10001,10002开启组复制
mysql -uroot -p'123456' --socket=/opt/mysql/10001/mysqld.sock
> START GROUP_REPLICATION;mysql -uroot -p'123456' --socket=/opt/mysql/10002/mysqld.sock
> START GROUP_REPLICATION;

  • 查看成员
mysql -uroot -p'123456' --socket=/opt/mysql/10000/mysqld.sock
>  SELECT CHANNEL_NAME,MEMBER_ID,MEMBER_HOST,MEMBER_PORT, MEMBER_ROLE FROM performance_schema.replication_group_members;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82804.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python后端开发实战:从0到1搭建高可用API服务

引言 Python凭借其简洁的语法和丰富的生态(如Django、Flask、FastAPI等框架),已成为后端开发的主流语言之一。本文将结合一个真实电商API项目,分享从架构设计到部署上线的完整流程,并总结开发过程中常见的坑与最佳实践。 一、实战案例:电商API开发流程 1.1 技术选型 框…

本地部署大模型llm+RAG向量检索问答系统 deepseek chatgpt

项目视频讲解: 本地部署大模型llm+RAG向量检索问答系统 deepseek chatgpt_哔哩哔哩_bilibili 运行结果:

aws instance store 的恢复

1: aws instance store 要在launch instance 才可以创建,而且,通过snapshot 恢复后,instance store 里面的数据会丢失。 下面是创建instance store 的过程,和通过两种方式恢复,发现/etc/fstab 不同的写法,有的不能启动: [root@ip-xx ~]# lsblk NAME MAJ:MIN RM …

React 生命周期与 Hook 理解解析

从生命周期到 Hook:React 组件演进之路 React 组件的本质是管理渲染与副作用的统一体。Class 组件通过生命周期方法实现这一目标,而函数组件则依靠 Hook 系统达成相同效果。 Class 组件生命周期详解 生命周期完整流程 Class 组件生命周期可分为三大阶…

数字孪生技术赋能西门子安贝格工厂:全球智能制造标杆的数字化重构实践

在工业4.0浪潮席卷全球制造业的当下,西门子安贝格电子制造工厂(Electronic Works Amberg, EWA)凭借数字孪生技术的深度应用,构建起全球制造业数字化转型的典范。这座位于德国巴伐利亚州的“未来工厂”,通过虚实融合的数…

从Homebrew找到openssl.cnf文件并拷贝到Go项目下使用

安装OpenSSL 在 macOS 上下载和安装 OpenSSL 最常见和推荐的方式是使用 Homebrew,这是一个 macOS 缺失的包管理器。 如果您还没有安装 Homebrew,请先安装它。安装 Homebrew 后,安装 OpenSSL 只需要一条命令。 步骤 1:安装 Home…

Qt 的简单示例 -- 地址簿

这个工程里有两个窗口,都是QWidget派生的窗口 主窗口: 1. 运用了布局,按钮控件,单行编辑框,富文本编辑框等窗口部件; 2. 运用了 QMap 类; 3. 实现了点击按钮弹出子窗口的功能,这里子…

kubernate解决 “cni0“ already has an IP address different from 10.244.0.1/24问题

问题 NetworkPlugin cni failed to set up pod “coredns-5d4b4db-jkmnl_kube-system” network: failed to set bridge addr: “cni0” already has an IP address different from 10.244.0.1/24 解决方案 这个问题通常是由于Flannel网络插件残留配置导致的IP地址冲突。以下…

QT+opecv如何更改图片的拍摄路径

如何更改相机拍摄图片的路径 前言:基础夯实:效果展示:实现功能:遇到问题:未解决: 核心代码: 前言: 最近在项目开发中遇到需要让用户更改相机拍摄路径的问题,用户可自己选…

66常用控件_QTableWidget的使用

目录 代码示例:使用QTableWidget Table Widget 使⽤ QTableWidget 表⽰⼀个表格控件. ⼀个表格中包含若⼲⾏, 每⼀⾏⼜包含若⼲列. 表格中的每个单元格, 是⼀个 QTableWidgetItem 对象. QTableWidget 核⼼⽅法 方法说明item(int row, int column)根据行数数列获取指定的…

记一次edu未授权访问漏洞

首先进入该网址是一个登录界面,查看源代码,找到js文件,发现存在js.map前端信息泄露,于是我们进行js还原。 得到前端的一些源代码,以及路由API等,我们就可以通过这个源代码,进行目录遍历&#xf…

MySQL 索引和事务

目录 前言 一、MySQL 索引介绍 1. 索引概述 2. 索引作用 3. 索引的分类 3.1 普通索引 3.2 唯一索引 3.3 主键索引 3.4 组合索引 (最左前缀) 3.5 全文索引 (FULLTEXT) 3.6 创建索引的原则依据 3.7 查看索引 3.8 删除索引 二、MySQL 事务 1. 事务的 ACID 原则 MYS…

HTML实战项目:高考加油和中考加油

设计思路 页面加载后会自动显示高考内容,点击顶部按钮可以切换到中考内容。倒计时会每秒更新,为考生提供实时的备考时间参考。 使用代表希望的蓝色和金色渐变作为主色调 顶部导航栏可切换高考/中考内容 添加动态倒计时功能 设计励志名言卡片和备考小贴…

What is Predictive Maintenance (PdM)? Learn How Industrial IoT Enables PdM

文章大纲 从预防性维护到预测性维护服务的转变传统预防性维护的局限性预测性维护的定义工业物联网(IIoT)如何助力预测性维护预测性维护带来的成本效益实施预测性维护面临的挑战企业转向预测性维护的原因参考文献大家好!今天,让我们一起深入了解一下预测性维护技术。它正在彻…

CCPC shandong 2025 G

题目链接:https://codeforces.com/gym/105930/problem/G 题目背景: n 名工人加工 m 个工件,第 i 个工件在第 ti 分钟的开头加入 工人 wi 的收件箱。 每分钟,工人从收件箱里拿出一个工件,完成加工后放入下 一个工人的收…

UE路径追踪Path Tracing和Lumen的区别

在Unreal Engine(UE,虚幻引擎)中,Path Tracing 和 Lumen 是两种不同的全局光照(Global Illumination, GI)和反射技术,各自适用于不同的使用场景。以下是它们的主要区别: &#x1f31…

JaCoCo 是什么

JaCoCo(Java Code Coverage)是一款广泛使用的 Java 代码覆盖率工具,用于分析测试用例对项目代码的覆盖程度,帮助开发者识别未被测试的代码区域,从而提升软件质量。它通常与 JUnit、TestNG 等测试框架及 Maven、Gradle …

火山引擎扣子系列

您提到的“火山引擎扣子系列”指的应该是 **火山引擎推出的智能AI对话开发与应用平台——Coze(中文名:扣子)**。这是一个由字节跳动旗下火山引擎开发的、面向开发者和非技术用户的**低代码/无代码AI Bot开发平台**,旨在帮助用户快…

OpenLayers 加载ArcGIS瓦片数据

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 随着GIS应用的不断发展,Web地图也越来越丰富,除了像ESRI、超图、中地数码这样GIS厂商有各自的数据源格式,也有Google…

大模型是什么?

大模型,英文名叫Large Model,也被称为基础模型(Foundation Model)。我们通常说的大模型,主要指的是其中最常用的一类——大语言模型(Large Language Model,简称LLM)。除此之外&#…