日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

timestamp 数据类型在 sql_mode 主从不一致引起的不同步问题解决

發布時間:2024/4/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 timestamp 数据类型在 sql_mode 主从不一致引起的不同步问题解决 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從節點同步出錯。
無法同步,查看錯誤
Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 0 failed executing transaction ‘1c434876-08ed-11e9-b38c-7cd30aeb7e0a:518868’ at master log mysql-bin.000011, end_log_pos 518868. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

select * from performance_schema.replication_applier_status_by_worker\G *************************** 1. row ***************************CHANNEL_NAME: master1WORKER_ID: 1THREAD_ID: 28SERVICE_STATE: ON LAST_SEEN_TRANSACTION: 1c434876-08ed-11e9-b38c-7cd30aeb7e0a:518868LAST_ERROR_NUMBER: 01677LAST_ERROR_MESSAGE: Worker 1 failed execution transaction '1c434876-08ed-11e9-b38c-7cd30aeb7e0a:518868' at master log maysql-bin.000163,end_log_pos 484600130;column 36 of table 'trade.account' cannot be converted from type 'int' to type 'temestamp'LAST_ERROR_TIMESTAMP: 2019-01-30 17:57:32

表結構定義為:

-> `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間', -> `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',

查看binlog 此表插入數據為:

@39=1548833343 /* TIMESTAMP(0) meta=0 nullable=1 is_null=0 */@40=1548833343 /* TIMESTAMP(0) meta=0 nullable=1 is_null=0 */

最后2字段 定義類型為timestamp.而因為此數據類型保存是為一個時間戳,

主節點的sql_mode

mysql> show variables like 'sql_mode'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | sql_mode | | +---------------+-------+ 1 row in set (0.00 sec)

從節點的sql_mode

mysql> show variables like 'sql_mode'; +---------------+--------------------------------------------+ | Variable_name | Value | +---------------+--------------------------------------------+ | sql_mode | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | +---------------+--------------------------------------------+ 1 row in set (0.00 sec)

原因分析:

timestamp 數據類型是mysql 版本及sql_mode 影響的一個數據類型,相關內容這里不再細說。

時間戳數據存取

在MySQL上述三個大版本中,默認時間戳(Timestamp)類型的取值范圍為’1970-01-01 00:00:01’ UTC 至’2038-01-19 03:14:07’ UTC,數據精確到秒級別,該取值范圍包含約22億個數值,因此在MySQL內部使用4個字節INT類型來存放時間戳數據:

1、在存儲時間戳數據時,先將本地時區時間轉換為UTC時區時間,再將UTC時區時間轉換為INT格式的毫秒值(使用UNIX_TIMESTAMP函數),然后存放到數據庫中。2、在讀取時間戳數據時,先將INT格式的毫秒值轉換為UTC時區時間(使用FROM_UNIXTIME函數),然后再轉換為本地時區時間,最后返回給客戶端。

所以在binlog 日志中,可以看到sql 語句中。數據值是:1548833343 。而從節點 sql_mode=STRICT_TRANS_TABLES .
在嚴格模式下,類型轉換出錯了。
解決方法是把sql_mode 修改和主節點一致后, 重啟從節點。可解決問題。

總結

以上是生活随笔為你收集整理的timestamp 数据类型在 sql_mode 主从不一致引起的不同步问题解决的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。