開啓binlog後異常:impossible to write to binary log since BINLOG_FORMAT = STATEMENT

問題

在實現數據庫主備同步的時候,owncloud出現了異常。

General error: 1665 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.

解釋

這是因爲,mysql默認的binlog_format是STATEMENT。

從 MySQL 5.1.12 開始,可以用以下三種模式來實現:基於SQL語句的複製(statement-based replication, SBR),基於行的複製(row-based replication, RBR),混合模式複製(mixed-based replication, MBR)。相應地,binlog的格式也有三種:STATEMENT,ROW,MIXED。

如果你採用默認隔離級別REPEATABLE-READ,那麼建議binlog_format=ROW。如果你是READ-COMMITTED隔離級別,binlog_format=MIXED和binlog_format=ROW效果是一樣的,binlog記錄的格式都是ROW,對主從複製來說是很安全的參數。

解決方案

方法一

mysql> STOP SLAVE;
Query OK, 0 rows affected (0.02 sec)

 mysql>  SET GLOBAL binlog_format=ROW;
Query OK, 0 rows affected (0.00 sec)

 mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

但是這樣只是一次性的,重啓後失效。

方案二

永久生效,需要修改my.ini

# binary logging format - ROW
binlog_format=ROW

參考資料:
網上資源
備註:
轉載請註明出處:http://blog.csdn.net/wsyw126/article/details/73011497
作者:WSYW126

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章