1197: Multi-statement transaction required more than 'max_binlog_cache_size'
MySQLЧто это значит?
Данные binlog, созданные одной транзакцией, превысили лимит памяти/кеша, заданный max_binlog_cache_size. Транзакция не поместилась в двоичный журнал, поэтому завершилась ошибкой и была откачена.
Почему возникает?
Очень большая транзакция (один INSERT/UPDATE/DELETE миллионов строк или огромная массовая загрузка) заполнила кеш binlog. При включённом двоичном журналировании (репликация/восстановление на момент времени) большие транзакции легко превышают этот лимит.
Как исправить
Разбейте большую транзакцию на меньшие пакеты; выполняйте COMMIT после каждого пакета. Если действительно больших транзакций не избежать, увеличьте max_binlog_cache_size (и при необходимости binlog_cache_size). В ETL/массовых загрузках загрузка частями с промежуточными COMMIT предотвращает и эту ошибку, и длительно удерживаемые блокировки.
Ещё по этой СУБД
- 1055Expression not in GROUP BY (only_full_group_by)
- 1267Illegal mix of collations
- 1030Got error N from storage engine
- 1785Statement violates GTID consistency
- 3024Query execution was interrupted, maximum statement execution time exceeded
- 1298Unknown or incorrect time zone
- 1418Function has none of DETERMINISTIC, NO SQL, or READS SQL DATA (binary logging enabled)