主从故障处理--session 级别参数复制错误
? 接受新項目,主從數據庫復制同步錯誤,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,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的主从故障处理--session 级别参数复制错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python之旅】第二篇(三):基于列
- 下一篇: 【英语天天读】The Two Roads