MySQL 主从复制 的原理、配置和如何实现 主从灾备
1. MySQL 主从复制原理与工作流程
MySQL 的主从复制本质上是一个 基于事件的日志传输系统。在这个系统中,所有对数据的修改(如 INSERT
、UPDATE
和 DELETE
)会在 主数据库 上记录到 二进制日志(binlog),然后通过复制线程传输给从数据库。从数据库会将这些操作应用到自己本地的数据库中,从而保持数据一致。
1.1 主从复制的核心组件
-
二进制日志(binlog):MySQL 中的二进制日志记录了数据库的所有数据变更操作。它是主从复制的关键组件,主数据库在执行每个写操作后将其记录到二进制日志中,供从数据库获取和执行。
-
主库的日志线程(I/O Thread):从库通过 I/O 线程连接主库,并从主库拉取 二进制日志。
-
中继日志(Relay Log):从数据库将从主库拉取的二进制日志存储到本地的中继日志中,SQL 线程读取并执行这些日志中的操作,保持数据同步。
-
复制线程(SQL Thread):从库的 SQL 线程将从中继日志中读取的操作(数据变更)执行到从库本地数据库,保持数据一致。
1.2 主从复制的工作流程
- 主数据库 记录写操作到 二进制日志。
- 从数据库 的 I/O 线程 连接主数据库,读取主库的二进制日志,并存储到 中继日志。
- SQL 线程 从中继日志中读取事件,并将事件执行到从库中。
2. MySQL 主从复制配置实践
接下来,我们将深入配置 MySQL 主从复制。以一个实际的配置示例为基础,介绍如何将主数据库的数据同步到从数据库,并使其实现负载均衡和灾备。
2.1 配置主数据库
步骤 1:修改 my.cnf
配置文件
打开主库的 my.cnf
配置文件,启用 二进制日志,并设置一个唯一的 server-id
。确保每个 MySQL 实例的 server-id
是唯一的。
[mysqld]
log-bin=mysql-bin
server-id=1
binlog-do-db=your_database_name # 如果想要复制特定的数据库,可以设置这个参数
log-bin=mysql-bin
:启用二进制日志,记录所有的写操作。server-id=1
:给主数据库设置唯一的 ID。
步骤 2:创建复制用户
在主库上创建用于复制的专用用户,并授予其 REPLICATION SLAVE 权限。
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
步骤 3:查看当前的日志位置
运行以下命令查看当前的 二进制日志文件 和 位置。这些信息将在从数据库配置中使用。
SHOW MASTER STATUS;
输出示例:
+------------------+----------+--------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+-------------------+
| mysql-bin.000001 | 154 | your_database | |
+------------------+----------+--------------+-------------------+
记录下 File
和 Position
的值,我们将在从数据库配置中使用它们。
2.2 配置从数据库
步骤 1:修改 my.cnf
配置文件
从数据库的 my.cnf
配置文件需要设置一个 唯一的 server-id
,并指定从库连接主库的信息。
[mysqld]
server-id=2
log-bin=mysql-bin
read-only=1 # 防止从库进行写操作
server-id=2
:从库的唯一标识符。确保与主库不同。read-only=1
:标记从库为只读库,防止从库进行写操作。
步骤 2:配置主库连接信息
在从数据库上执行以下 SQL 命令,配置主库的连接信息。
CHANGE MASTER TOMASTER_HOST='master_ip',MASTER_USER='replica_user',MASTER_PASSWORD='your_password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;
MASTER_HOST='master_ip'
:主库的 IP 地址。MASTER_USER
和MASTER_PASSWORD
:用于复制的用户名和密码。MASTER_LOG_FILE='mysql-bin.000001'
和MASTER_LOG_POS=154
:在主库上执行SHOW MASTER STATUS
命令时获取的 二进制日志文件 和 位置。
步骤 3:启动从数据库复制线程
执行以下命令启动从库的复制线程。
START SLAVE;
步骤 4:检查复制状态
使用 SHOW SLAVE STATUS\G
检查从数据库的复制状态。如果复制正常,Slave_IO_Running
和 Slave_SQL_Running
都应该显示为 Yes
。
SHOW SLAVE STATUS\G
输出示例:
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: master_ipMaster_User: replica_userMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 154Relay_Log_File: mysql-relay-bin.000001Relay_Log_Pos: 154
Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes
3. 主从灾备实现
为了实现高可用和灾备,我们可以通过 自动故障切换 和 GTID(全局事务标识符)等技术进一步优化 MySQL 的主从复制架构。
3.1 使用 GTID 实现更简洁的复制
GTID 是 MySQL 5.6 引入的一种机制,它为每个事务分配一个唯一的 ID,简化了主从切换和故障恢复的过程。
步骤 1:配置主库启用 GTID
在 my.cnf
配置文件中启用 GTID:
[mysqld]
gtid_mode=ON
enforce-gtid-consistency=TRUE
log-bin=mysql-bin
server-id=1
步骤 2:配置从库启用 GTID
在从库的 my.cnf
配置文件中同样启用 GTID,并设置 server-id
:
[mysqld]
gtid_mode=ON
enforce-gtid-consistency=TRUE
log-bin=mysql-bin
server-id=2
步骤 3:配置主库和从库的连接
在从库上运行以下命令,启用 GTID 复制:
CHANGE MASTER TOMASTER_HOST='master_ip',MASTER_USER='replica_user',MASTER_PASSWORD='your_password',MASTER_AUTO_POSITION=1;
MASTER_AUTO_POSITION=1
表示启用 GTID 自动定位,MySQL 会自动管理主库和从库的同步位置。
3.2 使用 MHA 实现自动故障转移
MHA(MySQL High Availability) 是一个开源工具,用于 MySQL 的高可用性管理,可以自动检测主库故障并进行故障转移。
步骤 1:安装 MHA
在所有 MySQL 实例上安装 MHA,具体步骤请参考官方文档。
步骤 2:配置 MHA Manager 和 Node
MHA 由 Manager 和 Node 两部分组成:
- MHA Manager:负责监控 MySQL 实例的状态,并在检测到主库故障时触发故障转移。
- MHA Node:运行在每个 MySQL 实例上,监控并响应 Manager 的请求。
配置完成后,当主数据库故障时,MHA 会自动将一个从数据库提升为新的主数据库,从而确保系统的高可用性。
总结
通过这篇深入的解析,你可以了解 MySQL 主从复制 的底层原理、配置步骤以及如何在实际生产中实现 主从灾备
。配置主从复制时,确保每个 MySQL 实例有唯一的 server-id
,并且正确配置 二进制日志、中继日志 和 复制用户。此外,使用 GTID 和 MHA 等技术,可以提高故障切换的自动化程度,确保高可用和灾难恢复。
相关文章:
MySQL 主从复制 的原理、配置和如何实现 主从灾备
1. MySQL 主从复制原理与工作流程 MySQL 的主从复制本质上是一个 基于事件的日志传输系统。在这个系统中,所有对数据的修改(如 INSERT、UPDATE 和 DELETE)会在 主数据库 上记录到 二进制日志(binlog),然后…...
本地多卡(3090)部署通义千问Qwen-72B大模型提速实践:从龟速到够用
最近在做文本风格转化,涉及千万token级别的文本。想用大模型转写,在线的模型一来涉及数据隐私,二来又不想先垫钱再找报销。本地的7-9B小模型又感觉效果有限,正好实验室给俺配了4卡3090的机子,反正也就是做个推理&#…...
高级数据库系统 复习提纲
第一章 数据库技术的回顾与发展 简述三代数据库的发展历史及其对应特点: 新型数据库在“数据模型”上的创新: 简述数据库和什么相关技术结合,产生了什么新型数据库? 1. 数据库和并行处理技术结合,产生“并行数据库”…...
Python编程实例-特征向量与特征值编程实现
特征向量与特征值编程实现 文章目录 特征向量与特征值编程实现1、什么是特征向量2、特征向量背后的直觉3、为什么特征向量很重要?4、如何计算特征向量?4、特征向量Python实现5、可视化特征向量6、总结线性代数是许多高级数学概念的基石,广泛应用于数据科学、机器学习、计算机…...
十年后LabVIEW编程知识是否会过时?
在考虑LabVIEW编程知识在未来十年内的有效性时,我们可以从几个角度进行分析: 1. 技术发展与软件更新 随着技术的快速发展,许多编程工具和平台不断更新和改进,LabVIEW也不例外。十年后,可能会有新的编程语言或平台…...
第6章——HTTP首部
第六章——HTTP首部 HTTP报文结构 都必有报文首部 HTTP请求报文 HTTP响应报文 HTTP首部字段 ###传递重要信息 首部字段结构 首部字段名:字段值(,字段值,字段值) 首部字段类型 通用首部字段 请求首部字…...
Java多线程
一、线程的简介: 1.普通方法调用和多线程: 2.程序、进程和线程: 在操作系统中运行的程序就是进程,一个进程可以有多个线程 程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念; 进程则是执行程序的一次执…...
C++ 复习总结记录四
C 复习总结记录四 主要内容 1、构造函数其它要点 2、static 成员 3、友元 4、内部类 5、匿名对象 6、拷贝对象时编译器的优化 一 构造函数其它要点 1.1 构造函数体赋值 创建对象时,编译器调用构造函数,给对象中各个成员变量一个合适初始值 cl…...
Oracle Dataguard 需要配置的参数详解
Oracle Dataguard 需要配置的参数详解 目录 Oracle Dataguard 需要配置的参数详解一、数据库名:DB_NAME二、数据库唯一名:DB_UNIQUE_NAME三、LOG_ARCHIVE_CONFIG四、LOG_ARCHIVE_DEST_1五、LOG_ARCHIVE_DEST_2六、LOG_ARCHIVE_DEST_3七、LOG_ARCHIVE_DES…...
Java 内部类与异常类
目录 1.Java 内部类 2.Java 匿名类 1. 匿名类继承一个父类 2. 匿名类实现一个接口 3.Java 异常类 4.Java 异常的分类 1. Throwable类 2. Error类 3. Exception类 5.Java 常见的异常 1. NullPointerException(空指针异常) 2. ClassCastException(类转换异常) 3. In…...
Matlab仿真径向受压圆盘光弹图像
Matlab仿真径向受压圆盘光弹图像-十步相移法 主要参数 % 定义圆盘参数 R 15; % 圆盘半径,单位:mm h 5; % 圆盘厚度,单位:mm P 300; % 径向受压载荷大小,单位ÿ…...
补偿电阻对ota零极点的影响
本文内容主要是关于补偿电阻对零极点产生的影响。 1.极点分析 该补偿电阻并不会影响在输出端的主极点,受影响的主要是镜像极点。 这里我们可以先单看电流镜部分,这个补偿电阻的作用在于将极点推向原来的两倍,从而达到增加带宽的目的[1]。 …...
C++单例模式跨DLL调用问题梳理
问题案例: 假设有这样一个单例模式的代码 //test.h header class Test { public:static Test &instance() {static Test ins;return ins;}void foo(); };void testFoo();//test.cpp source #include "test.h"void Test::foo() {printf("%p\n&q…...
Linux高并发服务器开发 第十天(man手册 系统调用 文件打开关闭 文件创建权限)
目录 1.文件IO 1.1man 手册 1.2系统调用 1.3操作函数 1.3.1打开文件 1.3.2关闭文件 1.4文件创建权限 1.文件IO 1.1man 手册 man man 可以查看。man手册共 9 卷。 可执行程序、shell命令。系统调用函数。(内核提供的函数)库函数第 5 卷。查看特殊…...
用CRD定义未来:解锁机器学习平台的无限可能
Kubernetes CustomResourceDefinition(CRD)详解 一、CRD 概述 CRD(CustomResourceDefinition,自定义资源定义)是 Kubernetes 提供的一种机制,用于用户自定义新的资源类型。CRD 扩展了 Kubernetes API&…...
A second-price auction
第二价格密封拍卖(A second - price auction)是一种常见的拍卖形式,以下是一个用收益矩阵(Payoff Matrix)来说明第二价格密封拍卖的例子: 假设有三个竞拍者:A、B、C,他们对一件古董…...
MacBook_Xcode_Swift雨燕
Swift Swift Swift Swift是苹果公司开发的现代化编程语言, 专为Apple平台设计。其简洁语法、类型安全、Optionals处理、Playgrounds交互式环境、泛型编程、协议与扩展、闭包功能、枚举与关联值、结构体与类的高效内存管理、异步编程的async/await语法、Swift Packa…...
力扣面试题 - 08.07.无重复字符串的排列组合 C语言解法 回溯递归dfs深度优先
题目: 无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。 示例 1: 输入:S "qwe"输出:["qwe", "qew", "wqe", "…...
数值分析速成复习笔记
请确保你有10hour的有效学习时间,保你拿90 证明部分 编程部分...
1.07 标准IO
1.思维导图 2.先编写以下结构体 struct Student { char name[20]; double math; double chinese; double english; double physical; double chemical; double…...
单片机实现模式转换
[任务] 要求通过单片机实现以下功能: 1.单片机有三种工作模式(定义全局变量MM表示模式,MM1,2,3表示三种不同的模式) LED控制模式 风扇控制模式 蜂鸣器控制模式 2.可以在某一个模式下通过拓展板KEY1按键控制设备 (按…...
JVM实战—OOM的定位和解决
1.如何对系统的OOM异常进行监控和报警 (1)最佳的解决方案 最佳的OOM监控方案就是:建立一套监控平台,比如搭建Zabbix、Open-Falcon之类的监控平台。如果有监控平台,就可以接入系统异常的监控和报警,可以设置当系统出现OOM异常&…...
GolangWeb开发- net/http模块
文章目录 Golang开发-案例整理汇总一、net/http介绍二、HTTP客户端Get请求Post请求三、HTTP服务端总结Golang开发经典案例,点击下方链接 Golang开发-案例整理汇总 一、net/http介绍 Go语言内置的net/http包提供了HTTP客户端和服务端的实现。 文档链接: https://pkg.go.dev/n…...
算法:线性查找
线性查找算法是一种简单的查找算法,用于在一个数组或列表中查找一个特定的元素。它从数组的第一个元素开始,逐个检查每个元素,直到找到所需的元素或搜索完整个数组。线性查找的时间复杂度为O(n),其中n是数组中的元素数量。 实现原理 从列表的第一个元素开始,逐个检查每个…...
基于 Boost.Asio 和 Boost.Beast 的异步 HTTP 服务器(学习记录)
已完成功能: 支持 GET 和 POST 请求的路由与回调处理。 解析URL请求。 单例模式 管理核心业务逻辑。 异步 I/O 技术和 定时器 控制超时。 通过回调函数注册机制,可以灵活地为不同的 URL 路由注册处理函数。 1. 项目背景 1.1 项目简介 本项目是一个基于…...
『SQLite』常见函数的使用
摘要:主要讲解SQLite中的常见函数,有聚合函数、数字函数、字符串函数、日期函数、类型转换函数等。 主要函数 聚合函数:count()、sum()、avg()、min()、max()字符串函数:length()、upper()、lower()、substr()、trim()日期和时间…...
win下搭建elk并集成springboot
一、ELK 是什么? ELK 实际上是三个工具的集合,Elasticsearch Logstash Kibana,这三个工具组合形成了一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。 ElasticSearch ElasticSearch 是一个基于 Lucen…...
ABAQUS柱状晶模型基于泰森多边形建模
建立柱状晶几何模型进行有限元分析有助于深入理解材料的微观结构与宏观性能之间的关系,为材料设计、制造工艺优化及失效预测提供了强有力的工具。本案例介绍采用AutoCAD基于泰森多边形算法生成柱状晶三维几何部件,并导入Abaqus有限元软件内建立包含晶粒及…...
MySQL InnoDB常用锁总结(行锁、间隙锁、临键锁、表锁)
在高并发数据库系统中,锁机制是保障数据一致性和事务隔离性的重要手段。MySQL 的 InnoDB 存储引擎提供了多种锁类型,包括行锁、间隙锁、临键锁和表锁。本文将详细介绍这些锁的原理、使用场景及其注意事项,并结合案例进行说明。 1. 表锁 概念…...
Flink系统知识讲解之:如何识别反压的源头
Flink系统知识之:如何识别反压的源头 什么是反压 Ufuk Celebi 在一篇古老但仍然准确的文章中对此做了很好的解释。如果您不熟悉这个概念,强烈推荐您阅读这篇文章。如果想更深入、更低层次地了解该主题以及 Flink 网络协议栈的工作原理,这里有…...
UE5行为树浅析
Tree 什么是树? 树是由节点或顶点和边组成的数据结构,没有任何循环。没有节点的树称为空树或空树。 非空的树由根节点和可能形成层次结构的多层附加节点组成。 树是一种数据结构树由点和有向边组成树是连通的,可达的树有执行顺序树没有环 …...
大模型测试-数飞机个数
时间是2025年1月7日,测试下各大网页端大模型的多模态识图能力。 测试题目 图片 问题 标记一下图里的飞机,并数一下飞机的个数 测试结果 千问qwen 在这张图片中,我可以看到总共12架飞机。以下是它们的位置标记:左上角跑道上有…...
Ubuntu挂载Windows 磁盘,双系统
首先我们需要在终端输入这个命令,来查看磁盘分配情况 lsblk -f 找到需要挂载的磁盘,检查其类型( 我的/dev/nvme2n1p1类型是ntfs,名字叫3500winData) 然后新建一个挂载磁盘的目录,我的是/media/zeqi/3500wi…...
快速上手:采用Let‘sEncrypt免费SSL证书配置网站Https (示例环境:Centos7.9+Nginx+Let‘sEncrypt)
1 关于Let’s Encrypt与Cerbot DNS验证 Let’s Encrypt 是一个提供 免费证书 的 认证机构。 Cerbot 是 Let’s Encrypt 提供的一个工具,用于自动化生成、验证和续订证书。 DNS验证是 Cerbot 支持的验证方式之一。相比 HTTP 验证或 TLS-ALPN 验证,DNS …...
【项目】修改远程仓库地址、报错jdk
一、修改远程仓库地址 进入你刚刚克隆到本地的仓库目录,执行以下命令来修改远程仓库的 URL,将其指向你自己的新仓库: cd 原仓库名 git remote set-url origin <你自己的新仓库的 Git 地址>二、运行报错 多数jdk版本问题 三、 知识图…...
.NET体系架构
引言 .NET是由微软开发的一个广泛应用的开发平台,旨在帮助开发者构建各种类型的应用程序,包括桌面应用、Web应用、移动应用和云服务。最初,.NET平台的构建主要集中在Windows环境上,但随着.NET Core和随后.NET 5及以上版本的推出&…...
MTK平台-- 无线AP隔离功能
前言: 无线AP上大都有一个选项:启用该功能后,连接到同一AP的无线终端之间不能互相通信,但该功能并不限制无线终端和有线终端之间的通信。 Hostapd参数ap_isolate,用于控制AP隔离,但hostapd本身并不实现这一功能,只是将该参数通过nl80211传递给mac80211,由mac80211来实…...
初学stm32 --- 电源监控
目录 STM32 电源监控介绍 上电/掉电复位POR/PDR(F1) 可编程电压检测器(PVD)(F1) PVD相关寄存器介绍(F1) 电源控制寄存器 PWR_CR 电源控制/状态寄存器 PWR_CSR PVD相关HAL库驱动介绍 PVD的使用步骤 …...
小程序组件 —— 28 组件案例 - 推荐商品区域 - 实现结构样式
这一节目标是实现底部推荐商品的结构和样式,由于这里要求横向滚动,所以需要使用上节介绍的 scroll-view 功能,并使用 scroll-x 属性支持横向滚动,推荐商品区域中的每一个商品是一个单独的 view,每个view 中需要写三个组…...
深入了解 SSL/TLS 协议及其工作原理
深入了解 SSL/TLS 协议及其工作原理 一. 什么是 SSL/TLS?二. SSL/TLS 握手过程三. SSL/TLS 数据加密与传输四. 总结 点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。 作者:神的孩子都在歌唱 一. 什么是 SSL/TLS? 安全套接层&am…...
解决RuntimeError: No CUDA GPUs are available问题
今天运行之前可以正常运行的项目时,发现了以下问题: 接下来记录解决过程: 参考:os.environ[“CUDA_VISIBLE_DEVICES”]"2"的问题 因为代码中设置了选择了具体的GPU的型号,但是有可能没有这个GPU࿰…...
了解RabbitMQ中的Exchange:深入解析与实践应用
在分布式系统设计中,消息队列(Message Queue)扮演着至关重要的角色,而RabbitMQ作为开源消息代理软件的佼佼者,以其高性能、高可用性和丰富的功能特性,成为了众多开发者的首选。在RabbitMQ的核心组件中&…...
33.3K 的Freqtrade:开启加密货币自动化交易之旅
“ 如何更高效、智能地进行交易成为众多投资者关注的焦点。” Freqtrade 是一款用 Python 编写的免费开源加密货币交易机器人。它就像一位不知疲倦的智能交易助手,能够连接到众多主流加密货币交易所,如 Binance、Bitmart、Bybit 等(支…...
(概率论)区间估计 和 置信区间 、 假设检验
参考文章1:3分钟,看懂区间估计and置信区间 - 知乎 (zhihu.com) 1、点估计的定义: 2、区间估计的定义: 参考文章2:【概率论】- (1)区间估计 - 知乎 (zhihu.com) 这篇文章中的2中,2.1、2.2、2.3描述了需要用到…...
MBTiles 及爬取到发布
MBTiles :https://github.com/mapbox/mbtiles-spec/blob/master/1.3/spec.md 1.MBTiles是什么 MBTiles是一个在SQLite 数据库存储瓦片地图数据的标准,该标准的目的是即时传输和使用数据。 作为一个容器格式,MBTiles可以存储任何瓦片数据,…...
uniapp使用chooseLocation安卓篇
本文章全部以高德地图为例 代码 <view class"bottom"><button click"choose">定位</button> </view> choose() {uni.chooseLocation({success: function(res) {console.log(位置名称: res.name);console.log(详细地…...
el-cascader 树状选择-点击父级禁用子级
背景:项目上需要实现树状选择,点击父级禁用子级的功能,element组件本身没有该配置项说明:需要实现几个功能点:点击父级禁用子级;再次点击取消禁用;仅回填所选级;上下级不关联实现代码…...
力扣经典题目之219. 存在重复元素 II
今天继续给大家分享一道力扣的做题心得今天这道题目是 219. 存在重复元素 II,我使用 hashmap 的方法来解题 题目如下,题目链接:219. 存在重复元素 II 1,题目分析 此题目给我们了一个整数数组 nums 和一个整数 k ,需要…...
微服务保护—Sentinel快速入门+微服务整合 示例: 黑马商城
1.微服务保护 微服务保护是确保微服务架构可靠、稳定和安全的策略与技术。 在可靠性上,限流是控制进入微服务的请求数量,防止流量过大导致服务崩溃。比如电商促销时对商品详情服务进行流量限制。熔断是当被调用的微服务故障过多或响应过慢时,…...
Wireshark 学习笔记1
1.wireshark是什么 wireshark是一个可以进行数据包的捕获和分析的软件 2.基本使用过程 (1)选择合适的网卡 (2)开始捕获数据包 (3)过滤掉无用的数据包 (4)将捕获到的数据包保存为文件…...