mysql8.0.43使用InnoDB Cluster配置主从复制

2025-09-29 13:50

本文主要是介绍mysql8.0.43使用InnoDB Cluster配置主从复制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者...

InnoDB Cluster,顾名思义只有InnoDB引擎可以使用。服务器内存尽量4G,2G完全不够。本文是单主模式,用到的mysql请自行安装

地址名称说明
192.168.157.114:3306mysql_master数据库
192.168.157.115:3306mysql_slave1从库1
192.168.157.116:3306mysql_slave2从库2

1、配置Hosts解析(所有服务器都要执行)

vim /etc/hosts
#输入以下内容
192.168.157.114  mysql_master
192.168.157.115  mysql_slave1
192.168.157.116  mysql_slave2

2、安装mysql shell(所有服务器都要执行)

下载地址:https://downloads.mysql.com/archives/shell/ 需要注意linux系统版本和mysql的版本

mysql8.0.43使用InnoDB Cluster配置主从复制

3、安装mysql shell(所有服务器都要执行)

#使用命令下载
mkdir -p /etc/mysql/shell
cd /etc/mysql/shell
#这个版本号根据mysql的版本来,我mysql是8.0.43,但是没找到shell的8.0.43版本
wget https://downloads.mysql.com/archives/get/p/43/file/mysql-shell-8.0.42-1.el7.x86_64.rpm
#安装
rpm -ivh mysql-shell-8.0.42-1.el7.x86_64.rpm 
#验证是否安装成功
mysqlsh --version

4、修改mysql配置文件(所有服务器都要执行)

1、下面配置项的前缀loose-是mysql官方推荐的写法,所有属于可动态加载插件(Plugin)的参数,而不是MySQL服务器核心(Server Core)的参数,都需要加 loose- 前缀。具体有哪些内容是插件请自行百度

2、可以使用openssl 命令生成证书文件,生成命令在文末补充

# vim /etc/my.cnf 打开文件进入编辑模式,配置下面的内容,注意不要把你自己的配置替换了

[mysqld]
#设置binlog文件名称
log-bin=mysql-log-bin

#设置数据库唯一id(每个节点都不一样)
server-id=1   
 
#禁用除InnoDB引擎外的所有引擎。不然group_replication一直不成功
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY,CSV"

#mysql 插件地址,这个地址必须配置,不然找不到组复制插件。
#通常为 /usr/local/mysql/lib64/mysql/plugin/(官方二进制安装)或 /usr/lib64/mysql/plugin/(包管理器安装,如 yum/dnf)
#实在是不知道地址在哪,就登录mysql执行 SHOW VARIABLES LIKE 'plugin_dir';
plugin_dir = '/usr/lib64/mysql/plugin'

#加载组复制插件,完整路径是/usr/lib64/mysql/plugin/group_replication.so
plugin_load_add = 'group_replication.so' 

#SSL加密方式。REQUIRED  强制加密,DISABLED禁用加密(生产环境慎用)
loose-group_replication_ssl_mode = REQUIRED  
 
#组复制集群名称,可以任意定义。 推荐自己生成UUID
loose-group_replication_group_name='ce492252-9ae0-11ed-94c7-00163e0c22d4'

#指定 Binlog 的记录格式为ROW。
#STATEMENT:每一次更改生成sql,从库直接执行sql,文件最小但数据一致性可能无法保证
#ROW:将主库的行级变动保存到binlog,从库直接更改数据而非执行sql。文件大,但数据一致性最好。一般使用ROW(多主模式必用)
#MIXED:优先使用STATEMENT模式,出现了不安全的sql(随机数、自增主键等)自动切换到ROW。
binlog_format = ROW 

#开启GTID。GTID格式:数据库唯一Id:事务Id
gtid_mode = ON 

# 强制所有事务使用 GTID
enforce-gtid-consistency = ON  

#开启MySQL重启时快速恢复 GTID 状态。
#比如一个自动处理快递单号的程序,执行到ID=1000的时候崩溃了,设置为ON的时候在重启之后自动从1000开始,而不是1-1000再处理一次
binlog_gtid_simple_recovery = ON

