详细介绍:MySQL高可用集群

news/2025/10/5 10:21:15/文章来源:https://www.cnblogs.com/tlnshuju/p/19126327

详细介绍:MySQL高可用集群

2025-10-05 10:17  tlnshuju  阅读(0)  评论(0)    收藏  举报

https://dev.mysql.com/doc/mysql-shell/8.4/en/mysql-innodb-cluster.html

1 什么是MySQL高可用集群
  • MySQL高可用集群MySQLInnoDBCluster
  • InnoDBClusterMySQL官方实现高可用+读写分离架构方案包含以下组件
    • MySQLGroupReplication简称MGRMySQL主从同步高可用方案包括数据同步角色选举
    • MySQLShellInnoDBCluster管理工具用来创建管理集群
    • MySQLRouter业务流量入口支持MGR主从角色判断可以配置不同端口分别对外提供读写服务实现读写分离
  • MySQLInnoDBCluster架构

  • InnoDBCluster三个MySQL数据库实例构成一个高可用集群
  • 其中一个实例是具有读写能力成员
  • 其他两个实例具有只读能力成员
  • 组复制数据成员复制次成员
  • MySQLRouter连接读写端口客户端请求转发成员连接到只读端口客户端请求转发成员

2 搭建高可用集群示例
2.1 准备三个MySQL实例
2.2.1 准备MySQL实例20000
  • 创建目录
mkdir -p /opt/mysql/20000/{data,log,tmp}

  • 准备配置文件
vi /opt/mysql/20000/my.cnf[mysql]
#设置mysql客户端默认编码
default-character-set=utf8
[mysqld]
port=20000
pid-file= /opt/mysql/20000/mysqld.pid
socket= /opt/mysql/20000/mysqld.sock
datadir= /opt/mysql/20000/data
log-error=/opt/mysql/20000/log/mysqld.log
tmpdir=/opt/mysql/20000/tmp
mysqlx-port=20010
mysqlx-socket=/opt/mysql/20000/mysqldx.sock
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#服务器唯一ID,默认是1
server-id=20000
#启用二进制日志
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
#启用并行复制
binlog_transaction_dependency_tracking=WRITESET
replica_preserve_commit_order=ON
replica_parallel_type=LOGICAL_CLOCK
transaction_write_set_extraction=XXHASH64

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

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

  • 初始化密码
#查看临时密码
cat /opt/mysql/20000/log/mysqld.log|grep "A temporary password"
#登录
mysql -uroot -p'ji2m:aJ9K26y' --socket=/opt/mysql/20000/mysqld.sock
>ALTER USER 'root'@'localhost' identified by '123456';
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
flush privileges;

  • root账号赋InnoDB Cluster 相关权限
mysql -uroot -p'123456' --socket=/opt/mysql/20000/mysqld.sock
>
GRANT CLONE_ADMIN, CONNECTION_ADMIN, CREATE USER,
EXECUTE, FILE, GROUP_REPLICATION_ADMIN, PERSIST_RO_VARIABLES_ADMIN, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, ROLE_ADMIN, SELECT, SHUTDOWN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'root'@'%' WITH GRANT OPTION;
GRANT DELETE,
INSERT,
UPDATE ON mysql.* TO 'root'@'%' WITH GRANT OPTION;
GRANT ALTER,
ALTER ROUTINE, CREATE,
CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW,
DELETE,
DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES,
SHOW VIEW,
TRIGGER,
UPDATE ON mysql_innodb_cluster_metadata.* TO 'root'@'%' WITH GRANT OPTION;
GRANT ALTER,
ALTER ROUTINE, CREATE,
CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW,
DELETE,
DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES,
SHOW VIEW,
TRIGGER,
UPDATE ON mysql_innodb_cluster_metadata_bkp.* TO 'root'@'%' WITH GRANT OPTION;
GRANT ALTER,
ALTER ROUTINE, CREATE,
CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW,
DELETE,
DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES,
SHOW VIEW,
TRIGGER,
UPDATE ON mysql_innodb_cluster_metadata_previous.* TO 'root'@'%' WITH GRANT OPTION;

