2010年10月14日 星期四

MySQL Innodb 與 Binlog mode關係!!!

今天在做DB(innodb) table schema匯入後要異動資料時有發生下列錯誤
ERROR Log: binary logging not possible. message: transaction level 'read-committed' in innodb is not safe for binlog mode 'statement'
原因:當binlog_format 為statement時, read committed 會發生錯誤!!!
解決方法: (推薦方法4)
方法1.mysql> set session transaction isolation level REPEATABLE READ ; REPEATABLE READ ;
方法2. mysql>set session binlog_format=row;
方法3. mysql>set session binlog_format= mixed;
方法4. my.cnf 增加底下兩行~~在重啟MYSQL
binlog_format=mixed or row
innodb_locks_unsafe_for_binlog=1
所以以後要注意read committed與binlog格式的關係,否則會導致資料無法異動!!!
Binlog  format:
從 MySQL 5.1.12 開始,binlog_format可以用以下三種模式:
           1. STATEMENT: SQL語句的log(statement-based)
           2. ROW:資料行的log(row-based)
           3. MIXED: statement && row 混合使用,預設是statement
Binlog主要是做mysql replication或者是恢復某依段時間資料時會用到,也有人拿Binlog來做mysql 的差異備份~~~
所以對於Binlog format的選擇也是蠻重要的~~
如果對資料品質要求高一點的話可以選擇ROW層級的~~~
詳細Binlog format參考資料:
http://homeserver.com.tw/mysql/mysql-%e5%90%84%e7%a8%aebinlog_format%e5%84%aa%e7%bc%ba%e9%bb%9e%e6%af%94%e8%bc%83/

沒有留言:

張貼留言