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, err

View on GitHub (pinned to 01a25a7d17)

Solutions

  1. Disable binlog_transaction_compression on the source server
  2. Ensure the cluster flavor matches the source database (do not stream MySQL 8 compressed binlogs into a MariaDB setup)
  3. Upgrade Vitess to a version that supports transaction payload events for your flavor, if available
  4. 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

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


AI-assisted analysis of vitessio/vitess@01a25a7d17 (2026-09-01). Data as JSON: /api/errors/9499be5dcebd4e45. Report an issue: GitHub.