mysql 8.0.18 mgr 搭建及其切换功能

yizhihongxing

MySQL 8.0.18 MGR 搭建及其切换功能攻略

本文主要介绍如何在 CentOS 7 上搭建 MySQL 8.0.18 MGR 集群,并演示如何使用 MGR 进行集群节点的切换操作。以下是完整的攻略过程:

1. 安装 MySQL 8.0.18

使用 yum 命令安装 MySQL 8.0.18:

sudo yum install mysql-community-server

安装完成后,启动 MySQL 服务:

sudo systemctl start mysqld

2. 配置 MGR

2.1 创建 MGR 用户

进入 MySQL 命令行,输入以下语句创建 MGR 用户:

CREATE USER 'mgr'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'mgr'@'%';

2.2 设置 MySQL 参数

打开 MySQL 配置文件 /etc/my.cnf,在 [mysqld] 部分添加以下参数:

skip-log-bin
enforce_gtid_consistency=ON
gtid_mode=ON
binlog_checksum=NONE
transaction_write_set_extraction=XXHASH64
loose-group_replication_bootstrap_group=OFF
loose-group_replication_enforce_update_everywhere_checks=ON
loose-group_replication_single_primary_mode=OFF
loose-group_replication_auto_increment_increment=7
loose-group_replication_start_on_boot=OFF

2.3 启用 MGR 组件

进入 MySQL 命令行,输入以下语句启用 MGR 组件:

INSTALL PLUGIN group_replication SONAME 'group_replication.so';

3. 创建 MGR 集群

3.1 准备节点

假设我们有三台服务器,它们的 IP 地址和主机名分别为:

  • 192.168.0.101: node1
  • 192.168.0.102: node2
  • 192.168.0.103: node3

为了简化操作,我们把这三台服务器的 MySQL 密码都设置为 password

3.2 启动第一个节点

在第一台服务器上进入 MySQL 命令行,输入以下语句以启动 MGR:

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

执行以上语句后,该节点就成为了 MGR 集群的启动节点。

3.3 启动其他节点

在第二台和第三台服务器上进入 MySQL 命令行,输入以下语句以加入 MGR 集群:

SET GLOBAL group_replication_bootstrap_group=OFF;
START GROUP_REPLICATION;

执行以上语句后,这两台服务器就成为了 MGR 集群的工作节点。

4. 测试 MGR 集群

4.1 查看集群状态

在第一个节点的 MySQL 命令行输入以下语句查看集群状态:

SELECT * FROM performance_schema.replication_group_members;

如果查看到的结果如下所示,说明 MGR 集群已经正常启动了:

+---------------------------+--------------------------------------+---------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_STATE | MEMBER_ROLE | MEMBER_HOST  |
+---------------------------+--------------------------------------+---------+-------------+--------------+
| group_replication_applier | 2b9c9b8c-berb-11eb-969d-080027c45920 | ONLINE      | PRIMARY     | node2:3306   |
| group_replication_applier | 928d8d16-berb-11eb-a648-080027c45920 | ONLINE      | SECONDARY   | node3:3306   |
| group_replication_applier | 8e452f45-berb-11eb-bada-080027c45920 | ONLINE      | SECONDARY   | node1:3306   |
+---------------------------+--------------------------------------+---------+-------------+--------------+

4.2 进行数据写入测试

在任意一台服务器的 MySQL 命令行输入以下语句进行数据写入测试:

CREATE DATABASE test;
USE test;
CREATE TABLE test (id INT NOT NULL PRIMARY KEY, name VARCHAR(30));
INSERT INTO test VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie');

写入数据后,我们可以在任意一台服务器上查看测试结果,并验证是否数据同步成功。

5. 切换 MGR 集群节点

5.1 离线节点

在任意一台服务器的 MySQL 命令行输入以下语句停止 MGR 节点:

STOP GROUP_REPLICATION;

5.2 切换主节点

在原本的主节点上输入以下语句:

SET GLOBAL group_replication_primary_member=(SELECT MEMBER_ID FROM performance_schema.replication_group_members WHERE MEMBER_HOST='nodeX:3306');

