单主模式和多主模式切换
1 组复制模式切换注意点
组复制有两种运行模式,一种是单主模式,一种是多主模式。这个模式是在整个组中设置的,由 group_replication_single_primary_mode
这个系统变量指定,而且在所有成员上必须保持一致。ON 表示单主模式,这也是默认的模式;OFF 表示多主模式。需要注意的是,不能在同一个组的成员中同时使用不同的模式,比如:一个成员配置在多主模式,而另一个成员在单一主模式下。
当组复制正在运行时,不能手动更改 group_replication_single_primary_mode
的值。
在MySQL 8.0.13之前的版本中,如果要更改组的模式,必须停止组复制并在所有成员上更改 group_replication_single_primary_mode
的值。然后进行一次完整的组重启(由 group_replication_bootstrap_group=ON
的服务器引导),以实施对新操作配置的更改。注意:不需要重新启动mysqld服务,只需要将组复制重新引导即可。
从MySQL 8.0.13开始,支持在线对组复制模式进行变更。使用 group_replication_switch_to_single_primary_mode()
和 group_replication_switch_to_multi_primary_mode()
这两个函数在组复制仍在运行时将组从一种模式切换到另一种模式。这两个函数会管理切换组模式的过程,并确保数据的安全性和一致性。
更详细内容请参考官方手册:group-replication-changing-group-mode.html
2 MySQL8.0.13版本前切换方法
在MySQL8.0.13版本之前的版本,不支持在线切换组复制的模式,切换模式需要重启整个组复制。
一、单主模式切换为多主模式
1.查看集群状态和模式
mysql> select * from performance_schema.replication_group_members;
mysql> show status like 'group_replication_primary_member';
判断单主模式的方法是,系统状态变量group_replication_primary_member
不为空,会显示主节点的成员号。
2.在所有节点上停止组复制
mysql> stop group_replication;
3.修改主库的配置并重启
mysql>
set global group_replication_single_primary_mode=off;
set global group_replication_enforce_update_everywhere_checks=on;
set global group_replication_bootstrap_group=on;
start group_replication;
set global group_replication_bootstrap_group=OFF;
参数说明:
- group_replication_single_primary_mode:单主模式;
- group_replication_enforce_update_everywhere_checks:冲突检测,严格的一致性检查;
- group_replication_bootstrap_group:组复制初始化。
4.修改从库的配置并重启
mysql>
set global group_replication_single_primary_mode=off;
set global group_replication_enforce_update_everywhere_checks=on;
start group_replication;
二、多主模式切换为单主模式
1.在所有节点上停止组复制
mysql> stop group_replication;
2.修改主库的配置并重启
mysql>
set global group_replication_enforce_update_everywhere_checks=off;
set global group_replication_single_primary_mode=on;
set global group_replication_bootstrap_group=on;
start group_replication;
set global group_replication_bootstrap_group=OFF;
4.修改从库的配置并重启
mysql>
set global group_replication_enforce_update_everywhere_checks=off;
set global group_replication_single_primary_mode=on;
start group_replication;
三、问题探究
我们知道,单主模式和多主模式的一个很本质的区别是单主模式只有主库支持读写,从库只读。
将集群从单主模式切换为多主模式,就要求单主模式的从库要从只读设置为可读可写。设置只读的参数为read_only
和super_read_only
。
不知道各位是否有疑问,当组复制模式转换时,是否需要手动设置上面这两个参数?
比如,当单主模式切换为多主模式时,read_only
和super_read_only
MySQL是否会自动设置为OFF?
实验过程如下:
实验结论:不需要手动设置只读参数。
3 MySQL8.0.13及以后版本切换方法
在MySQL8.0.13版本开始,支持在线切换组复制模式,不需要重启,只需要执行两个内置的函数即可快速完成切换。
一、单主模式切换为多主模式
使用group_replication_switch_to_single_primary_mode()函数将单主模式切换为多主模式。
在任意节点执行如下命令:
mysql> select group_replication_switch_to_multi_primary_mode();
+--------------------------------------------------+
| group_replication_switch_to_multi_primary_mode() |
+--------------------------------------------------+
| Mode switched to multi-primary successfully. |
+--------------------------------------------------+
1 row in set (1.01 sec)
查看成员状态:
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 13fc049e-c133-11ee-a377-000c29df1f85 | 192.168.131.20 | 3306 | ONLINE | PRIMARY | 8.0.27 | XCom |
| group_replication_applier | 248563ac-c133-11ee-a387-000c29551477 | 192.168.131.30 | 3306 | ONLINE | PRIMARY | 8.0.27 | XCom |
| group_replication_applier | f40395ea-c132-11ee-9249-000c29c00092 | 192.168.131.10 | 3306 | ONLINE | PRIMARY | 8.0.27 | XCom |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)
切换后MEMBER_ROLE的值都为PRIMARY。
二、多主模式切换为单主模式
查看集群模式和成员号:
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 13fc049e-c133-11ee-a377-000c29df1f85 | 192.168.131.20 | 3306 | ONLINE | PRIMARY | 8.0.27 | XCom |
| group_replication_applier | 248563ac-c133-11ee-a387-000c29551477 | 192.168.131.30 | 3306 | ONLINE | PRIMARY | 8.0.27 | XCom |
| group_replication_applier | f40395ea-c132-11ee-9249-000c29c00092 | 192.168.131.10 | 3306 | ONLINE | PRIMARY | 8.0.27 | XCom |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)
指定成员号切换模式:
mysql> SELECT group_replication_switch_to_single_primary_mode('f40395ea-c132-11ee-9249-000c29c00092');
+-----------------------------------------------------------------------------------------+
| group_replication_switch_to_single_primary_mode('f40395ea-c132-11ee-9249-000c29c00092') |
+-----------------------------------------------------------------------------------------+
| Mode switched to single-primary successfully. |
+-----------------------------------------------------------------------------------------+
1 row in set (0.03 sec)mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | 13fc049e-c133-11ee-a377-000c29df1f85 | 192.168.131.20 | 3306 | ONLINE | SECONDARY | 8.0.27 | XCom |
| group_replication_applier | 248563ac-c133-11ee-a387-000c29551477 | 192.168.131.30 | 3306 | ONLINE | SECONDARY | 8.0.27 | XCom |
| group_replication_applier | f40395ea-c132-11ee-9249-000c29c00092 | 192.168.131.10 | 3306 | ONLINE | PRIMARY | 8.0.27 | XCom |
+---------------------------+--------------------------------------+----------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.00 sec)
4 总结
MySQL组复制模式切换操作总体上并不复杂,在操作时只需要特别注意环境版本,MySQL8.0.13版本之前模式切换需要重启整个组复制,从MySQL8.0.13版本开始可以在线切换。
模式切换实际上是修改两个系统参数:group_replication_enforce_update_everywhere_checks
和group_replication_single_primary_mode
。我们对比手动修改参数和在线切换两种方式不难发现,其实在线切换执行的MySQL函数自动帮我们将这两个系统参数进行同步修改,并且固化到mysqld-auto.cnf配置文件中。
【关联文章】
1)MySQL组复制的介绍
2)MySQL单主模式部署组复制
3)单主模式和多主模式切换
4)MySQL组复制的管理
相关文章:

