ERROR 1665 (HY000): Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.
當 InnoDB 表的事務隔離級別為 READ COMMITTED 或 READ UNCOMMITTED 時,InnoDB 僅支援 Row-based 二進制日誌格式。若全域 binlog_format = STATEMENT,執行寫入操作即會報錯。
動態調整全域 binlog 格式為 MIXED(推薦)或 ROW:
SET GLOBAL binlog_format = MIXED;
生效範圍: 新建立的 Session 即刻生效;現有 Session 需重新連線或執行 SET SESSION binlog_format = MIXED;。
為防重啟失效,請同步修改配置檔 /etc/my.cnf:
[mysqld] binlog_format = MIXED transaction_isolation = READ-COMMITTED
MIXED 模式:MySQL 自動判斷,安全語句用 STATEMENT,不安全語句(如 UDF、UUID()、LIMIT 無 ORDER BY)自動切換 ROW,兼顧效能與一致性。READ COMMITTED,必須搭配 binlog_format = ROW 或 MIXED。FLUSH LOGS 切換新的 binlog 檔案,確保後續日誌格式一致。