皖icp合肥网站建设/网络营销服务公司有哪些

皖icp合肥网站建设,网络营销服务公司有哪些,成都在线制作网站,中国装修建材网Binlog(Binary Log,归档日志) 为什么需要 Binlog? Binlog 是 MySQL 中的二进制日志,用于记录数据库的所有写操作(INSERT、UPDATE、DELETE 等) 1. 主从复制 作用:是 MySQL 主从复…

Binlog(Binary Log,归档日志)

为什么需要 Binlog?

  • Binlog 是 MySQL 中的二进制日志,用于记录数据库的所有写操作(INSERTUPDATEDELETE 等)

1. 主从复制

  • 作用:是 MySQL 主从复制的核心,主库将 Binlog 发送给从库,从库重放这些操作以保持数据同步。
  • 场景:读写分离、负载均衡和高可用性。

2. 数据恢复

  • 作用:Binlog 记录了所有写操作,可用于数据丢失时或误操作时恢复数据。
  • 场景:通过回放 Binlog,可将数据库恢复到特点时间点或事务点。

3. 审计

  • 作用:Binlog 记录了所有写操作的详细信息,可用于审计数据库变更。
  • 场景:追踪数据变更历史,满足合规要求。

4. 增量备份(只备份从上次备份以来发生变化的数据)

  • 作用:Binlog 用于增量备份,减少备份时间和存储空间。
  • 场景:定期备份 Binlog,结合全量备份实现高校数据恢复。

5. 数据同步

  • 作用:Binlog可用于将数据同步到其他系统,如数据仓库或缓存。
  • 场景:保持不同系统间的数据一致性。

Binlog 是什么?

1. 适用对象

  • Binlog 是 MySQL 的 Server 层实现的日志,所有存储引擎都可使用。

2. Binlog 的内容(记录逻辑操作)

  • 事件类型:如 INSERTUPDATEDELETEDDL(如 CREATE TABLE)等。
  • 操作数据:受影响的行数据(旧值和新值)。
  • 事务信息:事务的开始和提交时间、事务 ID 等。
  • 时间戳:操作发生的时间。

3. Binlog 的格式

Statement-Based(基于语句)
  • 记录实际的 SQL 语句(逻辑操作)。
  • 优点:日志文件小,记录简单。
  • 缺点:动态函数不一致问题(如 UUID()NOW()等),导致主从不一致。

Row-Based(基于行)
  • 记录每一行数据的变更(旧值和新值)。
  • 优点:数据一致性高,适合复杂操作。
  • 缺点:日志文件较大。

Mixed【默认】(混合模式)
  • 根据情况进行选择,自动切换到另外两种模式。
  • 平衡了数据一致性与日志大小。

4. Binlog 的写入方式

追加写
  • 写满一个文件,就创建一个新文件继续写,不会覆盖之前的记录,保存的是全量日志。
对比 Redo Log 的循环写,为什么 Binlog 采用追加写?
  • Redo Log 目的保证事务持久性崩溃恢复,只记录未写入磁盘的数据和物理日志,是事务级别的写入,已经刷入磁盘的数据不进行擦除会浪费空间。
  • Binlog 的目的是主从复制和备份恢复,是语句(或行)级别的写入,采用追加写,追加写的方式保证了日志的持续性和历史性,不会因为日志满了而覆盖掉有用的数据。用户通常需要依赖Binlog来回溯数据库的操作历史。

Binlog 实现主从复制

MySQL 的主从复制依赖于 Binlog,即记录 MySQL 上所有变化并以二进制形式保存在磁盘上,复制的过程是将 Binlog 中的数据从主库传输到从库上。且这个过程一般是异步的——主库上执行事务操作的线程不会等待复制 Binlog 的线程同步完成。

在完成主从复制后,就可以实现主写从读的模式了,这样即使写请求会锁表或者锁记录,也不会影响读请求的执行。

1. Binlog 主从复制过程

