RDS的Binlog日志时间戳有时区差导致DTS数据同步失败

更新时间:

问题描述

在进行DTS数据同步时报错,下载云数据库RDS MySQL版的Binlog后,用mysqlbinlog工具查看导致报错的日志并进行解析,发现Binlog的时间戳不对,与预期的时间相差几个小时。

问题原因

MySQL的Binlog里的时间戳是以unix time格式记录的,不包含时区信息,因此解析时依赖mysqlbinlog命令运行环境的时区设置,如果运行mysqlbinlog命令的机器与MySQL服务器的时区不一致,就会造成解析出来的Binlog时间戳有时区差。

解决方案

检查mysqlbinlog命令的运行环境的时区,设置mysqlbinlog命令的运行环境的时区,与MySQL服务器的时区保持一致。具体操作如下:

  1. 首先获取Binlog日志并解析Binlog日志,具体操作步骤请参见云数据库RDS MySQL版远程获取Binlog日志并解析Binlog日志
  2. 先通过以下命令查看Binlog,发现其时间戳有时区差。
    ./bin/mysqlbinlog --base64-output=decode-rows -v data/binlog.000001 | head -10
    系统显示如下图。
  3. 执行以下命令修改运行环境的时区,将时区设置为"EST+5"
    export TZ="EST+5"
  4. 执行以下命令查看Binlog,检查时间戳是否一致。
    ./bin/mysqlbinlog --base64-output=decode-rows -v data/binlog.000001 | head -10

适用于

  • 云数据库RDS MySQL版
  • 云数据库PolarDB MySQL版