惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
爱范儿
爱范儿
GbyAI
GbyAI
博客园 - 叶小钗
Last Week in AI
Last Week in AI
Jina AI
Jina AI
Microsoft Security Blog
Microsoft Security Blog
云风的 BLOG
云风的 BLOG
C
Check Point Blog
H
Help Net Security
P
Proofpoint News Feed
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
大猫的无限游戏
大猫的无限游戏
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog RSS Feed
Y
Y Combinator Blog
U
Unit 42
T
Tailwind CSS Blog
MyScale Blog
MyScale Blog
N
Netflix TechBlog - Medium
S
SegmentFault 最新的问题
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - LungGiyo

Windows Codex 桌面版与 VSCode Codex 双账号隔离教程 frp 教程 nginx 跨域解决 001 局域网其他电脑也能访问wsl服务 001 nvm 管理不同版本的 node 与 npm 关于IP送中的影响和解决办法 Antigravity google ai 接入高德MCP 1.3.2 git使用ssh密钥 连接远程仓库 dynadot域名 托管到cloudflare , 使用cloudflare 的CDN功能 Django 项目开发整体步骤(0 开始)+进阶 磊科N60Pro刷机 uni的页面解析 前端技术知识扫盲篇 使用 Lucky 为群晖 / 极空间 NAS 全服务启用 HTTPS 安全访问 00 docker 命令总结 001 Python 基础 麒麟系统升级openssh至openssh-10.0p1 零信任访问控制系统aTrust 蓝屏 Python PyInstaller 打包、Pyarmor加密等 001 安装wsl 2 && 开启 WSL2 Oxidized的model
003 二进制日志-binlog
LungGiyo · 2026-01-08 · via 博客园 - LungGiyo

Binlog(Binary Log) 是 MySQL 用来记录 数据库中所有“数据变更行为” 的日志文件。

核心一句话:

只要数据被“写过”,并且 binlog 开启,就一定能在 binlog 里找到痕迹。

Binlog 会记录:

  • INSERT
  • UPDATE
  • DELETE
  • CREATE / DROP TABLE
  • ALTER TABLE
  • 事务的 BEGIN / COMMIT

❌ 不记录

  • SELECT
  • 纯查询操作
  • 内存计算

Binlog 的核心用途

主从复制(Replication)

  • 从库通过 binlog 同步主库的数据变更

数据恢复(Point-in-Time Recovery)

  • 通过 全量备份 + binlog 恢复到任意时间点

安全审计 / 事后追责(非常重要)

  • 查清楚:比如查看什么时候修改了哪条记录。

开启 MySQL Binlog(重启 MySQL 生效)

[mysqld]
# 开启 binlog
log-bin=mysql-bin

# 每台 MySQL 实例必须唯一
server-id = 1

# binlog 格式(推荐)
binlog_format = mixed

# binlog 自动过期天数
expire_logs_days = 10

binlog_format 三种模式

模式说明是否推荐
STATEMENT记录原始 SQL❌ 不安全
ROW记录行变更✅ 最安全
MIXED自动选择生产推荐

重启:

service mysqld restart
# 或
systemctl restart mysqld

查看 binlog 是否启用

SHOW VARIABLES LIKE 'log_bin';

查看 Binlog 的官方工具:mysqlbinlog

binlog 是二进制,只能用这个工具解析

实战案例 排查 t_syspara.customer_service_url 被篡改

导出完整 Binlog 为可读 SQL, 不要加“--database” 参数,否则会导致漏掉事务的可能。

/www/server/mysql/bin/mysqlbinlog   /www/server/data/mysql-bin.000015  > /tmp/mall_binlog_000015.sql

快速定位目标表 t_syspara

 grep -ni "t_syspara" /tmp/mall_binlog_000015.sql

假设要查看 行号 3225984 的数据。

导出完整事务上下文。

 sed -n $((3225984-200)),$((3225984+200))p /tmp/mall_binlog_000015.sql > /tmp/t_syspara_customer_service_url_context.sql

binlog日志转存伪SQL:

-V, --version  mysqlbinlog的版本信息

binlog文件读取的起始时间点  --start-datetime="2017-08-16 10:00:00"

binlog文件读取的结束时间点 --stop-datetime="2017-08-16 15:00:00" 

binlog输出语句的base64解码  --base64-output=decode-rows

        decode-rows:这个选项将把基于行的事件解码成一个SQL语句,特别是当指定-verbose选项时使用解码行事件到带注释的伪SQL语句,如下所示。

        mysqlbinlog --base64-output=decode-rows --verbose mysqld-bin.000001

重新构建伪SQL语句的行信息输出,-v -v会增加列类型的注释信息。-v, --verbose 

 --no-defaults 选项   修复utf8mb4选项带来的在mysqlbinlog查看binlog时会报错问题

mysqlbinlog.exe 
--no-defaults 
--base64-output=decode-rows 
-v 
--start-datetime="2021-04-20 11:41:15" 
--stop-datetime="2021-04-20 11:41:20" 
D:\Download\mysql-bin.000289   > D:\Download\test4.txt\
mysqlbinlog --no-defaults --base64-output=decode-rows -v 
--start-datetime="2021-05-13 09:00:00" --stop-datetime="2021-05-13 09:10:00"  
mysql-bin.00001 > 566.sql

mysql binlog执行无效 执行mysqlbinlog出现Found invalid event in binary log 错误

一般这种情况都是由于mysqlbinlog的版本和在用的mysql版本不一致造成的,需要指定mysqlbinlog路径执行