1.1. 写入 Binlog
  • 主库写 Binlog 日志,并以两阶段提交的方式提交事务,并更新本地缓存。
  • 详细过程:MySQL 主库在收到客户端提交事务的请求后,先写入 Binlog,再提交事务,更新存储引擎中的数据,事务提交完成后,返回给客户端“操作成功”的响应。

1.2. 同步 Binlog
  • 把 Binlog 复制到所有从库中,每个从库把 Binlog 写到暂存日志中。
  • 详细过程:从库创建一个特定的 I/O 线程,连接主库的 log dump 线程,来接收主库的 Binlog 日志,再把 Binlog 信息写入 Relay Log 的中继日志里,再返回给主库“复制成功”的响应。

1.3. 回放 Binlog
  • 回放 Binlog,并更新存储引擎中的数据。
  • 详细过程:从库创建一个用于回放 Binlog 的线程,去读 Relay Log 中继日志,然后回放 Binlog 更新存储引擎中的数据,最终实现主从的数据一致性。

2. 从库是不是越多越好?

  • 不是的,从库的数量增加,从库连接的 I/O 线程也会增加,主库也要创建同样多的 log dump 线程处理复制的请求,对主库资源消耗增高,同时也受限于主库的网络带宽
  • 所以实际中,1 个主库一般跟 2~3 个从库(1 主 2 从 1 备),即一主多从 MySQL 集群结构。

3. MySQL 主从复制模型

3.1. 同步复制
  • MySQL 主库提交事务的线程要等待所有从库的复制成功响应,才返回客户端结果,在实际项目中基本不用。
  • 缺点:性能差;可用性差——主库和所有从库任何一个数据库出问题,都会影响业务。

3.2. 异步复制(默认模型)
  • MySQL 主库提交事务的线程并不会等待 Binlog 同步到各从库,就返回客户端。
  • 缺点:一旦主库宕机,数据就会丢失。

3.3. 半同步复制(MySQL 5.7 以后)
  • 介于同步与异步复制之间,事务线程不用等待所有从库复制成功响应,只要一部分复制成功响应就可以返回客户端结果。
  • 优点:兼顾了同步与异步复制的优点,即使主库宕机,至少有一个从库有最新的数据,且性能也很好。

Binlog 持久化过程

1. Binlog Cache

  • Binlog Cache—线程缓冲区:MySQL 给每个线程分配一片内存区域用于缓冲 Binlog,即 Binlog Cache,参数 binlog_cache_size 用于控制单个线程内 Binlog Cache 所占内存的大小,若超过了这个参数,则暂存到磁盘中。
  • 先写入 Binlog Cache:事务执行时,先将日志写到 Binlog Cache(Server 层的 cache),事务提交时,再将 Binlog Cache 写到 Binlog 文件中。
  • 事务的串行执行:当一个线程开始执行一个新事务(通过 BEGINSTART TRANSACTION)时,MySQL 会确保该线程之前的事务(如果有)已经提交或回滚。也就是说,一个线程不能同时并行执行多个事务。
  • Binlog 的写入原子性:由于一个线程在同一时间只能处理一个事务,因此该事务的 Binlog 日志必须保证一次性完整写入,而不能拆分为多个,即 Binlog 需要保证事务的原子性:一个事务的所有操作要么全部生效,要么全部不生效。如果不保证 Binlog 的原子性,从库在重放时,可能会将拆分后的日志当作多个独立的事务执行,破坏了主库事务的原子性。

2. 持久化过程

每个线程将缓冲在 Binlog Cache 中的日志文件,最终写到同一个 Binlog 文件。

  • write:将日志写入到 Binlog 文件(OS 中的 page cache 中),但未持久化到磁盘,因为不涉及磁盘 I/O 操作,write 的写入速度很快。
  • fsync:将数据持久化到磁盘中,因涉及磁盘 I/O 操作,写入较慢,故频繁 fsync 会导致磁盘 I/O 升高。

