Mysql主从复制+MHA实验笔记[特殊字符]
目录
基本概念
工作原理
优势
环境准备:四台centos-其中三台mysql,一台MHA
配置一主两从
安装MHA
配置无密码认证
配置MHA
模拟master故障
基本概念
MySQL 主从复制:是 MySQL 数据库中实现数据冗余、数据备份和高可用性的重要技术手段。它通过将主数据库的 DDL(数据定义语言)和 DML(数据操作语言)操作记录到二进制日志(binlog)中,然后从数据库通过 I/O 线程读取主库的 binlog,并将其应用到自己的数据库中,从而实现主从数据库之间的数据同步。
MHA(Master High Availability):是 MySQL 高可用性解决方案中的一种,主要用于在 MySQL 主从复制架构中,自动检测主数据库的故障,并快速将从数据库提升为新的主数据库,实现故障转移,保证数据库服务的连续性,减少停机时间。
工作原理
MySQL 主从复制原理
- Binlog 日志记录:主库在执行数据变更操作时,会将这些操作记录到二进制日志(Binlog)中,Binlog 记录了所有数据库更改操作的顺序和内容。
- I/O 线程读取:从库启动一个 I/O 线程,该线程与主库建立连接,请求主库发送 Binlog 内容。主库接收到请求后,通过 Dump 线程将 Binlog 内容发送给从库的 I/O 线程。
- Relay Log 中继:从库的 I/O 线程将接收到的 Binlog 内容写入到本地的中继日志(Relay Log)中。
- SQL 线程应用:从库的 SQL 线程读取 Relay Log 中的内容,并按照顺序在从库上执行这些操作,使从库的数据与主库保持一致。
MHA 工作原理
- 节点监控:MHA Manager 节点会定期检查各个 MySQL 节点的状态,包括主库和从库。通过发送心跳包等方式来判断节点是否存活,以及主从复制是否正常运行。
- 故障检测:当 Manager 节点检测到主库出现故障时,会通过一系列的检查和验证来确认主库是否真的不可用,例如检查主库的网络连接、数据库进程状态等。
- 故障转移:在确认主库故障后,MHA 会根据一定的策略从从库中选择一个合适的节点提升为新的主库。这个过程中,MHA 会确保新主库的数据完整性,并协调其他从库连接到新主库,重新建立主从复制关系。
- 数据补偿:在故障转移过程中,如果从库之间的数据存在差异,MHA 会自动进行数据补偿操作,确保新的主从架构下数据的一致性。
优势
- 高可用性:通过 MySQL 主从复制提供数据冗余,MHA 能够在主库出现故障时快速进行故障转移,确保数据库服务的连续性,减少因主库故障导致的业务中断时间。
- 负载均衡:可以将读操作分布到多个从库上,减轻主库的读压力,提高系统的整体性能和并发处理能力,实现读写分离,优化数据库的性能。
- 数据备份与恢复:主从复制本身就是一种实时的数据备份机制,从库可以作为主库数据的实时副本。在需要进行数据恢复时,可以从从库中快速获取数据,而不需要依赖传统的备份恢复方式,提高了数据恢复的效率。
- 扩展性:方便在系统需要扩展时,轻松添加新的从库来满足更多的读请求和数据存储需求,实现系统的横向扩展。
环境准备:四台centos-其中三台mysql,一台MHA
1. 三台mysql都安装mysql,具体的安装步骤可查看
mysql二进制安装
https://blog.csdn.net/m0_68472908/article/details/144746891?spm=1001.2014.3001.5502
2. 修改主机名称
hostnamectl set-hostname master && bash
hostnamectl set-hostname slave01 && bash
hostnamectl set-hostname slave02 && bash
3. 全部关闭防火墙
systemctl stop firewalld
setenforce 0
4. 修改master的my.cnf文件
vim /etc/my.cnfserver-id = 1log_bin = master-binlog-slave-updates = truesystemctl restart mysqld

