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

MySQL 主从复制与 Binlog 深度解析

目录

        • 1. Binlog的工作原理与配置
        • 2. 主从复制的设置与故障排除
        • 3. 数据一致性与同步延迟的处理
      • 小结

MySQL的binlog(二进制日志)和主从复制是实现数据备份、容灾、负载均衡以及数据同步的重要机制。在高可用性架构和分布式数据库设计中,binlog同步和主从复制常常是基础。

1. Binlog的工作原理与配置

Binlog简介

  • 作用:binlog记录了对数据库的所有修改操作,包括INSERT、UPDATE、DELETE等。这些日志用于恢复数据以及在主从复制中同步数据。
  • 格式:MySQL的binlog有三种格式:
    • STATEMENT:记录执行的SQL语句(如INSERT INTO table VALUES (1, 'abc'))。
    • ROW:记录数据行的变化(如行数据的修改)。
    • MIXED:结合了STATEMENT和ROW两种格式,根据操作自动选择最合适的记录方式。
  • 位置:binlog的存储位置由log-bin配置项控制,通常会以.bin为后缀,保存在MySQL数据目录中。

配置

  • 启用binlog:

    [mysqld]
    log-bin = /path/to/binlog
    server-id = 1
    binlog-format = ROW
    
    • log-bin指定binlog文件的存储路径。
    • server-id是每个MySQL实例的唯一标识,主服务器和从服务器都必须设置不同的server-id
    • binlog-format指定binlog的记录格式。
  • 设置binlog的保留时间

    expire_logs_days = 7
    

    这会设置binlog文件的保留时间,超过时间的binlog会自动删除。

2. 主从复制的设置与故障排除

主从复制简介
主从复制是MySQL的一种数据复制机制,其中主服务器将它的binlog中的数据变更复制到从服务器,从而保持从服务器与主服务器的数据一致性。主从复制的工作原理大致如下:

  • 主服务器执行某些写操作后,将这些操作记录到binlog中。
  • 从服务器通过I/O线程从主服务器获取binlog,并将这些数据写入自己的中继日志(relay log)。
  • 从服务器的SQL线程根据中继日志执行操作,使得数据同步。

设置主从复制

  1. 主服务器配置
    • 确保主服务器启用了binlog(如上所示)。
    • 创建复制用户,授予适当的权限:
      CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
      GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
      
  2. 从服务器配置
    • 设置server-id,确保每个服务器有唯一的ID。

    • 配置主服务器的连接信息:

      CHANGE MASTER TOMASTER_HOST = 'master_ip',MASTER_USER = 'replica_user',MASTER_PASSWORD = 'password',MASTER_LOG_FILE = 'binlog.000001',  -- 主服务器当前binlog文件MASTER_LOG_POS = 154;               -- 从主服务器获取的binlog位置
      

      其中MASTER_LOG_FILEMASTER_LOG_POS通常通过在主服务器执行SHOW MASTER STATUS;命令获得。

    • 启动复制进程:

      START SLAVE;
      

故障排除

  • 复制中断:复制中断通常会出现"Error ‘Last_IO_Error’",需要根据错误信息进行排查,常见的原因包括网络问题、binlog文件丢失或从服务器的中继日志损坏。

  • 查看复制状态:可以通过以下命令查看从服务器的复制状态:

    SHOW SLAVE STATUS\G
    

    关注Slave_IO_RunningSlave_SQL_Running字段,它们应该显示为Yes,否则表示复制进程出错。

  • 故障恢复:如果复制中断并且无法自动恢复,可以使用STOP SLAVE停止复制进程,然后通过CHANGE MASTER TO命令重新设置MASTER_LOG_FILEMASTER_LOG_POS来手动指定复制起始点,最后执行START SLAVE恢复复制。

3. 数据一致性与同步延迟的处理

数据一致性问题

  • 事务一致性:在主从复制中,如果主服务器的事务没有及时传输到从服务器,可能会导致从服务器的数据与主服务器不一致。为了解决这个问题,MySQL采用了事务日志和二阶段提交的方式来保证事务的一致性。
  • 延迟问题:由于主从复制是异步的,从服务器的同步通常会有延迟。复制延迟可能会导致从服务器的数据不与主服务器完全一致,尤其是在高负载的环境中,延迟会更加明显。

