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

【MySQL】MySQL 数据库主从复制详解

目录

  • 1. 基本概念
    • 1.1 主从架构
    • 1.2 复制类型
  • 2. 工作原理
    • 2.1 复制过程
    • 2.2 主要组件
  • 3. 配置步骤
    • 3.1 准备工作
    • 3.2 在主服务器上配置
    • 3.3 在从服务器上配置
  • 4. 监控和维护
    • 4.1 监控复制状态
    • 4.2 处理复制延迟
    • 4.3 故障恢复
  • 5. 备份策略
    • 5.1 逻辑备份与物理备份
    • 5.2 增量备份
  • 6. 使用场景
  • 7. 注意事项
  • 总结
  • 参考文献

MySQL 数据库的主从复制是一种常用的数据冗余和负载均衡技术,也是一种数据备份和同步的技术。通过将数据从主服务器(Master)复制到一个或多个从服务器(Slave)。这种架构不仅可用于数据备份,还可以提高系统的读性能,通过负载均衡实现更高的可用性。本文将详细介绍 MySQL 主从复制的主从架构、工作原理、配置步骤、监控与维护、备份策略及应用场景。

1. 基本概念

1.1 主从架构

在 MySQL 的主从复制中:

  • 主库:负责处理所有写请求,记录数据变更。
  • 从库:同步主库的数据,可以处理读请求,减轻主库负担。

这种架构通过分布式负载实现更高的性能和可用性。

1.2 复制类型

MySQL 支持多种复制方式:

  • 异步复制:主库提交事务后无需等待从库确认,可能导致数据滞后。
  • 半同步复制:主库等待至少一个从库确认,以减少数据丢失风险。
  • 同步复制:所有从库必须确认后才提交事务,延迟较大。

2. 工作原理

MySQL 主从复制的基本思想是将主数据库上的所有变更操作(如插入、更新、删除)实时地复制到从数据库。具体流程如下:

  1. 主服务器记录所有修改操作到二进制日志(binary log, binlog)。
  2. 从服务器定期从主服务器读取这些日志并执行相应的操作,以保持数据同步。

流程图

记录更改
发送日志
执行更改
CSDN @ 2136
主服务器
二进制日志
从服务器
同步数据
CSDN @ 2136

2.1 复制过程

  1. 日志记录:主库将所有更改操作记录到二进制日志(binary log)中。
  2. 日志传输:从库定期向主库请求新的二进制日志文件。
  3. 应用更改:从库读取这些日志并执行相应的 SQL 语句,将数据同步到本地数据库。

2.2 主要组件

  • Binary Log(binlog):主库上的二进制日志,记录所有更改。
  • Replication I/O Thread:从库中的线程,负责从主库拉取 binlog。
  • Replication SQL Thread:从库中的线程,负责执行 binlog 中的 SQL 语句。

3. 配置步骤

3.1 准备工作

在设置主从复制之前,需要确保以下条件:

  • 主服务器和从服务器都已安装 MySQL。建议使用相同版本的 MySQL,以避免兼容性问题。
  • 能够网络互通,并且防火墙设置允许相应的 MySQL 端口(默认 3306)通信。

3.2 在主服务器上配置

  1. 修改配置文件

    编辑 MySQL 配置文件(通常为 /etc/my.cnf/etc/mysql/my.cnf),添加以下内容:

    [mysqld]
    server-id=1              # 唯一的服务器 ID
    log-bin=mysql-bin        # 开启二进制日志
    # log_bin = /var/log/mysql/mysql-bin.log
    
  2. 重启 MySQL 服务

    sudo systemctl restart mysql
    
  3. 创建复制用户

    登录主服务器,创建用于复制的用户并授权:

    CREATE USER 'replicator'@'%' IDENTIFIED BY 'your_password';
    GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
    FLUSH PRIVILEGES;
    
  4. 记录当前二进制日志位置

    使用以下命令获取当前的日志文件和位置:

    SHOW MASTER STATUS;
    

    返回结果示例:

    FilePosition
    mysql-bin.00000112345

