3083
MySQLWARNINGNotableReplicationHIGH confidence

Unsafe mixed statement in binlog

Production Risk

Medium — replication may diverge.

What this means

A statement that mixes transactional and non-transactional table accesses is unsafe for statement-based binary logging.

Why it happens
  1. 1DML that writes to both InnoDB (transactional) and MyISAM (non-transactional) tables in the same statement.
How to reproduce
trigger — this will error
trigger — this will error
INSERT INTO myisam_table SELECT * FROM innodb_table;

expected output

Warning (Code 3083): Statement is unsafe because it accesses both transactional and non-transactional tables in a mixed statement.

Fix 1

Use ROW or MIXED binlog format

Use ROW or MIXED binlog format
SET GLOBAL binlog_format = 'ROW';

Why this works

Logs row-level changes, eliminating statement-level non-determinism.

Fix 2

Migrate non-transactional tables to InnoDB

Migrate non-transactional tables to InnoDB
ALTER TABLE myisam_table ENGINE=InnoDB;

Why this works

Eliminates the mixed-engine pattern entirely.

What not to do

Sources
Official documentation ↗

MySQL 8.0 — 3083 ER_BINLOG_UNSAFE_MIXED_STATEMENT2

Content generated with AI assistance and reviewed for accuracy. Found an error? hello@errcodes.dev

← All MySQL errors