Mysql主从复制+MHA实验笔记[特殊字符]

news2025/1/27 6:39:27

目录

基本概念

工作原理

优势

环境准备:四台centos-其中三台mysql,一台MHA

配置一主两从

安装MHA

配置无密码认证

配置MHA

模拟master故障


基本概念

MySQL 主从复制是 MySQL 数据库中实现数据冗余、数据备份和高可用性的重要技术手段。它通过将主数据库的 DDL(数据定义语言)和 DML(数据操作语言)操作记录到二进制日志(binlog)中,然后从数据库通过 I/O 线程读取主库的 binlog,并将其应用到自己的数据库中,从而实现主从数据库之间的数据同步。

MHA(Master High Availability)是 MySQL 高可用性解决方案中的一种,主要用于在 MySQL 主从复制架构中,自动检测主数据库的故障,并快速将从数据库提升为新的主数据库,实现故障转移,保证数据库服务的连续性,减少停机时间。

工作原理

MySQL 主从复制原理

  1. Binlog 日志记录:主库在执行数据变更操作时,会将这些操作记录到二进制日志(Binlog)中,Binlog 记录了所有数据库更改操作的顺序和内容。
  2. I/O 线程读取:从库启动一个 I/O 线程,该线程与主库建立连接,请求主库发送 Binlog 内容。主库接收到请求后,通过 Dump 线程将 Binlog 内容发送给从库的 I/O 线程。
  3. Relay Log 中继:从库的 I/O 线程将接收到的 Binlog 内容写入到本地的中继日志(Relay Log)中。
  4. SQL 线程应用:从库的 SQL 线程读取 Relay Log 中的内容,并按照顺序在从库上执行这些操作,使从库的数据与主库保持一致。

MHA 工作原理

  1. 节点监控:MHA Manager 节点会定期检查各个 MySQL 节点的状态,包括主库和从库。通过发送心跳包等方式来判断节点是否存活,以及主从复制是否正常运行。
  2. 故障检测:当 Manager 节点检测到主库出现故障时,会通过一系列的检查和验证来确认主库是否真的不可用,例如检查主库的网络连接、数据库进程状态等。
  3. 故障转移:在确认主库故障后,MHA 会根据一定的策略从从库中选择一个合适的节点提升为新的主库。这个过程中,MHA 会确保新主库的数据完整性,并协调其他从库连接到新主库,重新建立主从复制关系。
  4. 数据补偿:在故障转移过程中,如果从库之间的数据存在差异,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.cnf
    server-id = 1
    log_bin = master-bin
    log-slave-updates = true


systemctl 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.cnf
    server-id = 2
    log_bin = master-bin
    relay-log = relay-log-bin
    relay-log-index = slave-relay-bin.index


#slave02
vim /etc/my.cnf
	server-id = 3
    log_bin = master-bin
    relay-log = relay-log-bin
    relay-log-index = slave-relay-bin.index


systemctl 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 perl

use 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/app1

vim /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,如果接管了就代表切换成功

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

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

相关文章

面向长文本的多模型协作摘要架构:多LLM文本摘要方法

多LLM摘要框架在每轮对话中包含两个基本步骤:生成和评估。这些步骤在多LLM分散式摘要和集中式摘要中有所不同。在两种策略中,k个不同的LLM都会生成多样化的文本摘要。然而在评估阶段,多LLM集中式摘要方法使用单个LLM来评估摘要并选择最佳摘要,而分散式多LLM摘要则使用k个LLM进行…

Python中容器类型的数据(上)

若我们想将多个数据打包并且统一管理&#xff0c;应该怎么办? Python内置的数据类型如序列(列表、元组等)、集合和字典等可以容纳多项数据&#xff0c;我们称它们为容器类型的数据。 序列 序列 (sequence) 是一种可迭代的、元素有序的容器类型的数据。 序列包括列表 (list)…

[Qt]系统相关-网络编程-TCP、UDP、HTTP协议

目录 前言 一、UDP网络编程 1.Qt项目文件 2.UDP类 QUdpSocket QNetworkDatagram 3.UDP回显服务器案例 细节 服务器设计 客户端设计 二、TCP网络编程 1.TCP类 QTcpServer QTcpSocket 2.TCP回显服务器案例 细节 服务器设计 客户端设计 三、HTTP客户端 1.HTTP…

信息系统管理工程师第6-8章精讲视频及配套千题通关双双发布,附第14章思维导图

这一周发文少&#xff0c;不是我在偷懒&#xff0c;而是在和信管的视频及千题通关“”浴血奋战 &#xff0c;特别是第8章卡了我很久&#xff0c;因为内容实在太多&#xff0c;精讲视频估计都差不多4个小时了&#xff0c;还好终于在春节前拿下&#xff0c;提供给小分队的同学&am…

npm启动前端项目时报错(vue) error:0308010C:digital envelope routines::unsupported