#控制每隔多少事务清理一次GTID数据。
#数据存放于mysql.gtid_executed表,默认的是1000,可以自行调整或者不要此参数
#如果每秒1万的事务,可以设置大一点,比如10000,如果每秒就一两百,则可以设小一点,比如100。很多项目都没达到每秒100的事务,除非抢购这种
gtid_executed_compression_period = 1000

#组复制中控制新节点引导过程的“宽松开关”(第一个节点必须是ON,后续节点必须是OFF)
#ON:简化扩容和恢复操作,自动选择引导源并容忍短php暂不一致,保证最终一致
#OFF:严格依赖手动配置引导源,适用于初始组形成或需要强一致性的场景。
loose-group_replication_bootstrap_group = OFF 
 
#MySQL 启动时自动加入组复制集群(一般都需要设置ON,设置OFF只有手动加入集群,生产环境ON)
loose-group_replication_start_on_boot = ON 

#禁用组复制自动获取安全证书(生产环境推荐OFF),设置为ON则加入新节点之后自动从集群中获取公钥文件
#如果设置ON则必须保证已经生成了证书文件,可以使用openssl 命令生成。生成命令在文末补充
loose-group_replication_recovery_get_public_key = OFF 

# 配置SSL/TLS,用于常规客户端连接和组复制通信(group_replication_recovery_get_public_key=OFF必须配置)
ssl_ca = /etc/mysql/ssl/ca.pem
ssl_cert = /etc/mysql/ssl/server-cert.pem
ssl_key = /etc/mysql/ssl/server-key.pem

# 配置恢复通道专用的SSL认证(group_replication_recovery_get_public_key=OFF必须配置)
# 指定恢复通道信任的CA(与上面用的同一个CA)
loose-group_replication_recovery_ssl_ca = /etc/mysql/ssl/ca.pem
# 指定恢复用户(repl)使用的客户端证书和私钥(group_replication_recovery_get_public_key=OFF必须配置)
loose-group_replication_recovery_ssl_cert = /etc/mysql/ssl/client-cert.pem
loose-group_replication_recovery_ssl_key = /etc/mysql/ssl/client-key.pem

#  强制恢复通道使用SSL(group_replication_recovery_get_public_key=OFF必须配置)
loose-group_replication_recovery_use_ssl = ON

# 允许加入集群的 IP 地址段
loose-group_replication_ip_whitelist = 192.168.157.0/24  

# 本机ip地址+组复制端口(每个节点都不一样)
loose-group_replication_local_address = "192.168.157.114:33061" 

# 所有参与主从复制的mysql ip地址+组复制端口。如果有新的节点加入就会先从他自己的配置文件查找集群中的主机,然后加入,并不依赖于他的静态配置。他找到的这个主机就像一个介绍者一样,引导新的节点加入
loose-group_replication_group_seeds = "192.168.157.114:33061,192.168.157.115:33061,192.168.157.116:33061"  

#是否启用 单主模式(默认是单主模式) 
#单主模式会由节点自动选举出一个主节点,这也是为什么节点集群数量必须是奇数的原因,因为如果是偶数可能存在1对1或2对2的情况
loose-group_replication_single_primary_mode = ON  

# 控制数据一致性检查,多主模式时开启 
loose-group_replication_enforce_update_everywhere_checks = OFF  

#组复制节点数量。在mysql 8.0.16仅版本之前仅当group_replication_single_primary_mode = OFF时使用,最好是奇数。
#8.0.16+这个字段就是只读的,系统自动维护,但是可以查询SHOW GLOBAL VARIABLES LIKE 'group_replication_group_size';
#loose-group_replication_group_size = 3   
  
#消息缓存大小,根据服务器配置设置。
#组复制中,节点需要频繁交换事务日志(Binlog)、心跳包、元数据(如 GTID 集合)等消息。
#为了避免频繁读写磁盘(降低性能),节点会将部分消息暂存到内存缓存中,待合适时机再写入磁盘或发送给其他节点。
loose-group_replication_message_cache_size = 1073741824  # 1GB(1024 * 1024 * 1024 字节)