同步延迟的处理

  • 监控延迟:通过查看SHOW SLAVE STATUSSeconds_Behind_Master字段来监控复制延迟。
    • 如果延迟较大,可以通过优化主服务器的性能、网络带宽或增加从服务器的资源来减少延迟。
  • 使用半同步复制:MySQL的半同步复制可以减少延迟问题。在半同步复制模式下,主服务器在提交事务之前等待至少一个从服务器确认已经接收到该事务的binlog,从而保证数据的一致性和减少延迟。
    • 启用半同步复制:
      INSTALL PLUGIN rpl_semi_sync_master SONAME 'rpl_semi_sync_master.so';
      INSTALL PLUGIN rpl_semi_sync_slave SONAME 'rpl_semi_sync_slave.so';
      SET GLOBAL rpl_semi_sync_master_enabled = 1;
      

解决策略

  • 优化主服务器性能:确保主服务器能够高效处理请求,避免过多的负载导致复制延迟。
  • 增加从服务器的数量:通过水平扩展添加更多从服务器,分担主服务器的压力,提高数据同步的效率。
  • 网络优化:优化主从服务器之间的网络连接,减少延迟。

小结

  • binlog的工作原理:binlog记录了所有数据变更,用于数据恢复和主从同步。
  • 主从复制配置:通过配置主服务器的binlog,创建复制用户,从服务器通过CHANGE MASTER TO进行连接并启动复制。
  • 数据一致性与同步延迟:通过监控Seconds_Behind_Master来检测同步延迟,并通过优化主从性能、使用半同步复制等方式来处理数据一致性和延迟问题。

参考:
0voice · GitHub

相关文章:

MySQL 主从复制与 Binlog 深度解析

目录 1. Binlog的工作原理与配置2. 主从复制的设置与故障排除3. 数据一致性与同步延迟的处理 小结 MySQL的binlog(二进制日志)和主从复制是实现数据备份、容灾、负载均衡以及数据同步的重要机制。在高可用性架构和分布式数据库设计中,binlog同…...

大连理工大学《2024年845自动控制原理真题》 (完整版)

本文内容,全部选自自动化考研联盟的:《大连理工大学845自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦 目录 2024年真题 Part1:2024年完整版真题 2024年真题...

Java性能调优 - 多线程性能调优

锁优化 Synchronized 在JDK1.6中引入了分级锁机制来优化Synchronized。当一个线程获取锁时 首先对象锁将成为一个偏向锁,这样做是为了优化同一线程重复获取锁,导致的用户态与内核态的切换问题;其次如果有多个线程竞争锁资源,锁…...

行为树详解(4)——节点参数配置化

【分析】 行为树是否足够灵活强大依赖于足够丰富的各类条件节点和动作节点,在实现这些节点时,不可避免的,节点本身需要有一些参数供配置。 这些参数可以分为静态的固定值的参数以及动态读取设置的参数。 静态参数直接设置为Public即可&…...

计算机网络中的三大交换技术详解与实现

目录 计算机网络中的三大交换技术详解与实现1. 计算机网络中的交换技术概述1.1 交换技术的意义1.2 三大交换技术简介 2. 电路交换技术2.1 理论介绍2.2 Python实现及代码详解2.3 案例分析 3. 分组交换技术3.1 理论介绍3.2 Python实现及代码详解3.3 案例分析 4. 报文交换技术4.1 …...

《杨辉三角》

题目描述 给出 n(1≤n≤20)n(1≤n≤20),输出杨辉三角的前 nn 行。 如果你不知道什么是杨辉三角,可以观察样例找找规律。 输入格式 无 输出格式 无 输入输出样例 输入 #1复制 6 输出 #1复制 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 C语言…...

ARM学习(35)单元测试框架以及MinGW GCC覆盖率报告

单元测试框架以及MinGW GCC覆盖率报告 1、单元测试与覆盖率简介 随着代码越写越多,越来越需要注意自测的重要性,基本可以提前解决90%的问题,所以就来介绍一下单元测试,单元测试是否测试充分,需要进行评价,覆盖率就是单元测试是否充分的评估工具。 例如跑过单元测试后,…...

边缘计算+人工智能:让设备更聪明的秘密

引言:日常生活中的“智能”设备 你是否发现,身边的设备正变得越来越“聪明”? 早上醒来时,智能音箱已经根据你的日程播放舒缓音乐;走进厨房,智能冰箱提醒你今天的食材库存;而在城市道路上&…...

