{"record":{"id":"63b8f03f36a26e49","repo":"alibaba/canal","slug":"unsupport-event-type","errorCode":null,"errorMessage":"unsupport event type :{}","messagePattern":"unsupport event type :(.+?)","errorType":"exception","errorClass":"CanalParseException","httpStatus":null,"severity":"error","filePath":"parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java","lineNumber":545,"sourceCode":"                tableMeta = parseRowsEventForTableMeta(event);\n            }\n\n            if (tableMeta == null) {\n                // 拿不到表结构,执行忽略\n                return null;\n            }\n\n            EventType eventType = null;\n            int type = event.getHeader().getType();\n            if (LogEvent.WRITE_ROWS_EVENT_V1 == type || LogEvent.WRITE_ROWS_EVENT == type) {\n                eventType = EventType.INSERT;\n            } else if (LogEvent.UPDATE_ROWS_EVENT_V1 == type || LogEvent.UPDATE_ROWS_EVENT == type\n                       || LogEvent.PARTIAL_UPDATE_ROWS_EVENT == type) {\n                eventType = EventType.UPDATE;\n            } else if (LogEvent.DELETE_ROWS_EVENT_V1 == type || LogEvent.DELETE_ROWS_EVENT == type) {\n                eventType = EventType.DELETE;\n            } else {\n                throw new CanalParseException(\"unsupport event type :\" + event.getHeader().getType());\n            }\n\n            RowChange.Builder rowChangeBuider = RowChange.newBuilder();\n            rowChangeBuider.setTableId(event.getTableId());\n            rowChangeBuider.setIsDdl(false);\n\n            rowChangeBuider.setEventType(eventType);\n            RowsLogBuffer buffer = event.getRowsBuf(charset);\n            BitSet columns = event.getColumns();\n            BitSet changeColumns = event.getChangeColumns();\n\n            boolean tableError = false;\n            int rowsCount = 0;\n            while (buffer.nextOneRow(columns, false)) {\n                // 处理row记录\n                RowData.Builder rowDataBuilder = RowData.newBuilder();\n                if (EventType.INSERT == eventType) {\n                    // insert的记录放在before字段中","sourceCodeStart":527,"sourceCodeEnd":563,"githubUrl":"https://github.com/alibaba/canal/blob/87be50e87686a3e8af08c368d0e1ffd1f59eb04a/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/dbsync/LogEventConvert.java#L527-L563","documentation":"Thrown from parseRowsEvent() when the event header type code does not match any known rows-event type (WRITE_ROWS_EVENT_V1, WRITE_ROWS_EVENT, UPDATE_ROWS_EVENT_V1, UPDATE_ROWS_EVENT, PARTIAL_UPDATE_ROWS_EVENT, DELETE_ROWS_EVENT_V1, DELETE_ROWS_EVENT). Canal cannot map the numeric type code to an INSERT/UPDATE/DELETE semantic action.","triggerScenarios":"A RowsLogEvent is dispatched to parseRowsEvent() but event.getHeader().getType() returns a type code outside the recognized set. This can happen with a new MySQL binlog event type variant not yet supported by Canal's driver layer, or when the event was incorrectly classified as a rows event.","commonSituations":"A MySQL version introduces a new row-event variant (e.g. a future partial-update or compressed rows format). The Canal driver version is too old for the MySQL server version. Binlog format configuration (binlog_format, binlog_row_image) changed to a mode that produces unrecognized event types.","solutions":["Upgrade Canal to a version compatible with your MySQL server release.","Check the event type code in the error message and cross-reference with MySQL binlog event constants.","Verify binlog_format=ROW and binlog_row_image=FULL in MySQL configuration.","If the event type is genuinely new, report it to the Canal project for support."],"exampleFix":"-- before\nmysql> SHOW VARIABLES LIKE 'binlog_row_image';\n+------------------+-------+\n| Variable_name    | Value |\n+------------------+-------+\n| binlog_row_image | MINIMAL|\n+------------------+-------+\n\n-- after\nmysql> SET GLOBAL binlog_row_image = 'FULL';","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    Entry entry = parseRowsEvent(event);\n} catch (CanalParseException e) {\n    if (e.getMessage().contains(\"unsupport event type\")) {\n        // Log the type code for diagnosis and skip\n        logger.error(\"Unsupported rows event type {}, skipping. Consider upgrading Canal.\",\n            event.getHeader().getType(), e);\n        return null;\n    }\n    throw e;\n}","preventionTips":["Keep Canal updated to support the latest MySQL binlog event types.","Verify binlog_format=ROW and binlog_row_image=FULL in MySQL configuration.","Test Canal against your MySQL version in a staging environment before production deployment."],"tags":["mysql","binlog","event-type","rows-event","compatibility"],"backgroundTag":null,"analyzedSha":"87be50e87686a3e8af08c368d0e1ffd1f59eb04a","analyzedAt":"2026-08-14T04:30:11.918Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}