3. sync_binlog 参数——控制 MySQL 的 Binlog 刷盘频率

  • = 0 时(默认):每次提交事务时,只 write,不 fsync,后续由 OS 择机将数据持久化到磁盘。
    • 性能:最好。
    • 风险:最大,一旦发生异常重启,还未持久化到磁盘中的数据就会全部丢失。
  • = 1 时:每次提交事务时,先 write,后马上执行 fsync
    • 性能:最差。
    • 风险:最小,即使异常重启,最多丢失一个事务的 Binlog。
  • = N(N > 1)时:每次提交事务时,都 write,积累 N 个事务后再 fsync
    • 性能与风险都适中,可以根据系统进行特定配置,一般的设置范围: 100 ~ 1000。

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

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

相关文章

进程的介绍--进程状态/切换

1.冯 • 诺依曼体系结构 1.1 体系结构 冯•诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。数学家冯•诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑、程序存储执行以及计算机由五个部分组成&#x…

Python开源项目月排行 2025年1月

#2025年1月2025年2月2日1DeepSeek-R1当红炸子鸡,国人之骄傲!项目于 2025 年 1 月 20 日正式发布。早期的预览版(如 DeepSeek-R1-Lite-Preview)则在 2024 年 11 月 20 日亮相。 用途:DeepSeek-R1 是一个开源的推理模型&…

yolov8改进:efficientViT替换YOLOV8主干网络结构

6.1 efficientViT替换YOLOV8主干网络结构 6.1.1 effivientvit EfficientViT 的架构特点 EfficientViT 是一种结合了 Transformer 和卷积网络优点的轻量级模型,它的设计目标是高效地提取图像特征,同时减少计算量。以下是它的关键组成部分: …

Android Studio安装配置及运行

一、下载Android Studio 官网下载:下载 Android Studio 和应用工具 - Android 开发者 | Android Developers 跳转到下载界面,选择同意条款,并点击下载,如图: 二、详细安装 双击下载的文件 三、配置Android Studio …

OpenHarmony分布式数据管理子系统

OpenHarmony分布式数据管理子系统 简介 目录 组件说明 分布式数据对象数据共享分布式数据服务Key-Value数据库首选项关系型数据库标准数据化通路 相关仓 简介 子系统介绍 分布式数据管理子系统支持单设备的各种结构化数据的持久化,以及跨设备之间数据的同步、…

智能算法如何优化数字内容体验的个性化推荐效果

内容概要 在数字内容体验的优化过程中,个性化推荐系统的核心价值在于通过数据驱动的技术手段,将用户需求与内容资源进行高效匹配。系统首先基于用户行为轨迹分析,捕捉包括点击频次、停留时长、交互路径等关键指标,形成对用户兴趣…

超简单理解KMP算法(最长公共前后缀next数组、合并主子串、子串偏移法)

KMP算法理解 最长公共前后缀next合并主子串子串偏移 参考b站:子串偏移、合并主子串 最长公共前后缀next 这个概念是一个trick,帮助我们记录遍历了一遍的数组的相似特性,想出来确实很nb,我也不理解逻辑是怎么想出来的。 字符串的…

github 怎么创建一个私有repository 并从另外一台电脑拉取下来更新

