{"record":{"id":"fabcfc028cce2738","repo":"vitessio/vitess","slug":"unknown-tableid-v-in-updaterows-event","errorCode":null,"errorMessage":"unknown tableID %v in UpdateRows event","messagePattern":"unknown tableID (.+?) in UpdateRows event","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"go/vt/binlog/binlog_streamer.go","lineNumber":551,"sourceCode":"\t\t\t})\n\n\t\t\trows, err := ev.Rows(format, tce.tm)\n\t\t\tif err != nil {\n\t\t\t\treturn pos, err\n\t\t\t}\n\n\t\t\tstatements = bls.appendInserts(statements, tce, &rows)\n\n\t\t\tif autocommit {\n\t\t\t\tif err = commit(ev.Timestamp()); err != nil {\n\t\t\t\t\treturn pos, err\n\t\t\t\t}\n\t\t\t}\n\t\tcase ev.IsUpdateRows():\n\t\t\ttableID := ev.TableID(format)\n\t\t\ttce, ok := tableMaps[tableID]\n\t\t\tif !ok {\n\t\t\t\treturn pos, fmt.Errorf(\"unknown tableID %v in UpdateRows event\", tableID)\n\t\t\t}\n\t\t\tif tce.ti == nil {\n\t\t\t\t// Skip cross-db statements.\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tsetTimestamp := &binlogdatapb.BinlogTransaction_Statement{\n\t\t\t\tCategory: binlogdatapb.BinlogTransaction_Statement_BL_SET,\n\t\t\t\tSql:      fmt.Appendf(nil, \"SET TIMESTAMP=%d\", ev.Timestamp()),\n\t\t\t}\n\t\t\tstatements = append(statements, FullBinlogStatement{\n\t\t\t\tStatement: setTimestamp,\n\t\t\t})\n\n\t\t\trows, err := ev.Rows(format, tce.tm)\n\t\t\tif err != nil {\n\t\t\t\treturn pos, err\n\t\t\t}\n","sourceCodeStart":533,"sourceCodeEnd":569,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/vt/binlog/binlog_streamer.go#L533-L569","documentation":"binlog streamer error: an UpdateRows event references a tableID that was never seen via a preceding TableMap event, so row images cannot be decoded. Usually caused by starting the stream mid-events or a missed/filtered TableMap.","triggerScenarios":"ev.IsUpdateRows() returns a tableID absent from tableMaps in parseEvents — missing/skipped preceding TABLE_MAP_EVENT, corrupt stream, or event misalignment.","commonSituations":"Mid-transaction stream start, relay log corruption, external tools manipulating binlogs, or a filtered stream that dropped the table map while keeping update-rows events.","solutions":["Restart the stream from a transaction boundary before the offending update","Run mysqlbinlog on the source file to confirm the TABLE_MAP exists and is intact","Ensure db/stream filters do not exclude TABLE_MAP events","Check event decoding (format description) matches the MySQL version that wrote the log"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// confirm pairing before streaming:\n// mysqlbinlog --start-position=<pos> <file> | grep -E 'Table_map|Update_rows'","typeGuard":null,"tryCatchPattern":"err := streamer.Stream(ctx, signals)\nif err != nil && strings.Contains(err.Error(), \"unknown tableID\") {\n    // restart from a transaction boundary preceding the update\n}","preventionTips":["Resume streams at GTID transaction boundaries","Keep TABLE_MAP events unfiltered","Check relay log integrity on source hosts","Regenerate binlogs after suspected corruption"],"tags":["binlog","row-replication","table-map"],"backgroundTag":"unknown-table-id-in-binlog","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}