2.2.2 复制实例20001
cp -rf /opt/mysql/20000 /opt/mysql/20001
sed -i "s#20000#20001#g" /opt/mysql/20001/my.cnf
sed -i "s#20010#20011#g" /opt/mysql/20001/my.cnf
rm -f /opt/mysql/20001/data/auto.cnf
chown -R mysql:mysql /opt/mysql/20001
mysqld --defaults-file=/opt/mysql/20001/my.cnf &

2.2.3 复制实例20002
cp -rf /opt/mysql/20000 /opt/mysql/20002
sed -i "s#20000#20002#g" /opt/mysql/20002/my.cnf
sed -i "s#20010#20012#g" /opt/mysql/20001/my.cnf
rm -f /opt/mysql/20002/data/auto.cnf
chown -R mysql:mysql /opt/mysql/20002
mysqld --defaults-file=/opt/mysql/20002/my.cnf &

2.2MySQL Shell部署集群
2.2.1 安装MySQL Shell

MySQL :: Download MySQL Shell

2.2.2 MySQL Shell 集群相关常用命令
mysqlsh root@192.168.221.100:20000 --js
> dba.help(); --查看帮助文档
? dba.deploySandboxInstance --查看具体操作的帮助文档

2.2.3 检测实例是否满足要求
mysqlsh root@192.168.221.100:20000 --js
> dba.checkInstanceConfiguration('root@192.168.221.100:20000');
dba.checkInstanceConfiguration('root@192.168.221.100:20001');
dba.checkInstanceConfiguration('root@192.168.221.100:20002');

返回ok表示验证通过

2.2.4 初始化InnoDB Cluster配置
mysqlsh root@192.168.221.100:20000 --js
> dba.configureInstance('root@192.168.221.100:20000');
dba.configureInstance('root@192.168.221.100:20001');
dba.configureInstance('root@192.168.221.100:20002');

2.2.5 使用主实例创建集群
  • 创建集群
mysqlsh root@192.168.221.100:20000 --js
> var cluster = dba.createCluster('myCluster');

  • 创建集群默认会将当前节点添加集群作为节点
  • 默认创建模式集群

  • 查看集群状态
mysqlsh root@192.168.221.100:20000 --js
> var cluster = dba.getCluster('myCluster');
cluster.status();
2.2.6 添加副本实例

mysqlsh root@192.168.221.100:20000 --js
> var cluster = dba.getCluster('myCluster');
cluster.addInstance('root@192.168.221.100:20001');
cluster.addInstance('root@192.168.221.100:20002');
cluster.status();

新添加进来实例默认作为副本节点

2.3 InnoDB Cluster数据同步测试
  • 主库20000添加数据
mysql -uroot -p'123456' --socket=/opt/mysql/20000/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');

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

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

2.4 InnoDB Cluster主从切换测试
  • kill主库实例20000
  • 查看成员
mysql -uroot -p'123456' --socket=/opt/mysql/20001/mysqld.sock
>
SELECT CHANNEL_NAME,MEMBER_ID,MEMBER_HOST,MEMBER_PORT, MEMBER_ROLE FROM performance_schema.replication_group_members;
  • 查看集群状态
mysqlsh root@192.168.221.100:20001 --js
> var cluster = dba.getCluster('myCluster');
cluster.status();
2.5 MySQL Shell集群常见操作
2.5.1 参数配置
  • 使用cluster.options()查看当前集群配置属性
  • 集群参数配置分为两种方式
    • cluster.setOption()设置集群属性所有节点
    • cluster.setInstanceOption()设置指定节点属性
mysqlsh root@192.168.221.100:20000 --js
> var cluster = dba.getCluster('myCluster');
cluster.setOption("memberWeight",
50);
#重新加入集群重试次数改为5次
cluster.setOption("autoRejoinTries",
5);#将其中一个节点的权重改为75
cluster.setInstanceOption("192.168.221.100:20001",
"memberWeight",
75);
#重新加入集群重试次数改为10次
cluster.setInstanceOption("192.168.221.100:20001",
"autoRejoinTries",
10)

2.5.2 配置节点权重
  • memberWeight选项0~100之间整数缺省值50;
  • 该值故障转移自动选举节点百分比权重
  • 具有较高memberWeight实例更有可能集群选为节点