3.3 在从服务器上配置

  1. 修改配置文件

    编辑从服务器的 MySQL 配置文件,添加以下内容:

    [mysqld]
    server-id=2              # 唯一的服务器 ID,不同于主服务器
    
  2. 重启 MySQL 服务

    sudo systemctl restart mysql
    
  3. 设置主服务器信息

    登录从服务器,执行以下命令以设置主服务器的信息:

    CHANGE MASTER TOMASTER_HOST='主服务器IP',MASTER_USER='replicator',MASTER_PASSWORD='your_password',MASTER_LOG_FILE='记录的File',-- 从主服务器获取的日志文件# MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=记录的Position; -- 从主服务器获取的位置# MASTER_LOG_POS=12345;
    
  4. 启动复制进程

    启动从服务器的复制进程:

    START SLAVE;
    
  5. 检查复制状态

    使用以下命令检查复制状态:

    SHOW SLAVE STATUS\G;
    

    关键字段:

    • Slave_IO_Running: 是否在运行
    • Slave_SQL_Running: 是否在运行
    • Last_Errno: 最近的错误号
    • Last_Error: 最近的错误信息

确保 Slave_IO_RunningSlave_SQL_Running 都是 Yes

4. 监控和维护

4.1 监控复制状态

定期检查从库的复制状态,确保没有错误。使用以下命令:

SHOW SLAVE STATUS\G;

关注 Last_Error 字段,如果有错误,需要及时解决。

4.2 处理复制延迟

复制延迟会导致从库数据不一致。可以通过以下方式减轻延迟:

  • 调整查询语句,优化性能。
  • 使用更高效的硬件,提高 I/O 性能。
  • 考虑使用半同步复制减少延迟。

4.3 故障恢复

如果主库发生故障,可以将从库提升为主库。步骤如下:

  1. 停止从库的复制:

    STOP SLAVE;
    
  2. 记录从库的状态,确保数据一致性。

  3. 在新主库上创建新的复制用户,配置新的从库。

5. 备份策略

5.1 逻辑备份与物理备份

  • 逻辑备份:使用 mysqldump 工具进行数据导出,适合小型数据库。

    mysqldump -u root -p --all-databases > all_databases.sql
    
  • 物理备份:使用 mysqlbackupPercona XtraBackup 进行热备份,适合大规模数据库。

5.2 增量备份

增量备份只备份自上次备份以来发生变化的数据,节省存储空间和时间。在主从复制环境中,从库可以通过 binlog 实现增量备份。

6. 使用场景

  • 负载均衡:通过将读请求分发到多个从库,减轻主库压力。
  • 灾难恢复:在主库故障时迅速切换到从库,确保业务连续性。
  • 数据分析:从库可用于生成报表和数据分析,避免影响主库性能。

7. 注意事项

  1. 网络延迟:主从复制依赖网络传输,可能会出现延迟,导致从服务器的数据与主服务器不一致。

  2. 二进制日志格式:要选择合适的二进制日志格式(如 ROW、STATEMENT、MIXED),以适应不同的使用场景。

  3. 故障恢复:在主服务器故障时,可以手动将从服务器提升为主服务器,确保业务连续性。

  4. 安全性:确保复制用户的权限设置合理,只授予必要的权限;并考虑对数据传输进行加密。

总结

MySQL 主从复制是实现高可用性和负载均衡的重要手段。通过合理配置和监控,可以显著提升数据库的可用性和性能,有效地管理数据同步,实现系统的弹性和鲁棒性。在实际应用中,应根据业务需求和系统架构来合理设计部署方案,并定期监控复制状态,以确保数据的一致性和完整性。了解主从复制的工作原理及其配置过程,对数据库管理员至关重要。希望本文能帮助您深入理解 MySQL 主从复制的相关知识。

