详细介绍: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
- InnoDBCluster是MySQL官方实现高可用+读写分离的架构方案,包含以下组件
- MySQLGroupReplication:简称MGR,是MySQL的主从同步高可用方案,包括数据同步和角色选举
- MySQLShell是InnoDBCluster的管理工具,用来创建和管理集群
- 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,浏览器一点即开,轻松获得接近专业级的修图体验!
✨ 为什么选择在线…
基于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…
这些行业软件你用过哪个
这些行业软件你都知道吗
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…
快速将网站seo南宁网站建设哪个好
可以设置服主与管理员
控制台中设置(需游戏账号在线)
服主
添加:在控制台中输入ownerid空格SteamID
删除:在控制台中输入removeowner空格SteamID
管理员
添加:在控制台中输入moderatorid空格SteamID
删除&#…
怎样建一个自己公司的网站wordpress discuz插件
1、简介
Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。 只不过Topic类型Exchange可以让队列在绑定BindingKey 的时候使用通配符!
BindingKey 一般都是有一个或多个单词组成,多个单词之间以.分割&#x…
20多年前李敖告訴你美國為什麼不可靠?
20多年前李敖告訴你美國為什麼不可靠?地址:
https://www.youtube.com/shorts/ymtCafzVZfQ本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址,还有个别文章是汇总网上多份资料所成,在…
商务网站建设内容上海先进网站设计
修改服务器密码指南,目前介绍两种不同的方案
方法一 指令式
winR键 弹出运行框里输入 cmd 点击确认或者右下角开始程序里面的点开运行 2.在弹出框里手动输入以下一组文字:net user administrator 123456 框内无法粘贴 需要手动输入
其中administrator 是用…
2025美缝剂源头厂家最新推荐权威排行榜:深度解析五大品牌实力与选购指南
美缝剂已成为装修中保障瓷砖耐用性与美观度的核心材料,但其市场乱象让消费者深陷选择困境:劣质产品半年内即发黄脱落,虚假宣传导致环保性能与实际不符,售后缺失让维权难如登天。数据显示,选错美缝剂引发的装修纠纷…