MySQL 8.0.30,一个值得上车MGR的版本

前言

MySQL 8.0.30,这个版本没有 MGR 方面的重大修改,为什么我说值得上车 MGR 呢?

GIPK

只因为 8.0.30 新增了 sql_generate_invisible_primary_key 参数,以下我简称为 GIPK 模式!

GIPK 模式下,创建表时如果没有显式定义主键会自动添加一个不可见主键索引,请参考以下两张表:

## sql_generate_invisible_primary_key=off 建的表
mysql> SHOW CREATE TABLE auto_0\G
*************************** 1. row ***************************
       Table: auto_0
Create Table: CREATE TABLE `auto_0` (
  `c1` varchar(50) DEFAULT NULL,
  `c2` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

## sql_generate_invisible_primary_key=on 建的表
mysql> SHOW CREATE TABLE auto_1\G
*************************** 1. row ***************************
       Table: auto_1
Create Table: CREATE TABLE `auto_1` (
  `my_row_id` bigint unsigned NOT NULL AUTO_INCREMENT /*!80023 INVISIBLE */,
  `c1` varchar(50) DEFAULT NULL,
  `c2` int DEFAULT NULL,
  PRIMARY KEY (`my_row_id`)
) ENGINE=InnoDB DEFAULT CHARSET=u
<think>好的,我现在需要帮助用户解决如何搭建MySQL 8.0 MGR集群的问题。首先,我得回忆一下自己之前了解的相关知识,同时结合用户提供的引用内容,整理出一个清晰的步骤指南。 用户提到了几个引用,其中引用[2]和[3]是关于MySQL 8.0搭建MGR集群的,引用[1]提到加载插件和配置账号,引用[4]涉及权限修改,引用[5]是一个参考链接。这些信息应该能帮助构建回答。 首先,搭建MGR集群的基本步骤通常包括环境准备、安装MySQL、配置参数、初始化集群、添加节点等。根据引用[2],用户的环境需要至少三个节点,IP地址和主机名已经配置。这可能意味着用户需要先设置好主机名解析,比如在/etc/hosts文件中添加各节点的IP和主机名对应关系。 接下来,安装MySQL 8.0。每个节点都需要安装相同版本MySQL,这里用户提到的是8.0.32版本。安装完成后,需要确保每个节点的MySQL服务启动,并且配置正确的配置文件(my.cnf)。配置文件中的参数如server_id、binlog格式、gtid模式、MGR相关设置等都是关键。引用[1]中提到加载group_replication插件,所以配置文件中可能需要配置plugin-load-add参数,或者在启动后手动安装插件。 然后是账号配置。引用[1]和[2]提到需要在所有节点上创建复制专用的用户,并授予必要的权限,比如REPLICATION SLAVE权限。此外,MGR需要group_replication_recovery通道的用户,所以需要创建这个用户,并确保各节点之间能用这个用户进行通信。 初始化集群通常是在第一个节点上执行START GROUP_REPLICATION,然后其他节点通过CHANGE MASTER TO命令加入集群。不过,在MySQL 8.0中,可能使用克隆插件(clone方式)来同步数据,如引用[3]提到的clone方式,这可能简化数据同步的过程。用户需要确保克隆插件已安装,并且在加入新节点时使用克隆来获取数据。 另外,引用[4]提到了MySQL Router的配置,这可能是在应用层实现读写分离和负载均衡的步骤,但用户的主要问题是如何搭建MGR集群,所以这部分可能作为可选步骤,或者简要提及。 在整理步骤时,需要注意以下几点: 1. 每个节点的server_id必须唯一。 2. 配置文件中的binlog需要启用,并且使用ROW格式。 3. GTID需要开启。 4. group_replication相关的参数如group_replication_group_name需要一致。 5. 确保防火墙规则允许节点之间的通信,尤其是3306和MGR使用的其他端口。 可能的问题点包括:插件未正确加载,导致无法启动组复制;节点之间的网络不通,导致无法加入集群;配置文件参数错误,如server_id重复或group_replication_group_name不一致;权限问题,如复制用户权限不足。 用户提供的引用中,引用[3]还展示了在节点一插入数据后,节点二启动组复制后是否能同步数据,这说明数据同步的验证步骤很重要,需要在教程中包含如何验证集群状态和数据同步。 总结步骤大致如下: 1. 环境准备:主机名、IP、防火墙设置。 2. 安装MySQL 8.0,并确保所有节点版本一致。 3. 配置每个节点的my.cnf,设置必要的参数。 4. 创建复制用户和权限。 5. 安装group_replication插件。 6. 启动第一个节点作为引导节点,初始化集群。 7. 其他节点加入集群,可能使用克隆插件同步数据。 8. 验证集群状态和数据同步。 此外,可能还需要考虑SSL配置、故障转移处理、备份恢复等,但根据用户的问题,重点在搭建步骤,所以这些高级内容可以放在相关问题中。 最后,根据用户提供的示例,回答需要结构清晰,分步骤说明,并引用相关引用内容。比如,在配置账号的部分,引用[1]提到三台机器都要配置,所以需要在步骤中强调这一点。在安装插件时,引用[1]给出了手动加载插件的命令,可以作为步骤中的一部分。 现在需要将这些整理成一个连贯的教程,确保每个步骤清晰,并正确引用提供的资料。同时,生成的相关问题需要围绕MGR集群搭建的扩展内容,如性能优化、常见问题解决、应用场景等。</think>### 如何搭建 MySQL 8.0 MGR 集群 以下是基于 MySQL 8.0 版本搭建 MGR(组复制)集群的详细步骤,结合官方文档和实际配置经验整理。 --- #### **1. 环境准备** - **节点要求**:至少3台服务器(如192.168.101.11、192.168.101.12、192.168.101.13)[^2]。 - **主机名与IP解析**:每台机器的`/etc/hosts`添加主机名解析: ```bash 192.168.101.11 mysqltest1 192.168.101.12 mysqltest2 192.168.101.13 mysqltest3 ``` - **防火墙配置**:开放 MySQL 默认端口(3306)及组复制通信端口(默认33061)。 --- #### **2. 安装 MySQL 8.0** 在所有节点安装相同版本MySQL(如8.0.32): ```bash # 使用官方仓库安装(以CentOS为例) yum install mysql-server systemctl start mysqld systemctl enable mysqld ``` --- #### **3. 配置 MySQL 参数** 修改每台机器的`/etc/my.cnf`,**确保以下配置一致**: ```ini [mysqld] server_id=1 # 每台机器唯一(如1,2,3) datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # 复制与组复制配置 gtid_mode=ON enforce_gtid_consistency=ON binlog_checksum=NONE log_bin=binlog log_slave_updates=ON binlog_format=ROW # MGR 特定配置 plugin_load_add='group_replication.so' group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" # 唯一UUID,所有节点相同 group_replication_start_on_boot=OFF group_replication_local_address="当前节点IP:33061" group_replication_group_seeds="mysqltest1:33061,mysqltest2:33061,mysqltest3:33061" ``` 重启 MySQL 服务: ```bash systemctl restart mysqld ``` --- #### **4. 配置复制账号** 在所有节点执行以下 SQL 命令,创建组复制专用账号: ```sql -- 创建用户(密码需一致) CREATE USER 'repl'@'%' IDENTIFIED BY 'YourPassword123!'; GRANT REPLICATION SLAVE, GROUP_REPLICATION_STREAM ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; ``` [^1] --- #### **5. 初始化集群(第一个节点)** 在 **第一个节点**(如mysqltest1)执行: ```sql -- 重置本地复制状态 RESET MASTER; -- 启动组复制引导 SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION USER='repl', PASSWORD='YourPassword123!'; SET GLOBAL group_replication_bootstrap_group=OFF; -- 验证集群状态 SELECT * FROM performance_schema.replication_group_members; ``` 若输出`ONLINE`状态节点,表示引导成功[^3]。 --- #### **6. 添加其他节点** 在 **第二个节点**(如mysqltest2)执行: ```sql -- 加入集群 START GROUP_REPLICATION USER='repl', PASSWORD='YourPassword123!'; -- 验证数据同步(若使用克隆插件,需先执行CLONE语句同步数据) SELECT * FROM performance_schema.replication_group_members; ``` 重复相同步骤添加第三个节点。 --- #### **7. 验证集群功能** - **数据同步测试**: ```sql -- 在任一节点创建测试表并插入数据 CREATE DATABASE mgr_test; USE mgr_test; CREATE TABLE t1 (id INT PRIMARY KEY, name VARCHAR(20)); INSERT INTO t1 VALUES (1, 'MGR_Test'); -- 在其他节点查询数据是否同步 SELECT * FROM t1; ``` - **集群状态检查**: ```sql SELECT MEMBER_HOST, MEMBER_STATE FROM performance_schema.replication_group_members; ``` --- #### **8. 可选:配置 MySQL Router(读写分离)** 安装 MySQL Router 并配置`/etc/mysqlrouter.conf`,指向 MGR 节点[^4]: ```ini [routing:read_write] bind_address=0.0.0.0 bind_port=6446 destinations=mysqltest1:3306,mysqltest2:3306,mysqltest3:3306 routing_strategy=round-robin ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值