参考文献

  • MySQL Official Documentation
  • MySQL Replication Overview

通过以上内容的整理和优化,希望能够帮助您更好地理解和运用 MySQL 数据库的主从复制功能。


相关文章:

【MySQL】MySQL 数据库主从复制详解

目录 1. 基本概念1.1 主从架构1.2 复制类型 2. 工作原理2.1 复制过程2.2 主要组件 3. 配置步骤3.1 准备工作3.2 在主服务器上配置3.3 在从服务器上配置 4. 监控和维护4.1 监控复制状态4.2 处理复制延迟4.3 故障恢复 5. 备份策略5.1 逻辑备份与物理备份5.2 增量备份 6. 使用场景…...

一种格式化printf hex 数据的方法

格式化输出HEX数据 调试过程中通常需要个格式化输出16进制数据&#xff0c;为了方便美观可以参考如下方法。 #define __is_print(ch) ((unsigned int)((ch) - ) < 127u - )/*** dump_hex* * brief hex打印* * param buf: 需要打印的原始数据* param size: 原始数据类型*…...

在LabVIEW中如何读取EXCEL

在LabVIEW中读取Excel文件通常使用“报告生成工具包”&#xff08;Report Generation Toolkit&#xff09;。以下是详细步骤&#xff1a; ​ 安装工具包&#xff1a;确保已安装“报告生成工具包”。这通常随LabVIEW一起提供&#xff0c;但需要单独安装。 创建VI&#xff1a; 打…...

布匹瑕疵检测数据集 4类 2800张 布料缺陷 带标注 voc yolo

布匹瑕疵检测数据集 4类 2800张 布料缺陷 带标注 voc yolo 对应标注&#xff0c;格式VOC (XML)&#xff0c;选配Y0L0(TXT) label| pic_ num| box_ _num hole: (425&#xff0c; 481) suspension_ wire: (1739&#xff0c; 1782) topbasi: (46&#xff0c; 46) dirty: (613&…...

灵动微高集成度电机MCU单片机

由于锂电技术的持续进步、消费者需求的演变、工具种类的革新以及应用领域的扩展&#xff0c;电动工具行业正呈现出无绳化、锂电化、大功率化、小型化、智能化和一机多能化的发展趋势。无绳化和锂电化的电动工具因其便携性和高效能的特性&#xff0c;已成为市场增长的重要驱动力…...

陪护小程序|护理陪护系统|陪护小程序成品

智能化&#xff0c;作为智慧医疗宏伟蓝图的基石&#xff0c;正引领着一场医疗服务的深刻变革。在这场变革的浪潮中&#xff0c;智慧医院小程序犹如璀璨新星&#xff0c;迅速崛起&#xff0c;而陪护小程序的诞生&#xff0c;更是如春风化雨&#xff0c;细腻地触及了老年病患、家…...

【JVM】基础篇

1 初识JVM 1.1 什么是JVM JVM 全称是 Java Virtual Machine&#xff0c;中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序&#xff0c;他的职责是运行Java字节码文件。 Java源代码执行流程如下&#xff1a; 分为三个步骤&#xff1a; 1、编写Java源代码文件。 …...

软件测试工程师 朝哪里进阶?

软件测试工程师 朝哪里进阶&#xff1f; 这里浅谈一下我的看法。 软件测试工程师 朝哪里进阶呢&#xff1f; 当我们测试工程师工作了2-3年后&#xff0c;就需要往前走往高走&#xff0c;就像一句名言说的&#xff1a;我们需要像ceo一样工作。 将自己的边界扩大一点&#xff0…...

Obsidian Plugin Release Pre-check

- [ ] 修改代码 - [ ] 修改README.md - [ ] 修改manifest.json - [ ] --将上述修改push到GitHub-- - [ ] 修改release版本 git tag git tag -a 1.0.6 -m "1.0.6" git push origin 1.0.6 ------------------------------------------- 备忘https://semver.org/lang/…...

