mysql高可用之组复制

MySQL Group Replication( 简称 MGR ) MySQL 官方于 2016 12 月推出的一个全新的高可用与高扩展的解决方案组复制是 MySQL 5.7.17 版本出现的新特性,它提供了高可用、高扩展、高可靠的 MySQL 集群服务MySQL 组复制分单主模式和多主模式,传统的 mysql 复制技术仅解决了数据同步的问题,MGR 对属于同一组的服务器自动进行协调。对于要提交的事务,组成员必须就全局事务序列中给定事务的顺序达成一致提交或回滚事务由每个服务器单独完成,但所有服务器都必须做出相同的决定如果存在网络分区,导致成员无法达成事先定义的分割策略,则在解决此问题之前系统不会继续进行,这是一种内置的自动裂脑保护机制MGR由组通信系统 ( Group Communication System GCS ) 协议支持该系统提供故障检测机制、组成员服务以及安全且有序的消息传递
组复制流程:
组复制分为
单写/单组模式
多写/多组模式:
#数据需要保持强一致性
#为了避免实验中出现问题

#把mysql全部停掉

[root@mysql1 ~]# /etc/init.d/mysqld sto
Shutting down MySQL... SUCCESS! 
[root@mysql2 ~]# /etc/init.d/mysqld stop
Shutting down MySQL.... SUCCESS! 
 
[root@mysql3 ~]# /etc/init.d/mysqld stop
Shutting down MySQL.... SUCCESS! 
#把数据删掉(建的库表那些)#仅对于实验,在实际的开发环境中,切记要备份数据,数据不可随意删除。
[root@mysql1 ~]# rm -rf /data/mysql/*
 

#编辑配置文件 

#组复制暂时仅支持innodb存储引擎,其他的不能用,为了避免报错,把其他的存储引擎给禁止了。
[root@mysql1 ~]# vim /etc/my.cnf
[root@mysql1 ~]# cat /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=1
gtid_mode=on
enforce-gtid-consistency=on
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" #禁用指定存储引擎
master_info_repository=TABLE #复制事件数据到表中而不记录在数据目录中
relay_log_info_repository=TABLE
binlog_checksum=NONE #禁止对二进制日志校验
log_slave_updates=ON #打开数据库中继,#当slave中sql线程读取日志后也会写入到自己的binlog中
log_bin=binlog   #重新指定log名称
binlog_format=ROW  #使用行日志格式
plugin_load_add='group_replication.so'  #加载组复制插件
transaction_write_set_extraction=XXHASH64  #把每个事件编码为加密散列
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #通知插件正式加入#或创建的组名#名称为uuid格式
group_replication_start_on_boot=off  #在server启动时不自动启动组复制
group_replication_local_address="172.25.254.6:33061"  #指定插件接受其他成员的信息端口
group_replication_group_seeds="172.25.254.6:33061,172.25.254.66:33061,172.25.254.166:33061" #本地地址允许访问成员列表
group_replication_ip_whitelist="172.25.254.0/24,127.0.0.1/8" #主机白名单
group_replication_bootstrap_group=off #不随系统自启而启动
group_replication_single_primary_mode=OFF #使用多主模式
group_replication_enforce_update_everywhere_checks=ON #组同步中有任何改变检测更新
group_replication_allow_local_disjoint_gtids_join=1 #放弃自己信息以master事件为主
#
#数据库初始化
[root@mysql1 ~]# mysqld --user=mysql --initialize
2024-08-27T16:15:22.770393Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2024-08-27T16:15:33.915392Z 0 [Warning] InnoDB: New log files created, LSN=45790
2024-08-27T16:15:34.446094Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2024-08-27T16:15:34.971204Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 97168320-648f-11ef-aff6-000c29c6c80f.
2024-08-27T16:15:34.984340Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2024-08-27T16:15:36.041466Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2024-08-27T16:15:36.041564Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
2024-08-27T16:15:36.044474Z 0 [Warning] CA certificate ca.pem is self signed.
2024-08-27T16:15:36.542994Z 1 [Note] A temporary password is generated for root@localhost: DpFfykyxX6#y
 
#登录-改密码

[root@mysql1 ~]# /etc/init.d/mysqld start
Starting MySQL..Logging to '/data/mysql/mysql1.err'.
...... SUCCESS! 
[root@mysql1 ~]# mysql -uroot -p'DpFfykyxX6#y'

mysql> alter user root@localhost identified by 'redhat';
Query OK, 0 rows affected (0.01 sec)
#先关掉日志功能,不记录

#建立数据同步用的用户,授权
#打开日志功能
mysql> SET SQL_LOG_BIN=0;
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'redhat';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)

 

