5

我正在尝试手动解码 mysql 二进制日志 ROW 格式。每个更新/插入/删除事件之前都有一个 TABLE_MAP_EVENT。

此事件包含一个table_id. 我正在使用这个 id 为这个表的列定义建立一个缓存。

由于列信息不匹配,我不时在所述缓存中遇到错误。我目前无法在短暂的连接中重现这些问题,只能在发生二进制日志文件轮换的日志连接中重现。

我怀疑这table_id对于一个二进制日志文件来说是唯一的。有谁知道这个假设是否成立?有谁知道在哪里可以找到声明我可以期待什么的文档table_id

提前感谢比约恩

4

2 回答 2

1

不,没有任何二进制日志表 id 值的查找表。

您必须针对之前的 TABLE_MAP 事件处理 WRITE/UPDATE/DELETE binlog 事件。

实际上里面有一个 TABLE_ID 列,INFORMATION_SCHEMA.INNODB_SYS_TABLES但是这些数字与 TABLE_MAP 二进制日志事件中出现的表 ID 不同。

于 2016-11-23T12:57:18.193 回答
0

由于我看不到你的实际实现,这只是一个盲目的猜测,但看看下面的错误,也许这会让你头疼: http ://bugs.mysql.com/bug.php?id=67352

        复制中使用的表 ID 在
        从站上的 master 和 uint。此外,最大值为
        二进制日志事件中的表 ID 为 6 个字节(281474976710655)。这
        综合因素导致以下问题:

            当一个表被分配一个表时,从站上的数据可能会丢失
            ID 大于 uint。

            *大于 281474976710655 的表 ID 被写入
            二进制日志为 281474976710655.*
            (...)
于 2013-09-26T07:43:36.213 回答