通过 mysqlbinlog 查看数据
1
2
3
4
|
查看时间
root@3c51f7a5ffbe:~# mysqlbinlog --no-defaults --base64-output=decode-rows -vv --start-datetime="2023-09-27 15:32:00" --stop-datetime="2023-09-27 15:35:00" mysql-0-bin.000012>operator.log
root@3c51f7a5ffbe:~# mysqlbinlog --no-defaults --base64-output=decode-rows -vv --start-datetime="2023-09-27 07:30:00" --stop-datetime="2023-09-27 07:35:00" mysql-0-bin.000012>operator1.log
mysqlbinlog --no-defaults --base64-output=decode-rows -vv mysql-0-bin.000012 >sql.log
|
注意一些参数
1
2
3
4
5
6
7
8
9
|
常用过滤参数:
时间过滤 --start-datetime="Y-m-d H:i:s"和--stop-datetime="Y-m-d H:i:s"
位置过滤 --start-position=the_position_integer和--stop-position=the_position_integer
数据库过滤 --database=the_database_name, 或者 -d the_database_name
偏移量 --offset=N, -o N
————————————————
版权声明:本文为CSDN博主「aben_sky」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/aben_sky/article/details/121515061
|
输出控制:
–base64-output=decode-rows: base64-output,可以控制输出语句输出 base64 编码的 BINLOG 语句; decode-rows:选项将把基于行的事件解码成一个 SQL 语句
–version , -V: 显示版本号并退出
–verbose, -v: 重新组织行事件,并以 sql 注释的方式显示(Reconstruct row events and display them as commented SQL statements)
基于开始和结束时间的查询:
使用参数–start-datetime 和–stop-datetime:
/www/server/mysql/bin/mysqlbinlog –start-datetime=“2021-4-20 00:00:00” –stop-datetime=“2021-04-20 23:59:59” /www/server/data/mysql-bin.000007
得到的是一堆难以阅读的文本. 我们可以加个参数-r 写入文件中去(也可以使用 linux 的>操作符):
/www/server/mysql/bin/mysqlbinlog –start-datetime=“2021-4-20 00:00:00” –stop-datetime=“2021-04-20 23:59:59” /www/server/data/mysql-bin.000007 -r /home/20210420_1.sql
增加 –base64-output=decode-rows 选项解析:
base64-output,可以控制输出语句输出 base64 编码的 BINLOG 语句;decode-rows:选项将把基于行的事件解码成一个 SQL 语句
/www/server/mysql/bin/mysqlbinlog -v –base64-output=decode-rows –start-datetime=“2021-4-20 00:00:00” –stop-datetime=“2021-04-20 23:59:59” /www/server/data/mysql-bin.000007
增加–database=database_name 选项过滤数据库:
/www/server/mysql/bin/mysqlbinlog -v –base64-output=decode-rows –database=test –start-datetime=“2021-4-20 00:00:00” –stop-datetime=“2021-04-20 23:59:59” /www/server/data/mysql-bin.000007 > /home/2.sql
得到的部分代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 1180
#210420 20:24:21 server id 1 end_log_pos 1237 CRC32 0x6d2e5f81 Table_map: `test`.`students` mapped to number 108
# at 1237
#210420 20:24:21 server id 1 end_log_pos 1313 CRC32 0x7ef28a01 Update_rows: table id 108 flags: STMT_END_F
### UPDATE `test`.`students`
### WHERE
### @1=4
### @2='sunny'
### @3=17
### @4=1618841040
### @5=0
### SET
### @1=4
### @2='sunny'
### @3=18
### @4=1618841040
### @5=1618921461
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
|
从上面我们可以看到 Start: binlog v 4, 表示位置从 4 开始, 结束于 1344
基于位置的查询
使用参数–start-position 和–stop-position
/www/server/mysql/bin/mysqlbinlog -v –base64-output=decode-rows –database=test –start-position=1180 –stop-position=1313 /www/server/data/mysql-bin.000007 > /home/4.sql
得到的 sql 文件是:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 1180
#210420 20:24:21 server id 1 end_log_pos 1237 CRC32 0x6d2e5f81 Table_map: `test`.`students` mapped to number 108
# at 1237
#210420 20:24:21 server id 1 end_log_pos 1313 CRC32 0x7ef28a01 Update_rows: table id 108 flags: STMT_END_F
### UPDATE `test`.`students`
### WHERE
### @1=4
### @2='sunny'
### @3=17
### @4=1618841040
### @5=0
### SET
### @1=4
### @2='sunny'
### @3=18
### @4=1618841040
### @5=1618921461
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
|
0x03 日志文件格式
事件之前有头部注释(提供其他信息), 比如:
at 141
#100309 9:28:36 server id 123 end_log_pos 245
Query thread_id=3350 exec_time=11 error_code=0
第一行, at 后面的数字表示在日志文件中的偏移量, 或者当前日志文件的开始位置.
第二行以日期和时间开头,指示该语句何时在事件发生的服务器上启动。复制时此时间戳会传播到分发服务器( replica servers)。
server id 是事件发生的服务器的 server_id。
end_log_pos 是下一个事件的开始位置(即:当前事件的结束位置+ 1)。
thread_id 表示哪个线程执行了该事件。
exec_time 是在源服务器上执行事件所花费的时间。在副本上,它是副本上结束执行时间减去源上开始执行时间的差,差异可作为复制滞后于源的指标。
error_code 指示执行事件的结果, 零表示没有错误发生。
0x04 其他
mysqlbinlog 不支持 utf8mb4, 如果配置文件中的[client]节点配置了 default-character-set=utf8mb4 这样, 在调用时需要加参数 –no-defaults, 否则会报错: unknown variable ‘default-character-set=utf8mb4’
查看帮助: mysqlbinlog –no-defaults –help
查看版本: mysqlbinlog –no-defaults –version