MySQL 主从复制与高可用

news/2024/12/23 22:36:40 标签: 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 TO
      MASTER_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 等中间件来实现读写分离和负载均衡。这样可以分

http://www.niftyadmin.cn/n/5797081.html

相关文章

严格推导质点曲线运动的运动学方程

前言 相当一部分物理学书籍在推导质点曲线运动的运动学方程时&#xff0c;采用的都是先建立位移的微元 Δ r ⃗ \Delta \vec{r} Δr &#xff0c;然后几何近似求极限的方法。这种方法虽然能得到正确的结论&#xff0c;但数学上的严格性略有欠缺&#xff0c;且过程繁琐。考虑到…

tomcat的安装以及配置(基于linuxOS)

目录 安装jdk环境 yum安装 验证JDK环境 安装tomcat应用 yum安装 ​编辑 使用yum工具进行安装 配置tomcat应用 关闭防火墙和selinux 查看端口开启情况 ​编辑 访问tomcat服务 安装扩展包 重启服务 查看服务 源码安装 进入tomcat官网进行下载 查找自己要用的to…

html <a>设置发送邮件链接、打电话链接 <a href=“mailto:></a> <a href=“tel:></a>

1.代码 <ul><li>电话&#xff1a;<a href"tel:18888888888">188-8888-8888</a></li><li>邮箱&#xff1a;<a href"mailto:10000qq.com">10000qq.com</a></li><li>邮箱&#xff1a;<a hre…

sql注入之union注入

Sql注入之union注入攻击 今天讲讲sql注入攻击流程 事先声明&#xff0c;本文仅仅作为学习使用&#xff0c;因个人原因导致的后果&#xff0c;皆与本人无关&#xff0c;后果由个人承担。 本次演示靶机为封神台里的题目&#xff0c;具体连接如下 https://hack.zkaq.cn/battle…

<代码随想录> 算法训练营-2024.12.20

322. 零钱兑换 class Solution:def coinChange(self, coins: List[int], amount: int) -> int:# dp[i][j]表示 提供到coins[i]的硬币&#xff0c;总金额为j的最少硬币个数 硬币个数无限&#xff0c;完全背包# 有两种取值&#xff0c;一种是取dp[i-1][j] 另一种是如果j比当前…

HarmonyOS NEXT 技术实践-基于基础视觉服务实现骨骼点识别

本示例展示了如何在HarmonyOS Next中实现基于基础视觉服务的骨骼点识别功能。骨骼点识别是计算机视觉中的一项重要技术&#xff0c;广泛应用于运动分析、健身监控和增强现实等领域。通过使用HarmonyOS Next提供的视觉API&#xff0c;开发者能够轻松地对人物图像进行骨骼点检测&…

反无人机防御系统概述!

一、定义与工作原理 反无人机防御系统是指利用频谱侦测探测、雷达探测、无线电干扰压制等技术实现对非法入侵无人机进行管控防御的系统。它采用多种技术手段&#xff0c;如雷达、光电传感器、红外线探测器等&#xff0c;通过实时监测无人机的位置、速度、航迹、姿态等信息&…

5G -- 发展与演进

概述&#xff1a; 5G将通过支持增强移动宽带&#xff08;eMBB&#xff09;、低时延高可靠连接&#xff08;uRLLC&#xff09;和海量机器连接&#xff08;mMTC&#xff09;三大场景&#xff0c;以满足网络能力极端化、网络能力差异化以及网络融合的多样化的业务需求&#xff0c…