当前位置: 首页 > news >正文

MySQL 主从复制与高可用

在现代分布式系统中,数据库的高可用性和可靠性至关重要。MySQL 提供了主从复制(Master-Slave Replication)机制来实现数据的冗余和容错,保证在主数据库发生故障时能够继续提供服务。而在此基础上,通过进一步的高可用架构设计(如 MHA、MySQL Router、ProxySQL 等),可以构建更强大的高可用数据库系统。本文将深入探讨 MySQL 主从复制高可用架构,并介绍常见的实现方式和实践。


一、MySQL 主从复制

1. 主从复制的基本概念

MySQL 主从复制是一种基于主从结构的异步复制机制,其中主服务器负责处理所有的写操作,而从服务器通过复制主服务器的变更(如插入、更新、删除等操作)来保持数据同步。主从复制的核心思想是通过网络将主数据库上的数据变动传递到从数据库上,实现数据的冗余备份和负载均衡。

2. 主从复制的工作原理

主从复制的实现分为两个主要步骤:

2.1. 主服务器(Master)
  1. 日志记录:主服务器记录所有的变更操作到 二进制日志(binary log) 中。
  2. 日志传输:主服务器会将二进制日志发送给从服务器。
2.2. 从服务器(Slave)
  1. 读取日志:从服务器会连接到主服务器,获取主服务器的二进制日志(binlog)。
  2. 执行操作:从服务器根据收到的二进制日志执行相应的操作,保持与主服务器的数据一致性。
2.3. 异步复制
  • 默认情况下,MySQL 主从复制是异步的。即从服务器不会立即同步主服务器的操作,存在一定的延迟。主服务器在提交操作后不会等待从服务器确认,可能会导致短暂的数据不一致。
2.4. 主从复制架构图
+-------------------+                 +-------------------+
|    Master DB      | <--- binlog ----|     Slave DB      |
|                   |                 |                   |
|  (Primary Server) |                 |  (Replicated DB)  |
+-------------------+                 +-------------------+
3. 配置 MySQL 主从复制
3.1. 主服务器配置
  1. 启用二进制日志
    在主服务器的配置文件(my.cnfmy.ini)中启用二进制日志:

    [mysqld]
    log-bin=mysql-bin
    server-id=1
    
  2. 创建复制用户
    为从服务器创建一个专用的复制用户,并赋予 REPLICATION SLAVE 权限:

    CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
    FLUSH PRIVILEGES;
    
  3. 获取二进制日志位置
    在主服务器执行以下命令,记录下当前的二进制日志文件名和位置:

    SHOW MASTER STATUS;
    
3.2. 从服务器配置
  1. 配置服务器ID
    在从服务器的配置文件(my.cnfmy.ini)中配置唯一的 server-id

    [mysqld]
    server-id=2
    
  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;
    
  3. 启动复制
    启动从服务器的复制进程:

    START SLAVE;
    
  4. 检查复制状态
    使用以下命令检查复制状态:

    SHOW SLAVE STATUS\G;
    

    关键字段:

    • Slave_IO_Running:显示是否正常接收主服务器的日志。
    • Slave_SQL_Running:显示是否正常执行接收到的日志。

二、MySQL 高可用架构

MySQL 的主从复制机制本身并不提供高可用性(HA)功能,因为主服务器发生故障时,从服务器可能无法自动接管任务。为了实现高可用,通常需要使用一些高可用方案来监控和自动故障转移。常见的高可用架构有以下几种:

1. MHA (Master High Availability)

MHA 是一个 MySQL 高可用解决方案,旨在提供自动的故障转移和恢复机制。其基本工作流程是:

  1. 故障检测:MHA 通过定期检查主服务器的健康状态,及时发现主服务器故障。
  2. 故障转移:一旦检测到主服务器故障,MHA 会自动选择一个健康的从服务器,将其提升为新的主服务器,并将其他从服务器配置为新的从服务器。
  3. 数据同步:确保数据的一致性和完整性,避免数据丢失。
MHA 配置
  • MHA 管理工具:MHA 提供了 master_ip_failovermanager 工具来帮助自动化切换和管理。
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. 监控与告警
  • 配置监控系统,实时监控主从复制的状态。常见的监控工具有 PrometheusZabbix,可以监控 SHOW SLAVE STATUS 的关键字段,如 Slave_IO_RunningSlave_SQL_Running
  • 设置告警阈值,及时通知管理员进行干预。