#master即为seed种子主机

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='redhat' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.03 sec)
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
Query OK, 0 rows affected (0.00 sec)
mysql> START GROUP_REPLICATION;
Query OK, 0 rows affected, 1 warning (2.83 sec)
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
mysql> SELECT * FROM performance_schema.replication_group_members;
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 7599627f-649e-11ef-94d3-000c29c6c80f | mysql1      |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
1 row in set (0.01 sec)


##三台主机都做地址解析

[root@mysql1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.6    mysql1
172.25.254.66    mysql2
172.25.254.166    mysql3
 

#添加另外两台主机

[root@mysql1 ~]# scp /etc/my.cnf root@172.25.254.66:/etc/my.cnf
root@172.25.254.66's password: 
my.cnf                                                                       100% 1580   245.4KB/s   00:00    
[root@mysql1 ~]# scp /etc/my.cnf root@172.25.254.166:/etc/my.cnf
root@172.25.254.166's password: 
my.cnf                                                                       100% 1580   210.9KB/s   00:00  

#有的地方需要更改

[root@mysql2 ~]# vim /etc/my.cnf
[root@mysql2 ~]# cat /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=2
gtid_mode=on
enforce-gtid-consistency=on
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" #禁用指定存储引擎
master_info_repository=TABLE #复制事件数据到表中而不记录在数据目录中
relay_log_info_repository=TABLE
binlog_checksum=NONE #禁止对二进制日志校验
log_slave_updates=ON #打开数据库中继,#当slave中sql线程读取日志后也会写入到自己的binlog中
log_bin=binlog   #重新指定log名称
binlog_format=ROW  #使用行日志格式
plugin_load_add='group_replication.so'  #加载组复制插件
transaction_write_set_extraction=XXHASH64  #把每个事件编码为加密散列
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #通知插件正式加入#或创建的组名#名称为uuid格式
group_replication_start_on_boot=off  #在server启动时不自动启动组复制
group_replication_local_address="172.25.254.66:33061"  #指定插件接受其他成员的信息端口
group_replication_group_seeds="172.25.254.6:33061,172.25.254.66:33061,172.25.254.166:33061" #本地地址允许访问成员列表
group_replication_ip_whitelist="172.25.254.0/24,127.0.0.1/8" #主机白名单
group_replication_bootstrap_group=off #不随系统自启而启动
group_replication_single_primary_mode=OFF #使用多主模式
group_replication_enforce_update_everywhere_checks=ON #组同步中有任何改变检测更新
group_replication_allow_local_disjoint_gtids_join=1 #放弃自己信息以master事件为主

[root@mysql2 ~]# rm -rf /data/mysql/*
[root@mysql2 ~]#  mysqld --user=mysql --initialize
[root@mysql2 ~]# /etc/init.d/mysqld start
Starting MySQL... SUCCESS! 

[root@mysql2 ~]# mysql -uroot -p'u(&#E;uWr0M1';

mysql> alter user root@localhost identified by 'redhat';
Query OK, 0 rows affected (0.01 sec)

mysql> SET SQL_LOG_BIN=0;
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'redhat';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> SET SQL_LOG_BIN=1;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='redhat' FOR CHANNEL 'group_replication_recovery';
Query OK, 0 rows affected, 2 warnings (0.03 sec)

mysql> START GROUP_REPLICATION;

Query OK, 0 rows affected, 1 warning (6.68 sec)

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 0034a5ff-64df-11ef-a462-000c294c383d | mysql2      |        3306 | RECOVERING   |
| group_replication_applier | 7599627f-649e-11ef-94d3-000c29c6c80f | mysql1      |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
2 rows in set (0.01 sec)
 

slave2同slave1:

[root@mysql3 ~]# vim /etc/my.cnf
[root@mysql3 ~]# cat /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
server-id=3
gtid_mode=on
enforce-gtid-consistency=on
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY" #禁用指定存储引擎
master_info_repository=TABLE #复制事件数据到表中而不记录在数据目录中
relay_log_info_repository=TABLE
binlog_checksum=NONE #禁止对二进制日志校验
log_slave_updates=ON #打开数据库中继,#当slave中sql线程读取日志后也会写入到自己的binlog中
log_bin=binlog   #重新指定log名称
binlog_format=ROW  #使用行日志格式
plugin_load_add='group_replication.so'  #加载组复制插件
transaction_write_set_extraction=XXHASH64  #把每个事件编码为加密散列
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa" #通知插件正式加入#或创建的组名#名称为uuid格式
group_replication_start_on_boot=off  #在server启动时不自动启动组复制
group_replication_local_address="172.25.254.166:33061"  #指定插件接受其他成员的信息端口
group_replication_group_seeds="172.25.254.6:33061,172.25.254.66:33061,172.25.254.166:33061" #本地地址允许访问成员列表
group_replication_ip_whitelist="172.25.254.0/24,127.0.0.1/8" #主机白名单
group_replication_bootstrap_group=off #不随系统自启而启动
group_replication_single_primary_mode=OFF #使用多主模式
group_replication_enforce_update_everywhere_checks=ON #组同步中有任何改变检测更新
group_replication_allow_local_disjoint_gtids_join=1 #放弃自己信息以master事件为主
…………………………

第三台主机做好后

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 0034a5ff-64df-11ef-a462-000c294c383d | mysql2      |        3306 | ONLINE   |
| group_replication_applier | 3cceba2b-649c-11ef-bb42-000c29a7a897 | mysql3      |        3306 | ONLINE   |  
| group_replication_applier | 7599627f-649e-11ef-94d3-000c29c6c80f | mysql1      |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.01 sec)
 