#消息压缩阈值。当节点间传输的消息大小超过该阈值时,MySQL 会自动对消息进行压缩,减少网络带宽消耗,会额外占用CPU
#如果系统内部大多是一般的insert 语句,可以设置小一点。可以减少压缩时候CPU消耗,因为可能达不到压缩的阈值
loose-group_replication_compression_threshold = 1048576  # 1MB(1024 * 1024 字节)
 

修改完之后重启master、slave1、slave2:systemctl restart mysqld

5、设置证书文件权限(所有服务器都要执行)

# 确保证书文件所有权为 mysql 用户(或 MySQL 运行用户)
sudo chown mysql:mysql /etc/mysql/ssl/ca.pem
sudo chown mysql:mysql /etc/mysql/ssl/server-cert.pem
sudo chown mysql:mysql /etc/mysql/ssl/server-key.pem

# 私钥文件权限需严格限制(仅 mysql 用户可读)
sudo chmod 600 /etc/mysql/ssl/server-key.pem
# 公钥和 CA 证书可读(644)
sudo chmod 644 /etc/mysql/ssl/ca.pem
sudo chmod 644 /etc/mysql/ssl/server-cert.pem

6、设置root账户具有组复制的权限(所有服务器都要执行)

#登录mysql之后执行,root是用户名,%代表允许所有地址连接,localhost代表允许本地连接,ip代表允许特定ip连接
GRANT 
    CLONE_ADMIN, 
    CONNECTION_ADMIN, 
    GROUP_REPLICATION_ADMIN, 
    PERSIST_RO_VARIABLES_ADMIN, 
    REPLICATION_APPLIER, 
    REPLICATION_SLAVE_ADMIN, 
    ROLE_ADMIN, 
    SYSTEM_VARIABLES_ADMIN 
ON *.* 
TO 'root'@'%' 
WITH GRANT OPTION;

FLUSH PRIVILEGES; 

7、创建集群(master操作)

#1、登录mysql shell
mysqlsh root@192.168.157.114:3306  #然后输入密码
#2、进入mysql shell命令行之后执行
dba.configureInstance() #会有一个确认框,输入y回车
#输出如下就代表成功
MySQL  192.168.157.114:3306 ssl  js > dba.configureInstance()
Configuring local MySQL instance listening at port 3306 for use in an InnoDB cluster...

This instance reports its own address as mysql_master:3306
Clients and other cluster members will communicate with it through this address by default. If this is not correct, the report_host MySQL system variable should be changed.

applierWorkerThreads will be set to the default value of 4.

The instance 'mysql_master:3306' is valid to be used in an InnoDB cluster.
The instance 'mysql_master:3306' is already ready to be used in an InnoDB cluster.

Successfully enabled parallel appliers.  

#3、创建集群,mysql_group_replication_cluster_0001是集群的名称,任意输入 
var cluster = dba.createCluster('mysql_group_replication_cluster_0001');
#输出以下内容就是成功。
#如果退出了mysql shell,再次进入就需要var cluster = dba.getCluster("集群名称");才能获取到对应的集群,然后才可以使用cluster.status();查看集群状态
MySQL  192.168.157.114:3306 ssl  JS > va编程r cluster = dba.createCluster('mysql_group_replication_cluster_0001')
A new InnoDB Cluster will be created on instance 'mysql_master:3306'.

Validating instance configuration at 192.168.157.114:3306...

This instance reports its own address as mysql_master:3306

Instance configuration is suitable.
NOTE: Group Replication will communicate with other members using 'mysql_master:3306'. Use the localAddress option to override.

* Checking connectivity and SSL configuration...

Creating InnoDB Cluster 'mysql_group_replication_cluster_0001' on 'mysql_master:3306'...

Adding Seed Instance...
Cluster successfully created. Use Cluster.addInstance() to add MySQL instances.
At least 3 instances are needed for the cluster to be able to withstand up to
one server failure.

