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 TO
        MASTER_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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uni-app实现小程序、H5图片轮播预览、双指缩放、双击放大、单击还原、滑动切换功能

前言 这次的标题有点长,主要是想要表述的功能点有点多; 简单做一下需求描述 产品要求在商品详情页的头部轮播图部分,可以单击预览大图,同时在预览界面可以双指放大缩小图片并且可以移动查看图片,双击放大&#xff0…

杭州乘云联合信通院发布《云计算智能化可观测性能力成熟度模型》

原文地址:杭州乘云联合中国信通院等单位正式发布《云计算智能化可观测性能力成熟度模型》标准 2024年12月3日,由全球数字经济大会组委会主办、中国信通院承办的 2024全球数字经济大会 云AI计算创新发展大会(2024 Cloud AI Compute Ignite&…

第6章图6.21-6.27-《分析模式》原图和UML图对比

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集

如何在谷歌浏览器中设置广告屏蔽

在数字时代,网络广告无处不在,虽然它们为网站提供了收入来源,但有时也会干扰我们的浏览体验。如果你正在寻找一种方法来减少这些干扰,那么在谷歌浏览器中设置广告屏蔽是一个不错的选择。本文将指导你完成这一过程,并简…

认识网络互联设备(二)

交换机 功能: (1)通过支持并行通信,提高交换机的信息吞吐量; (2)将传统的一个大局域网上的用户分若干工作组,每个端口连接一台设备或者连接一个工作组,有效的解决了拥塞情…

数据可视化-2. 条形图

目录 1. 条形图适用场景分析 1.1 比较不同类别的数据 1.2 展示数据分布 1.3 强调特定数据点 1.4 展示时间序列数据的对比 1.5 数据可视化教育 1.6 特定领域的应用 2. 条形图局限性 3. 条形图图代码实现 3.1 Python 源代码 3.2 条形图效果(网页显示&#…

AMBA-CHI协议详解(十二)

AMBA-CHI协议详解(一)- Introduction AMBA-CHI协议详解(二)- Channel fields / Read transactions AMBA-CHI协议详解(三)- Write transactions AMBA-CHI协议详解(四)- Other transac…

【MATLAB第109期】基于MATLAB的带置信区间的RSA区域敏感性分析方法,无目标函数

【MATLAB第108期】基于MATLAB的带置信区间的RSA区域敏感性分析方法,无目标函数 参考第64期文章【MATLAB第64期】【保姆级教程】基于MATLAB的SOBOL全局敏感性分析模型运用(含无目标函数,考虑代理模型) 创新点: 1、采…

《外国服务区加油站模型:功能与美观的完美结合 caotu66.com》

这个外国服务区加油站模型在设计上独具特色,兼具实用性和美观性。 从整体布局来看,加油站位于服务区的显眼位置。加油站的顶棚采用了现代风格的设计,顶棚的颜色主要是黄色和蓝色,色彩鲜明且具有辨识度。顶棚下方有多个加油柱&…

mybatis-plus超详细讲解

mybatis-plus (简化代码神器) 地址:https://mp.baomidou.com/ 目录 mybatis-plus 简介 特性 支持数据库 参与贡献 快速指南 1、创建数据库 mybatis_plus 2、导入相关的依赖 3、创建对应的文件夹 4、编写配置文件 5、编写代码 …

数据结构(顺序表)JAVA方法的介绍

前言 在 Java 中,集合类(Collections)是构建高效程序的核心组件之一,而 List 接口作为集合框架中的重要一员,是一个有序、可重复的元素集合。与 Set 接口不同,List 保证了元素的顺序性,并允许存…

泊松编辑 possion editing图像合成笔记

开源地址: GitHub - kono-dada/Reproduction-of-possion-image-editing 掩码必须是矩形框

【Flink-scala】DataStream编程模型之状态编程

DataStream编程模型之状态编程 参考: 1.【Flink-Scala】DataStream编程模型之数据源、数据转换、数据输出 2.【Flink-scala】DataStream编程模型之 窗口的划分-时间概念-窗口计算程序 3.【Flink-scala】DataStream编程模型之窗口计算-触发器-驱逐器 4.【Flink-scal…

Linux实操篇-远程登录/Vim/开机重启

目录 传送门前言一、远程登录1、概念2、ifconfig3、实战3.1、SSH(Secure Shell)3.2、VNC(Virtual Network Computing)3.3、RDP(Remote Desktop Protocol)3.4、Telnet(不推荐)3.5、FT…

【计算机网络】期末考试预习复习|上

作业讲解 物理层作业 共有4个用户进行CDMA通信。这4个用户的码片序列为: A: (–1 –1 –1 1 1 –1 1 1);B: (–1 –1 1 –1 1 1 1 –1) C: (–1 1 –1 1 1 1 –1 –1);D: (–1 1 –1 –1 –1 –1 1 –1) 现收到码片序列:(–1 1 –…

CTFHub-ssrf

技能树--Web--SSRF 内网访问 开启题目 尝试访问位于127.0.0.1的flag.php吧 进入环境 根据提示输入即可 127.0.0.1/flag.php 伪协议读取文件 开启题目 尝试去读取一下Web目录下的flag.php吧 进入环境,根据提示输入 file:///var/www/html/flag.php 鼠标右键查看…

解决PyTorch模型推理时显存占用问题的策略与优化

在将深度学习模型部署到生产环境时,显存占用逐渐增大是一个常见问题。这不仅可能导致性能下降,还可能引发内存溢出错误,从而影响服务的稳定性和可用性。本文旨在探讨这一问题的成因,并提供一系列解决方案和优化策略,以…

Java从入门到工作3 - 框架/工具

3.1、SpringBoot框架结构 在 Spring Boot 或微服务架构中,每个服务的文件目录结构通常遵循一定的约定。以下是一个常见的 Spring Boot 服务目录结构示例,以及各个文件和目录的简要说明: my-service │ ├── src │ ├── main │ │…

电子应用设计方案-56:智能书柜系统方案设计

智能书柜系统方案设计 一、引言 随着数字化时代的发展和人们对知识获取的需求增加,智能书柜作为一种创新的图书管理和存储解决方案,能够提供更高效、便捷和个性化的服务。本方案旨在设计一款功能齐全、智能化程度高的智能书柜系统。 二、系统概述 1. 系…

2024 年贵州技能大赛暨全省第二届数字技术应用职业技能竞赛“信息通信网络运行管理员”赛项--linux安全题

Linux操作系统渗透测试 Nmap -sS -p- ip 扫描 这题有俩种做法,一种用3306端口,另一种用48119端口 用48119端口是最简单的做法 nc 连接这个端口如何修改root密码 ssh连接 这样我们就成功的拿到root权限 1.通过本地PC中渗透测试平台Kali对服务器场景进…