首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 錯誤 1665 (HY000):BINLOG_FORMAT=STATEMENT 與 READ COMMITTED 隔離級別衝突的快速修復

     編輯:MySQL 綜合教學

錯誤現象

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 檔案,確保後續日誌格式一致。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved