mysqlbinlog读懂binlog

本文详细介绍了MySQL Binlog的基本概念、应用场景及如何通过各种参数提取特定条件下的Binlog日志,包括按数据库、表、操作类型、时间及位置等方式进行筛选。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

binlog 报unknown variable 'default-character-set=utf8'

方法1: 在/etc/my.cnf 中将default-character-set=utf8修改成charater-set-server=utf8
方法2: mysqlbinlog --no-defaults mysql-bin.000001

SHOW SLAVE STATUS:

1) The position, ON THE MASTER, from which the I/O thread is reading: Master_Log_File/Read_Master_Log_Pos. —–相对于主库,从库读取主库的二进制日志的位置,是IO线程

2) The position, IN THE RELAY LOGS, at which the SQL thread is executing: Relay_Log_File/Relay_Log_Pos —-相对于从库,是从库的sql线程执行到的位置

3) The position, ON THE MASTER, at which the SQL thread is executing:Relay_Master_Log_File/Exec_Master_Log_Pos —-相对于主库,是从库的sql线程执行到的位置


读懂binlog日志:
binlog-format=ROW模式下:

1、提取sakila库的binlog日志
mysqlbinlog -d sakila --base64-output=decode-rows -v binlog.000008 >/tmp/test.sql

2、提取sakila库下actor表的binlog日志
mysqlbinlog -d sakila --base64-output=decode-rows -v binlog.000008|grep actor

mysqlbinlog -d sakila --base64-output=decode-rows -v mysql-bin.000008|grep -C 10 actor> /tmp/actor.txt

###grep -A -B -C 后面都跟阿拉伯数字 

-A是显示匹配后和它后面的n行。 
-B是显示匹配行和它前面的n行。 
-C是匹配行和它前后各n行。 
-C覆盖面最大,这3个开关都是关于匹配行的上下文的(context

###

筛选UPDATE

cat /tmp/actor.txt |grep -C 10 UPDATE > /tmp/actor_update.txt

3、提取sakila库下INSERT操作的binlog日志
mysqlbinlog -d sakila --base64-output=decode-rows -v binlog.000008|grep insert

4、提取指定时间段的binlog日志
mysqlbinlog --base64-output=decode-rows -v --start-datetime='2016-01-04 15:10:00' --stop-datetime='2016-01-04 15:11:00' binlog.000008 >/tmp/test.sql
提取指定position位置的binlog日志
mysqlbinlog --base64-output=decode-rows -v --start-position='398' --stop-position='617' binlog.000008 >/tmp/test.sql

5、提取指定position位置的binlog日志并输出到压缩文件
mysqlbinlog --start-position="6088" --stop-position="9832" binlog.000008 |gzip >test.sql.gz

6、提取指定position位置的binlog日志导入数据库
mysqlbinlog --start-position="120" --stop-position="332" binlog.000008 | mysql -uroot -p

7、提取指定开始时间的binlog并输出到日志文件
mysqlbinlog --start-datetime="2018-12-15 20:15:23" binlog.000008 --result-file=test.sql

8、提取指定位置的多个binlog日志文件
mysqlbinlog --start-position="120" --stop-position="332" binlog.000008 binlog.000008|more

9、提取指定数据库binlog并转换字符集到UTF8
mysqlbinlog --database=test --set-charset=utf8 binlog.000008 binlog.000008 >test.sql

10、远程提取日志,指定结束时间
mysqlbinlog -uroot -p -h10.168.10.11 -P3306 --stop-datetime="2014-12-15 20:30:23" --read-from-remote-server mysql-bin.000033 |more

11、远程提取使用row格式的binlog日志并输出到本地文件
mysqlbinlog -uroot -p -P3606 -h10.168.10.11 --read-from-remote-server -vv binlog.000008 >test.sql

 

转载于:https://www.cnblogs.com/elontian/p/9202603.html

MySQL 提供了 `mysqlbinlog` 工具来解析和查看二进制日志(binlog)内容,这对于数据库恢复、审计或调试非常有用。以下是如何使用 `mysqlbinlog` 查看 binlog 日志的详细说明。 ### 基本命令格式 ```bash mysqlbinlog [options] binlog_file ``` 其中 `binlog_file` 是你要解析的 binlog 文件名,例如 `mysql-bin.000001` 或 `master-bin.000827`。 ### 查看完整 binlog 内容 最简单的用法是直接指定 binlog 文件名: ```bash mysqlbinlog mysql-bin.000001 ``` 该命令会输出整个 binlog 文件的内容,包括事件类型、发生时间、执行的 SQL 语句等信息。 ### 解码 ROW 格式日志 如果 binlog 使用的是 `ROW` 格式(适用于主从复制),建议使用如下参数进行解码以获得可读性更强的输出: ```bash mysqlbinlog --base64-output=decode-rows -v mysql-bin.000001 ``` - `--base64-output=decode-rows`:将基于行的操作中的 base64 编码数据解码为可读文本。 - `-v`:启用详细模式,显示更多可读性增强的信息。 ### 按时间范围过滤日志 可以使用 `--start-datetime` 和 `--stop-datetime` 参数来限定只查看某段时间内的日志记录: ```bash mysqlbinlog --start-datetime="2023-05-16 17:57:00" --stop-datetime="2023-05-16 18:10:00" master-bin.000827 ``` 此命令将只输出在指定时间段内发生的数据库变更操作[^4]。 ### 输出结果保存到文件 若需将解析后的日志保存至文件以便后续分析,可以使用重定向: ```bash mysqlbinlog --no-defaults --base64-output=decode-rows -v --start-datetime="2023-05-16 17:57:00" --stop-datetime="2023-05-16 18:10:00" master-bin.000827 > output.log ``` - `--no-defaults`:忽略默认配置文件,防止因配置冲突导致问题。 - `>`:将输出重定向到文件 `output.log` 中。 ### 注意事项 - **权限要求**:执行上述操作时,确保当前用户具有足够的权限(如 `REPLICATION SLAVE` 或 `SUPER` 权限),否则可能遇到权限不足的错误。 - **性能考虑**:对于大型 binlog 文件,建议结合管道命令(如 `grep`, `less`)进行实时过滤和分页查看,以提高效率。 - **日志格式影响输出**:根据 binlog 的格式(`STATEMENT`, `ROW`, `MIXED`),输出内容的形式会有所不同。例如,在 `MIXED` 模式下,系统会自动选择最适合的格式进行记录[^3]。 ### 示例:结合管道命令查看特定表的修改 假设只想查看对 `users` 表的操作,可以结合 `grep` 过滤: ```bash mysqlbinlog --base64-output=decode-rows -v mysql-bin.000001 | grep -i "users" ``` 这将只显示包含关键词 “users” 的日志条目,便于快速定位目标数据。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值