创建完主节点之后,必须进入mysql命令行执行SET GLOBAL group_replication_bootstrap_group=OFF;(不能直接改配置文件)。接下来配置slave1和slave2

8、配置从库(slave1和slave2操作)

#1、确保loose-group_replication_local_address=ip:端口
# 1.1、slave1的配置
loose-group_replication_local_address = "192.168.157.115:33061"
# 1.2、slave2的配置
loose-group_replication_local_address = "192.168.157.116:33061"

#2、确保service-id是唯一的
# 2.1、slave1的配置
server-id=2
# 2.2、slave2的配置 
server-id=3 

#3、确保loose-group_replication_bootstrap_group = OFF
loose-group_replication_bootstrap_group = OFF

#如果更改了配置,记得重启mysql
systemctl restart mysqld
 
#检查配置是否正确(mysql shell命令行执行),如果输出有错误,按照提示修改就行,一定要确保slave1和slave2的 dba.configureInstance();输出是正常的
dba.configureInstance();#可能会输出WARNING,实际是已经成功了

#正常输出如下
Configuring local MySQL instance listening at port 3306 for use in an InnoDB cluster...

This instance reports its own address as mysql_master:3306
Clients and other cluster members will communicate with it through this address by default. If this is not correct, the report_host MySQL system variable should be changed.

applierWorkerThreads will be set to the default value of 4.

The instance 'mysql_master:3306' is valid to be used in an InnoDB cluster.
The instance 'mysql_master:3306' is already ready to be used in an InnoDB cluster.

Successfully enabled parallel appliers.  

9、slave1和slave2加入集群(master操作)

#mysql shell命令行执行
var cluster = dba.getCluster('mysql_group_replication_cluster_0001')
#检查新节点的状态,出现"reason": "new", "state": "ok" 就是可以加入集群
cluster.checkInstanceState('root@192.168.157.115:3306');  
#节点加入集群。recoveryMethod:定义如何从主节点获取数据,官方推荐clone;label:当前实例的别名;interactive:禁用交互式反馈,自动执行命令
#输出:The instance 'mysql_slave1:3306' was successfully added to the cluster.就代表成功
cluster.addInstance("root@192.168.157.115:3306",{recoveryMethod:"clone",label:"mysql_group_replication_slave1",interactive:false}) ;
#再查看当前集群的状态
cluster.status()
#输出如下
{    "clusterName": "mysql_group_replication_cluster_0001", 
    "defaultReplicaSet": {
        "name": "default", 
        "primary": "mysql_master:3306", 
        "ssl": "REQUIRED", 
        "status": "OK_NO_TOLERANCE", 
        "statusText": "Cluster is NOT tolerant to any failures.", 
        "topology": {
            "mysql_group_replication_slave1": {
                "address": "mysql_slave1:3306", 
                "memberRole": "SECONDARY", 
                "mode": "R/O", 
                "readReplicas": {}, 
                "replicationLag": "applier_queue_applied", 
                "role": "HA", 
                "status": "ONLINE", 
                "version": "8.0.43"
            }, 
            "mysql_master:3306": {
                "address": "mysql_master:3306", 
                "memberRole": "PRIMARY", 
                "mode": "R/W", 
                "readReplicas": {}, 
                "replicationLag": "applier_queue_applied", 
                "role": "HA", 
                "status": "ONLINE", 
                "version": "8.0.43"
            }
        }, 
        "topologyMode": "Single-Primary"
    }, 
    "groupInformationSourceMember": "mysql_master:3306"
} 

到此slave1的配置就完成了,接下来只需要按照slave1的步骤把slave2配置好就行,最终在master节点使用cluster.status()命令输出如下,“memberRole”: "PRIMARY"就是写入节点。

