MySQL:如何从 mysqlbinlog 输出中正确提取 blob 数据

MySQL: How to properly extract blob data from mysqlbinlog output

我正在尝试恢复对客户 MySQL 5.7 数据库的一些错误更新。二进制日志已启用 (binlog_format=MIXED)。我正在尝试编写一个脚本来遍历二进制日志并将行恢复到它们以前的值。 我正在使用 mysqbinlog 这样的:

mysqlbinlog -vv --base64-output=decode-rows mysql-bin-000001.

唯一的问题是这些值是包含二进制数据的 BLOB 字段,不幸的是我找不到使用 mysqlbinlog 实用程序处理它们的方法:

#220131  7:41:04 server id 227  end_log_pos 216096 CRC32 0xc1899f91     Update_rows: table id 109 flags: STMT_END_F
### UPDATE `db`.`contents`
### WHERE
###   @1=31508332458 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2='���N�0\x10�...' /* MEDIUMBLOB/MEDIUMTEXT meta=3 nullable=0 is_null=0 */
### SET
###   @1=31508332458 /* LONGINT meta=0 nullable=0 is_null=0 */
###   @2='\u' /* MEDIUMBLOB/MEDIUMTEXT meta=3 nullable=0 is_null=0 */

理想情况下,我希望能够使用十六进制表示第二个字段 @2,这样我就可以将数据导出到 csv (@1,HEX(@2)),但这似乎不可能.有没有什么方法可以提取 blob 而无需将它们视为字符串,这样我就可以取回数据?谢谢。

未经测试,但我会从 MariaDB 中获取 mysqlbinlog 并使用 flashback 生成 SQL.

理论上,作为 DML,这应该是 MySQL 兼容的,或者只需要少量修改就可以达到最终结果。