1.github上新建一个repository 设置为private tips删除在这 点setting 然后往下拖动 会有个这里是用来删项目的 2.另外 一台电脑拉取这个repository的时候 需要配置 一个ssh key 这个key的内容生成参考本地电脑的生成 然后在这配置 2.1 生成 SSH 密钥(如果还没有…

LangChain 技术入门指南:探索语言模型的无限可能

在当今的技术领域,LangChain 正逐渐崭露头角,成为开发语言模型应用的强大工具。如果你渴望深入了解并掌握这一技术,那么就跟随本文一起开启 LangChain 的入门之旅吧! (后续将持续输出关于LangChain的技术文章,有兴趣的同学可以关注…

小米手环7屏幕脱胶维修

前言 本文仅用于记录维修过程,如有不对请指出,非常感谢! 参考视频 https://www.bilibili.com/video/BV1wV4y1H71N/?vd_sourcec887ed704029330114b8b207d8164686 胶水链接 常见的T-8000胶水,随便挑了一个送皮筋的 https://d…

自注意力机制和CNN的区别

CNN:一种只能在固定感受野范围内进行关注的自注意力机制。​CNN是自注意力的简化版本。自注意力:具有可学习感受野的CNN。自注意力是CNN的复杂形态,是更灵活的CNN,经过某些设计就可以变为CNN。 越灵活、越大的模型,需要…

上帝之眼——nmap

nmap介绍 Nmap(网络映射器)是一款广受欢迎的网络探测和安全评估工具,被誉为“上帝之眼”。它以其强大的扫描功能和广泛的应用场景,成为系统管理员和安全专家手中的得力助手。本文将对Nmap进行详细介绍,包括其优点、基本…

Spring Boot 整合 log4j2 日志配置教程

文章目录 前言一、常用日志框架二、配置参数介绍 1. 日志级别2. 输出形式3. 日志格式 3.1 PatternLayout 自定义日志布局 三、Log4j2 配置详解 1. 根节点 Configuration2. Appenders 节点 2.1 Console 节点2.2 File 节点2.3 RollingFile 节点 2.3.1 ThresholdFilter 节点2.3.…

MySQL八股学习笔记

文章目录 一、MySQL结构1.宏观结构1.1.Server层1.2.存储引擎层 2.建立链接-连接器3.查询缓存4.解析SQL-解析器(1)词法分析(2)语法分析 5.执行SQL5.1.预处理器 prepare5.2.优化器 optimize5.3.执行器 execute(1&#xf…

leetcode876.链表的中间结点

目录 问题描述示例提示 具体思路思路一 代码实现 问题描述 给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 题目链接:链表的中间结点 示例 提示 链表的结点数范围是 [1, 100]   1 &…

SpringBoot整合Redis和Redision锁

参考文章 1.Redis 1.导入依赖 <!--Redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.c…

C++笔记之标准库中的std::copy 和 std::assign 作用于 std::vector

C++笔记之标准库中的std::copy 和 std::assign 作用于 std::vector code review! 文章目录 C++笔记之标准库中的std::copy 和 std::assign 作用于 std::vector1. `std::copy`1.1.用法1.2.示例2.`std::vector::assign`2.1.用法2.2.示例3.区别总结4.支持assign的容器和不支持ass…

C# 背景 透明 抗锯齿 (效果完美)

主要是通过 P/Invoke 技术调用 Windows API 函数 gdi32.dll/user32.dll&#xff0c;同时定义了一些结构体来配合这些 API 函数的使用&#xff0c;常用于处理图形绘制、窗口显示等操作。 运行查看效果 局部放大&#xff0c;抗锯齿效果很不错,尾巴毛毛清晰可见。 using System; u…

前端常见面试题-2025

vue4.0 Vue.js 4.0 是在 2021 年 9 月发布。Vue.js 4.0 是 Vue.js 的一个重要版本&#xff0c;引入了许多新特性和改进&#xff0c;旨在提升开发者的体验和性能。以下是一些关键的更新和新特性&#xff1a; Composition API 重构&#xff1a;Vue 3 引入了 Composition API 作为…

【工具插件类教学】实现运行时2D物体交互的利器Runtime2DTransformInteractor

目录 ​编辑 1. 插件核心功能 1.1 基础变换操作 1.2 高级特性 2. 安装与配置 2.1 导入插件 2.2 配置控制器参数 2.3 为物体添加交互功能 3. 使用示例 3.1 基础操作演示 3.2 多选与批量操作 3.3 自定义光标与外观 4. 高级配置技巧 4.1 动态调整包围框控件尺寸 4.…