MySQL  192.168.157.114:3306 ssl  JS > cluster.status()
{
    "clusterName": "mysql_group_replication_cluster_0001", 
    "defaultReplicaSet": {
        "name": "default", 
        "primary": "mysql_master:3306", 
        "ssl": "REQUIRED", 
        "status": "OK", 
        "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", 
        "topology": {
            "mysql_group_replication_slave1": {
                "address": "mysql_slave1:3306", 
                "memberRole": "SECONDARY", 
                "mode": "R/O", 
                "readReplicas": {}, 
                "replicationLag": "applier_queue_applied", 
                "role": "HA", 
                "status": "ONLINE", 
                "version": "8.0.43"
            }, 
            "mysql_group_replication_slave2": {
                "address": "mysql_slave2:3306", 
                "memberRole": "SECONDARY", 
                "mode": "R/O", 
                "readReplicas": {}, 
                "replicationLag": "applier_queue_applied", 
                "role": "HA", 
                "status": "ONLINE", 
                "version": "8.0.43"
            }, 
            "mysql_master:3306": {
                "address": "mysql_master:3306", 
                "memberRole": "PRIMARY", 
                "mode": "R/W", 
                "readReplicas": {}, 
                "replicationLag": "applier_queue_applied", 
                "role": "HA", 
                "status": "ONLINE", 
                "version": "8.0.43"
            }
        }, 
        "topologyMode": "Single-Primary"
    }, 
    "groupInformationSourceMember": "mysql_master:3306"
}

测试是否完成了主从同步:
1、在master节点新建数据库my_test,看是否会同步到另外两个节点去。
2、把slave2节点关机,然后在主节点China编程的my_test数据库加一个test表,观察是否同步到了slave1。
3、把slave2开机,观察是否同步了test表
注意:从属节点禁止写入数据,可能会脑裂(主节点写入数据,从节点也写入了数据,就不知道到底哪个是真的),现在很多ORM框架都支持读写分离

补充内容

1、生成SSL证书

#创建文件保存生成证书的脚本
mkdir -p /etc/mysql/ssl
cd /etc/mysql/ssl
vim generate_mgr_ssl.sh

复制粘贴以下内容并保存

#!/bin/bash
set -e  # 设置脚本遇到任何错误就立即退出,避免产生不一致的中间状态

# ==================== 【第一部分:核心节点定义 - 必须修改】 ====================
# 定义mysql集群节点主机名称 
NODES=("mysql_master" "mysql_slave1" "mysql_slave2")
# 定义与节点主机名对应的IP地址。主机名和ip地址必须对应
NODE_IPS=("192.168.157.114" "192.168.157.115" "192.168.157.116")

# ==================== 【第二部分:证书主题信息 - 建议修改】 ====================
# 设置证书的国家代码。CN表示中国,US表示美国,JP表示日本等
COUNTRY_CODE="CN"
# 设置证书的省 
STATE_NAME="Chongqing"
# 设置证书的城市名称 
CITY_NAME="Chongqing"
# 设置证书的组织名称 
ORGANIZATION_NAME="mysql_group_replication_test"
# 设置CA证书的通用名称(CA的标识名) 
CA_COMMON_NAME="mysql_group_replication_test_ca"
# 设置客户端证书的通用名称 
CLIENT_COMMON_NAME="mysql_group_replication_test_client"

# ==================== 【第三部分:证书有效期和加密强度 - 按需修改】 ====================
# 设置证书的有效期(天) 
CERT_VALID_DAYS=3650
# 设置RSA密钥的强度(位数)。4096是当前的安全标准,2048也可用但安全性较低
RSA_KEY_BITS=4096
# ==================== 【第四部分:SAN扩展配置 - 按需修改】 ====================
# 是否在服务器证书中包含环回地址127.0.0.1。本地连接测试,设置为true
INCLUDE_LOCALHOST=true
# 是否在服务器证书中包含主机名的DNS记录。如果集群之间使用主机名进行连接,设置为true
INCLUDE_DNS=true
# 是否在服务器证书中包含IP地址。如果集群之间使用ip进行连接,设置为true
INCLUDE_IP=true

