【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…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...