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日

相关文章

  • oracle取数据库中最新的一条数据可能会遇到的bug(两种情况)

    当我们需要从Oracle数据库中取出最新的一条数据时,可能会遇到以下两种bug: 1. 多版本并发控制(MVCC)造成数据丢失 在Oracle中,多版本并发控制(MVCC)是通过版本号来实现的,每次更新该行的数据时,Oracle都会增加一个版本号,之前的版本号会被保留。但是如果在获取最新的一条数据时,没有使用正确的事务隔离级别或者没有使用 rownum 来限…

    database 2023年5月21日
    00
  • SQL SERVER 分组求和sql语句

    下面我来详细讲解 SQL SERVER 分组求和 sql 语句的完整攻略。 什么是分组求和? 分组求和是对数据库表中的数据进行分类统计的方法。通过指定一个或多个列作为“分组”,将数据分为多个组别,并对每个组别应用一个求和函数来计算它们的总和。 分组求和的语法 SQL SERVER 中的分组求和的语法如下: SELECT column_name1, SUM(c…

    database 2023年5月21日
    00
  • 在Mac系统上配置MySQL以及Squel Pro

    以下是在Mac系统上配置MySQL以及Squel Pro的完整攻略: 安装MySQL 下载并安装Homebrew,可以在终端执行以下命令进行安装: shell /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)” 使用…

    database 2023年5月22日
    00
  • MySQL死锁的产生原因以及解决方案

    MySQL死锁是指两个或多个事务,互相持有对方所需要的资源,导致所有事务都被阻塞,无法继续执行的情况。死锁的产生原因主要是并发控制不当和数据操作不规范。下面是详细的解释和解决方案。 产生原因 数据库并发控制不当:当多个事务同时请求并获取同一个资源时,会使所有请求被阻塞。当这种情况发生时,MySQL会尝试回滚某个事务来打破死锁,但这往往会导致数据的不一致。 数…

    database 2023年5月22日
    00
  • linux下自动备份MySQL数据并上传到FTP上的shell脚本

    下面是详细的攻略: 1. 确定备份方式 在linux下备份MySQL数据,并上传到FTP上,一般有两种途径: 1.1. mysqldump备份 该方法是最常见的备份MySQL数据的方法,可以将MySQL的表结构和数据导出为一个.sql文件。通过该方法备份MySQL数据的示例代码如下: #!/bin/bash # 备份的数据库名 db_name="m…

    database 2023年5月22日
    00
  • Lua 数据类型和 Redis 数据类型之间转换

    当 Lua 通过 call() 或 pcall() 函数执行 Redis 命令的时候,命令的返回值会被转换成 Lua 数据结构。 同样地,当 Lua 脚本在 Redis 内置的解释器里运行时,Lua 脚本的返回值也会被转换成 Redis 协议(protocol),然后由 EVAL 将值返回给客户端。 数据类型之间的转换遵循这样一个设计原则:如果将一个 Red…

    Redis 2023年4月13日
    00
  • Linux系统上配置Nginx+Ruby on Rails+MySQL超攻略

    下面是在Linux系统上配置Nginx+Ruby on Rails+MySQL的完整攻略: 1. 安装必要的软件和工具 在开始配置之前,我们需要先安装必要的软件和工具。这些软件包括: Ruby:Ruby是一种编程语言,Ruby on Rails是基于此语言的Web应用框架。 Rails:Rails是基于Ruby的Web应用框架,可以轻松构建Web应用程序。 …

    database 2023年5月22日
    00
  • 如何使用Python在MySQL中使用事务?

    以下是详细讲解如何使用Python在MySQL中使用事务的完整攻略,包括连接到MySQL、开始事务、执行SQL语句、提交事务和回滚事务等步骤。同时,还提供了两个示例来演示如何在Python中使用MySQL事务。 连接到MySQL 在使用Python执行MySQL事务之前,需要先连接到MySQL。可以使用以下代码连接到MySQL: import mysql.c…

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