mysqlsh root@192.168.221.100:20000 --js
> var cluster = dba.getCluster('myCluster');
#查看集群的参数配置
cluster.options();#创建集群配置
dba.createCluster('myCluster', {memberWeight:75});
#添加实例时配置
var cluster = dba.getCluster();
cluster.addInstance('root@192.168.221.100:20001',{memberWeight:50});
#集群创建完后修改配置
cluster.setInstanceOption('192.168.221.100:20000',
'memberWeight',
100)

2.5.3 将节点重新加入集群
  • 状态missing节点组复制关闭或者中断
  • 使用cluster.rejionInstance()重新加入集群
  • 重新节点设置MGR相关参数

2.5.4 集群多数节点异常恢复
  • 集群多个节点异常则失去仲裁机制无法选举主节点
  • 使用cluster.forceQuorumUsingPartitionOf集群剥离单节点运行
2.5.5 集群节点角色切换
  • 模式指定节点切换
mysqlsh root@192.168.221.100:20000 --js
> var cluster = dba.getCluster('myCluster');
cluster.setPrimaryInstance('192.168.221.100:20001');

  • 单主模式切换模式
mysqlsh root@192.168.221.100:20000 --js
> var cluster = dba.getCluster('myCluster');
cluster.switchToMultiPrimaryMode();

  • 多主模式切换模式
mysqlsh root@192.168.221.100:20000 --js
> var cluster = dba.getCluster('myCluster');
cluster.switchToSinglePrimaryMode("192.168.221.100:20000")

2.5.6 销毁集群
mysqlsh root@192.168.221.100:20000 --js
> var cluster = dba.getCluster('myCluster');
cluster.dissolve();

2.5.7 创建集群管理用户
mysqlsh root@192.168.221.100:20000 --js
> var cluster = dba.getCluster('myCluster');
cluster.setupAdminAccount('test');
  • 操作创建MySQL系统账号
  • mysqlsh连接集群也可使用账号登录
2.6 MySQL Router连接集群
2.6.1 安装MySQL Router

MySQL :: Download MySQL Router

2.6.2 配置路由
mysqlrouter --bootstrap root@192.168.221.100:20000 --force --user=root
2.6.3 查看集群路由信息
mysqlsh root@192.168.221.100:20000 --js
> var cluster = dba.getCluster('myCluster');
cluster.listRouters();
2.6.4 启动路由

mysqlrouter &

2.6.5 通过路由连接MySQL
  • mysqlclient连接路由
mysql -uroot -p123456 -P6446 -h192.168.221.100
  • mysqlsh连接路由
mysqlsh root@192.168.221.100:6446 --sql
2.7 MySQL Router连接测试
  • R/W端口测试读写
  • R/O端口测试读写
  • R/W Split端口测试读写

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

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

相关文章

Photoshop 在线网页版?是的,它来了!免费使用指南

还在烦恼电脑空间不够,装不下庞大的PS软件?或是突然需要处理图片,却发现设备里没有安装修图工具?别着急,今天推荐一款超实用的工具——在线PS,浏览器一点即开,轻松获得接近专业级的修图体验! ✨ 为什么选择在线…

最好的翻译论文网站

最好的翻译论文网站https://www.yiyibooks.cn/arxiv/2403.14621v1/index.html

基于Python+Vue开发的母婴商城管理系统源码+运行步骤

项目简介该项目是基于Python+Vue开发的母婴商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于…

2025防火隔断品牌最新推荐排行榜:甲级防火玻璃隔断厂家深度解析,精选优质品牌助力采购决策!

当前建筑行业对防火安全的要求日益严格,防火隔断作为关键防护设施,市场需求持续攀升,但行业现状却让采购者面临诸多困扰。不少品牌缺乏核心技术,产品耐火性能不达标,无法在火灾中有效阻隔火势与有毒烟气;部分新兴…

福建建筑人才网官方网站国外做游戏的视频网站有哪些问题

由ASCII码表的输出程序,我们可以认识到使用循环语句处理一组连续的数据有着巨大的优势。在更普遍的情况下,数据由一组离散的数值组成,如一组学生的考试成绩。对于这些数据的处理,有效的方式是使用循环。但前提是数据可以在循环中有序的访问。ASCII码表输出程序中,循环变量…

北京高端网站设计原画零基础自学

今天给大家分享一下SQLServer常用的配置函数知识,希望对初学者能有所帮助!1、DATEFIRST Datefirst返回值tinyint说明:datefirst指一周中的第一天,英语中第一天为星期日示例:SELECT DATEFIRST AS 1st Day, DATEPART(dw, GETDATE())…

