mysql 8.0.18 mgr 搭建及其切换功能

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日

相关文章

  • PostgreSQL使用MySQL作为外部表(mysql_fdw)

    PostgreSQL是一个开源的关系型数据库管理系统,是业界感觉较高的一款数据库,而MySQL也是个非常流行的数据库。假如我们需要在PostgreSQL中操作MySQL的表,那么可以使用mysql_fdw这个扩展模块。 mysql_fdw是PostgreSQL的外部数据连接插件,通过创建外部表与MySQL的表进行关联,就能够实现在PostgreSQL中操作M…

    database 2023年5月22日
    00
  • MySQL约束和表的复杂查询操作大全

    MySQL约束 约束的作用 约束是指限制数据的一些条件,可以用于保证数据的完整性、安全性和正确性。MySQL提供了各种类型的约束,包括主键、外键、唯一性约束、非空约束等等。 主键约束 主键是一种特殊的唯一性约束,它与表的每个记录有关。主键必须是非空的,因为它标识了唯一的记录。主键可以是一个或多个字段。如果一个表没有主键,那么它将不会被认为是正常的关系表。 创…

    database 2023年5月22日
    00
  • C#使用DataSet Datatable更新数据库的三种实现方法

    以下是“C#使用DataSet DataTable更新数据库的三种实现方法”的完整攻略: 1. 准备工作 在实现三种更新方法之前,我们需要先做一些准备工作,包括: 引用相关命名空间 连接数据库 创建一个DataSet及其中的DataTable 具体地,我们可以使用以下代码: // 引用命名空间 using System.Data.SqlClient; usi…

    database 2023年5月21日
    00
  • 在Docker中使用MySQL的教程

    下面是Docker中使用MySQL的详细教程攻略。 1. 准备工作 在开始前,请确保您已经在本地计算机上安装了Docker。如果您尚未安装,请前往Docker官网下载并安装Docker。 2. 启动MySQL容器 在Docker中使用MySQL的第一步是启动MySQL容器。启动MySQL容器之前需要准备一个数据目录,用于存储MySQL的数据。 $ mkdir…

    database 2023年5月22日
    00
  • mysql 联合索引生效的条件及索引失效的条件

    MySQL 联合索引,是指在表中建立多个字段的索引,以便在查询时能够提高查询效率。但是在实际使用中,我们也会遇到联合索引失效的情况,因此需要了解联合索引生效的条件及失效的条件。 联合索引生效的条件 联合索引的顺序要与查询条件一致。例如,如果联合索引包含 A、B 两个字段,而查询语句中先按 B 来筛选,那么索引将无效,需要创建一个包含 B、A 的联合索引。 查…

    database 2023年5月22日
    00
  • Redis的启动和关闭(前台启动和后台启动)

    Centos中Redis的下载编译与安装(超详细): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103967334 在上面安装好Redis后会在安装目录下的bin下自动生成一堆脚本。     其中redis-server就是redis的服务端。 注: 博客:https://blog.c…

    Redis 2023年4月13日
    00
  • 在IntelliJ IDEA中为自己设计的类库生成JavaDoc的方法示例

    在IntelliJ IDEA中,为自己设计的类库生成JavaDoc的方法示例,可以按照以下步骤操作: 在代码中使用JavaDoc注释方式: 在您的类库中,您应当使用JavaDoc注释方式来记录您类的文档。JavaDoc是您为代码提供注释和必要信息的标准方式。这些注释会被解析器自动识别,以便生成文档。JavaDoc注释应以下列开始格式写在类或方法的前面: /*…

    database 2023年5月21日
    00
  • php连接oracle数据库及查询数据的方法

    下面是详细讲解“PHP连接Oracle数据库及查询数据的方法”的完整攻略。 1. Oracle数据库的安装和配置 首先,我们需要在本机或服务器上安装Oracle数据库,并进行配置,以便外部应用程序可以连接访问Oracle数据库。需要注意的是,Oracle数据库的安装和配置过程比较复杂,需要按照官方文档进行操作。 2. PHP连接Oracle数据库 2.1 安…

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