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

mysqlbinlog用法详解

mysqlbinlog 是 MySQL 提供的用于解析和查看二进制日志(binlog)的工具。二进制日志记录了数据库的所有数据变更操作(如 INSERT、UPDATE、DELETE),常用于数据恢复、主从复制等场景。以下是 mysqlbinlog 的详细用法:


1. 基本语法

mysqlbinlog [options] log_file1 log_file2 ...

2. 常见选项

选项说明
--read-from-remote-server 或 -R从远程 MySQL 服务器读取 binlog(需指定 -h-u-p
--start-datetime="YYYY-MM-DD HH:MM:SS"解析从指定时间开始的 binlog
--stop-datetime="YYYY-MM-DD HH:MM:SS"解析到指定时间结束的 binlog
--start-position=N从 binlog 的某个位置(position)开始解析
--stop-position=M解析到某个位置(position)结束
--database=db_name 或 -d db_name仅显示指定数据库的操作
--base64-output=decode-rows解码行事件(ROW 格式的 binlog)
--verbose 或 -v显示更详细的信息(如 SQL 语句)
--result-file=filename 或 -r filename将解析结果输出到文件
--skip-gtids忽略 GTID 信息
--include-gtids=gtid_set仅包含指定 GTID 的事件
--exclude-gtids=gtid_set排除指定 GTID 的事件

3. 基本用法

(1) 查看本地 binlog 文件
mysqlbinlog mysql-bin.000001
(2) 从远程服务器读取 binlog
mysqlbinlog -h remote_host -u user -p password \--read-from-remote-server mysql-bin.000001
(3) 按时间范围过滤
mysqlbinlog --start-datetime="2023-10-01 00:00:00" \--stop-datetime="2023-10-02 23:59:59" mysql-bin.000001
(4) 按位置范围过滤
mysqlbinlog --start-position=12345 --stop-position=67890 mysql-bin.000001
(5) 仅显示某个数据库的操作
mysqlbinlog --database=my_database mysql-bin.000001

4. 恢复数据

通过 mysqlbinlog 解析 binlog 并执行 SQL 恢复数据:

(1) 输出到 SQL 文件
mysqlbinlog mysql-bin.000001 > recovery.sql
(2) 直接执行恢复
mysqlbinlog mysql-bin.000001 | mysql -u root -p
(3) 恢复特定时间段的数据
mysqlbinlog --start-datetime="2023-10-01 00:00:00" \--stop-datetime="2023-10-01 23:59:59" mysql-bin.000001 | mysql -u root -p

5. 高级用法

(1) 解码行事件(ROW 格式)

MySQL 的 ROW 格式 binlog 默认以 Base64 编码存储,需解码查看:

mysqlbinlog --base64-output=decode-rows -vv mysql-bin.000001
(2) 解析 GTID 事件

若启用了 GTID,可过滤特定事务:

mysqlbinlog --include-gtids="3a11b111-2222-3333-4444-555555555555:1-100" mysql-bin.000001
(3) 跳过某些 GTID 事件
mysqlbinlog --exclude-gtids="3a11b111-2222-3333-4444-555555555555:50-60" mysql-bin.000001

6. 实际应用示例

(1) 恢复误删除的数据

假设误删发生在 2023-10-01 10:00:00 到 2023-10-01 10:05:00

mysqlbinlog --start-datetime="2023-10-01 10:00:00" \--stop-datetime="2023-10-01 10:05:00" mysql-bin.000001 > recovery.sql

检查 recovery.sql 确认无误后执行:

mysql -u root -p < recovery.sql
(2) 主从复制初始化

从主库的某个 binlog 位置开始同步:

mysqlbinlog --start-position=12345 mysql-bin.000001 | mysql -u slave_user -p

7. 注意事项

  1. 权限问题:操作 binlog 需具有 REPLICATION SLAVE 和 REPLICATION CLIENT 权限。

  2. 备份:恢复前务必备份当前数据,避免二次损坏。

  3. 时间格式:时间参数需严格遵循 YYYY-MM-DD HH:MM:SS 格式。

  4. 版本兼容性:确保 mysqlbinlog 版本与 MySQL 服务器版本一致。

相关文章:

  • AI数字人融合VR全景:从技术突破到可信场景落地
  • LeetCode 235. 二叉搜索树的最近公共祖先 LeetCode 701.二叉搜索树中的插入操作 LeetCode 450.删除二叉搜索树中的节点
  • Logistics | Days of Inventory vs. Stock Days 【待续】
  • 射击游戏demo11
  • 打破传统束缚:Captiks 无线惯性动捕与步态分析系统如何重新定义运动测量?
  • QMK键盘固件旋钮编码器(Encoder)配置详解(实操部分)
  • 气动排渣煤粉炉专用V型球阀——法兰连接耐磨阀门生产厂家解析-耀圣
  • 基于大模型预测围术期麻醉苏醒时间的技术方案
  • PADS 9.5安装教程
  • Python爬虫入门
  • SQL注入---05--跨站注入
  • 75.xilinx复数乘法器IP核调试
  • 轻量级Web画板Paint Board如何本地部署与随时随地在线绘画分享
  • Linux系统中部署java服务(docker)
  • C盘清理秘籍:快速提升系统性能
  • 数据库设计
  • 溴化铬市场报告​
  • 设计模式(基于Python3)
  • 深度学习让鱼与熊掌兼得
  • 填报表之自动计算
  • 查幽门螺杆菌的这款同位素长期被海外垄断,秦山核电站实现突破
  • 泉州围头湾一港区项目炸礁被指影响中华白海豚,官方:已叫停重新评估
  • 国税总局上海市税务局回应刘晓庆被举报涉嫌偷漏税:正依法依规办理
  • 商务部就开展加强战略矿产出口全链条管控工作应询答记者问
  • 美政府以拨款为要挟胁迫各州服从移民政策,20个州联合起诉
  • 民企老板被错羁212天续:申请国赔千万余元,要求恢复名誉赔礼道歉