其中,nodeX 指的是你现在希望成为主节点的服务器主机名。

然后,我们通过查看集群状态来验证主节点是否成功切换:

SELECT * FROM performance_schema.replication_group_members;

如果查看到的结果中,指定的节点成为了主节点,说明主节点切换成功了。

示例

以下是两个示例演示了如何将当前的工作节点变成主节点,并验证主节点切换的成功性:

示例一

假设现在的集群状态如下:

+---------------------------+--------------------------------------+---------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_STATE | MEMBER_ROLE | MEMBER_HOST  |
+---------------------------+--------------------------------------+---------+-------------+--------------+
| group_replication_applier | 2b9c9b8c-berb-11eb-969d-080027c45920 | ONLINE      | PRIMARY     | node2:3306   |
| group_replication_applier | 928d8d16-berb-11eb-a648-080027c45920 | ONLINE      | SECONDARY   | node3:3306   |
| group_replication_applier | 8e452f45-berb-11eb-bada-080027c45920 | ONLINE      | SECONDARY   | node1:3306   |
+---------------------------+--------------------------------------+---------+-------------+--------------+

我们要将 node3 这台服务器变成主节点。我们可以按照上文中的步骤执行以下命令:

STOP GROUP_REPLICATION;
SET GLOBAL group_replication_primary_member=(SELECT MEMBER_ID FROM performance_schema.replication_group_members WHERE MEMBER_HOST='node3:3306');
START GROUP_REPLICATION;

然后,我们再次查看集群状态:

+---------------------------+--------------------------------------+---------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_STATE | MEMBER_ROLE | MEMBER_HOST  |
+---------------------------+--------------------------------------+---------+-------------+--------------+
| group_replication_applier | 928d8d16-berb-11eb-a648-080027c45920 | ONLINE      | PRIMARY     | node3:3306   |
| group_replication_applier | 8e452f45-berb-11eb-bada-080027c45920 | ONLINE      | SECONDARY   | node1:3306   |
| group_replication_applier | 2b9c9b8c-berb-11eb-969d-080027c45920 | ONLINE      | SECONDARY   | node2:3306   |
+---------------------------+--------------------------------------+---------+-------------+--------------+

可以发现,现在的主节点已经变成了 node3。

示例二

现在的集群状态如下:

+---------------------------+--------------------------------------+---------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_STATE | MEMBER_ROLE | MEMBER_HOST  |
+---------------------------+--------------------------------------+---------+-------------+--------------+
| group_replication_applier | 928d8d16-berb-11eb-a648-080027c45920 | ONLINE      | PRIMARY     | node3:3306   |
| group_replication_applier | 8e452f45-berb-11eb-bada-080027c45920 | ONLINE      | SECONDARY   | node1:3306   |
| group_replication_applier | 2b9c9b8c-berb-11eb-969d-080027c45920 | ONLINE      | SECONDARY   | node2:3306   |
+---------------------------+--------------------------------------+---------+-------------+--------------+

我们要将 node1 这台服务器变成主节点。我们可以按照上文中的步骤执行以下命令:

STOP GROUP_REPLICATION;
SET GLOBAL group_replication_primary_member=(SELECT MEMBER_ID FROM performance_schema.replication_group_members WHERE MEMBER_HOST='node1:3306');
START GROUP_REPLICATION;

然后,我们再次查看集群状态:

+---------------------------+--------------------------------------+---------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_STATE | MEMBER_ROLE | MEMBER_HOST  |
+---------------------------+--------------------------------------+---------+-------------+--------------+
| group_replication_applier | 8e452f45-berb-11eb-bada-080027c45920 | ONLINE      | PRIMARY     | node1:3306   |
| group_replication_applier | 2b9c9b8c-berb-11eb-969d-080027c45920 | ONLINE      | SECONDARY   | node2:3306   |
| group_replication_applier | 928d8d16-berb-11eb-a648-080027c45920 | ONLINE      | SECONDARY   | node3:3306   |
+---------------------------+--------------------------------------+---------+-------------+--------------+

