MySQL 主从复制与高可用
在现代分布式系统中,数据库的高可用性和可靠性至关重要。MySQL 提供了主从复制(Master-Slave Replication)机制来实现数据的冗余和容错,保证在主数据库发生故障时能够继续提供服务。而在此基础上,通过进一步的高可用架构设计(如 MHA、MySQL Router、ProxySQL 等),可以构建更强大的高可用数据库系统。本文将深入探讨 MySQL 主从复制 和 高可用架构,并介绍常见的实现方式和实践。
一、MySQL 主从复制
1. 主从复制的基本概念
MySQL 主从复制是一种基于主从结构的异步复制机制,其中主服务器负责处理所有的写操作,而从服务器通过复制主服务器的变更(如插入、更新、删除等操作)来保持数据同步。主从复制的核心思想是通过网络将主数据库上的数据变动传递到从数据库上,实现数据的冗余备份和负载均衡。
2. 主从复制的工作原理
主从复制的实现分为两个主要步骤:
2.1. 主服务器(Master)
- 日志记录:主服务器记录所有的变更操作到 二进制日志(binary log) 中。
- 日志传输:主服务器会将二进制日志发送给从服务器。
2.2. 从服务器(Slave)
- 读取日志:从服务器会连接到主服务器,获取主服务器的二进制日志(binlog)。
- 执行操作:从服务器根据收到的二进制日志执行相应的操作,保持与主服务器的数据一致性。
2.3. 异步复制:
- 默认情况下,MySQL 主从复制是异步的。即从服务器不会立即同步主服务器的操作,存在一定的延迟。主服务器在提交操作后不会等待从服务器确认,可能会导致短暂的数据不一致。
2.4. 主从复制架构图
+-------------------+ +-------------------+
| Master DB | <--- binlog ----| Slave DB |
| | | |
| (Primary Server) | | (Replicated DB) |
+-------------------+ +-------------------+
3. 配置 MySQL 主从复制
3.1. 主服务器配置
-
启用二进制日志:
在主服务器的配置文件(my.cnf或my.ini)中启用二进制日志:[mysqld] log-bin=mysql-bin server-id=1 -
创建复制用户:
为从服务器创建一个专用的复制用户,并赋予REPLICATION SLAVE权限:CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'; FLUSH PRIVILEGES; -
获取二进制日志位置:
在主服务器执行以下命令,记录下当前的二进制日志文件名和位置:SHOW MASTER STATUS;
3.2. 从服务器配置
-
配置服务器ID:
在从服务器的配置文件(my.cnf或my.ini)中配置唯一的server-id:[mysqld] server-id=2 -
设置复制源(Master):
在从服务器上,使用以下命令连接到主服务器并指定主服务器的二进制日志位置:CHANGE MASTER TOMASTER_HOST='master_ip',MASTER_USER='replica_user',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=12345; -
启动复制:
启动从服务器的复制进程:START SLAVE; -
检查复制状态:
使用以下命令检查复制状态:SHOW SLAVE STATUS\G;关键字段:
- Slave_IO_Running:显示是否正常接收主服务器的日志。
- Slave_SQL_Running:显示是否正常执行接收到的日志。
二、MySQL 高可用架构
MySQL 的主从复制机制本身并不提供高可用性(HA)功能,因为主服务器发生故障时,从服务器可能无法自动接管任务。为了实现高可用,通常需要使用一些高可用方案来监控和自动故障转移。常见的高可用架构有以下几种:
1. MHA (Master High Availability)
MHA 是一个 MySQL 高可用解决方案,旨在提供自动的故障转移和恢复机制。其基本工作流程是:
- 故障检测:MHA 通过定期检查主服务器的健康状态,及时发现主服务器故障。
- 故障转移:一旦检测到主服务器故障,MHA 会自动选择一个健康的从服务器,将其提升为新的主服务器,并将其他从服务器配置为新的从服务器。
- 数据同步:确保数据的一致性和完整性,避免数据丢失。
MHA 配置
- MHA 管理工具:MHA 提供了
master_ip_failover和manager工具来帮助自动化切换和管理。
2. MySQL Router
MySQL Router 是一个由 MySQL 官方提供的中间件,用于高可用架构中的流量路由。它可以在多个 MySQL 服务器之间自动路由客户端请求,支持主从架构和组复制架构。
功能:
- 自动故障转移:当主服务器故障时,MySQL Router 会自动切换到新的主服务器。
- 负载均衡:在多个从服务器之间分配查询请求。
3. ProxySQL
ProxySQL 是一个高性能的 MySQL 代理,支持高可用性、负载均衡和路由。它可以作为 MySQL 客户端和服务器之间的中间层,提供如下功能:
- 负载均衡:根据服务器的健康状况,将查询请求分配给不同的服务器。
- 自动故障转移:当主服务器发生故障时,ProxySQL 会自动将请求路由到新的主服务器。
4. MySQL Group Replication
MySQL Group Replication 是 MySQL 官方提供的同步复制解决方案,支持多主机环境,能够提供自动故障转移、数据一致性和高可用性。它通过 组复制 协议,允许多个节点(主节点)在集群中互相复制和同步。
优点:
- 同步复制:所有节点的数据是实时一致的。
- 自动故障转移:当主节点发生故障时,集群中的其他节点会自动接管其角色。
5. MySQL Cluster
MySQL Cluster 是 MySQL 提供的一种基于 NDB 存储引擎的高可用集群解决方案。它提供数据的分布式存储和多主复制,适合大规模的高性能、高可用数据库场景。
特点:
- 分布式架构:数据被分布在多个节点上,避免单点故障。
- 实时复制:支持实时数据同步,保证数据一致性。
三、MySQL 主从复制与高可用架构的实践和优化
1. 监控与告警
- 配置监控系统,实时监控主从复制的状态。常见的监控工具有 Prometheus 和 Zabbix,可以监控
SHOW SLAVE STATUS的关键字段,如Slave_IO_Running和Slave_SQL_Running。 - 设置告警阈值,及时通知管理员进行干预。
2. 数据一致性与延迟
- 由于 MySQL 主从复制默认是异步的,因此可能会有数据同步延迟。在高可用架构中,需要考虑如何处理延迟带来的数据不一致问题。
- 通过 半同步复制(Semi-synchronous Replication) 可以在一定程度上减少延迟,确保主从之间的数据更一致。
3. 故障转移与恢复
- 自动故障转移方案,如 MHA、MySQL Router、ProxySQL 等,可以在主服务器故障时自动将流量切换到新的主服务器。
- 定期进行故障演练和备份,确保在故障发生时能够快速恢复。
4. 高可用与负载均衡
- 使用 ProxySQL 或 MySQL Router 等中间件来实现读写分离和负载均衡。这样可以分
相关文章:
MySQL 主从复制与高可用
在现代分布式系统中,数据库的高可用性和可靠性至关重要。MySQL 提供了主从复制(Master-Slave Replication)机制来实现数据的冗余和容错,保证在主数据库发生故障时能够继续提供服务。而在此基础上,通过进一步的高可用架…...
RCE总结
文章目录 常见漏洞执行函数:1.系统命令执行函数2.代码执行函数 命令拼接符读取文件命令绕过:空格过滤绕过关键字绕过长度过滤绕过无参数命令执行绕过无字母数字绕过利用%0A截断利用回溯绕过利用create_function()代码注入无回显RCE1.反弹shell2.dnslog外…...
基于UNITY3D的照片墙演示项目技术分享
unity实现超大图片墙演示,由于拥有海量图片,使用了CPU 多线程,unity dots技术,图片组成文字部分,使用了点阵图技术,提取文字像素。 (关于点阵介绍) 点阵字体是把每一个字符都分成1616或2424个点…...
随手记:小程序兼容后台的wangEditor富文本配置链接
场景: 在后台配置wangEditor富文本,可以文字配置链接,图片配置链接,产生的json格式为: 例子: <h1><a href"https://uniapp.dcloud.net.cn/" target"_blank"><span sty…...
maven项目运行时NoSuchMethodError问题排查记录(依赖冲突解决)
控制台异常如下: Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: org.apache.commons.io.input.BoundedInputStream.builder()Lorg/apache/commons/io/input/BoundedInputStream$Builder;问题明显,根据NoSuchMethodError…...
ECharts关系图-关系图11,附视频讲解与代码下载
引言: 关系图(或称网络图、关系网络图)在数据可视化中扮演着至关重要的角色。它们通过节点(代表实体,如人、物体、概念等)和边(代表实体之间的关系或连接)的形式,直观地…...
【C语言】动态内存管理:详解malloc和free函数
前言 在C语言编程中,动态内存分配是一个非常重要的概念。与静态内存分配不同,动态内存分配允许程序在运行时根据需要分配和释放内存,从而更加灵活地管理内存资源。特别是在一些数据结构的引用中经常需要使用,下面我们就详细讲解一…...
EGO Swarm翻译
目录 摘要 Ⅰ 介绍 Ⅱ 相关工作 A . 单四旋翼局部规划 B . 拓扑规划 C. 分布式无人机集群 Ⅲ 基于梯度的局部规划隐式拓扑轨迹生成 A.无需ESDF梯度的局部路径规划 B.隐式拓扑轨迹生成 Ⅳ 无人机集群导航 A 机间避碰 B. 定位漂移补偿 C. 从深度图像中去除agent Ⅴ …...
Linux根目录
在Linux系统中,文件系统遵循一种标准化的目录结构,即文件系统层次结构标准(Filesystem Hierarchy Standard,FHS)。 根目录(/) /bin:包含二进制可执行文件,通常是用户和系…...
SAP-SD-参照退货订单补货时带不出行项目
业务场景: 当物料出现质量问题时,客户需要换货,不需要退款,就需要先做退货订单,然后参照退货订单进行补货,创建补货订单,但是创建补货订单时只是把抬头数据带入补货订单,没有带入行项…...
12-C语言单向链表
一、链表的概述 1.链表与数组对比 遍历数组中的数据,查询数据比较方便,但往数组中插入、删除数据需要移动大量数据;相反。链表遍历、查询数据不方便,但是插入、删除数据比较方便,不需要移动大量数据,直接…...
2024年11月 蓝桥杯青少组 STEMA考试 Scratch真题
2024年11月 蓝桥杯青少组 STEMA考试 Scratch真题(选择题) 题目总数:5 总分数:50 选择题 第 1 题 单选题 Scratch运行以下程宇后,小兔子会( )。 A. 变小 B. 变大 C. 变色 D. …...
FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.2,RTP协议-RTP协议概述,协议详情
前提: 为什么要学习 RTP(Real-time Transport Protocol)重点 简介:RTP是一个实时传输媒体数据的协议,通常与RTSP一起使用。它负责在网络上传输音视频数据。特点:RTP通过UDP或TCP传输媒体数据,提供时间戳和序…...
Linux系统编程——系统内核中的信号
目录 一、前言 二、系统内核中的信号 三、sigset_t 四、信号集操作 1、sigpending(); 2、sigemptyset(); 3、sigfillset(sigset_t *set); 4、int sigaddset ()和sigdelset() 编辑 5、sigismember() 6、sigprocmask() 五、信号集操作代码演示 六、深入理解进程的信…...
delve调试环境搭建—golang
原文地址:delve调试环境搭建—golang – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 由于平时不用 IDE 开发环境,习惯在 linux终端vim 环境下开发,所以找了golang的调试工具,delve类似gdb的调试界…...
shell脚本的循环-----while和for循环
一、while 1.格式 while 条件表达式; do 命令 done 2.案例 : ping测试子网段的主机网段由用户输入,例如用户输入192.168.101 ,则ping192.168.101.125 — 192.101.131 UP: /tmp/host_up.txt Down: /tmp/host_down.txt &#…...
【游戏设计原理】21 - 解谜游戏的设计
你想象一下,刚坐下准备玩游戏,想着“今天得挑战一下我的智商极限!”可结果碰上一个谜题,傻眼了,心里默念:“这啥玩意儿?这游戏是在玩我吗?”如果这个谜题太简单了,你可能…...
【漏洞复现】Wordpress GutenKit 插件 远程文件写入致RCE漏洞复现(CVE-2024-9234)
🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 一、漏洞概述 1.1漏洞简介 漏洞名称:Wordpress GutenKit 插件 远程文件写入致RCE漏洞复现漏洞编号:CVE-2024-9234漏洞威胁等级:超危影响范围:GutenKit <= 2.1.0…...
深度学习任务简介:分类、回归和生成
深度学习任务简介:分类、回归和生成 文章目录 深度学习任务简介:分类、回归和生成一、分类任务(Classification Task)什么是分类任务?**分类任务的常见应用**分类任务的输出主要算法 二、回归任务(Regressi…...
【测试】Unittest
近期更新完毕,建议关注收藏! 目录 简介TestCaseTestSuiteTestRunnerTestLoaderFixture tips:ctrl? 可以看方法的help文档 简介 python自带的单元测试框架,也可以做自动化测试 组织多个用例去执行,用例都是用单独的目录存放的 丰…...
TEA算法逆向实战:从特征识别到脚本魔改的CTF通关指南
1. TEA算法特征快速识别指南 第一次在CTF比赛中遇到TEA算法时,我盯着反编译代码看了半小时都没反应过来。直到后来总结出几个关键特征,现在遇到这类题目基本能在30秒内锁定目标。最明显的标志就是那个魔性的delta常量0x9E3779B9(或者它的补码…...
4个关键阶段:让老旧Mac通过OpenCore Legacy Patcher实现系统兼容性与硬件加速解锁
4个关键阶段:让老旧Mac通过OpenCore Legacy Patcher实现系统兼容性与硬件加速解锁 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 老旧设备升级面…...
实战演练:基于快马平台与vscode codex思想,快速构建业务数据可视化仪表盘
今天想和大家分享一个实战经验:如何快速构建一个业务数据可视化仪表盘。这个需求其实挺常见的,很多公司都需要通过直观的图表来展示销售数据、用户行为等关键指标。我最近在InsCode(快马)平台上尝试了这个项目,整个过程比想象中顺利很多。 需…...
在ALV当中上传的excel形式的layout,没法删除怎么办?
明明点了上边的删除键(-)也保存了,下次进入还是存在。OAOR,上传的模板都在里面,点击删除即可...
大模型开发:裸辞还是在职?算清这笔账,转型之路少走弯路!
文章探讨了在大模型开发转型过程中,裸辞与在职学习的利弊及适用人群。裸辞可集中时间快速学习,但经济压力大;在职学习有稳定收入,但时间碎片化,学习周期长。文章建议根据个人经济状况、技能基础和风险承受能力选择路径…...
串口通信与Modbus协议:工业自动化中的黄金搭档
1. 工业自动化的通信基石:串口与Modbus为何成为黄金组合 在工厂车间的控制柜里,PLC正以每秒数十次的频率采集着温度传感器的数据;在自动化生产线上,机械臂的每个动作都精准同步着传送带的节奏。这些看似神奇的工业魔法,…...
开源翻译终端效果展示:Pixel Language Portal处理专业术语准确率分析
开源翻译终端效果展示:Pixel Language Portal处理专业术语准确率分析 1. 产品概览 Pixel Language Portal(像素语言跨维传送门)是一款基于腾讯Hunyuan-MT-7B核心引擎构建的创新翻译工具。与传统翻译软件不同,它将翻译过程转化为…...
内网外网互传文件慢怎么办?高速传输协议该如何选择?
企业日常办公中,内外网文件互传卡顿、中断、速度不达标的问题十分普遍,尤其在大文件与批量文件场景下,传统方式难以满足稳定高效的需求。选择合适的高速传输方案,直接影响跨网协作效率与数据安全,这也是多数运维与业务…...
热点 | Harness 架构深度解析:AI智能体编排框架的核心原理
热点 | Harness 架构深度解析:AI智能体编排框架的核心原理 声明: 📝 作者:甜城瑞庄的核桃(ZMJ) 原创学习笔记,欢迎分享,但请保留作者信息及原文链接哦~ 本文深度解析 Claude Code 背后的核心架构 Harness,揭示为何"Harness 比模型更重要"成为 2026 年 AI …...
Graphormer一文详解:RDKit+PyG+Gradio技术栈整合与Supervisor服务管理
Graphormer一文详解:RDKitPyGGradio技术栈整合与Supervisor服务管理 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络模型,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分…...
