{"record":{"id":"c439509b2d94ef12","repo":"apache/seatunnel","slug":"received-dml-sql-for-processing-binlog-probably","errorCode":null,"errorMessage":"Received DML 'sql' for processing, binlog probably contains events generated with statement or mixed based replication format","messagePattern":"Received DML 'sql' for processing, binlog probably contains events generated with statement or mixed based replication format","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-cdc/connector-cdc-mysql/src/main/java/io/debezium/connector/mysql/MySqlStreamingChangeEventSource.java","lineNumber":650,"sourceCode":"        if (sql.equalsIgnoreCase(\"COMMIT\")) {\n            handleTransactionCompletion(partition, offsetContext, event);\n            return;\n        }\n\n        String upperCasedStatementBegin = Strings.getBegin(sql, 7).toUpperCase();\n\n        if (upperCasedStatementBegin.startsWith(\"XA \")) {\n            // This is an XA transaction, and we currently ignore these and do nothing ...\n            return;\n        }\n        if (connectorConfig.getDdlFilter().test(sql)) {\n            LOGGER.debug(\"DDL '{}' was filtered out of processing\", sql);\n            return;\n        }\n        if (upperCasedStatementBegin.equals(\"INSERT \")\n                || upperCasedStatementBegin.equals(\"UPDATE \")\n                || upperCasedStatementBegin.equals(\"DELETE \")) {\n            LOGGER.warn(\n                    \"Received DML '\"\n                            + sql\n                            + \"' for processing, binlog probably contains events generated with statement or mixed based replication format\");\n            return;\n        }\n        if (sql.equalsIgnoreCase(\"ROLLBACK\")) {\n            // We have hit a ROLLBACK which is not supported\n            LOGGER.warn(\n                    \"Rollback statements cannot be handled without binlog buffering, the connector will fail. Please check '{}' to see how to enable buffering\",\n                    MySqlConnectorConfig.BUFFER_SIZE_FOR_BINLOG_READER.name());\n        }\n\n        final List<SchemaChangeEvent> schemaChangeEvents =\n                taskContext\n                        .getSchema()\n                        .parseStreamingDdl(\n                                partition,\n                                sql,","sourceCodeStart":632,"sourceCodeEnd":668,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-cdc/connector-cdc-mysql/src/main/java/io/debezium/connector/mysql/MySqlStreamingChangeEventSource.java#L632-L668","documentation":"During streaming, a QUERY event containing DML (INSERT/UPDATE/DELETE) was received instead of row-based events. This happens when the binlog was produced with statement-based or mixed binlog format; Debezium's MySQL connector only supports row-based (ROW) replication, so the DML statement is logged and skipped (no data change events are emitted for it).","triggerScenarios":"handleQueryEvent sees upperCasedStatementBegin matching 'INSERT ', 'UPDATE ', or 'DELETE ' — i.e. the source MySQL has binlog_format=STATEMENT or MIXED and row images are absent from the binlog.","commonSituations":"Replicating from a legacy replica or RDS instance still on binlog_format=STATEMENT/MIXED; an admin changed binlog_format without restarting; tables with statement-only updates (e.g. certain LOAD DATA or non-deterministic statements).","solutions":["Set binlog_format=ROW on the source MySQL and restart it, then re-snapshot so the binlog contains row events from a clean position","Verify with: SHOW VARIABLES LIKE 'binlog_format'; it must return ROW","If binlog_format cannot be changed globally, set it per-session for writing applications or route CDC to a properly configured replica","After changing the format, reset the connector offset/snapshot — events between the old and new positions cannot be recovered"],"exampleFix":"// before\nSET GLOBAL binlog_format = 'MIXED';\n// after\nSET GLOBAL binlog_format = 'ROW';\n-- then restart MySQL and take a fresh snapshot","handlingStrategy":"validation","validationCode":"-- Run before configuring MySQL CDC:\nSHOW VARIABLES LIKE 'binlog_format';\n-- fail the deploy unless the value is exactly 'ROW'","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Enforce binlog_format=ROW on the source (and any replica used for CDC)","Restart MySQL after changing binlog_format so it takes effect for all sessions","Re-snapshot after switching from STATEMENT/MIXED to ROW","Add a preflight config check for the source database settings"],"tags":["mysql","cdc","binlog","replication-format"],"backgroundTag":"unsupported-operation","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}