做网站较好的框架安阳做网站推广最好的公司

这里介绍MySQL数据库和Navicat的使用 1.下载MySQL数据库及MySQL客户端管理工具Navicat 登录www.mysql.com下载MySQL 登录www.navicat.com.cn/download下载客户端管理工具 2.启动MySQL数据库服务器 以管理员身份打开命令提示窗口 找到mysql的bin目录 输入初始化命令mysqld…

机器学习Day5-模型诊断 - 详解

机器学习Day5-模型诊断 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

鲲鹏Arm+麒麟V10 K8s 离线部署教程 - 教程

鲲鹏Arm+麒麟V10 K8s 离线部署教程 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

高端企业网站公司企业培训师资格证报考2023

前言 在今天的技术世界中,Linux已成为广泛使用的操作系统之一,而对于运维人员和开发人员来说,磁盘分区挂载是一个至关重要的任务。正确地管理和配置磁盘分区挂载可以极大地提升系统的性能和可靠性,同时也能确保数据的安全性。 通…

完整教程:前端八股之CSS

完整教程:前端八股之CSS2025-10-05 10:00 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fo…

线段树模板1

#include<bits/stdc++.h> using namespace std; const int maxn=1e6+10; #define ll long longll n,m,sum[maxn<<2],add[maxn<<2];void pushup(ll id){sum[id]=sum[id<<1]+sum[id<<1|1]…

这些行业软件你用过哪个

这些行业软件你都知道吗 Altair HW FEKO 2022.1.2 x64 Altair PSIM Professional 2022.1 x64 with Full License Altair PSIM Professional 2023 with Full Features Altair S-CALC, S-CONCRETE, S-FOUNDATION 2023 a…

提供远程服务

3DVista Virtual Tour Suite 2023.0.13 3DVista Virtual Tour Suite 2023.2.10 3DVista Virtual Tour Suite 2025 AGI STK 12.6 全部模块可用 Alteryx Intelligence Suite 2023.2 Ansys Systems Tool Kit (STK) P Ansy…

分享一些软件资讯

├── 3DCoat 2022.24.7z ├── Flow.Science.Flow-3D.v11.2.Update2.Linux.x64-SSQ.rar ├── v:camcenter ├── 6SigmaDCX 12 ├── 6sigmaDCX 15.0+16.3 ├── 6sigmaET 13.1 14 16.3 17.1 ├── MSC Apex…

快速将网站seo南宁网站建设哪个好

可以设置服主与管理员 控制台中设置&#xff08;需游戏账号在线&#xff09; 服主 添加&#xff1a;在控制台中输入ownerid空格SteamID 删除&#xff1a;在控制台中输入removeowner空格SteamID 管理员 添加&#xff1a;在控制台中输入moderatorid空格SteamID 删除&#…

怎样建一个自己公司的网站wordpress discuz插件

1、简介 Topic类型的Exchange与Direct相比&#xff0c;都是可以根据RoutingKey把消息路由到不同的队列。 只不过Topic类型Exchange可以让队列在绑定BindingKey 的时候使用通配符&#xff01; BindingKey 一般都是有一个或多个单词组成&#xff0c;多个单词之间以.分割&#x…

20多年前李敖告訴你美國為什麼不可靠?

20多年前李敖告訴你美國為什麼不可靠?地址: https://www.youtube.com/shorts/ymtCafzVZfQ本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址,还有个别文章是汇总网上多份资料所成,在…

商务网站建设内容上海先进网站设计

修改服务器密码指南,目前介绍两种不同的方案 方法一 指令式 winR键 弹出运行框里输入 cmd 点击确认或者右下角开始程序里面的点开运行 2.在弹出框里手动输入以下一组文字&#xff1a;net user administrator 123456 框内无法粘贴 需要手动输入 其中administrator 是用…

2025美缝剂源头厂家最新推荐权威排行榜:深度解析五大品牌实力与选购指南

美缝剂已成为装修中保障瓷砖耐用性与美观度的核心材料,但其市场乱象让消费者深陷选择困境:劣质产品半年内即发黄脱落,虚假宣传导致环保性能与实际不符,售后缺失让维权难如登天。数据显示,选错美缝剂引发的装修纠纷…