# ==================== 【脚本主体部分(通常不需要修改)】 ====================
echo "生成CA证书..."
openssl genrsa ${RSA_KEY_BITS} > ca-key.pem
openssl req -new -x509 -nodes -days ${CERT_VALID_DAYS} -key ca-key.pem -out ca.pem \
  -subj "/C=${COUNTRY_CODE}/ST=${STATE_NAME}/L=${CITY_NAME}/O=${ORGANIZATION_NAME}/CN=${CA_COMMON_NAME}"
  
# 创建初始序列号文件 
echo "01" > ca.srl

# 循环为每个节点生成服务器证书
for i in "${!NODES[@]}"; do
    NODE=${NODES[$i]}
    IP=${NODE_IPS[$i]}
    echo "为 $NODE ($IP) 生成服务器证书..."
    
    # 生成服务器私钥
    openssl genrsa ${RSA_KEY_BITS} > server-${NODE}-key.pem
    
    # 创建证书签名请求(CSR)
    openssl req -new -key server-${NODE}-key.pem -out server-${NODE}-req.pem \
      -subj "/C=${COUNTRY_CODE}/ST=${STATE_NAME}/L=${CITY_NAME}/O=${ORGANIZATION_NAME}/CN=${NODE}"
    
    # 创建SAN扩展配置文件
    SAN_CONTENT=""
    if [ "$INCLUDE_DNS" = true ]; then
        SAN_CONTENT="DNS:${NODE}"
    fi
    
    if [ "$INCLUDE_IP" = true ]; then
        if [ -n "$SAN_CONTENT" ]; then
            SAN_CONTENT="${SAN_CONTENT}, IP:${IP}"
        else
            SAN_CONTENT="IP:${IP}"
        fi
    fi
    
    if [ "$INCLUDE_LOCALHOST" = true ]; then
        if [ -n "$SAN_CONTENT" ]; then
            SAN_CONTENT="${SAN_CONTENT}, IP:127.0.0.1"
        else
            SAN_CONTENT="IP:127.0.0.1"
        fi
    fi
    
    # 写入扩展配置文件
    cat > server-${NODE}-ext.cnf << EOF
subjectAltName = ${SAN_CONTENT}
extendedKeyUsage = serverAuth, clientAuth
EOF
    
    # 使用CA签署服务器证书 - 添加 -CAcreateserial 参数
    openssl x509 -req -in server-${NODE}-req.pem -days ${CERT_VALID_DAYS} -CA ca.pem -CAkey ca-key.pem \
      -CAcreateserial -out server-${NODE}-cert.pem -extfile server-${NODE}-ext.cnf
done

echo "生成客户端证书..."
# 生成客户端私钥
openssl genrsa ${RSA_KEY_BITS} > client-key.pem

# 创建客户端证书签名请求
openssl req -new -key client-key.pem -out client-req.pem \
  -subj "/C=${COUNTRY_CODE}/ST=${STATE_NAME}/L=${CITY_NAME}/O=${ORGANIZATION_NAME}/CN=${CLIENT_COMMON_NAME}"

# 创建客户端证书扩展配置文件
cat > client-ext.cnf << EOF
extendedKeyUsage = clientAuth
EOF

# 签署客户端证书 - 使用配置文件而不是命令行扩展
openssl x509 -req -in client-req.pem -days ${CERT_VALID_DAYS} -CA ca.pem -CAkey ca-key.pem \
  -CAcreateserial -out client-cert.pem -extfile client-ext.cnf

echo "清理临时文件..."
rm -f *.cnf *.req

echo "证书生成完成!"
echo "生成的文件清单:"
ls -la *.pem

# ==================== 【后续操作提示】 ====================
echo ""
echo "下一步需要手动执行的操作:"
echo "1. 将 ca.pem 分发到所有节点的 /etc/mysql/ssl/ 目录"
echo "2. 将 server-<node>-key.pem 和 server-<node>-cert.pem 分发到对应节点,并重命名为 server-key.pem 和 server-cert.pem"
echo "3. 将 client-key.pem 和 client-cert.pem 分发到所有节点"
echo "4. 设置文件权限:"
echo "   chown mysql:mysql /etc/mysql/ssl/*"
echo "   chmod 600 /etc/mysql/ssl/*.pem"
echo "   chmod 644 /etc/mysql/ssl/ca.pem"