2. 数据一致性与延迟
  • 由于 MySQL 主从复制默认是异步的,因此可能会有数据同步延迟。在高可用架构中,需要考虑如何处理延迟带来的数据不一致问题。
  • 通过 半同步复制(Semi-synchronous Replication) 可以在一定程度上减少延迟,确保主从之间的数据更一致。
3. 故障转移与恢复
  • 自动故障转移方案,如 MHA、MySQL Router、ProxySQL 等,可以在主服务器故障时自动将流量切换到新的主服务器。
  • 定期进行故障演练和备份,确保在故障发生时能够快速恢复。
4. 高可用与负载均衡
  • 使用 ProxySQLMySQL Router 等中间件来实现读写分离和负载均衡。这样可以分

相关文章:

MySQL 主从复制与高可用

在现代分布式系统中&#xff0c;数据库的高可用性和可靠性至关重要。MySQL 提供了主从复制&#xff08;Master-Slave Replication&#xff09;机制来实现数据的冗余和容错&#xff0c;保证在主数据库发生故障时能够继续提供服务。而在此基础上&#xff0c;通过进一步的高可用架…...

RCE总结

文章目录 常见漏洞执行函数&#xff1a;1.系统命令执行函数2.代码执行函数 命令拼接符读取文件命令绕过&#xff1a;空格过滤绕过关键字绕过长度过滤绕过无参数命令执行绕过无字母数字绕过利用%0A截断利用回溯绕过利用create_function()代码注入无回显RCE1.反弹shell2.dnslog外…...

基于UNITY3D的照片墙演示项目技术分享

unity实现超大图片墙演示,由于拥有海量图片&#xff0c;使用了CPU 多线程&#xff0c;unity dots技术&#xff0c;图片组成文字部分&#xff0c;使用了点阵图技术&#xff0c;提取文字像素。 &#xff08;关于点阵介绍&#xff09; 点阵字体是把每一个字符都分成1616或2424个点…...

随手记:小程序兼容后台的wangEditor富文本配置链接

场景&#xff1a; 在后台配置wangEditor富文本&#xff0c;可以文字配置链接&#xff0c;图片配置链接&#xff0c;产生的json格式为&#xff1a; 例子&#xff1a; <h1><a href"https://uniapp.dcloud.net.cn/" target"_blank"><span sty…...

maven项目运行时NoSuchMethodError问题排查记录(依赖冲突解决)

控制台异常如下&#xff1a; Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: org.apache.commons.io.input.BoundedInputStream.builder()Lorg/apache/commons/io/input/BoundedInputStream$Builder;问题明显&#xff0c;根据NoSuchMethodError…...

ECharts关系图-关系图11,附视频讲解与代码下载

引言&#xff1a; 关系图&#xff08;或称网络图、关系网络图&#xff09;在数据可视化中扮演着至关重要的角色。它们通过节点&#xff08;代表实体&#xff0c;如人、物体、概念等&#xff09;和边&#xff08;代表实体之间的关系或连接&#xff09;的形式&#xff0c;直观地…...

【C语言】动态内存管理:详解malloc和free函数

前言 在C语言编程中&#xff0c;动态内存分配是一个非常重要的概念。与静态内存分配不同&#xff0c;动态内存分配允许程序在运行时根据需要分配和释放内存&#xff0c;从而更加灵活地管理内存资源。特别是在一些数据结构的引用中经常需要使用&#xff0c;下面我们就详细讲解一…...

EGO Swarm翻译

目录 摘要 Ⅰ 介绍 Ⅱ 相关工作 A . 单四旋翼局部规划 B . 拓扑规划 C. 分布式无人机集群 Ⅲ 基于梯度的局部规划隐式拓扑轨迹生成 A.无需ESDF梯度的局部路径规划 B.隐式拓扑轨迹生成 Ⅳ 无人机集群导航 A 机间避碰 B. 定位漂移补偿 C. 从深度图像中去除agent Ⅴ …...

Linux根目录

在Linux系统中&#xff0c;文件系统遵循一种标准化的目录结构&#xff0c;即文件系统层次结构标准&#xff08;Filesystem Hierarchy Standard&#xff0c;FHS&#xff09;。 根目录&#xff08;/&#xff09; /bin&#xff1a;包含二进制可执行文件&#xff0c;通常是用户和系…...

SAP-SD-参照退货订单补货时带不出行项目