5. master:创建软链接
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
6. slave01,02修改my.cnf文件
#slave01
vim /etc/my.cnfserver-id = 2log_bin = master-binrelay-log = relay-log-binrelay-log-index = slave-relay-bin.index#slave02
vim /etc/my.cnfserver-id = 3log_bin = master-binrelay-log = relay-log-binrelay-log-index = slave-relay-bin.indexsystemctl restart mysqld
7. slave01,02创建软链接
ln -s /usr/local/mysql/bin/mysql /usr/sbin/
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
配置一主两从
1. 在三台mysql上都授权两个用户
mysql -uroot -pabc-123
grant replication slave on *.* to 'myslave'@'192.168.180.%' identified by 'abc-123';
grant all privileges on *.* to 'mha'@'192.168.180.%' identified by 'manager';
grant all privileges on *.* to 'mha'@'mysql' identified by 'manager';
grant all privileges on *.* to 'mha'@'slave01' identified by 'manager';
grant all privileges on *.* to 'mha'@'slave02' identified by 'manager';
flush privileges;
2. 在master上查看二进制文件和同步点
select user,host from mysql.user; //查询授权用户show master status;


3. 在slave01,02上执行同步
change master to master_host='192.168.180.110',master_user='myslave',master_password='abc-123',master_log_file='master-bin.000001',master_log_pos=1748;
start slave;
4. 查看数据同步结果slave01,02
show slave status\G;

5. slave01,02为只读
set global read_only=1;
6. 在master上测试同步,插入数据
create database test_db1;
use test_db1;
create table test1(id int);
insert into test1(id) values(1);
7. 在slave01,02上查询
select * from test_db1.test1;

安装MHA
1. 四台全部下载MHA所需的依赖包
#要使用网络yum源,比如说阿里云,如果网络yum源报错,可以将DNS改成8.8.8.8
yum install -y epel-release //先安装这个
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN lrzsz
2. 四台全部安装mha-node组件
tar zxf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL && make && make install
3. 在MHA服务器上安装manager组件
tar zxf mha4mysql-manager-0.57.tar.gz
cd mha4mysql-manager-0.57
perl Makefile.PL && make && make install
配置无密码认证
1. 在mha上配置无密码认证
ssh-keygen -t rsa //全部回车ssh-copy-id 192.168.180.110 //密码abc-123
ssh-copy-id 192.168.180.120
ssh-copy-id 192.168.180.130