可以发现,现在的主节点已经变成了 node1。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mysql 8.0.18 mgr 搭建及其切换功能 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • MongoDB查询文档使用方法(详解版)

    MongoDB是一款NoSQL数据库,使用它进行查询文档与关系型数据库有较大的区别,下文将带大家了解MongoDB查询文档的完整方法。 首先,我们需要安装MongoDB,接着选择一种适合自己的编程语言,这里选择Python为例。 连接MongoDB 连接MongoDB需要用到pymongo库,如果您还没安装,可以通过以下命令进行安装: $ pip3 inst…

    MongoDB 2023年3月14日
    00
  • 详解MySql Date函数

    详解MySQL Date函数 MySQL 提供了多个用于操作日期的函数,其中最常用的是 DATE() 函数。该函数可以将日期时间减小时,提取日期等。本文将详细讲解 DATE() 函数的用法。 语法 DATE(date) 参数 date 是要转换的日期时间字符串或表达式。其对应的数据类型可以为 DATE, DATETIME, TIMESTAMP, YEAR 或…

    database 2023年5月22日
    00
  • mysql 获取时间方式

    MySQL 有多种获取时间的方式,下面将介绍几种常见的方式。 1. 使用 NOW() 函数获取当前时间 MySQL 内置 NOW() 函数可以用来获取当前时间。NOW() 函数返回当前系统日期和时间,在具体使用时需要注意时区问题。下面是一个使用 NOW() 函数的示例: SELECT NOW(); 输出结果如下: 2022-05-08 12:34:56 2.…

    database 2023年5月22日
    00
  • Perl访问MSSQL并迁移到MySQL数据库脚本实例

    一、准备工作 在进行Perl访问MSSQL并迁移到MySQL数据库脚本实例之前,需要进行一些准备工作,具体如下: 安装Perl、DBI、DBD::ODBC模块 在开发环境中,需要安装Perl语言环境,并通过Perl模块管理器(如cpanm、ppm)安装DBI和DBD::ODBC模块。 安装Microsoft ODBC驱动程序 在连接MSSQL数据库时,需要安…

    database 2023年5月22日
    00
  • XP下安装装SQL2000企业版本

    以下是XP下安装SQL2000企业版本的完整攻略: 步骤一:下载SQL2000企业版本安装程序 在官方网站下载SQL2000企业版本安装程序的压缩包,解压后得到ISO镜像文件。 步骤二:准备安装环境 确认操作系统为Windows XP Professional SP3或者更高版本; 确认系统中已安装.NET Framework 2.0或者更高版本; 确认系统…

    database 2023年5月21日
    00
  • django 2.2和mysql使用的常见问题

    下面是关于”Django 2.2和MySQL使用的常见问题”的完整攻略: 1. 安装MySQL驱动 在使用Django和MySQL之前,你需要安装MySQL驱动。本文选择使用Python MySQL驱动的一个流行分支————pymysql。 在命令行窗口输入以下代码: pip install pymysql 安装后,在settings.py中进行配置: DA…

    database 2023年5月22日
    00
  • OL7.6上RPM方式安装Oracle 19c的教程

    下面我会详细讲解在OL 7.6操作系统上使用RPM方式安装Oracle 19c的完整攻略。 前置条件 在开始安装之前,需要确保以下前置条件已经满足: 已安装OL 7.6操作系统 已配置yumd源并且可以正常连接互联网 已安装unzip命令并确保其可以被使用 已安装wget命令并确保其可以被使用 确认服务器的操作系统内核版本符合Oracle 19c的要求,具体…

    database 2023年5月22日
    00
  • MyBatis Generator生成的$ sql是否存在注入风险详解

    “MyBatis Generator生成的$ sql是否存在注入风险详解”攻略如下: 1. 什么是MyBatis Generator MyBatis Generator是一个开源工具,可以自动化地生成MyBatis基于XML映射文件和Java POJO的代码。它可以根据数据库表结构自动生成对应的Java Bean和Mapper接口。使用MyBatis Gen…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部