vitessio/vitess · error
compressed transaction payload events are not supported with
Error message
compressed transaction payload events are not supported with database flavor %s
What it means
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.
Source
Thrown at go/vt/vttablet/tabletserver/vstreamer/vstreamer.go:840
case vs.versionTableID:
vs.se.RegisterVersionEvent()
vevent := &binlogdatapb.VEvent{
Type: binlogdatapb.VEventType_VERSION,
}
vevents = append(vevents, vevent)
default:
vevents, err = vs.processRowEvent(vevents, plan, rows)
}
if err != nil {
return nil, err
}
case ev.IsTransactionPayload():
// We always need to process these, no matter what event types we may be limiting the stream to. That is because
// the transaction payload event contains various types of internal events and we may be streaming any subset of
// those internal event types.
if !vs.pos.MatchesFlavor(replication.Mysql56FlavorID) {
return nil, fmt.Errorf("compressed transaction payload events are not supported with database flavor %s",
vs.vse.env.Config().DB.Flavor)
}
tp, err := ev.TransactionPayload(vs.format)
if err != nil {
return nil, err
}
defer tp.Close()
// Events inside the payload don't have their own checksum.
ogca := vs.format.ChecksumAlgorithm
defer func() { vs.format.ChecksumAlgorithm = ogca }()
vs.format.ChecksumAlgorithm = mysql.BinlogChecksumAlgOff
for {
tpevent, err := tp.GetNextEvent()
if err != nil {
if err == io.EOF {
break
}
return nil, errView on GitHub (pinned to 01a25a7d17)
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
Example fix
// before (my.cnf on source) binlog_transaction_compression = ON // after binlog_transaction_compression = OFF
Defensive patterns
Strategy: validation
Validate before calling
// Verify compression is off and flavor matches: // SHOW VARIABLES LIKE 'binlog_transaction_compression'; -- expect OFF for MariaDB/non-MySQL56 flavors
Prevention
- Never enable binlog_transaction_compression on MariaDB sources
- Match cluster flavor to source database flavor
- Document compression settings in deployment configs
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- unsupported constraint: %v
- can't parse binlog event: invalid data: %#v
- can't parse FORMAT_DESCRIPTION_EVENT: %v, event data: %#v
- got a real event before FORMAT_DESCRIPTION_EVENT: %#v
- can't strip checksum from binlog event: %v, event data: %#v
AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01).
Data as JSON: /api/errors/9499be5dcebd4e45.
Report an issue: GitHub.