2. 在master上配置无密码认证
ssh-keygen -t rsa //一路回车
ssh-copy-id 192.168.180.120
ssh-copy-id 192.168.180.130
3. 在slave01上配置无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.180.110
ssh-copy-id 192.168.180.130
4. 在slave02上配置无密码认证
ssh-keygen -t rsa
ssh-copy-id 192.168.180.110
ssh-copy-id 192.168.180.120
配置MHA
1. 在MHA上复制相关脚本到/usr/local/bin目录
ll /root/mha4mysql-manager-0.57/samples/scripts/cp /root/mha4mysql-manager-0.57/samples/scripts/* /usr/local/bin/

2. 在MHA上替换master_ip_failover内容
echo '' > /usr/local/bin/master_ip_failover
vim /usr/local/bin/master_ip_failover
#!/usr/bin/env perluse strict;
use warnings FATAL => 'all';use Getopt::Long;
use MHA::DBHelper;my ($command, $ssh_user, $orig_master_host,$orig_master_ip, $orig_master_port, $new_master_host,$new_master_ip, $new_master_port, $new_master_user,$new_master_password
);my $vip = '192.168.180.200/24';
my $key = '1';
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";
GetOptions('command=s' => \$command,'ssh_user=s' => \$ssh_user,'orig_master_host=s' => \$orig_master_host,'orig_master_ip=s' => \$orig_master_ip,'orig_master_port=i' => \$orig_master_port,'new_master_host=s' => \$new_master_host,'new_master_ip=s' => \$new_master_ip,'new_master_port=i' => \$new_master_port,'new_master_user=s' => \$new_master_user,'new_master_password=s' => \$new_master_password,
);exit &main();sub main {print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";if ( $command eq "stop" || $command eq "stopssh" ) {my $exit_code = 1;eval {print "Disabling the VIP on old master: $orig_master_host \n";&stop_vip();$exit_code = 0;};if ($@) {warn "Got Error: $@\n";exit $exit_code;}exit $exit_code;}elsif ( $command eq "start" ) {my $exit_code = 10;eval {print "Enabling the VIP - $vip on the new master - $new_master_host \n";&start_vip();$exit_code = 0;};if ($@) {warn $@;exit $exit_code;}exit $exit_code;}elsif ( $command eq "status" ) {print "Checking the Status of the script.. OK \n";exit 0;}else {&usage();exit 1;}
}
sub start_vip() {`ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`;
}
sub stop_vip() {return 0 unless ($ssh_user);`ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`;
}
sub usage {print
"Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n";
}
3. 创建MHA软件目录并拷贝配置文件
mkdir /etc/masterha
cp /root/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/
mkdir -p /var/log/masterha/app1vim /etc/masterha/app1.cnf
[server default]
manager_log=/var/log/masterha/app1/manager.log
manager_workdir=/var/log/masterha/app1
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
master_ip_online_change_script=/usr/local/bin/master_ip_online_change
user=mha
password=manager
ping_interval=1
remote_workdir=/tmp
repl_user=myslave
repl_password=abc-123
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.180.120 -s 192.168.180.130
shutdown_script=""
ssh_user=root
[server1]
hostname=192.168.180.110
port=3306
[server2]
candidate_master=1
check_repl_delay=0
hostname=192.168.180.120
port=3306
[server3]
hostname=192.168.180.130
port=3306
4. 测试无密码认证
masterha_check_ssh -conf=/etc/masterha/app1.cnf

5. 测试mysql主从连接情况
masterha_check_repl -conf=/etc/masterha/app1.cnf

6. 首次配置MHA的VIP地址需要手动进行配置,在master上操作
ifconfig ens33:1 192.168.180.200
ifconfig ens33:1

7. 启动MHA,在mha上
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &#若要关闭:masterha_stop --conf=/etc/masterha/app1.cnf
8. 查看MHA状态
masterha_check_status --conf=/etc/masterha/app1.cnf

9. 查看MHA日志
cat /var/log/masterha/app1/manager.log
模拟master故障
自动切换
1. 手动kill当前的master
pkill -9 mysql
2. 观察MHA日志,是否自动切换成功
tailf /var/log/masterha/app1/manager.log

3. 查看slave01是否接管了VIP,如果接管了就代表切换成功

相关文章:
Mysql主从复制+MHA实验笔记[特殊字符]
目录 基本概念 工作原理 优势 环境准备:四台centos-其中三台mysql,一台MHA 配置一主两从 安装MHA 配置无密码认证 配置MHA 模拟master故障 基本概念 MySQL 主从复制:是 MySQL 数据库中实现数据冗余、数据备份和高可用性的重要技术手…...
vue3中自定一个组件并且能够用v-model对自定义组件进行数据的双向绑定
1. 基础用法 在 Vue3 中,v-model 在组件上的使用有了更灵活的方式。默认情况下,v-model 使用 modelValue 作为 prop,update:modelValue 作为事件。 1.1 基本示例 <!-- CustomInput.vue --> <template><input:value"mo…...
面向长文本的多模型协作摘要架构:多LLM文本摘要方法
多LLM摘要框架在每轮对话中包含两个基本步骤:生成和评估。这些步骤在多LLM分散式摘要和集中式摘要中有所不同。在两种策略中,k个不同的LLM都会生成多样化的文本摘要。然而在评估阶段,多LLM集中式摘要方法使用单个LLM来评估摘要并选择最佳摘要,而分散式多LLM摘要则使用k个LLM进行…...
Python中容器类型的数据(上)
若我们想将多个数据打包并且统一管理,应该怎么办? Python内置的数据类型如序列(列表、元组等)、集合和字典等可以容纳多项数据,我们称它们为容器类型的数据。 序列 序列 (sequence) 是一种可迭代的、元素有序的容器类型的数据。 序列包括列表 (list)…...
Spring MVC中HandlerInterceptor和Filter的区别
目录 一、处理阶段 二、功能范围 三、参数访问 四、配置方式 五、使用场景说明 在Spring MVC中,HandlerInterceptor和Filter都是用于拦截请求的重要组件,但它们在多个方面存在显著的差异。本文将详细解析这两种拦截机制的区别,并结合使用…...
[Qt]系统相关-网络编程-TCP、UDP、HTTP协议
目录 前言 一、UDP网络编程 1.Qt项目文件 2.UDP类 QUdpSocket QNetworkDatagram 3.UDP回显服务器案例 细节 服务器设计 客户端设计 二、TCP网络编程 1.TCP类 QTcpServer QTcpSocket 2.TCP回显服务器案例 细节 服务器设计 客户端设计 三、HTTP客户端 1.HTTP…...
wow-agent---task4 MetaGPT初体验
先说坑: 1.使用git clone模式安装metagpt 2.模型尽量使用在线模型或本地高参数模型。 这里使用python3.10.11调试成功 一,安装 安装 | MetaGPT,参考这里的以开发模型进行安装 git clone https://github.com/geekan/MetaGPT.git cd /you…...
信息系统管理工程师第6-8章精讲视频及配套千题通关双双发布,附第14章思维导图
这一周发文少,不是我在偷懒,而是在和信管的视频及千题通关“”浴血奋战 ,特别是第8章卡了我很久,因为内容实在太多,精讲视频估计都差不多4个小时了,还好终于在春节前拿下,提供给小分队的同学&am…...
npm启动前端项目时报错(vue) error:0308010C:digital envelope routines::unsupported
vue 启动项目时,npm run serve 报下面的错: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:67:19) at Object.createHash (node:crypto:133:10) at FSReqCallback.readFileAfterClose [as on…...
Excel 技巧21 - Excel中整理美化数据实例,Ctrl+T 超级表格(★★★)
本文讲Excel中如何整理美化数据的实例,以及CtrlT 超级表格的常用功能。 目录 1,Excel中整理美化数据 1-1,设置间隔行颜色 1-2,给总销量列设置数据条 1-3,根据总销量设置排序 1-4,加一个销售趋势列 2&…...
力扣算法题——11.盛最多水的容器
目录 💕1.题目 💕2.解析思路 本题思路总览 借助双指针探索规律 从规律到代码实现的转化 双指针的具体实现 代码整体流程 💕3.代码实现 💕4.完结 二十七步也能走完逆流河吗 💕1.题目 💕2.解析思路…...
微服务学习-服务调用组件 OpenFeign 实战
1. OpenFeign 接口方法编写规范 1.1. 在编写 OpenFeign 接口方法时,需要遵循以下规范 1.1.1.1. 接口中的方法必须使用 RequestMapping、GetMapping、PostMapping 等注解声明 HTTP 请求的类型。 1.1.1.2. 方法的参数可以使用 RequestParam、RequestHeader、PathVa…...
PDF2WORD万能方法,如何控制Adobe dc pro,自动实现PDF转word
如何用JavaScript控制Adobe DC Pro来自动实现PDF转Word。首先,我需要考虑Adobe DC Pro是否有公开的API或者扩展接口。我记得Adobe Acrobat Pro DC支持JavaScript,但主要是用于表单处理和文档操作,比如Acrobat JavaScript。不过,自…...
Java Web-Tomcat Servlet
Web服务器-Tomcat Web服务器简介 Web 服务器是一种软件程序,它主要用于在网络上接收和处理客户端(如浏览器)发送的 HTTP 请求,并返回相应的网页内容或数据。以下是关于 Web 服务器的详细介绍: 功能 接收请求&#…...
寒假学web--day09
简介 一些魔法函数与php反序列化漏洞 tips 反序列化和类的方法无关,不能把类的方法序列化 将php.exe所在目录放到环境变量中,就可以在终端里通过php.exe ./命令来执行php代码 魔术方法 __construct() 在实例化一个对象时会自动调用,可…...
深度解析:基于Vue 3的教育管理系统架构设计与优化实践
一、项目架构分析 1. 技术栈全景 项目采用 Vue 3 TypeScript Tailwind CSS 技术组合,体现了现代前端开发的三大趋势: 响应式编程:通过Vue 3的Composition API实现细粒度响应 类型安全:约60%的组件采用TypeScript编写 原子化…...
CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)
CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据) 目录 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)预测效果基本介绍 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测一…...
mysql_store_result的概念和使用案例
mysql_store_result() 是 MySQL C API 中的一个函数,用于检索一个完整的结果集到一个客户端。当执行一个查询(通常是 SELECT 查询)并希望处理所有返回的数据时,可以使用此函数。 概念 mysql_store_result() 函数的原型如下&…...
docker安装MySQL8:docker离线安装MySQL、docker在线安装MySQL、MySQL镜像下载、MySQL配置、MySQL命令
一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull mysql:8.0.41 2、离线包下载 两种方式: 方式一: -)在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -)导出 # 导出镜…...
黑盒/白盒运维监控
运维监控分为黑盒和白盒 黑盒:不深入代码,在系统角度看TPS,延迟等指标 白盒:深入代码分析,通过日志捕捉,以及主动上报告警等来进行监控 黑盒监控: 1. 页面功能:域名是否可访问&…...
奖励模型:解析大语言模型的关键工具
标题:奖励模型:解析大语言模型的关键工具 文章信息摘要: 奖励模型是理解和审核大语言模型(LLM)的重要工具,通过简单的评估方式提供了模型内部表征和性能的深入洞察。它不仅能静态比较模型表现,还可帮助诊断训练问题&a…...
Boot 系统选择U启动
1.进入Boot 系统 F2 或 Del Boot --->Boot 0ption Priorities #4 KingstwongDataTravele 是U盘 调整搭到#1 2.保持重启就好...
001 mybatis入门
文章目录 mybatis是什么ORM是什么ORM框架和MyBatis的区别#{}和${}的区别编码流程UserDaoImpl.javaUserDao.javaUser.javadb.propertiesSqlMapConfig.xmlUserMapper.xmlMybatisTest.javapom.xmluser.sql 表现层 SpringMVC 业务层 Spring 持久层 Mybatis https://mybatis.org/myb…...
【前端SEO】使用Vue.js + Nuxt 框架构建服务端渲染 (SSR) 应用满足SEO需求
Nuxt.js 是一个基于 Vue.js 的通用应用框架,它简化了使用 Vue 构建服务端渲染 (SSR) 应用的流程。除了 SSR 之外,Nuxt.js 还支持静态站点生成(Static Site Generation, SSG),渐进式网络应用(Progressive We…...
sysbench压力测试工具mysql以及postgresql
sysbench压力测试工具mysql以及postgresql sysbench工具安装 [postgresoradb sysbench-1.0.20]$ ./autogen.sh ./autogen.sh: running libtoolize --copy --force libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, config. libtoolize: copying file config/ltm…...
9.中断系统、EXTI外部中断
中断系统原理 中断 中断系统是管理和执行中断的逻辑结构,外部中断是众多能产生中断的外设之一,所以本节我们就借助外部中断来学习一下中断系统。在以后学习其它外设的时候,也是会经常和中断打交道的。 中断:在主程序运行过程中…...
Oracle 12c 中的 CDB和PDB的启动和关闭
一、简介 Oracle 12c引入了多租户架构,允许一个容器数据库(Container Database, CDB)托管多个独立的可插拔数据库(Pluggable Database, PDB)。本文档旨在详细描述如何启动和关闭CDB及PDB。 二、容器数据库 (CDB) 2.1…...
RocketMQ原理—4.消息读写的性能优化
大纲 1.Producer基于队列的消息分发机制 2.Producer基于Hash的有序消息分发 3.Broker如何实现高并发消息数据写入 4.RocketMQ读写队列的运作原理分析 5.Consumer拉取消息的流程原理分析 6.ConsumeQueue的随机位置读取需求分析 7.ConsumeQueue的物理存储结构设计 8.Cons…...
【C++动态规划 网格】2328. 网格图中递增路径的数目|2001
本文涉及知识点 C动态规划 LeetCode2328. 网格图中递增路径的数目 给你一个 m x n 的整数网格图 grid ,你可以从一个格子移动到 4 个方向相邻的任意一个格子。 请你返回在网格图中从 任意 格子出发,达到 任意 格子,且路径中的数字是 严格递…...
Web3.0时代的挑战与机遇:以开源2+1链动模式AI智能名片S2B2C商城小程序为例的深度探讨
摘要:Web3.0作为互联网的下一代形态,承载着去中心化、开放性和安全性的重要愿景。然而,其高门槛、用户体验差等问题阻碍了Web3.0的主流化进程。本文旨在深入探讨Web3.0面临的挑战,并提出利用开源21链动模式、AI智能名片及S2B2C商城…...
