主從故障處理--session 級別引數複製錯誤

weixin_33763244發表於2017-11-26

  接受新專案,主從資料庫複製同步錯誤,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該如何權衡呢?






本文轉自 位鵬飛 51CTO部落格,原文連結http://blog.51cto.com/weipengfei/1178782,如需轉載請自行聯絡原作者

相關文章