{"record":{"id":"9499be5dcebd4e45","repo":"vitessio/vitess","slug":"compressed-transaction-payload-events-are-not-supp","errorCode":null,"errorMessage":"compressed transaction payload events are not supported with database flavor %s","messagePattern":"compressed transaction payload events are not supported with database flavor (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"go/vt/vttablet/tabletserver/vstreamer/vstreamer.go","lineNumber":840,"sourceCode":"\t\tcase vs.versionTableID:\n\t\t\tvs.se.RegisterVersionEvent()\n\t\t\tvevent := &binlogdatapb.VEvent{\n\t\t\t\tType: binlogdatapb.VEventType_VERSION,\n\t\t\t}\n\t\t\tvevents = append(vevents, vevent)\n\n\t\tdefault:\n\t\t\tvevents, err = vs.processRowEvent(vevents, plan, rows)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\tcase ev.IsTransactionPayload():\n\t\t// We always need to process these, no matter what event types we may be limiting the stream to. That is because\n\t\t// the transaction payload event contains various types of internal events and we may be streaming any subset of\n\t\t// those internal event types.\n\t\tif !vs.pos.MatchesFlavor(replication.Mysql56FlavorID) {\n\t\t\treturn nil, fmt.Errorf(\"compressed transaction payload events are not supported with database flavor %s\",\n\t\t\t\tvs.vse.env.Config().DB.Flavor)\n\t\t}\n\t\ttp, err := ev.TransactionPayload(vs.format)\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tdefer tp.Close()\n\t\t// Events inside the payload don't have their own checksum.\n\t\togca := vs.format.ChecksumAlgorithm\n\t\tdefer func() { vs.format.ChecksumAlgorithm = ogca }()\n\t\tvs.format.ChecksumAlgorithm = mysql.BinlogChecksumAlgOff\n\t\tfor {\n\t\t\ttpevent, err := tp.GetNextEvent()\n\t\t\tif err != nil {\n\t\t\t\tif err == io.EOF {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\treturn nil, err","sourceCodeStart":822,"sourceCodeEnd":858,"githubUrl":"https://github.com/vitessio/vitess/blob/01a25a7d176f94613b8d59d799f438380a8760e4/go/vt/vttablet/tabletserver/vstreamer/vstreamer.go#L822-L858","documentation":"Compressed (transaction payload) binlog events — used by MySQL 8's binlog_transaction_compression — are only implemented for the MySQL 5.6+/MySQL flavor decoder. When such an event arrives on a stream whose flavor is not Mysql56 (e.g. MariaDB), vstreamer cannot decompress it and aborts the stream with this error.","triggerScenarios":"parseEvent sees ev.IsTransactionPayload() true while vs.pos does not match replication.Mysql56FlavorID — i.e. a compressed transaction payload event on a MariaDB (or other non-MySQL56-flavor) source.","commonSituations":"Enabling binlog_transaction_compression on a MariaDB-based Vitess cluster; failover or cross-flavor replication where a MySQL 8 primary's compressed binlogs are streamed by a MariaDB-flavored vttablet.","solutions":["Disable binlog_transaction_compression on the source server","Ensure the cluster flavor matches the source database (do not stream MySQL 8 compressed binlogs into a MariaDB setup)","Upgrade Vitess to a version that supports transaction payload events for your flavor, if available","Re-stream from a position before compression was enabled"],"exampleFix":"// before (my.cnf on source)\nbinlog_transaction_compression = ON\n// after\nbinlog_transaction_compression = OFF","handlingStrategy":"validation","validationCode":"// Verify compression is off and flavor matches:\n// SHOW VARIABLES LIKE 'binlog_transaction_compression'; -- expect OFF for MariaDB/non-MySQL56 flavors","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never enable binlog_transaction_compression on MariaDB sources","Match cluster flavor to source database flavor","Document compression settings in deployment configs"],"tags":["binlog","compression","flavor","mariadb","vstreamer"],"backgroundTag":"transaction-payload-unsupported-flavor","analyzedSha":"01a25a7d176f94613b8d59d799f438380a8760e4","analyzedAt":"2026-09-01T17:28:30.605Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}