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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/63295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排队论、负载均衡和任务调度关系

目录 排队论、负载均衡和任务调度关系 一、排队论 二、负载均衡 三、任务调度 四、总结 排队论、负载均衡和任务调度关系 排队论为负载均衡和任务调度提供了数学理论和方法支持 排队论、负载均衡和任务调度是三个相关但不同的概念。以下是对这三个概念的详细解释和它们之…

java版询价采购系统 招投标询价竞标投标系统 招投标公告系统源码

功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查看所…

景联文科技入选中国信通院发布的“人工智能数据标注产业图谱”

近日,由中国信息通信研究院、中国人工智能产业发展联盟牵头,联合中国电信集团、沈阳市数据局、保定高新区等70多家单位编制完成并发布《人工智能数据标注产业图谱》。景联文科技作为人工智能产业关键环节的代表企业,入选图谱中技术服务板块。…

【小沐学GIS】基于C++绘制三维数字地球Earth(OpenGL、glfw、glut、QT)第三期

🍺三维数字地球系列相关文章如下🍺:1【小沐学GIS】基于C绘制三维数字地球Earth(456:OpenGL、glfw、glut)第一期2【小沐学GIS】基于C绘制三维数字地球Earth(456:OpenGL、glfw、glut)第二期3【小沐…

实景视频与模型叠加融合?

[视频GIS系列]无人机视频与与实景模型进行实时融合_无人机视频融合-CSDN博客文章浏览阅读1.5k次,点赞28次,收藏14次。将无人机视频与实景模型进行实时融合是一个涉及多个技术领域的复杂过程,主要包括无人机视频采集、实景模型构建、视频与模型…

MySQL通过binlog日志进行数据恢复

记录一次阿里云MySQL通过binlog日志进行数据回滚 问题描述由于阿里云远程mysql没有做安全策略 所以服务器被别人远程攻击把数据库给删除,通过查看binlog日志可以看到进行了drop操作,下面将演示通过binlog日志进行数据回滚操作。 1、查询是否开始binlog …

IDEA 修改格式化仅格式化本次改动代码

最近总是发现格式化的时候会格式化文件所有代码,提交Git 后再看提交日志,就很不清晰。修改方式如下 中文: 格式化代码快捷键[中文配置]: 英文: 格式化代码快捷键[英文配置]:

el-table ToggleRowSelection实现取消选中没效果(virtual-scroll)

场景: 就是在虚拟列表el-table选中之后 点击查询 默认之前选中的 现象: 就是实现选中, 但是无法去除勾选等等 问题发现: 看定位的数据 有多个一样的,我想着勾选之前 先去掉勾选 ,但是没效果或者说“相同的…

【含开题报告+文档+PPT+源码】基于微信小程序的点餐系统的设计与实现

开题报告 随着互联网技术的日益成熟和消费者生活水平与需求层次的显著提升,外卖点餐平台在中国市场上迅速兴起并深深植根于民众日常生活的各个角落。这类平台的核心在于构建了一个基于互联网的强大订餐服务系统,它无缝整合了餐饮商户资源与广大消费者的…

解决 MyBatis 中空字符串与数字比较引发的条件判断错误

问题复现 假设你在 MyBatis 的 XML 配置中使用了如下代码&#xff1a; <if test"isCollect ! null"><choose><when test"isCollect 1">AND exists(select 1 from file_table imgfile2 where task.IMAGE_SEQimgfile2.IMAGE_SEQ and im…

SpringBoot 手动实现动态切换数据源 DynamicSource (中)

大家好&#xff0c;我是此林。 SpringBoot 手动实现动态切换数据源 DynamicSource &#xff08;上&#xff09;-CSDN博客 在上一篇博客中&#xff0c;我带大家手动实现了一个简易版的数据源切换实现&#xff0c;方便大家理解数据源切换的原理。今天我们来介绍一个开源的数据源…

ASCII码简介以及在php中的使用

什么是 ASCII&#xff1f; ASCII&#xff08;American Standard Code for Information Interchange&#xff0c;美国信息交换标准代码&#xff09;是一种字符编码标准&#xff0c;用于在计算机、通信设备及其他设备中表示文字、符号和控制信息。它最早于 1963 年由美国国家标准…

前端学习一

一 进程与线程 线程是进程执行的最小单位&#xff0c;进程是系统分配任务的最小单位。 一个进程可执行最少一个线程。线程分为子线程和主线程。 主线程关闭则子线程关闭。 二 浏览器进程 浏览器是多进程多线程应用。 进程包括&#xff1a; 浏览器进程 负责程序交互渲染…

Go vendor

博主在编写Go代码时&#xff0c;遇到了这样一个问题&#xff1a;想要修改某个外部包&#xff0c;添加几个函数&#xff0c;而其余功能继续使用&#xff0c;经过调研&#xff0c;发现可以将Go的外部包源码复制到项目本地&#xff0c;对包的代码进行修改&#xff0c;从而达到目的…

EasyExcel 动态设置表格的背景颜色和排列

项目中使用EasyExcel把数据以excel格式导出&#xff0c;其中设置某一行、某一列单元格的背景颜色、排列方式十分常用&#xff0c;记录下来方便以后查阅。 1. 导入maven依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easy…

概率论得学习和整理23:EXCEL 数据透视表基础操作

目录 1 选择数据&#xff0c;插入数据透视表 2 选择数据透视表生成位置 3 出现了数据透视表的面板 4 数据透视表的基本结构认识 4.1 交叉表/列联表 4.2 row, column, cell 一个新增的筛选器&#xff0c;就这么简单 4.3 可以只添加 rowcell/值 &#xff0c;也可以colu…

计算机网络从诞生之初到至今的发展历程

前言 "上网"&#xff0c;相信大家对这个动词已经不再陌生&#xff0c;网 通常指的是网络&#xff1b;在 2024 年的今天&#xff0c;网络已经渗透到了每个人的生活中&#xff0c;成为其不可或缺的一部分&#xff1b;你此时此刻在看到我的博客&#xff0c;就是通过网络…

C# 读取EXCEL的数据批量插入单个PDF里的多个位置

C# 读取EXCEL的数据批量插入单个PDF里的多个位置 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; usin…

图论笔记1

1.1邻接矩阵储存法 //创建:二维数组vector<vector<int>> graph(n,vector<int>(n,0));//储存for(int i0;i<m;i){int x1,x2;cin>>x1>>x2;graph[x1-1][x2-1]1;}1.2邻接表储存法 补充&#xff1a;c中的list是链表 链接 //创建&#xff1a;数组…

GB28181系列三:GB28181流媒体服务器ZLMediaKit

我的音视频/流媒体开源项目(github) GB28181系列目录 目录 一、ZLMediaKit介绍 二、 ZLMediaKit安装、运行(Ubuntu) 1、安装 2、运行 3、配置 三、ZLMediaKit使用 一、ZLMediaKit介绍 ZLMediaKit是一个基于C11的高性能运营级流媒体服务框架&#xff0c;项目地址&#xf…