MySQL8.0.27如何安装

https://www.cnblogs.com/mindzone/p/15450312.html

部署过程中各种问题可参考的解决方案

我遇见的搭建问题,解决方案参考下面诸多博主的帖子

1、MGR部署后如何测试单点故障情况

https://www.cnblogs.com/diantong/p/11048767.html

2、找不到Group组端口如何解决

https://www.cnblogs.com/naocanzhishen/p/13540861.html

服务日志描述:

2022-03-08T16:22:11.029417Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Error testing to the local group communication engine instance.'
2022-03-08T16:22:11.089494Z 0 [ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] The member was unable to join the group. Local port: 33061'

3、使用已经安装MYSQL的克隆虚拟机,导致实例ID一致问题

https://blog.csdn.net/fly43108622/article/details/86089449

服务日志描述:

'There is already a member with server_uuid a655ee5b-9ee6-11ec-b685-000c290bdef1. The member will now exit the group.'

4、节点Recovering状态如何解决

https://blog.csdn.net/heroicpoem/article/details/106340155

MGR搭建流程

集群的机器需要配置区分的主机名,并且在Host配置对应的映射

1、配置主机名

# 一号机器
echo centos7-1 > /etc/hostname # 二号机器
echo centos7-2 > /etc/hostname # 三号机器
echo centos7-3 > /etc/hostname

2、配置域名映射(所有机器配置)

vim /etc/hosts

# 根据自己的机器IP进行设定
192.168.177.11 centos7-1
192.168.177.12 centos7-2
192.168.177.13 centos7-3

上述步骤完成后,使用ping命令测试一下是否能够ping通

以此检查网路状态和配置是否生效

确认主从关系

主从架构
centos7-1 主库 - A
centos7-2 从库 - B
centos7-3 从库 - C

然后以此配置各自的MYSQL配置文件(my.cnf)

1、主库配置追加这些配置项

MGR需要一个组群端口,所以这里使用的是33061端口

下面一项是加上了从库的地址和端口一起配置

# - - - - - - - - -[ 主库追加配置 ] - - - - - - - - - - - #
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
transaction_write_set_extraction=XXHASH64
default_authentication_plugin=mysql_native_password
plugin_dir=/usr/lib64/mysql/plugin
loose-group_replication_recovery_use_ssl=ON
loose-group_replication_group_name="ce9be252-2b71-11e6-b8f4-00212844f856"
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address="192.168.177.11:33061"
loose-group_replication_group_seeds="192.168.177.11:33061,192.168.177.12:33061,192.168.177.13:33061"

loose-group_replication_bootstrap_group=OFF

2、从库1的配置项

# - - - - - - - - -[ 从库1追加配置 ] - - - - - - - - - - - #
server_id=2
plugin_dir=/usr/lib64/mysql/plugin
default_authentication_plugin=mysql_native_password
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
loose-group_replication_recovery_get_public_key=ON
loose-group_replication_recovery_use_ssl=ON
loose-group_replication_group_name="ce9be252-2b71-11e6-b8f4-00212844f856"
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address="192.168.177.12:33061"
loose-group_replication_group_seeds="192.168.177.11:33061,192.168.177.12:33061,192.168.177.13:33061"
loose-group_replication_bootstrap_group=OFF

3、从库2的配置项

# - - - - - - - - -[ 从库2追加配置 ] - - - - - - - - - - - #
# 设置唯一的服务器编号
server_id=3
plugin_dir=/usr/lib64/mysql/plugin
default_authentication_plugin=mysql_native_password
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE # 这个参数决定primary节点到secondary节点的请求是否为基于 RSA 密钥对的密码交换所需的公钥
loose-group_replication_recovery_get_public_key=ON
loose-group_replication_recovery_use_ssl=ON
loose-group_replication_group_name="ce9be252-2b71-11e6-b8f4-00212844f856"
loose-group_replication_start_on_boot=OFF # 设置本机地址
loose-group_replication_local_address="192.168.177.13:33061"
loose-group_replication_group_seeds="192.168.177.11:33061,192.168.177.12:33061,192.168.177.13:33061"
loose-group_replication_bootstrap_group=OFF

各个配置参数说明:

# 使用mysql_native_password密码策略,防止navicat连不上mysql8
default_authentication_plugin=mysql_native_password # 设置MySQL插件所在目录,因为MGR基于插件,所以必须设置插件路径
plugin_dir=/usr/lib64/mysql/plugin # 服务器编号,Master=1
server_id=1 # 开启binlog的GTID模式
gtid_mode=ON # 开启后MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行
enforce_gtid_consistency=ON # 关闭binlog校验
binlog_checksum=NONE # 定义用于事务期间哈希写入提取的算法,组复制模式下必须设置为 XXHASH64。 17
transaction_write_set_extraction=XXHASH64 # 确定组复制恢复时是否应该应用 SSL,通常设置为“开”,但默认设置为“关”。
loose‐group_replication_recovery_use_ssl=ON # 该服务器的实例所在复制组的名称,必须是有效的 UUID,所有节点必须相同。
loose‐group_replication_group_name="bbbbbbbb‐bbbb‐cccc‐dddd‐eeeeeeeeeeee" # 确定服务器是否应该在服务器启动期间启动组复制。
loose‐group_replication_start_on_boot=OFF 2425 # 大坑2:
# 为复制组中其他的成员提供的网络地址,指定为“主机:端口”的格式化字符串。
# 很多人想当然认为端口应该是3306,起始不然,MGR需要开启新端口24901同步交换
# 所以这里不要写错,同时,前面我们配置了hosts文件做了主机名与IP的映射,这里直接写主机名即可
loose‐group_replication_local_address="n0:24901" # 用于建立新成员到组的连接组成员列表。
# 这个列表指定为由分隔号间隔的组成员网络地址列表,类似 host1:port1、host2:port2 的格式。
# 同样采用n0~n2的主机名替代
loose‐group_replication_group_seeds="n0:24901,n1:24901,n2:24901" # 配置此服务器为引导组,这个选项必须仅在一台服务器上设置,
# 并且仅当第一次启动组或者重新启动整个组时。成功引导组启动后,将此选项设置为关闭。
loose‐group_replication_bootstrap_group=OFF

配置完成后重启各自的服务

# 所有配置完成后重启服务
systemctl restart mysqld

关闭Linux安全服务(全部机器执行)

# 关闭SELinux
setenforce 0

# 重启
reboot

安装此依赖,并开发声明的33061端口(全部机器执行)

yum install -y policycoreutils-python
semanage port -a -t mysqld_port_t -p tcp 33061

登录每一个库实例,执行下列SQL

-- 创建副本账号
CREATE USER 'REPL'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; -- 赋予所有库的主从同步副本权限
GRANT REPLICATION SLAVE ON *.* TO 'REPL'@'%'; -- 清空BIN日志
RESET MASTER; -- 安装MGR插件
INSTALL PLUGIN group_replication SONAME 'group_replication.so'; -- 检查是否安装成功
SELECT * FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'group_replication';
+-------------------+----------------+---------------+-------------------+---------------------+----------------------+------------------------+--------------------+---------------------------+----------------+-------------+
| PLUGIN_NAME | PLUGIN_VERSION | PLUGIN_STATUS | PLUGIN_TYPE | PLUGIN_TYPE_VERSION | PLUGIN_LIBRARY | PLUGIN_LIBRARY_VERSION | PLUGIN_AUTHOR | PLUGIN_DESCRIPTION | PLUGIN_LICENSE | LOAD_OPTION |
+-------------------+----------------+---------------+-------------------+---------------------+----------------------+------------------------+--------------------+---------------------------+----------------+-------------+
| group_replication | 1.1 | ACTIVE | GROUP REPLICATION | 1.4 | group_replication.so | 1.10 | Oracle Corporation | Group Replication (1.1.0) | GPL | ON |
+-------------------+----------------+---------------+-------------------+---------------------+----------------------+------------------------+--------------------+---------------------------+----------------+-------------+
1 row in set (0.02 sec)

进行组网数据同步

首先主库开始进行副本组初始化

# - - - - - - - - -[ 主库操作 ] - - - - - - - - - - - #
# 我们在 primary.cnf 配置文件中
# 把 group_replication_bootstrap_group 参数设置成 OFF,
# 在 primary 服务器启动时并不会直接启动复制组,
# 通过下面的命令动态的开启复制组是我们的集群更安全。 -- 开启复制组
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;

注意开启组副本SQL后的返回信息

检查服务是否报错

-- 检查日志
tail ‐f /var/log/mysqld.log

然后从库开始加入到 主库初始化的副本中

# - - - - - - - - -[ 从库1 & 从库2 操作 ] - - - - - - - - - - - #
#指定主从账户与指定通信频道
CHANGE MASTER TO
MASTER_USER="REPL",
MASTER_PASSWORD="123456"
FOR CHANNEL 'group_replication_recovery'; #开启组网数据同步
START GROUP_REPLICATION;

检查组副本的状态:

# 验证是否加入, 当所有节点为ONLINE状态时,才算成功
SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | MEMBER_COMMUNICATION_STACK |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
| group_replication_applier | a655ee5b-9ee6-11ec-b685-000c290bdef1 | centos7 | 3306 | ONLINE | PRIMARY | 8.0.27 | XCom |
| group_replication_applier | b1ae5b39-9efd-11ec-b67d-000c29dd2622 | centos7 | 3306 | RECOVERING | SECONDARY | 8.0.27 | XCom |
| group_replication_applier | b552f59c-9efd-11ec-b52d-000c29eb138a | centos7 | 3306 | RECOVERING | SECONDARY | 8.0.27 | XCom |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+----------------------------+
3 rows in set (0.02 sec)

所有节点成员均为ONLINE状态才表示MGR部署成功

像上面的RECOVERING状态,需要翻看该节点的服务日志,检查错误原因

-- 检查日志
tail ‐f /var/log/mysqld.log

总结:

1、主机需要区分主机名,并且配置主机名和网络映射

vim /etc/sysconfig/network

vim /etc/hosts

2、安装必要端口组件

yum install -y policycoreutils-python
semanage port -a -t mysqld_port_t -p tcp 33061

5.7版本要求的配置项更多,但是SQL开启副本同步的操作是一致的

参考:

https://www.cnblogs.com/sallyluo/p/11760304.html

主库MGR配置:

# MGR-CFG FOR MASTER
server_id = 1001
gtid_mode = ON
enforce_gtid_consistency = ON
master_info_repository = TABLE
relay_log_info_repository = TABLE
binlog_checksum = NONE
log_slave_updates = ON
log_bin = binlog
binlog_format= ROW
transaction_write_set_extraction ="XXHASH64"
loose-group_replication_group_name = "b13df29e-90b6-11e8-8d1b-525400fc3996"
loose-group_replication_start_on_boot = off
loose-group_replication_local_address="centos6-1:33061"
loose-group_replication_group_seeds="centos6-1:33061,centos6-2:33061,centos6-3:33061"
loose-group_replication_bootstrap_group = off
group_replication_ip_whitelist = "centos6-1,centos6-2,centos6-3"
report_host="centos6-1"

log_timestamps="system"
plugin-dir=/usr/lib64/mysql/plugin

从库1 和 从库 2 的MGR配置:

server-id 和 地址 改成从库自己的

# MGR - CFG FOR SLAVE
server_id = 1002
gtid_mode = ON
enforce_gtid_consistency = ON
master_info_repository = TABLE
relay_log_info_repository = TABLE
binlog_checksum = NONE
log_slave_updates = ON
log_bin = binlog
binlog_format= ROW
transaction_write_set_extraction = "XXHASH64"
loose-group_replication_group_name = "b13df29e-90b6-11e8-8d1b-525400fc3996"
loose-group_replication_start_on_boot = off
loose-group_replication_bootstrap_group = off
loose-group_replication_local_address="centos6-2:33061"
loose-group_replication_group_seeds="centos6-1:33061,centos6-2:33061,centos6-3:33061"
group_replication_ip_whitelist = "centos6-1,centos6-2,centos6-3"
report_host="centos6-2"

log_timestamps="system"
plugin-dir=/usr/lib64/mysql/plugin

【MySQL】MGR高可用搭建的更多相关文章

  1. 基于keepalived搭建MySQL的高可用集群

    MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,MHA和 ...

  2. 搭建MySQL MHA高可用

    本文内容参考:http://www.ttlsa.com/mysql/step-one-by-one-deploy-mysql-mha-cluster/ MySQL MHA 高可用集群 环境: Linu ...

  3. (转)基于keepalived搭建MySQL的高可用集群

    基于keepalived搭建MySQL的高可用集群  原文:http://www.cnblogs.com/ivictor/p/5522383.html MySQL的高可用方案一般有如下几种: keep ...

  4. Oracle Compute云快速搭建MySQL Keepalived高可用架构

    最近有个客户在测试Oracle Compute云,他们的应用需要使用MySQL数据库,由于是企业级应用一定要考虑高可用架构,因此有需求要在Oracle Compute云上搭建MySQL高可用集群.客户 ...

  5. Mysql之MGR高可用实战案例

    MGR高可用实战案例 1.环境准备 node1 rocky8.6 10.0.0.8 node2 rocky8.6 10.0.0.18 node3 rocky8.6 10.0.0.28 2.所有节点更改 ...

  6. Oracle和MySQL的高可用方案对比【转】

    关于Oracle和MySQL的高可用方案,其实一直想要总结了,就会分为几个系列来简单说说.通过这样的对比,会对两种数据库架构设计上的细节差异有一个基本的认识.Oracle有一套很成熟的解决方案.用我在 ...

  7. Keepalived+MySQL实现高可用

    MySQL的高可用方案有很多,比如Cluster,MMM,MHA,DRBD等,这些都比较复杂,我前面的文章也有介绍.最近Oracle官方也推出了Fabric.有时我们不需要这么复杂的环境,这些方案各有 ...

  8. 美团点评MySQL数据库高可用架构从MMM到MHA+Zebra以及MHA+Proxy的演进

    本文介绍最近几年美团点评MySQL数据库高可用架构的演进过程,以及我们在开源技术基础上做的一些创新.同时,也和业界其它方案进行综合对比,了解业界在高可用方面的进展,和未来我们的一些规划和展望. MMM ...

  9. Galera Cluster 实现mysql的高可用 (Percona XtraDB Cluster)

    Galera Cluster 实现mysql的高可用 (Percona XtraDB Cluster) # 基础搭建 # 设备:三台主机 192.168.47.101 192.168.47.102 1 ...

  10. MySQL MHA 高可用集群部署及故障切换

    MySQL MHA 高可用集群部署及故障切换 1.概念 2.搭建MySQL + MHA 1.概念: a)MHA概念 : MHA(MasterHigh Availability)是一套优秀的MySQL高 ...

随机推荐

  1. Oracle优化神技之临时表

    Oracle临时表在处理临时数据.会话数据隔离和复杂查询优化方面非常有用. 其底层逻辑是通过Oracle特殊的临时表来减少I/O操作和日志开销,提高了数据库性能和查询效率.开发者可以根据具体需求和场景 ...

  2. 算法金 | Python 中有没有所谓的 main 函数?为什么?

    ​大侠幸会,在下全网同名[算法金] 0 基础转 AI 上岸,多个算法赛 Top [日更万日,让更多人享受智能乐趣] 定义和背景 在讨论Python为何没有像C或Java那样的明确的main函数之前,让 ...

  3. scala怎么退出

    scala怎么退出 scala> :help //查看帮助 All commands can be abbreviated, e.g., :he instead of :help. :edit ...

  4. 原来Stable Diffusion是这样工作的

    stable diffusion是一种潜在扩散模型,可以从文本生成人工智能图像.为什么叫做潜在扩散模型呢?这是因为与在高维图像空间中操作不同,它首先将图像压缩到潜在空间中,然后再进行操作. 在这篇文章 ...

  5. golang interface 和 struct 添加方法的区别

    在 Go 语言中,struct 和 interface 都可以关联方法,但它们的方式不同: 1. struct 添加方法: 结构体(struct)本身不直接包含方法,但可以通过定义一个指向该结构体类型 ...

  6. 判断一个数n是不是快乐数

    引言 题目:编写一个算法来判断一个数n是不是快乐数 来源:网友分享的面试算法题 题目描述 [快乐数定义] 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和. 然后重复这个过程直到这个数变为 ...

  7. Libgdx游戏开发(4)——显示中文文字

    原文: Libgdx游戏开发(4)--显示中文文字-Stars-One的杂货小窝 本文代码示例采用kotlin代码进行讲解,且需要有libgdx入门基础 这里主要介绍关于在Libgdx显示文字的2种方 ...

  8. Jenkins构建UI自动化项目,指定本地执行,没弹起浏览显示

    1. 原因分析 为什么执行web没有弹出浏览器,Jenkins日志显示正在执行中 jenkins是用windows installer 安装成 windows的服务了,那么启动windows后jenk ...

  9. 防止unordered_map 被卡方法

    codeforces 上看到的,mark 一下代码.原作者:neal,原链接:https://codeforces.com/blog/entry/62393 struct custom_hash { ...

  10. 颠覆传统编程,用ChatGPT十倍提升生产力

    我们即将见证一个新的时代!这是最好的时代,也是最坏的时代! 需求背景 背景: 平时会编写博客,并且会把这个博客上传到github上,然后自己买一个域名挂到github上. 我平时编写的博客会有一些图片 ...