业务场景&#xff1a; 当物料出现质量问题时&#xff0c;客户需要换货&#xff0c;不需要退款&#xff0c;就需要先做退货订单&#xff0c;然后参照退货订单进行补货&#xff0c;创建补货订单&#xff0c;但是创建补货订单时只是把抬头数据带入补货订单&#xff0c;没有带入行项…...

12-C语言单向链表

一、链表的概述 1.链表与数组对比 遍历数组中的数据&#xff0c;查询数据比较方便&#xff0c;但往数组中插入、删除数据需要移动大量数据&#xff1b;相反。链表遍历、查询数据不方便&#xff0c;但是插入、删除数据比较方便&#xff0c;不需要移动大量数据&#xff0c;直接…...

2024年11月 蓝桥杯青少组 STEMA考试 Scratch真题

2024年11月 蓝桥杯青少组 STEMA考试 Scratch真题&#xff08;选择题&#xff09; 题目总数&#xff1a;5 总分数&#xff1a;50 选择题 第 1 题 单选题 Scratch运行以下程宇后&#xff0c;小兔子会&#xff08; &#xff09;。 A. 变小 B. 变大 C. 变色 D. …...

FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.2,RTP协议-RTP协议概述,协议详情

前提: 为什么要学习 RTP&#xff08;Real-time Transport Protocol&#xff09;重点 简介&#xff1a;RTP是一个实时传输媒体数据的协议&#xff0c;通常与RTSP一起使用。它负责在网络上传输音视频数据。特点&#xff1a;RTP通过UDP或TCP传输媒体数据&#xff0c;提供时间戳和序…...

Linux系统编程——系统内核中的信号

目录 一、前言 二、系统内核中的信号 三、sigset_t 四、信号集操作 1、sigpending(); 2、sigemptyset(); 3、sigfillset(sigset_t *set); 4、int sigaddset ()和sigdelset() ​编辑 5、sigismember() 6、sigprocmask() 五、信号集操作代码演示 六、深入理解进程的信…...

delve调试环境搭建—golang

原文地址&#xff1a;delve调试环境搭建—golang – 无敌牛 欢迎参观我的个人博客&#xff1a;无敌牛 – 技术/著作/典籍/分享等 由于平时不用 IDE 开发环境&#xff0c;习惯在 linux终端vim 环境下开发&#xff0c;所以找了golang的调试工具&#xff0c;delve类似gdb的调试界…...

shell脚本的循环-----while和for循环

一、while 1.格式 while 条件表达式; do 命令 done 2.案例 &#xff1a; ping测试子网段的主机网段由用户输入&#xff0c;例如用户输入192.168.101 &#xff0c;则ping192.168.101.125 — 192.101.131 UP&#xff1a; /tmp/host_up.txt Down: /tmp/host_down.txt &#…...

【游戏设计原理】21 - 解谜游戏的设计

你想象一下&#xff0c;刚坐下准备玩游戏&#xff0c;想着“今天得挑战一下我的智商极限&#xff01;”可结果碰上一个谜题&#xff0c;傻眼了&#xff0c;心里默念&#xff1a;“这啥玩意儿&#xff1f;这游戏是在玩我吗&#xff1f;”如果这个谜题太简单了&#xff0c;你可能…...

【漏洞复现】Wordpress GutenKit 插件 远程文件写入致RCE漏洞复现(CVE-2024-9234)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 一、漏洞概述 1.1漏洞简介 漏洞名称:Wordpress GutenKit 插件 远程文件写入致RCE漏洞复现漏洞编号:CVE-2024-9234漏洞威胁等级:超危影响范围:GutenKit <= 2.1.0…...

深度学习任务简介:分类、回归和生成

深度学习任务简介&#xff1a;分类、回归和生成 文章目录 深度学习任务简介&#xff1a;分类、回归和生成一、分类任务&#xff08;Classification Task&#xff09;什么是分类任务&#xff1f;**分类任务的常见应用**分类任务的输出主要算法 二、回归任务&#xff08;Regressi…...

【测试】Unittest

近期更新完毕&#xff0c;建议关注收藏&#xff01; 目录 简介TestCaseTestSuiteTestRunnerTestLoaderFixture tips:ctrl? 可以看方法的help文档 简介 python自带的单元测试框架&#xff0c;也可以做自动化测试 组织多个用例去执行&#xff0c;用例都是用单独的目录存放的 丰…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...