测试:
在每个节点都可以完成读写
[root@mysql1 ~]# mysql -predhat

mysql> CREATE DATABASE folian2;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE TABLE folian2.userlist(
    -> username VARCHAR(10) PRIMARY KEY NOT NULL,
    -> password VARCHAR(50) NOT NULL
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> INSERT INTO folian2.userlist VALUES ('user1','111');
Query OK, 1 row affected (0.02 sec)

mysql> SELECT * FROM folian2.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1    | 111      |
+----------+----------+
1 row in set (0.00 sec)


[root@mysql2 ~]# mysql -predhat

[root@mysql2 ~]# mysql -p
mysql> INSERT INTO folian2.userlist values ('user2','222');
Query OK, 1 row affected (0.00 sec)
mysql> select * from lee.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 111 |
| user2 | 222 |
+----------+----------+
2 rows in set (0.00 sec)
[root@mysql3 ~]# mysql -p
mysql> INSERT INTO folian2.userlist values ('user3','333');
Query OK, 1 row affected (0.00 sec)
mysql> select * from lee.userlist;
+----------+----------+
| username | password |
+----------+----------+
| user1 | 111 |
| user2 | 222 |
| user3 | 333 |
+----------+----------+
3 rows in set (0.00 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/53114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请解释Java中的装箱拆箱操作对性能的影响,并讨论其最佳实践。什么是Java中的值传递和引用传递?它们在函数调用中的表现有何不同?

请解释Java中的装箱拆箱操作对性能的影响,并讨论其最佳实践。 在Java中,装箱(Boxing)和拆箱(Unboxing)操作是Java自动类型转换机制的一部分,主要用于基本数据类型(如int, double, c…

stun和trun

在 WebRTC 中,STUN(Session Traversal Utilities for NAT)和 TURN(Traversal Using Relays around NAT)是用于NAT穿透的两种不同的技术,它们解决的问题不同,因此在某些情况下需要同时使用。 ST…

产品需求过程管理重要性

产品需求过程管理重要性 背景 以下都是真实事项经历回顾,在产品开发过程中,产品经理与研发团队之间的沟通至关重要。然而,沟通不畅或信息缺失常常导致需求无法准确传达,最终影响产品的成功。以下是一些常见的问题: 1.需…

C++基础【字符串】(Ac-Wing)

字符串加空格 #include <iostream> #include <cstring> #include <algorithm>using namespace std;int main() {string s;getline (cin, s);for (int i 0; i < s.size(); i )cout << s[i] << " "; }字符串插入 #include<bits/…

js处理echarts tooltip定时轮播

echarts tooltip定时轮播 /*** echarts tooltip轮播* param chart ECharts实例* param chartOption echarts的配置信息* param options object 选项* {* interval 轮播时间间隔&#xff0c;单位毫秒&#xff0c;默认为3000* true表示循环所有series的tooltip…

Electron基础(二) 进程通信的ipcMain、contextBridge、ipcRenderer

1.什么是ipcMain 在 Electron 中&#xff0c;ipcMain是一个非常重要的模块&#xff0c;它负责处理从渲染器进程&#xff08;即 Web 页面&#xff09;发送到主进程&#xff08;即 Electron 应用的后台进程&#xff09;的进程间通信&#xff08;IPC&#xff0c;Inter-Process Co…

使用HTTP代理注意的点

“在网络世界中&#xff0c;HTTP代理扮演着桥梁的角色&#xff0c;帮助用户匿名访问网站、加速网页加载、绕过地区限制等。然而&#xff0c;不当或不安全地使用HTTP代理也可能带来一系列问题。以下是在使用HTTP代理时需要注意的几个关键点。” 一、选择可靠的代理服务商 首先&…

鹰眼应急实时三维重建装备,高质量交付中!

在《2024年地方应急管理科技信息化任务书》的指导和应急管理万亿国债支撑下&#xff0c;全国各地正积极推进应急管理现代化建设&#xff0c;全力提升“数据汇聚服务能力、监测预警能力、指挥调度能力、支撑保障能力”四项应急管理能力。 制定标准化流程规范&#xff0c;保障交…

[Leetcode 47][Medium]-全排列 II-回溯(全排列问题)

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 原题地址 二、整体思路 和上一道Leetcode46相比&#xff0c;有变化的地方是要排除重复组合的情况。那么在组合问题中去除重复组合的方法是先对数组进行排序,然后在回溯函数中判断当前元素与上一个元素是否相同,若相同…

DDS(Data Distribution Service)的数据状态分布和管理简单介绍

1. 数据中心模型 在 DDS 中&#xff0c;数据分发是基于数据中心模型的&#xff0c;而不是消息中心模型。数据中心模型强调数据本身的存在和状态变化&#xff0c;而消息中心模型主要关注消息的传递。通过使用数据中心模型&#xff0c;DDS 可以有效地跟踪每个话题的状态&#xf…

系统架构师考试学习笔记第三篇——架构设计高级知识(11)软件可靠性基础知识

本章知识点&#xff1a; 第11课时主要学习软件可靠性基本概念、建模、管理、设计、测试和评价等内容。本课时内容侧重于概念知识,根据以往全国计算机技术与软件专业技术资格(水平)考试的出题规律,考查的知识点多来源于教材,扩展内容较少。根据考试大纲,本课时知识点会涉及单项选…

赞奇科技与华为云共襄828 B2B企业节,激活数字内容“云”创作

8月28日&#xff0c;在2024中国国际大数据产业博览会上&#xff0c;第三届828 B2B企业节正式开幕&#xff0c;旨在融通数智供需&#xff0c;加速企业智改数转&#xff0c;助推中国数智产业实力再升级。 828 B2B企业节是全国首个基于数字化赋能的企业节&#xff0c;由华为联合上…

python网络爬虫(一)——网络爬虫基本原理

1.使用Beautiful Soup解析网页 通过request库已经抓取到网页源码&#xff0c;接下来要从源码中找到并提取数据。Beautiful Soup是python的一个库&#xff0c;其主要功能是从网页中抓取数据。Beautiful Soup目前已经被移植到bs4库中&#xff0c;也就是说在导入Beautiful Soup时需…

HarmonOS实战开发:Node-API接口适配模块加载指导

Node-API中的napi_load_module_with_info接口的功能是进行模块的加载&#xff0c;当模块加载出来之后&#xff0c;可以使用函数napi_get_property获取模块导出的变量&#xff0c;也可以使用napi_get_named_property获取模块导出的函数&#xff0c;该函数可以在新创建的ArkTs基础…

力扣239题详解:滑动窗口最大值的多种解法与模拟面试问答

在本篇文章中&#xff0c;我们将详细解读力扣第239题“滑动窗口最大值”。通过学习本篇文章&#xff0c;读者将掌握如何在数组中找到每个滑动窗口的最大值&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释&#xff0c;以便于理解。 问题描述 力…

SprinBoot+Vue学生选课微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…

C++使用日志库经验总结

1、log4cpp日志源文件路径设置 在 Visual Studio 中&#xff0c;C 项目的日志格式可以通过设置项目的属性来调整。如果你想要使用完整路径来显示诊断消息&#xff0c;可以在项目属性中的“C/C”选项卡下的“高级”属性页中找到“使用完整路径”&#xff08;/FC&#xff09;选项…

探索数字化生态平台的特色功能,开启未来新征程

在数字化浪潮席卷全球的今天&#xff0c;数字化生态平台正以惊人的速度崛起&#xff0c;成为推动经济发展与社会进步的强大引擎。那么&#xff0c;这些平台究竟有哪些独特的特色功能呢&#xff1f;让我们一同深入探索。 首先&#xff0c;我们要明确数字化生态平台的定义。它是利…

ParallelsDesktop19可在任何Mac上运行Windows软件

ParallelsDesktop19是一款Mac虚拟机软件&#xff0c;可在任何Mac上运行Windows&#xff0c;体验不同操作系统之间的无缝集成&#xff0c;并具有创新设计和增强功能&#xff0c;如无密码登录与TouchID、支持macOSSonoma14和增强打印选项。此外&#xff0c;它还支持运行更多Windo…

第二证券:大洗牌!头部券商营收、净利集体下滑

前十券商营收团体下滑&#xff0c;银河证券跌幅最小 新股IPO数量锐减129家至44家&#xff0c;国内证券市场股票基金交易量日均规划 同比下降 6.83%……关于证券公司而言&#xff0c;本年上半年可谓多重要素叠加冲击&#xff0c;成果下滑难以避免。于大多数证券公司而言&#x…