执行命令生成证书。 再次说明:这里生成的证书不是直接使用,需要按照服务器名称复制对应的文件到/etc/mysql/ssl,并修改文件名称

chmod +x generate_mgr_ssl.sh
./generate_mgr_ssl.sh

2、常用命令

#在mysql shell命令模式的时候,输入\q按回车退出
\q
#使用root账号登录3306端口的mysql
mysqlsh root@192.168.157.114:3306 
#自动化检查mysql配置信息,以满足InnoDB Cluster运行
dba.configureInstance()   
#检查mysql配置文件是否正确,如有不正确的内容会输出。非常有用!
mysqld --validate-config    
#查看集群状态
cluster.status(); 

3、常见问题

只要是出现 Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.就代表没有使用ssl去连接。要么在my.cnf配置好ssl相关的文件路径,并确保能有权限读取文件。要么更改账户的密码校验插件为mysql_native_password。修改配置文件和修改的文件夹的权限都需要重启mysql。

如果退出了mysql shell,再次进入就需要var cluster = dba.getCluster("集群名称");才能获取到对应的集群,然后才可以使用cluster.status();查看集群状态。

dba.configureInstance();执行可能报错Dba.configureInstance: This function is not available through a session to an instance belonging to an unmanaged asynchronouphps replication topology (RuntimeError)可能是因为之前配置了主从复制导致的,我这个slave1和slave2都是之前做的普通主从复制。出现这个问题,需要登录mysql然后执行。
STOP SLAVE; – 停止复制(如果是从节点)
RESET SLAVE ALL; – 清除复制配置(包括主从关系)
RESET MASTER; – 重置二进制日志(确保GTID干净)

var cluster = dba.getCluster('mysql_group_replication_cluster_0001')
提示错误:Dba.getCluster: This function is not available through a session to a standalone instance (metadata exists, instance belongs to that metadata, but GR is pythonnot active) (MYSQLSH 51314)。需要确认配置是否正确group_replication_bootstrap_group=ON;group_replication_bootstrap_group=ON (第一个节点是ON,后续节点是OFF)

到此这篇关于mysql8.0.43使用InnoDB Cluster配置主从复制的文章就介绍到这了,更多相关mysql InnoDB Cluster主从复制内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)! 

这篇关于mysql8.0.43使用InnoDB Cluster配置主从复制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1156098

相关文章

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

SpringBoot中ResponseEntity的使用方法举例详解

《SpringBoot中ResponseEntity的使用方法举例详解》ResponseEntity是Spring的一个用于表示HTTP响应的全功能对象,它可以包含响应的状态码、头信息及响应体内容,下... 目录一、ResponseEntity概述基本特点:二、ResponseEntity的基本用法1. 创

MySQL中VARCHAR和TEXT的区别小结

《MySQL中VARCHAR和TEXT的区别小结》MySQL中VARCHAR和TEXT用于存储字符串,VARCHAR可变长度存储在行内,适合短文本;TEXT存储在溢出页,适合大文本,下面就来具体的了解... 目录一、VARCHAR 和 TEXT 基本介绍1. VARCHAR2. TEXT二、VARCHAR

MySQL中C接口的实现

《MySQL中C接口的实现》本节内容介绍使用C/C++访问数据库,包括对数据库的增删查改操作,主要是学习一些接口的调用,具有一定的参考价值,感兴趣的可以了解一下... 目录准备mysql库使用mysql库编译文件官方API文档对象的创建和关闭链接数据库下达sql指令select语句前言:本节内容介绍使用C/

使用Java填充Word模板的操作指南

《使用Java填充Word模板的操作指南》本文介绍了Java填充Word模板的实现方法,包括文本、列表和复选框的填充,首先通过Word域功能设置模板变量,然后使用poi-tl、aspose-words... 目录前言一、设置word模板普通字段列表字段复选框二、代码1. 引入POM2. 模板放入项目3.代码

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu