实验在RHEL7中做,因为9中缺少了一个关键的高可用组件

环境:两台数据库,内存和CPU要多一点

主流是MYSQL(开源),Oracle收费较贵

RHEL7中直接用make编译是有问题的,所以需要要gcc工具

做好前置准备:重新整理软件仓库,加入aliyun的地址源

 用原来的数据源,可能仓库不够,下载不了

开始安装gcc

解压gcc.zip

进入目录并检查内容是否齐全

安装

检查版本 

安装cmake3

解压缩安装包

进入目录并查看

安装mysql

检查安装包是否完整

解压并查看

直接编译可能会污染当前目录,所以新建一个目录来存放编译后

开始编译

#源码编译参数详解
[root@mysql_node1 mysql-8.3.0]# mkdir  build			#建立编译目录
[root@mysql_node1 mysql-8.3.0]# cmake3 .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \				#指定安装路径
-DMYSQL_DATADIR=/data/mysql \							#指定数据目录
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \				#指定套接字文件
-DWITH_INNOBASE_STORAGE_ENGINE=1 \						#指定启用INNODB存储引擎,默认用myisam
-DWITH_EXTRA_CHARSETS=all \								#扩展字符集
-DDEFAULT_CHARSET=utf8mb4 \								#指定默认字符集
-DDEFAULT_COLLATION=utf8mb4_unicode_ci \				#指定默认校验字符集
-DWITH_SSL=system \										#指定MySQL 使用系统已安装的 SSL 库
-DWITH_BOOST=bundled \									#指定使用 MySQL 源码包中内置的Boost库
-DWITH_DEBUG=OFF
#源码编译命令


[root@mysql_node1 build]# make -j2                            #-j2 表示有几个核心就跑几个进程

之前为什么给比较大的运行内存和多核,就是在这里

如果运行内存小了,在编译过程中就会造成内存溢出,会导致失败

make -j4

运行之后等待完成就行

编译好了之后就别动了


重新下载,Mysql8.3并不能支持实验

前面都是一样的,下载需要的编译软件

gcc和cmake3

把mysql3.0的包移入,解压并make安装

mysql 3.0编译内容
cmake3  .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_SSL=system -DWITH_BOOST=/root/mysql-8.0.40/boost/boost_1_77_0/  -DWITH_DEBUG=OFF

新的主机双核cpu,4G内存就够用

后面的步骤都一样,等待安装完毕就行

网页下载mysql3.0的安装包的方法


编译过程决定安装路径

make && make install

编译之后会自动生成目录的

 

岁让此时有了bin目录,但是启动时还是不生效的,因为没有加入环境变量 

 

编译时要求了存放数据的目录和用户,但是实际上是没有创建的

并且此时MySQL目录是由读和看的权限,没有执行权限

 并且要使用,还要有初始化数据

 复制启动脚本,但是无法启动,因为还没有初始化数据

[mysqld]
server-id=10
datadir=/data/mysql
socket=/data/mysql/mysql.sock
default_authentication_plugin=mysql_native_password

修改数据目录

做初始化

初始化完成后会有一个初始密码,千万别忘记了

列出系统中那些系统是启动的

做数据库的开启启动

直接登录什么也做不了,要先做安全初始化

重新输入密码 

一路回车

现在就可以正常使用了

 要重新删除下载的话,要先停止服务,再次删除


(第一台从数据库)mysqlb上的操作

 关闭rhel7的图形

重启之后就关闭图形,直接用终端了

可以直接从mysqla中直接复制到mysqlb上

拷贝完整目录

复制启动文件 

初始化,默认认证

 启动mysql

修改数据库初始密码 


MYSQL主从复制

数据很重要,有备份才无患

查看官方文档来学习主从复制

默认二进制日志是没有打开的,要在配置文件里修改,现在打开后会修改前缀

在主数据库上

在从数据库上

记得重启服务

此时查看日志前缀,改完之后就会从默认前缀变成mysql-bin

先做主数据库

在数据库中查看用户

用root来做并不好

我们需要新增一个用户

新增用户后一定要授权,刚刚新增的用户是谁就给谁授权

查看授权信息

查看日志情况(后面从数据库认证要用到)

在生产环境中,要做主从复制,先要把数据从主中拉取出来给从,让他们现在数据相同

但是现在是实验,没有数据在其中

从数据库

要把mastaer制定到哪里,用户ip,用户名,用户密码,日志文件名,日志id(这些都要和主数据库一样)

如果写错了,可以刷掉之前写的

打开服务的命令

查看是否开启的命令

Slave_IO_Running用来传输日志信息

Slave_SQL_Running用来回放日志信息

测试主从同步:

在从数据库上监控:watch -n 1 'mysql -uroot -plee -e "select * from lee.userlist;" 2>/dev/null'

要是想删掉这个error

在主数据库上中

此时从数据库上error就没了

在主数据库上

主从生效了的话,在主数据库上输入这个数据的时候,从数据库中立刻也要有接受反馈

在从数据库上


一主双从模式

再新加一台主机,这台主机要追平之前的主从,该怎么做?

先安装一台主机,步骤和之前一样

安装好之后

此时之前的实验中,主从里已经有数据了

先导出之前的数据

在主数据库上:mysqldump -uroot -plee lee > lee.sql

在导入到新主机里

在实际环境中在备份导出前要先锁库和锁表

要在lee库里恢复,没有库要新建

然后导入数据

查看是否导入成功

当数据拉平了,再做主从

确认清楚认证,确认是否有变化

在MySQLC中做认证,连上主数据库

开启服务并查看 

一主两从的情况,在实际生产环境中,最好从数据库都只能读,只有主数据库来写数据

 

写入的数据大于读时主数据库多

读的数据大于写的时候从数据库多


gtid模式

用二进制日志,有一些缺点

如果是做了高可用,有一台主机挂了,需要选择一个新的master,要选一个与之前的主机数据差距最小的主机,现在的二进制日志是无法找到的

用gtid模式来做,唯一标识,每个主机都有一个固定的id,要选举时,直接比较就行

在master端的写入时多用户读写,在slave端的复制时单线程日志回放,所以slave端一定会延迟与master端

这种延迟在slave端的延迟可能会不一致,当master挂掉后slave接管,一般会挑选一个和master延迟日志最接近的充当新的master

那么为接管master的主机继续充当slave角色并会指向到新的master上,作为其slave

这时候按照之前的配置我们需要知道新的master上的pos的id,但是我们无法确定新的master和slave之间差多少

当激活GITD之后

当master出现问题后,slave2和master的数据最接近,会被作为新的master

slave1指向新的master,但是他不会去检测新的master的pos id,只需要继续读取自己gtid_next即可

实验:

停止从数据库(两个从都要做)

启动gtid模式(主从都做)

启动gtid模式        gtid——mode=on

必须保持强一致性        enforce-gtid-consistency=on

重启所有mysql服务

在主数据库上查看是否开启

在从数据库上,做gtid认证

 


慢查询日志

此时慢日志还未打开,查看log的状态是OFF

那此时在数据库中查找这个log,是不会被查找到

打开慢查询模式

此时再查看

 

测试:

此时查看日志就可以看到信息了


mysql的并行复制

谁要做日志传输和日志回放

默认情况下slave中使用的是sql单线程回放

在master中时多用户读写,如果使用sql单线程回放那么会造成组从延迟严重

开启MySQL的多线程回放可以解决上述问题

查看slave中的线程信息

在从数据库中

编写多线程

 

重新查看后,此时sql线程转化为协调线程,16个worker负责处理sql协调线程发送过来的处理请求


半同步模式

1.半同步模式原理
mysql的主备库通过binlog日志保持一致,主库本地执行完事务,binlog日志落盘后即返回给用户;备库通过拉取主库binlog日志来同步主库的操作。默认情况下,主库与备库并没有严格的同步,因此存在一定的概率备库与主库的数据是不对等的。半同步特性的出现,就是为了保证在任何时刻主备数据一致的问题。相对于异步复制,半同步复制要求执行的每一个事务,都要求至少有一个备库成功接收后,才返回给用户。实现原理也很简单,主库本地执行完毕后,等待备库的响应消息(包含最新备库接收到的binlog(file,pos)),接收到备库响应消息后,再返回给用户,这样一个事务才算真正完成。在主库实例上,有一个专门的线程(ack_receiver)接收备库的响应消息,并以通知机制告知主库备库已经接收的日志,可以继续执行。

只在gtid模式下可用

核心是slave的通知机制,数据发送过来,slave会发ack来确认

在从中

在配置文件中写

 但是没有插件,开不了

在主中

不要重启,没有插件,开不了

安装模块

查看是否安装好

加载完成之后,才可以启动

启动

产看模式是否开启

查看同步的信息,暂时还没有

在从中

和主中配置不一样

不要重启,没有加载插件

安装

查看是否安装

启动

产看是否开启

测试:

在从中,关闭线程在打开,刷新

两边都要查看

在主中

测试:

在200从中关闭接受日志的线程

在主中

关闭一台,半同步还在继续

此时关闭两个了

其实还是会传输,但是会在10秒后转变成异步

此时你再查看会发现,有两笔是半同步传输的,一笔是异步传输的

 半同步自动关闭,转成异步

恢复一台就可以使ack恢复了 


检查是否开启

主挂了,要怎么知道

主挂了,从要怎么转变成主

mysql高可用之MHA

工作原理:

会定期检测

master出现故障时,可以自动切换最新数据的slave为master


前提:一主两从的模式

环境:四台虚拟机

新增一台MHA的虚拟机

安装所有rpm

并且所有数据库都要安装node检测的软件,所以直接复制过去 

三台数据库都要做

这里面是模版

将模版移动到新目录中

复制到是主体和对于主机控制的内容

ping_interval=3:做3次都失败了,就宣告这台master已经失效了

在编辑文件中写,master的设定用户是root

要查看是否能远程登录root

三台数据库都要做

建立能够远程登录的用户 

这里设立的超级用户

对新增用户做授权

我们这里设定是超级管理员,所有的功能都要能做

 

在原先的master中有一个用于数据同步的用户lee

但是在第一台有可能变为主的从数据库中,是没有这个用户的,但是这个数据库是有变为主的可能性的

第一台从数据库还缺少一个变为主的条件,

这四台主机之间要实现免密,因为在切换时,要能直接切换,不受阻碍

检测当前架构免密是否成功

检测主从同步情况


master未出现故障手动切换

这个实验先把半同步关闭,试验完成后再打开

问要不要做切换要

master要不要从100切换到200

保持功能 要

同步中断了

排错过程

还不行

重做

删除之前所有的认证

日志还原

所有都:


组复制MGR

前面开启一个协议层,写东西时会先进入协议层,协议层会去询问数据库能不能做,如果超过两个以上回复不能做,就不能做(少数服从多数)

单主

多主

任何一个主机写入时,所有的数据库都会同步

所有的数据库服务都关闭

 ​​​​​​​

在配置文件中

禁止这些模式的存储机制

禁止二进制日志的校验

使用行日志格式

 ​​​​​​​

把mysql的文件都删掉

域名解析:

做初始化

完成后不要启动数据库

继续编辑编辑文件

对于插件来说是不能做初始化的,所以不能启动

plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address="172.25.254.30:33061"
group_replication_group_seeds="172.25.254.100:33061,172.25.254.200:33061,172.25.254.30: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

 

最后再启动

不要安全初始化,直接进入

修改超级用户密码,不然无法操作了

关闭日志,后面的操作不需要记录到日志中

创建用户

授权

 ​​​​​​​

把自己加入组中

手动打开组复制模式

打开服务,再关闭模式

查看组情况

加入后两台数据库到组中

第一台从

数据之间有差异

开之前,把这台主机里面之前所有的日志文件都刷新

再次查看组

 recoe没好

测试呢能不能连

 ping不同

要做域名解析

等待一段时间

此时再查看

第二台

继续上一步

再去查看,此时有三个

测试:

在主上建立数据库

在从上查看

 在从上建表

在第二台从上看

在主上看

现在关闭一台数据库

还是能正常输入数据

此时两台都挂了

 

此时写了也不能进入磁盘

重新登录

不能自动上线,要手动开启

 ​​​​​​


MHA

在主数据库上

 先要开启gtid模式

 

执行它之前,一定要关闭mysql

等从数据库完成gtid模式后

在master端配置启用半同步模式

#安装半同步插件

查看插件情况

打开半同步功能

查看半同步功能状态

MYSQL开启时自动安装模块

在编辑文档里写

建立用于做数据同步的用户

这里是手动开启的

在从中

编辑文档

[mysqld]
server-id=200
datadir=/data/mysql
socket=/data/mysql/mysql.sock
default_authentication_plugin=mysql_native_password
log-bin=binlog
gtid_mode=ON
skip-name-resolve
binlog_format=ROW
enforce-gtid-consistency=ON

 

首先要做gtid模式

开启slave端的gtid

 

 

在主数据库完成半同步模式后

mysql> STOP SLAVE IO_THREAD;            #重启io线程,半同步才能生效
Query OK, 0 rows affected (0.00 sec)

mysql> START SLAVE IO_THREAD;            ##重启io线程,半同步才能生效
Query OK, 0 rows affected (0.00 sec)

安装

在主服务器上也做:

MHA上

在其他3台数据库

设定root远程登录功能

检测配置:

测试:

master未出现故障手动切换

 masterha_master_switch --conf=/etc/mha/mha.cfg --master_state=alive --new_master_host=172.25.254.200 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

在从数据中看

之前:

现在: 

master故障手动切换

 

 

 

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

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

相关文章

自动驾驶嵌入式软件工程师面试题【持续更新】

文章目录前言请描述 CAN 帧的基本结构(包括标识符、数据字段、CRC 等)描述 WebSocket 协议的基本工作流程(包括握手、数据帧结构)请说明如何实现 WebSocket 连接的心跳机制以检测连接状态,并描述在断开后如何通过重连策…

vue(5)-组件

一.组件三大组成部分(结构/样式/逻辑)(1)组件样式冲突用scoped全局样式在组件中起全局作用,局部样式可以加scoped属性来只作用于当前组件图中只给baseone加这个样式,就在baseone中style加scoped&#xff08…

【机器学习】两大线性分类算法:逻辑回归与线性判别分析:找到分界线的艺术

文章目录一、核心概念:数据分类的"切分线"二、工作原理:从"找分界线"理解二、常见算法1、逻辑回归:二分类2、线性判别分析(LDA):分类与降维3、两种算法对比分析三、实际应用&#xff1…

静态分析c/cpp源码函数调用关系图生成

calltree calltree 不好使用 Dpxygen https://www.doxygen.nl/download.html Graphviz https://graphviz.org/download/ 静态代码调用结构图分析、构建、生成 doxygen doxygen在win和linux上均可运行,可以自动分析源码,对c语言项目友好,预处…

使用 MySQL Shell 进行 MySQL 单机到 InnoDB Cluster 的数据迁移实践

迁移背景与环境原来都是用mysqldump,DTS或者cdc迁移,这次8.0用了下新工具感觉挺好用的,简单快捷,30G数据不到源环境:单机 MySQL 8.0,地址为 172.23.3.28目标环境:InnoDB Cluster 集群&#xff0…

淘宝商品API可以获取哪些商品详情数据?

商品详情页商品全部sku信息"skus": {"sku": [{"price": 45.6,"total_price": 0,"orginal_price": 45.6,"properties": "1627207:39617249736","properties_name": "1627207:39617249736…

新一代PLC控制软件平台EsDA-AWStudio

在工业自动化和智能制造领域,高效的软件平台是提升开发效率和系统性能的关键。ZLG致远电子推出的EsDA-AWStudio平台,凭借其强大的功能和灵活的设计,为工业控制和物联网应用提供了全新的解决方案。一站式PLC工业控制软件平台EsDA-AWStudioZLG致…

基于深度学习的医学图像分析:使用MobileNet实现医学图像分类

前言 医学图像分析是计算机视觉领域中的一个重要应用,特别是在医学图像分类任务中,深度学习技术已经取得了显著的进展。医学图像分类是指将医学图像分配到预定义的类别中,这对于疾病的早期诊断和治疗具有重要意义。近年来,MobileN…

docker 容器常用命令

在平常的开发工作中,我们经常需要使用 docker 容器,那么常用的 docker 容器命令有哪些呢?今天简单总结下。 一:查看容器查看运行的容器:docker ps查看所有的容器:docker ps a查看容器详细信息&#…

重型机械作业误伤预警响应时间缩短80%!陌讯多模态识别算法在工程现场的应用优化

一、行业痛点:机械作业场景的识别困境据《工程机械安全白皮书(2025)》统计,施工现场因机械盲区导致的工伤事故中​​78.3%由识别延迟引发​​。核心难点包括:​​动态遮挡问题​​:吊臂摆动导致目标部件部分…

2025年ESWA SCI1区TOP,强化学习多目标灰狼算法MOGWO-RL+分布式混合流水车间调度,深度解析+性能实测

目录1.摘要2.问题描述和数学建模3.强化学习多目标灰狼算法MOGWO-RL4.结果展示5.参考文献6.算法辅导应用定制读者交流1.摘要 本文针对大规模个性化制造(MPM)中的调度问题,提出了一种新的解决方案。MPM能够在确保大规模生产的前提下&#xff0…

Mac 系统下安装 nvm

Mac 系统下安装 nvm nvm 全称为 node version manger,顾名思义就是管理 node 版本的一个工具,通过这个工具,我们可以在一台计算机上安装多个版本的 node,并且随时进行无缝的切换。 1. 卸载原本的 node.js(重要&#xf…

变量筛选—随机森林特征重要性

对于接触算法模型不久的小伙伴来说,建模中海量变量筛选总是让人头疼,不知道如何把握。之前已经介绍了一些变量筛选的方法:变量筛选一张图、【变量筛选】计算类别型变量IV值、KS值、一文囊括风控建模中的变量筛选方法、变量筛选—特征包含信息量。本文详细介绍通过随机森林算…

【设计模式】 3.设计模式基本原则

单一职责原则 对于一个类而言,有且仅有一个引起他变化的原因或者说,一个类只负责一个职责 如果一个类承担的职责过多,那么这些职责放在一起耦合度太高了,一个职责的变化可能会影响这个类其他职责的能力。 所以我们在做软件设计的时…

ABP VNext + Redis Bloom Filter:大规模缓存穿透防护与请求去重

ABP VNext Redis Bloom Filter:大规模缓存穿透防护与请求去重 🚀 📚 目录ABP VNext Redis Bloom Filter:大规模缓存穿透防护与请求去重 🚀TL;DR ✨1. 引言 🎉2. 环境与依赖 🛠️3. Bloom Filt…

构建工具和脚手架:从源码到dist

构建工具和脚手架:从源码到dist**1. 为什么需要工程转换?****2. 构建工具的核心职责**为什么要求转换**1)明确三种关键问题****(2)Webpack 的打包机制****3. 开发服务器(Webpack Dev Server)***…

数字化生产管理系统设计

下面提供一个基于Python的数字化管理系统框架,使用现代技术栈实现。这个系统将包含设备监控、故障管理、装配配套表生成、生产计划管理等功能。系统架构数字化生产管理系统 ├── 设备监控模块 ├── 故障管理模块 ├── 产品装配管理模块 ├── 生产计划管理模…

【vue】创建响应式数据ref和reactive的区别

目录 1、所谓响应式数据 2、ref创建基本类型响应式数据 3、reactive创建对象类型响应式数据 4、ref定义对象类型响应式数据 5、总结:ref和reactive对比 6、补充:toRefs与toRef 1、所谓响应式数据 所谓响应式数据就是,在vue页面中&#…

YOLO12 改进、魔改|直方图 Transformerm模块HTB ,通过动态范围特征分组、针对性注意力与多尺度融合,提高对遮挡以及多尺度目标的关注能力

在恶劣天气(如雨、雪、雾)下的图像恢复任务中,传统 Transformer 模型为降低计算量,常将自注意力限制在固定空间范围或仅在通道维度操作,导致难以捕捉长距离空间特征,尤其无法有效处理天气退化像素&#xff…

涉水救援机器人cad【12张】三维图+设计书明说

涉水救援机器人设计 摘 要 随着城市化进度的加快,各种水上游乐设备的增多,水上灾害和溺水事件频繁发生,水上救援任务困难重重,特别是在一些水流湍急的环境下进行救援。传统的水上救援工作比较缓慢,大多数是通过投射救…