neo4j知识图谱AOPC的安装方法

AOPC下载链接:aopc全版本github下载 APOC,全称为Awesome Procedures On Cypher,是Neo4j图数据库的一个非常强大和流行的扩展库。它极大地丰富了Cypher查询语言的功能,提供了超过450个过程(procedures)和函数…...

图像分割数据集植物图像叶片健康状态分割数据集labelme格式180张3类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):180 标注数量(json文件个数):180 标注类别数:3 标注类别名称:["Healthy","nitrogen deficiency"…...

Python学习(二)—— 基础语法(上)

目录 一,表达式和常量和变量 1.1 表达式 1.2 变量 1.3 动态类型特性 1.4 输入 二,运算符 2.1 算术运算符 2.2 关系运算符 2.3 逻辑运算符 2.4 赋值运算符 2.5 练习 三,语句 3.1 条件语句 3.2 while循环 3.3 for循环 四&#…...

Cesium-(Primitive)-(CircleOutlineGeometry)

CircleOutlineGeometry 效果: CircleOutlineGeometry 是 CesiumJS 中的一个类,它用来描述在椭球体上圆的轮廓。以下是 CircleOutlineGeometry 的构造函数属性,以表格形式展示: 属性名类型默认值描述centerCartesian3圆心点在固定坐标系中的坐标。radiusnumber圆的半径,…...

计算机网络技术基础:2.计算机网络的组成

计算机网络从逻辑上可以分为两个子网:资源子网和通信子网。 一、资源子网 资源子网主要负责全网的数据处理业务,为全网用户提供各种网络资源与网络服务。资源子网由主机、终端、各种软件资源与信息资源等组成。 1)主机 主机是资源子网的主要…...

EasyExcel使用管道流连接InputStream和OutputStream

前言 Java中的InputSteam 是程序从其中读取数据, OutputSteam是程序可以往里面写入数据。 如果我们有在项目中读取数据库的记录, 在转存成Excel文件, 再把文件转存到OSS中。 生成Excel使用的是阿里的EasyExcel 。 他支持Output的方式写出文件内容。 而…...

OpenWebUI连接不上Ollama模型,Ubuntu24.04

这里写自定义目录标题 问题介绍解决方法 问题介绍 操作系统 Ubuntu24.04Ollama 使用默认安装方法(官网https://github.com/ollama/ollama) curl -fsSL https://ollama.com/install.sh | sh 安装在本机OpenWebUI 使用默认docker安装方法(官网…...

C#C++获取当前应用程序的安装目录和工作目录

很多时候,用户自己点击打开read.exe加载的时候都没有问题,读取ini配置文件也没有问题。但是如果应用程序是开机启动呢?32位Windows系统当前目录是C盘的windows\system32;而64位系统软件启动后默认的当前目录是:C:\Wind…...

Linux中vi和vim的区别详解

文章目录 Linux中vi和vim的区别详解一、引言二、vi和vim的起源与发展三、功能和特性1、语法高亮2、显示行号3、编辑模式4、可视化界面5、功能扩展6、插件支持 四、使用示例1、启动编辑器2、基本操作 五、总结 Linux中vi和vim的区别详解 一、引言 在Linux系统中,vi和…...

2021 年 6 月青少年软编等考 C 语言四级真题解析

目录 T1. 数字三角形问题思路分析T2. 大盗思路分析T3. 最大子矩阵思路分析T4. 小球放盒子思路分析T1. 数字三角形问题 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。 注…...

UE5编辑器下将RenderTarget输出为UTexture并保存

在使用UE5开发项目时,RenderTarget是一种非常强大的工具,常用于生成实时纹理效果、后处理和调试。而将RenderTarget的内容转换为UTexture并储存,是许多编辑器内的需求都需要的功能。 1.材质球输出至Texture 首先创建一个Actor类&#xff0c…...

【漏洞复现】CVE-2024-34102 Magento Open Source XXE漏洞

目录 漏洞介绍 影响版本 环境搭建 查看版本 漏洞复现 手动复现 漏洞 poc Magento Open Source 是一个免费开源的电子商务平台,适合中小企业或开发团队通过自定义代码和插件创建在线商店。它由社区开发和支持,功能强大但需要更多的技术投入。Adobe…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...