vue 启动项目时&#xff0c;npm run serve 报下面的错&#xff1a; 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中如何整理美化数据的实例&#xff0c;以及CtrlT 超级表格的常用功能。 目录 1&#xff0c;Excel中整理美化数据 1-1&#xff0c;设置间隔行颜色 1-2&#xff0c;给总销量列设置数据条 1-3&#xff0c;根据总销量设置排序 1-4&#xff0c;加一个销售趋势列 2&…

力扣算法题——11.盛最多水的容器

目录 &#x1f495;1.题目 &#x1f495;2.解析思路 本题思路总览 借助双指针探索规律 从规律到代码实现的转化 双指针的具体实现 代码整体流程 &#x1f495;3.代码实现 &#x1f495;4.完结 二十七步也能走完逆流河吗 &#x1f495;1.题目 &#x1f495;2.解析思路…

微服务学习-服务调用组件 OpenFeign 实战

1. OpenFeign 接口方法编写规范 1.1. 在编写 OpenFeign 接口方法时&#xff0c;需要遵循以下规范 1.1.1.1. 接口中的方法必须使用 RequestMapping、GetMapping、PostMapping 等注解声明 HTTP 请求的类型。 1.1.1.2. 方法的参数可以使用 RequestParam、RequestHeader、PathVa…

Java Web-Tomcat Servlet

Web服务器-Tomcat Web服务器简介 Web 服务器是一种软件程序&#xff0c;它主要用于在网络上接收和处理客户端&#xff08;如浏览器&#xff09;发送的 HTTP 请求&#xff0c;并返回相应的网页内容或数据。以下是关于 Web 服务器的详细介绍&#xff1a; 功能 接收请求&#…

深度解析:基于Vue 3的教育管理系统架构设计与优化实践

一、项目架构分析 1. 技术栈全景 项目采用 Vue 3 TypeScript Tailwind CSS 技术组合&#xff0c;体现了现代前端开发的三大趋势&#xff1a; 响应式编程&#xff1a;通过Vue 3的Composition API实现细粒度响应 类型安全&#xff1a;约60%的组件采用TypeScript编写 原子化…

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测&#xff08;Matlab完整源码和数据&#xff09; 目录 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测&#xff08;Matlab完整源码和数据&#xff09;预测效果基本介绍 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测一…

docker安装MySQL8:docker离线安装MySQL、docker在线安装MySQL、MySQL镜像下载、MySQL配置、MySQL命令

一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull mysql:8.0.41 2、离线包下载 两种方式&#xff1a; 方式一&#xff1a; -&#xff09;在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -&#xff09;导出 # 导出镜…

Boot 系统选择U启动

1.进入Boot 系统 F2 或 Del Boot --->Boot 0ption Priorities #4 KingstwongDataTravele 是U盘 调整搭到#1 2.保持重启就好

9.中断系统、EXTI外部中断

中断系统原理 中断 中断系统是管理和执行中断的逻辑结构&#xff0c;外部中断是众多能产生中断的外设之一&#xff0c;所以本节我们就借助外部中断来学习一下中断系统。在以后学习其它外设的时候&#xff0c;也是会经常和中断打交道的。 中断&#xff1a;在主程序运行过程中…

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 &#xff0c;你可以从一个格子移动到 4 个方向相邻的任意一个格子。 请你返回在网格图中从 任意 格子出发&#xff0c;达到 任意 格子&#xff0c;且路径中的数字是 严格递…

Web3.0时代的挑战与机遇:以开源2+1链动模式AI智能名片S2B2C商城小程序为例的深度探讨

摘要&#xff1a;Web3.0作为互联网的下一代形态&#xff0c;承载着去中心化、开放性和安全性的重要愿景。然而&#xff0c;其高门槛、用户体验差等问题阻碍了Web3.0的主流化进程。本文旨在深入探讨Web3.0面临的挑战&#xff0c;并提出利用开源21链动模式、AI智能名片及S2B2C商城…

MySQL(高级特性篇) 12 章——数据库其它调优策略

一、数据库调优的措施 &#xff08;1&#xff09;调优的目标 尽可能节省系统资源&#xff0c;以便系统可以提供更大负荷的服务&#xff08;吞吐量最大&#xff09;合理的结构设计和参数调整&#xff0c;以提高用户操作的响应速度&#xff08;响应速度更快&#xff09;减少系统…

单片机基础模块学习——DS18B20温度传感器芯片

不知道该往哪走的时候&#xff0c;就往前走。 一、DS18B20芯片原理图 该芯片共有三个引脚&#xff0c;分别为 GND——接地引脚DQ——数据通信引脚VDD——正电源 数据通信用到的是1-Wier协议 优点&#xff1a;占用端口少&#xff0c;电路设计方便 同时该协议要求通过上拉电阻…

掌握长尾关键词优化技巧提升SEO效果与流量增长策略

内容概要 长尾关键词是指由三个或更多个词组成的关键词&#xff0c;这类关键词通常搜索量相对较低&#xff0c;但在搜索引擎优化&#xff08;SEO&#xff09;中的作用却不可忽视。它们能够精确定位用户的需求&#xff0c;因为长尾关键词往往反映了用户更具体的搜索意图。掌握长…