重庆思庄Oracle、、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 234|回复: 0
打印 上一主题 下一主题

[日志类] 使用mysqlbinlog解析binlog日志

[复制链接]
跳转到指定楼层
楼主
发表于 2025-6-14 22:09:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


mysqlbinlog --start-datetime="2025-05-20 16:00:00" --stop-datetime="2025-05-20 23:59:59" --base64-output=decode-rows -v mysql-bin.003579 | grep -E -A20 -B10 "Table_map: \`dbs\`.\`tb1\`|.*rows: table id [0-9]+" > tb1_changes.log

.mysqlbinlog部分

--start-datetime
和 --stop-datetime
:指定时间范围
--base64-output=decode-rows
:解码基于行的二进制日志
-v
:输出详细信息
mysql-bin.003579
:指定要解析的 binlog 文件
2.grep部分

-E
:使用扩展正则表达式
-A20 -B10
:显示匹配行前后的若干行
正则表达式:
Table_map: \
dbs.
tb1`:匹配表映射事件
.*rows: table id [0-9]+
:匹配所有行操作事件(如 Update_rows、Write_rows)
优化建议:
1.指定数据库:
--database=dbs

2.增强grep过滤:

| grep -E -A20 -B10 "Table_map: \`dbs\`.\`tb1\`|.*rows: table id [0-9]+"

3.明确指定行操作类型(Update/write/delete)

4.可以处理多个binlog文件

mysql-bin.003579 mysql-bin.003580 mysql-bin.003581 # 指定多个 binlog 文件

binlog解析
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 783001907
#250520 16:00:45 server id 1  end_log_pos 783001980 CRC32 0xae66ee3a  Query thread_id=6287952 exec_time=0 error_code=0
SET TIMESTAMP=1747728045/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;
BEGIN
/*!*/;
# at 783001980
#250520 16:00:45 server id 1  end_log_pos 783002125 CRC32 0x27bcfed4  Table_map: `dbs`.`tb1` mapped to number 108
# at 783002125
#250520 16:00:45 server id 1  end_log_pos 783002552 CRC32 0x37bdd539  Update_rows: table id 108 flags: STMT_END_F
### UPDATE `dbs`.`tb1`
### WHERE
###   @1=56824
###   @2='575339'
###   @3='xxxxx'
###   @4=2
###   @5=1
###   @6=1
###   @7=120.40373214027746
###   @8=30.135383764172886
###   @9='xxxxx'
###   @10=0
###   @11='2025-04-21 09:42:36'
###   @12=''
###   @13=18
###   @14=NULL
###   @15=NULL
###   @16=NULL
###   @17=NULL
###   @18='xxxxxx'
###   @19=NULL
###   @20=NULL
###   @21=NULL
###   @22=NULL
###   @23=NULL
###   @24=NULL
###   @25=NULL
###   @26=NULL
###   @27=NULL
###   @28=2035
###   @29=1
###   @30=NULL
###   @31=NULL
###   @32=0
###   @33=2049
###   @34=0
###   @35=27
###   @36=NULL
###   @37=NULL
###   @38=NULL
###   @39=NULL
###   @40=NULL
###   @41=500
###   @42=NULL
###   @43=NULL
###   @44=NULL
###   @45=NULL
###   @46=NULL
###   @47=NULL
###   @48=2
###   @49=NULL
###   @50=NULL
###   @51=NULL
###   @52=NULL
###   @53=NULL
###   @54=NULL
### SET
###   @1=56824
###   @2='575339'
###   @3='xxxxxx'
###   @4=2
###   @5=1
###   @6=1
###   @7=128.40373214027746
###   @8=30.135383764172886
###   @9='xxxxxxxxxx'
###   @10=0
###   @11='2025-04-21 09:42:36'
###   @12=''
###   @13=18
###   @14=NULL
###   @15='07:00:00'
###   @16='10:00:00'
###   @17=NULL
###   @18='xxxxx'
###   @19=0
###   @20=NULL
###   @21=NULL
###   @22=NULL
###   @23=NULL
###   @24=NULL
###   @25=NULL
###   @26=NULL
###   @27=NULL
###   @28=2035
###   @29=1
###   @30=NULL
###   @31=NULL
###   @32=0
###   @33=2049
###   @34=0
###   @35=27
###   @36=NULL
###   @37=NULL
###   @38=NULL
###   @39='None'
###   @40=NULL
###   @41=500
###   @42=NULL
###   @43=NULL
###   @44=NULL
###   @45=NULL
###   @46=NULL
###   @47=NULL
###   @48=1
###   @49=NULL
###   @50=NULL
###   @51=NULL
###   @52=NULL
###   @53=NULL
###   @54=NULL

元数据部分
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 783001907
#250520 16:00:45 server id 1  end_log_pos 783001980 CRC32 0xae66ee3a  Query thread_id=6287952 exec_time=0 error_code=0
SET TIMESTAMP=1747728045/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;

1.事务隔离级别设置

/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;

/*!50718 ... */
:这是 MySQL 的版本特定注释,表示该语句仅在 MySQL 5.7.18 及以上版本执行。
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
:将事务隔离级别设置为 读已提交,这是 MySQL 中常用的隔离级别,可避免脏读。
2.GTID 设置

SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;

GTID(全局事务标识符):用于唯一标识每个事务,简化主从复制。
ANONYMOUS
:表示这是一个 匿名事务,即未使用 GTID 模式的事务。如果 MySQL 未启用 GTID,则所有事务都属于此类。
3.时间戳设置

SET TIMESTAMP=1747728045/*!*/;

TIMESTAMP
:设置当前会话的时间戳,用于记录 SQL 执行时间。
1747728045
:Unix 时间戳(秒),转换为可读时间是 2025-05-20 16:00:45(与日志中的时间一致)。
4.字符集设置

/*!\C utf8 *//*!*/; SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;

/*!\C utf8 */
:设置客户端字符集为 UTF-8。
character_set_client=33
:客户端字符集(33 对应 utf8mb4
)。
collation_connection=33
:连接排序规则。
collation_server=8
:服务器默认排序规则(通常是 utf8_general_ci
)。
这些日志的作用

环境一致性:确保从库执行相同操作时,环境与主库一致(如隔离级别、字符集)。
复制准确性:GTID 和时间戳保证事务在复制过程中的顺序和唯一性。
故障恢复:在时间点恢复(PITR)时,这些设置可重现原始执行环境。
1.事务隔离级别设置

/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;

/*!50718 ... */
:这是 MySQL 的版本特定注释,表示该语句仅在 MySQL 5.7.18 及以上版本执行。
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
:将事务隔离级别设置为 读已提交,这是 MySQL 中常用的隔离级别,可避免脏读。 2.GTID 设置
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;

GTID(全局事务标识符):用于唯一标识每个事务,简化主从复制。
ANONYMOUS
:表示这是一个 匿名事务,即未使用 GTID 模式的事务。如果 MySQL 未启用 GTID,则所有事务都属于此类。 3.时间戳设置
SET TIMESTAMP=1747728045/*!*/;

TIMESTAMP
:设置当前会话的时间戳,用于记录 SQL 执行时间。
1747728045
:Unix 时间戳(秒),转换为可读时间是 2025-05-20 16:00:45(与日志中的时间一致)。 4.字符集设置
/*!\C utf8 *//*!*/; SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;

/*!\C utf8 */
:设置客户端字符集为 UTF-8。
character_set_client=33
:客户端字符集(33 对应 utf8mb4
)。
collation_connection=33
:连接排序规则。
collation_server=8
:服务器默认排序规则(通常是 utf8_general_ci
)。
这些日志的作用

环境一致性:确保从库执行相同操作时,环境与主库一致(如隔离级别、字符集)。
复制准确性:GTID 和时间戳保证事务在复制过程中的顺序和唯一性。
故障恢复:在时间点恢复(PITR)时,这些设置可重现原始执行环境。
数据部分
1.事务开始
begin 表示一个新事务的开始。

2.表映射

Table_map: `dbs`.`tb1` mapped to number 108

系统将dbs.tb1
表映射为内部 ID 108,后续行操作会引用这个 ID。

3.更新操作

Update_rows: table id 108 flags: STMT_END_F

对 ID 为 108 的表(即tb1
表)进行更新,STMT_END_F
表示这是语句结束标志。

4.具体更新内容 这是解码后的实际更新内容:

@1
到@154代表表的各个列(通常
@1`是主键)
WHERE
部分是更新前的记录值
SET
部分表示更新后的记录值


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2025-7-15 22:05 , Processed in 0.094906 second(s), 20 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表