mysqlbinarylog - TABLE_MAP_EVENT中table_id的唯一性

时间:2013-07-26 10:22:08

标签: mysql binary-log

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

开头

此事件包含table_id。我正在使用此id为此表的列定义构建缓存。

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

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

提前致谢 的Björn

2 个答案:

答案 0 :(得分:0)

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

        Table IDs used in replication were defined as type ulong on the 
        master and uint on the slave. In addition, the maximum value for 
        table IDs in binary log events is 6 bytes (281474976710655). This 
        combination of factors led to the following issues:

            Data could be lost on the slave when a table was assigned an 
            ID greater than uint.

            *Table IDs greater than 281474976710655 were written to the 
            binary log as 281474976710655.*
            (...)

答案 1 :(得分:0)

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

您必须处理与之前的TABLE_MAP事件相关的WRITE / UPDATE / DELETE binlog事件。

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