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

推荐订阅源

腾讯CDC
IT之家
IT之家
有赞技术团队
有赞技术团队
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 【当耐特】
V
V2EX
Last Week in AI
Last Week in AI
H
Help Net Security
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
F
Fortinet All Blogs
I
InfoQ
宝玉的分享
宝玉的分享
A
About on SuperTechFans
MongoDB | Blog
MongoDB | Blog
Microsoft Azure Blog
Microsoft Azure Blog
Blog — PlanetScale
Blog — PlanetScale
B
Blog

博客园 - 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路径执行