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

MySQL Binlog 数据恢复全指南

MySQL Binlog 数据恢复全指南

一、Binlog 核心概念

1. 什么是 Binlog?

Binlog(二进制日志)是 MySQL 记录所有修改数据的 SQL 语句的日志文件,采用二进制格式存储。它是 MySQL 最重要的日志之一,具有三大核心功能:

  1. 数据恢复:通过重放日志恢复数据
  2. 主从复制:实现数据库集群的基础
  3. 数据审计:记录所有数据变更历史

2. 默认状态与检查

  • MySQL 8.0 默认开启 binlog 功能
  • 检查命令:
SHOW VARIABLES LIKE 'log_bin';
-- 返回 ON 表示已启用

二、Binlog 关键特性

1. 三种记录格式

格式类型记录内容优点缺点
STATEMENT原始SQL语句日志量小函数结果不一致
ROW行数据变更细节精确可靠日志量大
MIXED智能混合模式平衡选择仍有不确定性

2. 文件管理机制

  • 存储位置:数据目录(如 /var/lib/mysql
  • 命名规则mysql-bin.000001 递增编号
  • 自动轮转:达到 max_binlog_size(默认1GB)创建新文件
  • 过期清理:通过 binlog_expire_logs_seconds 控制保留时长

三、Binlog 恢复原理

1. 工作流程

  1. 事务提交时写入 binlog

  2. 先写入内存中的 binlog cache

  3. 根据

    sync_binlog
    

    配置刷盘

    • sync_binlog=1:每次提交都刷盘(最安全)
    • sync_binlog=0:依赖系统刷盘(性能最好)

2. 恢复必备条件

  1. binlog 功能已启用
  2. 知道误操作的大致时间或位置
  3. 有完整的 binlog 文件链
  4. 足够的磁盘空间存放恢复文件

四、完整恢复流程

1. 定位误操作位置

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000215 | grep -A 10 "DROP TABLE"

2. 生成恢复脚本

mysqlbinlog --no-defaults \--start-datetime="2025-06-08 09:00:00" \--stop-datetime="2025-06-08 09:30:00" \mysql-bin.000215 > recovery.sql

3. 执行恢复操作

mysql -u root -p --init-command="SET SESSION sql_log_bin=0" < recovery.sql

五、高级恢复技巧

1. 精确位置恢复

mysqlbinlog --no-defaults \--start-position=157 \--stop-position=1420 \mysql-bin.000215 | mysql -u root -p

2. 过滤特定数据库

mysqlbinlog --database=important_db mysql-bin.000215 | mysql -u root -p

3. 字符集处理

mysqlbinlog --set-charset=utf8mb4 mysql-bin.000215 | mysql -u root -p --default-character-set=utf8mb4

六、Undo Log 简略科普

1. 基本概念

Undo Log 是 InnoDB 引擎层的日志,主要功能:

  • 实现事务回滚(原子性)
  • 支持 MVCC 多版本并发控制
  • 记录数据修改前的状态

2. 与 Binlog 对比

  • 层级不同:Undo Log 是引擎层,Binlog 是 Server 层
  • 内容不同:Undo 记录物理变化,Binlog 记录逻辑变化
  • 用途不同:Undo 用于回滚,Binlog 用于恢复/复制

七、生产环境建议

  1. 配置建议

    [mysqld]
    log_bin = /var/lib/mysql/mysql-bin
    binlog_format = ROW
    sync_binlog = 1
    binlog_expire_logs_seconds = 604800  # 7天
    
  2. 监控指标

    • Binlog 文件增长速率
    • 磁盘空间使用率
    • 主从复制延迟
  3. 备份策略

    • 每日全量备份 + 实时 binlog 备份
    • 备份文件异地存储
    • 定期恢复演练

重要提示:Binlog 是数据安全的最后防线,建议至少保留7天的日志文件。对于核心业务系统,推荐配置 ROW 格式 + sync_binlog=1 的组合,虽然会轻微影响性能,但能最大限度保证数据安全。

相关文章:

MySQL Binlog 数据恢复全指南

MySQL Binlog 数据恢复全指南 一、Binlog 核心概念 1. 什么是 Binlog&#xff1f; Binlog&#xff08;二进制日志&#xff09;是 MySQL 记录所有修改数据的 SQL 语句的日志文件&#xff0c;采用二进制格式存储。它是 MySQL 最重要的日志之一&#xff0c;具有三大核心功能&am…...

python版若依框架开发:后端开发规范

python版若依框架开发 从0起步,扬帆起航。 python版若依部署代码生成指南,迅速落地CURD!项目结构解析前端开发规范后端开发规范文章目录 python版若依框架开发1.启动命令2.配置⽂件3.上传配置1.启动命令 本项⽬⾃定义了两个启动命令 pyhton app.py --env=devpython app.p…...

Linux编程:2、进程基础知识

一、进程基本概念 1、进程与程序的区别 程序&#xff1a;静态的可执行文件&#xff08;如电脑中的vs2022安装程序&#xff09;。进程&#xff1a;程序的动态执行过程&#xff08;如启动后的vs2022实例&#xff09;&#xff0c;是操作系统分配资源的单位&#xff08;如 CPU 时…...

时序数据库IoTDB与EdgeX Foundry集成适配服务介绍

一、背景介绍 ‌EdgeX Foundry‌&#xff1a;由Linux基金会运维的开放源码边缘计算软件框架&#xff0c;自2017年开源后广泛应用于全球各行业场景。VMware自2018年起在中国社区推广EdgeX技术&#xff0c;拓展生态&#xff0c;并持续贡献代码。‌IoTDB‌&#xff1a;由Apache基…...

Android第十二次面试-多线程和字符串算法总结

多线程的创建与常见使用方法 ​一、多线程创建方式​ ​1. 继承Thread类​ class MyThread extends Thread {Overridepublic void run() {// 线程执行逻辑System.out.println(Thread.currentThread().getName() " is running");} }// 使用 MyThread thread new …...

ES6——数组扩展之Set数组

在ES6&#xff08;ECMAScript 2015&#xff09;中&#xff0c;JavaScript的Set对象提供了一种存储任何值唯一性的方式&#xff0c;类似于数组但又不需要索引访问。这对于需要确保元素唯一性的场景非常有用。Set对象本身并不直接提供数组那样的方法来操作数据&#xff08;例如ma…...

Cursor Rules 使用

前言 最近在使用 Cursor 进行编程辅助时&#xff0c;发现 AI 生成的代码风格和当前的代码风格大相径庭。而且有时它会输出很奇怪的代码&#xff0c;总是不符合预期。 遂引出本篇&#xff0c;介绍一下 Rules &#xff0c;它就可以做一些规范约束之类的事情。 什么是 Cursor R…...

服务器数据恢复—服务器raid5阵列崩溃如何恢复数据?

服务器数据恢复环境&故障&#xff1a; 某品牌型号为X3850服务器上有一组由14块数据盘和1块热备盘组建的raid5磁盘阵列。 服务器在正常使用过程中突然崩溃&#xff0c;管理员查看raid5阵列故障情况的时发现磁盘阵列中有2块硬盘掉线&#xff0c;但是热备盘没有启用。 服务器数…...

Go语言堆内存管理

Go堆内存管理 1. Go内存模型层级结构 Golang内存管理模型与TCMalloc的设计极其相似。基本轮廓和概念也几乎相同&#xff0c;只是一些规则和流程存在差异。 2. Go内存管理的基本概念 Go内存管理的许多概念在TCMalloc中已经有了&#xff0c;含义是相同的&#xff0c;只是名字有…...

【DAY41】简单CNN

内容来自浙大疏锦行python打卡训练营 浙大疏锦行 知识点&#xff1a; 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常…...

Rust 学习笔记:使用自定义命令扩展 Cargo

Rust 学习笔记&#xff1a;使用自定义命令扩展 Cargo Rust 学习笔记&#xff1a;使用自定义命令扩展 Cargo Rust 学习笔记&#xff1a;使用自定义命令扩展 Cargo Cargo 支持通过 $PATH 中的 cargo-something 形式的二进制文件拓展子命令&#xff0c;而无需修改 Cargo 本身。 …...

LeetCode 08.06 面试题 汉诺塔 (Java)

经典递归解决汉诺塔问题&#xff1a;清晰的三步移动策略 问题描述 在汉诺塔问题中&#xff0c;有 3 根柱子和 N 个大小不同的盘子&#xff0c;盘子初始按升序堆叠在第一根柱子上&#xff08;最小的在顶部&#xff09;。目标是将所有盘子移动到第三根柱子上&#xff0c;并满足…...

使用MinIO搭建自己的分布式文件存储

目录 引言&#xff1a; 一.什么是 MinIO &#xff1f; 二.MinIO 的安装与部署&#xff1a; 三.Spring Cloud 集成 MinIO&#xff1a; 1.前提准备&#xff1a; &#xff08;1&#xff09;安装依赖&#xff1a; &#xff08;2&#xff09;配置MinIO连接&#xff1a; &…...

单元测试与QTestLib框架使用

一.单元测试的意义 在软件开发中&#xff0c;单元测试是指对软件中最小可测试单元&#xff08;通常是函数、类的方法&#xff09;进行隔离的、可重复的验证。进行单元测试具有以下重要意义&#xff1a; 1.提升代码质量与可靠性&#xff1a; 早期错误检测&#xff1a; 在开发…...

java面试场景题:QPS 短链系统怎么设计

以下是对文章的润色版本&#xff1a; 这道场景设计题&#xff0c;初看似乎业务简单&#xff0c;实则覆盖的知识点极为丰富&#xff1a; 高并发与高性能分布式 ID 生成机制&#xff1b;Redis Bloom Filter——高并发、低内存损耗的过滤组件知识&#xff1b;分库、分表海量数据存…...

java面试场景提题:

以下是润色后的文章&#xff0c;结构更清晰&#xff0c;语言更流畅&#xff0c;同时保留了技术细节&#xff1a; 应对百倍QPS增长的系统设计策略 整体架构设计思路 面对突发性百倍QPS增长&#xff0c;系统设计需从硬件、架构、代码、数据四个维度协同优化&#xff1a; 硬件层…...

K7 系列各种PCIE IP核的对比

上面三个IP 有什么区别&#xff0c;什么时候用呢&#xff1f; 7 series Integrated Block for PCIE AXI Memory Mapped to PCI Express DMA subsystem for PCI Express 特点 这是 Kintex-7 内置的 硬核 PCIe 模块。部分事务层也集成在里面&#xff0c;使用标准的PCIE 基本没…...

natapp 内网穿透失败

连不上网络错误调试排查详解 - NATAPP-内网穿透 基于ngrok的国内高速内网映射工具 如何将DNS服务器修改为114.114.114.114_百度知道 连不上/错误信息等问题解决汇总 - NATAPP-内网穿透 基于ngrok的国内高速内网映射工具 nslookup auth.natapp.cnping auth.natapp.cn...

深入解析CI/CD开发流程

引言&#xff1a;主播最近实习的时候发现部门里面使用的是CI/CD这样的集成开发部署&#xff0c;但是自己不是太了解什么意思&#xff0c;所以就自己查了一下ci/cd相关的资料&#xff0c;整理分享了一下 一、CI/CD CI/CD是持续集成和持续交付部署的缩写&#xff0c;旨在简化并…...

Docke启动Ktransformers部署Qwen3MOE模型实战与性能测试

docker运行Ktransformers部署Qwen3MOE模型实战及 性能测试 最开始拉取ktransformers:v0.3.1-AVX512版本&#xff0c;发现无论如何都启动不了大模型&#xff0c;后来发现是cpu不支持avx512指令集。 由于本地cpu不支持amx指令集&#xff0c;因此下载avx2版本镜像&#xff1a; …...

应用分享 | 精准生成和时序控制!AWG在确定性三量子比特纠缠光子源中的应用

在量子技术飞速发展的今天&#xff0c;实现高效稳定的量子态操控是推动量子计算、量子通信等领域迈向实用化的关键。任意波形发生器&#xff08;AWG&#xff09;作为精准信号控制的核心设备&#xff0c;在量子实验中发挥着不可或缺的作用。丹麦哥本哈根大学的研究团队基于单个量…...

相机--相机标定实操

教程 camera_calibration移动画面示例 usb_cam使用介绍和下载 标定流程 单目相机标定 我使用的是USB相机&#xff0c;所以直接使用ros的usb_cam功能包驱动相机闭关获取实时图像&#xff0c;然后用ros的camera_calibration标定相机。 1,下载usb_cam和camera_calibration: …...

深入理解汇编语言中的顺序与分支结构

本文将结合Visual Studio环境配置、顺序结构编程和分支结构实现&#xff0c;全面解析汇编语言中的核心编程概念。通过实际案例演示无符号/有符号数处理、分段函数实现和逻辑表达式短路计算等关键技术。 一、汇编环境配置回顾&#xff08;Win32MASM&#xff09; 在Visual Studi…...

DAY43 复习日

浙大疏锦行-CSDN博客 kaggle找到一个图像数据集&#xff0c;用cnn网络进行训练并且用grad-cam做可视化 进阶&#xff1a;把项目拆分成多个文件 src/config.py: 用于存放项目配置&#xff0c;例如文件路径、学习率、批次大小等。 # src/config.py# Paths DATA_DIR "data…...

【仿生机器人】仿生机器人智能架构:从感知到个性的完整设计

仿生机器人智能架构&#xff1a;从感知到个性的完整设计 仿生机器人不仅需要模拟人类的外表&#xff0c;更需要具备类人的认知、情感和个性特征。本研究提出了一个综合性的软件架构&#xff0c;实现了从环境感知到情感生成、从实时交互到人格塑造的完整智能系统。该架构突破了…...

【业务框架】3C-相机-Cinemachine

概述 插件&#xff0c;做相机需求&#xff0c;等于相机老师傅多年经验总结的工具 Feature Transform&#xff1a;略Control Camera&#xff1a;控制相机参数Noise&#xff1a;增加随机性Blend&#xff1a;CameraBrain的混合列表指定一个虚拟相机到另一个相机的过渡&#xff…...

【Auto.js例程】华为备忘录导出到其他手机

目录 问题描述方法步骤1.安装下载Visual Studio Code2.安装扩展3.找到Auto.js插件&#xff0c;并安装插件4.启动服务器5.连接手机6.撰写脚本并运行7.本文实现功能的代码8.启动手机上的换机软件 问题描述 问题背景&#xff1a;华为手机换成一加手机&#xff0c;华为备忘录无法批…...

单片机的低功耗模式

什么是低功耗&#xff1f; STM32的低功耗&#xff08;low power mode&#xff09;特性是其嵌入式处理器系列的一个重要优势&#xff0c;特别适用于需要长时间运行且功耗敏感的应用场景&#xff0c;如便携式设备、物联网设备、智能家居系统等。 在很多应用场合中都对电子设备的…...

架构师级考验!飞算 JavaAI 炫技赛:AI 辅助编程解决老项目难题

当十年前 Hibernate 框架的 N1 查询隐患在深夜持续困扰排查&#xff0c;当 SpringMVC 控制器中错综复杂的业务逻辑在跨语言迁移时令人抓狂&#xff0c;企业数字化进程中的百万行老系统&#xff0c;已然成为暗藏危机的 “技术债冰山”。而此刻&#xff0c;飞算科技全新发布的 Ja…...

手机端抓包大麦网抢票协议:实现自动抢票与支付

&#x1f680; 手机端抓包大麦网抢票协议&#xff1a;实现自动抢票与支付 &#x1f680; &#x1f525; 你是否还在为抢不到热门演出票而烦恼&#xff1f;本文将教你如何通过抓包技术获取大麦网抢票协议&#xff0c;并编写脚本实现自动化抢票与支付&#xff01;&#x1f525; …...