Unity中实现预制体自动巡逻与攻击敌人的完整实现指南

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...

OpenJudge | Shortest Prefixes

总时间限制: 1000ms 内存限制: 65536kB 描述 A prefix of a string is a substring starting at the beginning of the given string. The prefixes of “carbon” are: “c”, “ca”, “car”, “carb”, “carbo”, and “carbon”. Note that the empty string is not co…...

速盾:高防服务器是如何防御CC攻击的?

高防服务器是一种专门用于防御DDoS&#xff08;分布式拒绝服务&#xff09;攻击的服务器。其中一种常见的DDoS攻击就是CC&#xff08;连续性攻击&#xff09;&#xff0c;它通过向目标服务器发送大量的请求来耗尽服务器资源&#xff0c;使网站无法正常运行。高防服务器采用多种…...

Android阶段学习思维导图

前言 记录下自己做的一个对Android原生应用层的思维导图&#xff0c;方便个人记忆扩展&#xff1b;这里只露出二级标题。 后语 虽然有些内容只是初步了解&#xff0c;但还是记录了下来&#xff1b;算是对过去一段学习的告别。...

React生命周期案例详解

React 组件的生命周期是指组件从创建、渲染、更新到卸载的整个过程。在 React 16 及之前的版本中&#xff0c;生命周期方法被分为几个不同的阶段&#xff1a;挂载&#xff08;Mounting&#xff09;、更新&#xff08;Updating&#xff09;、卸载&#xff08;Unmounting&#xf…...

【ubuntu】ubuntu20.04安装显卡驱动

1.安装 点击右下角Apply Changes。 等安装好之后&#xff0c;重启。 现在的nvidia驱动已经很好安装了&#xff0c;比早期时安装出现黑屏等情况好了很多。 2.验证 nvidia-smi...

Mongo Java Driver使用getCollection做分页查询遇到的一些坑

背景 最近在做Mongo上的表数据的迁移&#xff0c;原本应该是DBA要干的活&#xff0c;但是想着DBA排期比较长&#xff0c;加上我们开发的权限又非常有限&#xff0c;而且数据量又没有多少&#xff0c;就想着自己开发个小小的程序从旧实例上查&#xff0c;写到新实例上去算了。于…...

RK3568笔记六十四:SG90驱动测试

若该文为原创文章,转载请注明原文出处。 前面有测试过PWM驱动,现在使用两种方式来产生PWM驱动SG90,实现舵机旋转任意角度 方法一:使用硬件PWM 方法二:使用高精度定时器,GPIO模拟PWM. 一、PWM子系统框架 二、SG90控制方法 舵机的控制需要MCU产生一个周期为20ms的脉冲信号…...

31 基于51单片机的水位监测系统仿真

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;DHT11温湿度检测&#xff0c;水位检测&#xff0c;通过LCD1602显示&#xff0c;超过阈值报警&#xff0c;继电器驱动电机转动。通过矩阵按键切换选择设置各项参数阈值。 …...

Docker 实践与应用举例

一、容器化Web应用&#xff1a; 创建一个Docker容器来运行一个简单的Web应用&#xff0c;例如一个基于Node.js的Express应用。首先&#xff0c;编写Dockerfile来定义容器的构建过程&#xff0c;然后使用Docker命令来构建和运行容器。 使用Docker Compose来定义和管理多个容器组…...

公开数据集网站分享

参考链接&#xff1a;常用的医学组织切片细胞图像数据集_细胞分割数据集-CSDN博客文章浏览阅读1.3w次&#xff0c;点赞32次&#xff0c;收藏133次。乳腺癌细胞图像数据集、血细胞图像数据集、HE染色切片、疟疾细胞图像图像识别、分类、分割_细胞分割数据集https://blog.csdn.ne…...

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

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

应用升级/灾备测试时使用guarantee 闪回点迅速回退

1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间&#xff0c; 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点&#xff0c;不需要开启数据库闪回。…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...