【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 主从复制的基本思想是将主数据库上的所有变更操作(如插入、更新、删除)实时地复制到从数据库。具体流程如下:
- 主服务器记录所有修改操作到二进制日志(binary log, binlog)。
- 从服务器定期从主服务器读取这些日志并执行相应的操作,以保持数据同步。
流程图:
2.1 复制过程
- 日志记录:主库将所有更改操作记录到二进制日志(binary log)中。
- 日志传输:从库定期向主库请求新的二进制日志文件。
- 应用更改:从库读取这些日志并执行相应的 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 在主服务器上配置
-
修改配置文件
编辑 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 -
重启 MySQL 服务
sudo systemctl restart mysql -
创建复制用户
登录主服务器,创建用于复制的用户并授权:
CREATE USER 'replicator'@'%' IDENTIFIED BY 'your_password'; GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%'; FLUSH PRIVILEGES; -
记录当前二进制日志位置
使用以下命令获取当前的日志文件和位置:
SHOW MASTER STATUS;返回结果示例:
File Position mysql-bin.000001 12345
3.3 在从服务器上配置
-
修改配置文件
编辑从服务器的 MySQL 配置文件,添加以下内容:
[mysqld] server-id=2 # 唯一的服务器 ID,不同于主服务器 -
重启 MySQL 服务
sudo systemctl restart mysql -
设置主服务器信息
登录从服务器,执行以下命令以设置主服务器的信息:
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; -
启动复制进程
启动从服务器的复制进程:
START SLAVE; -
检查复制状态
使用以下命令检查复制状态:
SHOW SLAVE STATUS\G;关键字段:
Slave_IO_Running: 是否在运行Slave_SQL_Running: 是否在运行Last_Errno: 最近的错误号Last_Error: 最近的错误信息
确保 Slave_IO_Running 和 Slave_SQL_Running 都是 Yes。
4. 监控和维护
4.1 监控复制状态
定期检查从库的复制状态,确保没有错误。使用以下命令:
SHOW SLAVE STATUS\G;
关注 Last_Error 字段,如果有错误,需要及时解决。
4.2 处理复制延迟
复制延迟会导致从库数据不一致。可以通过以下方式减轻延迟:
- 调整查询语句,优化性能。
- 使用更高效的硬件,提高 I/O 性能。
- 考虑使用半同步复制减少延迟。
4.3 故障恢复
如果主库发生故障,可以将从库提升为主库。步骤如下:
-
停止从库的复制:
STOP SLAVE; -
记录从库的状态,确保数据一致性。
-
在新主库上创建新的复制用户,配置新的从库。
5. 备份策略
5.1 逻辑备份与物理备份
-
逻辑备份:使用
mysqldump工具进行数据导出,适合小型数据库。mysqldump -u root -p --all-databases > all_databases.sql -
物理备份:使用
mysqlbackup或Percona XtraBackup进行热备份,适合大规模数据库。
5.2 增量备份
增量备份只备份自上次备份以来发生变化的数据,节省存储空间和时间。在主从复制环境中,从库可以通过 binlog 实现增量备份。
6. 使用场景
- 负载均衡:通过将读请求分发到多个从库,减轻主库压力。
- 灾难恢复:在主库故障时迅速切换到从库,确保业务连续性。
- 数据分析:从库可用于生成报表和数据分析,避免影响主库性能。
7. 注意事项
-
网络延迟:主从复制依赖网络传输,可能会出现延迟,导致从服务器的数据与主服务器不一致。
-
二进制日志格式:要选择合适的二进制日志格式(如 ROW、STATEMENT、MIXED),以适应不同的使用场景。
-
故障恢复:在主服务器故障时,可以手动将从服务器提升为主服务器,确保业务连续性。
-
安全性:确保复制用户的权限设置合理,只授予必要的权限;并考虑对数据传输进行加密。
总结
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进制数据,为了方便美观可以参考如下方法。 #define __is_print(ch) ((unsigned int)((ch) - ) < 127u - )/*** dump_hex* * brief hex打印* * param buf: 需要打印的原始数据* param size: 原始数据类型*…...
在LabVIEW中如何读取EXCEL
在LabVIEW中读取Excel文件通常使用“报告生成工具包”(Report Generation Toolkit)。以下是详细步骤: 安装工具包:确保已安装“报告生成工具包”。这通常随LabVIEW一起提供,但需要单独安装。 创建VI: 打…...
布匹瑕疵检测数据集 4类 2800张 布料缺陷 带标注 voc yolo
布匹瑕疵检测数据集 4类 2800张 布料缺陷 带标注 voc yolo 对应标注,格式VOC (XML),选配Y0L0(TXT) label| pic_ num| box_ _num hole: (425, 481) suspension_ wire: (1739, 1782) topbasi: (46, 46) dirty: (613&…...
灵动微高集成度电机MCU单片机
由于锂电技术的持续进步、消费者需求的演变、工具种类的革新以及应用领域的扩展,电动工具行业正呈现出无绳化、锂电化、大功率化、小型化、智能化和一机多能化的发展趋势。无绳化和锂电化的电动工具因其便携性和高效能的特性,已成为市场增长的重要驱动力…...
陪护小程序|护理陪护系统|陪护小程序成品
智能化,作为智慧医疗宏伟蓝图的基石,正引领着一场医疗服务的深刻变革。在这场变革的浪潮中,智慧医院小程序犹如璀璨新星,迅速崛起,而陪护小程序的诞生,更是如春风化雨,细腻地触及了老年病患、家…...
【JVM】基础篇
1 初识JVM 1.1 什么是JVM JVM 全称是 Java Virtual Machine,中文译名 Java虚拟机。JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。 Java源代码执行流程如下: 分为三个步骤: 1、编写Java源代码文件。 …...
软件测试工程师 朝哪里进阶?
软件测试工程师 朝哪里进阶? 这里浅谈一下我的看法。 软件测试工程师 朝哪里进阶呢? 当我们测试工程师工作了2-3年后,就需要往前走往高走,就像一句名言说的:我们需要像ceo一样工作。 将自己的边界扩大一点࿰…...
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中实现预制体自动巡逻与攻击敌人的完整实现指南
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
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(分布式拒绝服务)攻击的服务器。其中一种常见的DDoS攻击就是CC(连续性攻击),它通过向目标服务器发送大量的请求来耗尽服务器资源,使网站无法正常运行。高防服务器采用多种…...
Android阶段学习思维导图
前言 记录下自己做的一个对Android原生应用层的思维导图,方便个人记忆扩展;这里只露出二级标题。 后语 虽然有些内容只是初步了解,但还是记录了下来;算是对过去一段学习的告别。...
React生命周期案例详解
React 组件的生命周期是指组件从创建、渲染、更新到卸载的整个过程。在 React 16 及之前的版本中,生命周期方法被分为几个不同的阶段:挂载(Mounting)、更新(Updating)、卸载(Unmounting…...
【ubuntu】ubuntu20.04安装显卡驱动
1.安装 点击右下角Apply Changes。 等安装好之后,重启。 现在的nvidia驱动已经很好安装了,比早期时安装出现黑屏等情况好了很多。 2.验证 nvidia-smi...
Mongo Java Driver使用getCollection做分页查询遇到的一些坑
背景 最近在做Mongo上的表数据的迁移,原本应该是DBA要干的活,但是想着DBA排期比较长,加上我们开发的权限又非常有限,而且数据量又没有多少,就想着自己开发个小小的程序从旧实例上查,写到新实例上去算了。于…...
RK3568笔记六十四:SG90驱动测试
若该文为原创文章,转载请注明原文出处。 前面有测试过PWM驱动,现在使用两种方式来产生PWM驱动SG90,实现舵机旋转任意角度 方法一:使用硬件PWM 方法二:使用高精度定时器,GPIO模拟PWM. 一、PWM子系统框架 二、SG90控制方法 舵机的控制需要MCU产生一个周期为20ms的脉冲信号…...
31 基于51单片机的水位监测系统仿真
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,DHT11温湿度检测,水位检测,通过LCD1602显示,超过阈值报警,继电器驱动电机转动。通过矩阵按键切换选择设置各项参数阈值。 …...
Docker 实践与应用举例
一、容器化Web应用: 创建一个Docker容器来运行一个简单的Web应用,例如一个基于Node.js的Express应用。首先,编写Dockerfile来定义容器的构建过程,然后使用Docker命令来构建和运行容器。 使用Docker Compose来定义和管理多个容器组…...
公开数据集网站分享
参考链接:常用的医学组织切片细胞图像数据集_细胞分割数据集-CSDN博客文章浏览阅读1.3w次,点赞32次,收藏133次。乳腺癌细胞图像数据集、血细胞图像数据集、HE染色切片、疟疾细胞图像图像识别、分类、分割_细胞分割数据集https://blog.csdn.ne…...
ADAU1701(含A2B)的开发详解五:SigmaStudio实战技巧与模块高效应用
1. SigmaStudio模块查找的终极技巧 第一次打开SigmaStudio时,面对左侧密密麻麻的模块列表,我完全懵了。就像走进一个巨大的图书馆却找不到分类标签,ADI把200多个算法模块分散在30多个分类里,光Volume Controls下面就有12种音量调节…...
硅与锗PN结实战对比:手把手测量导通电压VF与温度系数
硅与锗PN结实战对比:手把手测量导通电压VF与温度系数 在电子工程实践中,PN结的特性测量是理解半导体器件行为的基础。硅(Si)和锗(Ge)作为两种经典半导体材料,其PN结在导通电压(VF)和温度特性上表现出显著差异。本文将带领读者通过实际测量&a…...
不只是调色板:深入Cadence Allegro颜色配置文件的保存与复用逻辑(SPB17.4实战)
不只是调色板:深入Cadence Allegro颜色配置文件的保存与复用逻辑(SPB17.4实战) 在PCB设计领域,颜色配置往往被视为一种"视觉装饰"——直到某天你接手一个来自同事的工程文件,发现所有网络、层叠和元件都以难…...
Cursor Free VIP:如何轻松突破AI编程助手限制的完整指南
Cursor Free VIP:如何轻松突破AI编程助手限制的完整指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your t…...
一键永久放开权限(神州网信政府版专用)普通用户 安装软件的权限
一键永久放开权限(神州网信政府版专用) 第一步:先登录Administrator超级管理员 WinR 输入 netplwiz 回车勾选要使用本机,用户必须输入用户名和密码选中 Administrator 设为默认,注销重登进这个账号 第二步:…...
在高校科研项目中采用 Taotoken 实现多模型对比实验的便捷方案
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在高校科研项目中采用 Taotoken 实现多模型对比实验的便捷方案 高校科研团队在进行大模型相关的对比实验时,常常面临一…...
告别反复拔插!STM32F103 USB Device(CDC/MSC)上电自动重枚举的两种实现方法
STM32F103 USB设备免拔插重枚举技术深度解析 引言 在嵌入式开发领域,STM32F103系列微控制器因其出色的性价比和丰富的外设资源,成为众多工程师的首选。其中,USB接口的开发应用尤为广泛,从虚拟串口(CDC)到大容量存储设备(MSC)&…...
多模态大模型应用开发利器:xBrain工具箱核心解析与实战
1. 项目概述:一个面向多模态大模型的开源工具箱 最近在折腾大模型应用开发,特别是涉及到图像、文本、音频等多模态任务时,常常感到工具链的割裂。文本生成有成熟的框架,视觉任务又有另一套生态,想把它们高效地整合到一…...
LangChain-Rust:用系统级语言重构大语言模型应用框架
1. 项目概述:当LangChain遇上Rust,会擦出怎样的火花?如果你和我一样,既是LangChain生态的深度用户,又对Rust语言的高性能与安全性念念不忘,那么看到“Abraxas-365/langchain-rust”这个项目标题时ÿ…...
