

























Binlog(Binary Log) 是 MySQL 用来记录 数据库中所有“数据变更行为” 的日志文件。
核心一句话:
只要数据被“写过”,并且 binlog 开启,就一定能在 binlog 里找到痕迹。
INSERTUPDATEDELETECREATE / DROP TABLEALTER TABLEBEGIN / COMMIT❌ 不记录:
SELECT[mysqld]
# 开启 binlog
log-bin=mysql-bin
# 每台 MySQL 实例必须唯一
server-id = 1
# binlog 格式(推荐)
binlog_format = mixed
# binlog 自动过期天数
expire_logs_days = 10binlog_format 三种模式
| 模式 | 说明 | 是否推荐 |
|---|---|---|
| STATEMENT | 记录原始 SQL | ❌ 不安全 |
| ROW | 记录行变更 | ✅ 最安全 |
| MIXED | 自动选择 | ✅ 生产推荐 |
重启:
service mysqld restart
# 或
systemctl restart mysqld查看 binlog 是否启用
SHOW VARIABLES LIKE 'log_bin';
mysqlbinlogbinlog 是二进制,只能用这个工具解析
实战案例 排查 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-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.sqlmysql binlog执行无效 执行mysqlbinlog出现Found invalid event in binary log 错误
一般这种情况都是由于mysqlbinlog的版本和在用的mysql版本不一致造成的,需要指定mysqlbinlog路径执行
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。