当前位置: 首页 > 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 服务器版本一致。

http://www.xdnf.cn/news/469009.html

相关文章:

  • 广东省省考备考(第十一天5.15)—言语(第四节课)
  • 220V转24V非隔离恒压芯片WT5105
  • 算法题(147):纪念品分组
  • 华为开源自研AI框架昇思MindSpore应用案例:小型CNN模型之SqueezeNet网络
  • 网络安全-等级保护(等保) 2-4 GB/T 22239-2019 《信息安全技术 网络安全等级保护基础要求》-2019-05-10发布【现行】
  • 多平台图标设计与管理的终极解决方案
  • 2025年软件测试面试题,精选33道,附答案
  • Kafka消费者分组机制深度解析
  • 配置VScodePython环境Python was not found;
  • DataHub:现代化元数据管理的核心平台与应用实践
  • Linux 托盘图标显示位置异常
  • ubuntu18 设置静态ip
  • PyGame游戏开发(入门知识+组件拆分+历史存档/回放+人机策略)
  • datax 加密
  • 除了GC哪些地方有用到安全点
  • Bismark甲基化提取器
  • 大数据架构选型分析
  • 无人机动力系统全解析:核心组件、工作原理与实用指南
  • 失控的产品
  • jedis+redis pipeline诡异的链接损坏、数据读取异常问题解决
  • psycopg_pool.PoolTimeout: couldn‘t get a connection after 120.00 sec异常
  • 《软件测试架构实践与精准测试》| 合乎发展的灰度管理
  • springboot+vue实现在线书店(图书商城)系统
  • CertiK荣获以太坊基金会两项资助,领跑zkEVM形式化验证
  • SGLang、Ollama、vLLM和LLaMA.cpp推理框架的对比及选型建议
  • Java集合详解:HashMap
  • cnn卷积神经网络
  • 关于词向量的思考
  • mvc-service引入
  • 数据结构中链表的含义与link