单主模式和多主模式切换
1 组复制模式切换注意点 组复制有两种运行模式,一种是单主模式,一种是多主模式。这个模式是在整个组中设置的,由 group_replication_single_primary_mode 这个系统变量指定,而且在所有成员上必须保持一致。ON 表示单主模式&#…...

petalinux2018.3安装步骤
1、虚拟机安装ubuntu-16.04.7-desktop-amd64.iso (注意:安装ubuntu-18.04.6-desktop-amd64.iso和ubuntu-16.04.6-desktop-i386.iso会报以下错误) environment: line 314: ((: 10 #15~1 > 10 #3: syntax error in expression (error toke…...
ubuntu22.04下使用conda安装pytorch(cpu及gpu版本)
本文介绍了conda下安装cpu、gpu版本的pytorch;并介绍了如何设置镜像源 ubuntu环境安装pytorch的CPU版本与GPU版本 系统:ubuntu22.04 显卡:RTX 3050 依赖工具:miniconda 确认环境 lsb_release -a No LSB modules are available.…...
突破编程_C++_高级教程(模板编程的基础知识)
1 模板编程的基本概念 C 的模板编程是一种编程技术,它允许程序员编写处理不同类型数据的通用代码。通过使用模板,可以创建与特定数据类型无关的函数或类,这些函数或类在编译时可以根据需要生成特定数据类型的版本。这增加了代码的复用性、灵…...

胆小勿入!AI创作恐怖电影宣传片《生化危机:重生》
胆小勿入!AI创作恐怖电影宣传片《生化危机:重生》 "The city is falling, and the dead walk among us." "In the shadow of the apocalypse, the fight for survival begins." "The streets are silent, but the nightmare …...

HTTP 超文本传送协议
1 超文本传送协议 HTTP HTTP 是面向事务的 (transaction-oriented) 应用层协议。 使用 TCP 连接进行可靠的传送。 定义了浏览器与万维网服务器通信的格式和规则。 是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。 H…...
MySQL导入/导出数据
MySQL导入/导出数据 文章目录 MySQL导入/导出数据一、MySQL 导入数据1、mysql 命令导入2、source 命令导入3、使用 LOAD DATA 导入数据4、使用 mysqlimport 导入数据4.1、mysqlimport的常用选项介绍 二、MySQL 导出数据1、使用 SELECT ... INTO OUTFILE 语句导出数据2、mysqldu…...

Matplotlib初探:认识数据可视化与Matplotlib
Matplotlib初探:认识数据可视化与Matplotlib Fig.1 利用Matplotlib进行数据可视化( 可视化代码见文末) 🌵文章目录🌵 🌳引言🌳🌳一、数据可视化简介🌳🌳二、Matplotlib库简介&#x…...

LeetCode 0987.二叉树的垂序遍历:遍历时存节点信息,遍历完自定义排序
【LetMeFly】987.二叉树的垂序遍历:遍历时存节点信息,遍历完自定义排序 力扣题目链接:https://leetcode.cn/problems/vertical-order-traversal-of-a-binary-tree/ 给你二叉树的根结点 root ,请你设计算法计算二叉树的 垂序遍历…...
TCP 和 UDP的区别
文章目录 概述区别UDPTCPTCP与UDP的选择UDP和TCP编程区别 概述 TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是互联网中两种最常用的传输层协议 总的来…...
Python 将一维数组或矩阵变为三维
Python 将一维数组或矩阵变为三维 正文 正文 话不多说直接上代码: import numpy as npsampling_points 10001arr np.linspace(0, 2, sampling_points) arr_3D arr.reshape(1, 1, -1) print(arr_3D) """ result: [[[0.0000e00 2.0000e-04 4.0000…...

Python如何实现定时发送qq消息
因为生活中老是忘记各种事情,刚好又在学python,便突发奇想通过python实现提醒任务的功能(尽管TIM有定时功能),也可定时给好友、群、讨论组发送qq消息。其工作流程是:访问数据库提取最近计划——>根据数据…...
支付方式接入:支付宝、微信支付、微软支付
支付方式接入:支付宝、微信支付、微软支付 1、微信支付-接入指引 2、支付宝-接入指引 3、微软支付-接入指引 3.1、使用visual studio打包应用(发布到微软市场):Package a desktop app from source code using Visual Studio -…...
C++中的互斥量
互斥量是一个类,互斥量的使用必须引入头文件#include <mutex>。互斥量就如同一把锁,在同一时间,多个线程都可以调用lock成员函数尝试给这把锁头加锁,但是只有一个线程可以成功给这把锁加锁,其他没有加锁成功的线…...

盲盒小程序开发
现如今,盲盒已经成为了市场上不可忽视的新型消费模式,并且也逐渐遍布在全球各地中。盲盒的种类商品也逐渐丰富完善,不在局限于性价比高的盲盒玩具、手办等,也发展到了美妆、电子、食品等行业,具有较大的实用性和收藏价…...

安装 Windows 10
1.镜像安装 镜像安装:安装Windows 10 2.安装过程(直接以图的形式呈现) 选择专业版的 等待安装即可...

C++文件操作->文本文件(->写文件、读文件)、二进制文件(->写文件、读文件)
#include<iostream> using namespace std; #include <fstream>//头文件包含 //文本文件 写文件 void test01() { //1.包含头文件 fstream //2.创建流对象 ofstream ofs; //3.指定打开方式 ofs.open("test.txt", ios::out); //4.写…...
Mac相关问题
Mac 更新node版本 第一步,先查看本机node.js版本: node -v 第二步,清除node.js的cache: sudo npm cache clean -f 第三步,安装 n 工具,这个工具是专门用来管理node.js版本的,别怀疑这个工具…...

Python爬虫之Splash详解
爬虫专栏:http://t.csdnimg.cn/WfCSx Splash 的使用 Splash 是一个 JavaScript 渲染服务,是一个带有 HTTP API 的轻量级浏览器,同时它对接了 Python 中的 Twisted 和 QT 库。利用它,我们同样可以实现动态渲染页面的抓取。 1. 功…...
Deep深度系统下载安装Beyond compare4
Beyond Compare 4下载和安装 1、在线安装 Debian, Ubuntu安装命令: wget https://www.scootersoftware.com/bcompare-4.4.6.27483_amd64.deb sudo apt update sudo apt install ./bcompare-4.4.6.27483_amd64.deb Redhat Enterprise Linux, Fedora, CentOS安装命令…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...