主從故障處理--session 層級參數複製錯誤

來源:互聯網
上載者:User

    接受新項目,主從資料庫複寫同步錯誤,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

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.