接受新項目,主從資料庫複寫同步錯誤,Error Code 1292 invalid datatype)
報錯SQL:update wave set IS_WAVED = 0,LEVEL = 1,SOURCE_TB_NAME = null,SOURCE_ID = null,UPDATE_TIME = '2013-03-10 02:13:36.0' where PLAYER_ID = 80406 and TYPE = 0;
時間格式肯定不對,
查看伺服器SQL_MODE 發現為空白。這就奇怪啦,預設情況下MySQL會將其轉換為正確格式;
查看master該條記錄情況,沒有發生變化,由於Myisam儲存引擎的原因,在該SQL執行錯誤時沒有進行復原刪除binlog內容,以後還是用Innodb吧!!)
mysqlbinlog解析binlog
mysqlbinlog --start-datetime="2013-04-11 08:37:56" --stop-datetime="2013-04-11 08:45:56" localhost-bin.001882 > /tmp/1.txt
發現該類似的語句全部執行成功,為什麼唯獨這個錯誤的 時間格式沒有轉換呢?
在binlog中發現以下線索:
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/; SET @@session.sql_mode=2097152/*!*/;
可以確定的錯以上是由某工具或架構設定的。
下面我們看看這個session中 sql_mode的值;
set sql_mode=2097152;
mysql> show variables like '%sql_mode%';
+---------------+---------------------+
| Variable_name | Value |
+---------------+---------------------+
| sql_mode | STRICT_TRANS_TABLES |
+---------------+---------------------+
在session中 sql_mode 被設定為 STRICT_TRANS_TABLES 具體解釋可參考:http://weipengfei.blog.51cto.com/1511707/1173816)
這個時候就可以讓slave 跳過這些session設定就可以啦。
治本的辦法是改動程式,但對於一個已經三年的項目,且沒有固定人員負責的項目,DBA該如何權衡呢?
本文出自 “技術成就夢想” 部落格,請務必保留此出處http://weipengfei.blog.51cto.com/1511707/1178782