BinLog 中的时间戳是不是可以达到毫秒精度?

Posted

技术标签:

【中文标题】BinLog 中的时间戳是不是可以达到毫秒精度?【英文标题】:Is it possible to have a millisecond precision for the Timestamp in a BinLog?BinLog 中的时间戳是否可以达到毫秒精度? 【发布时间】:2021-02-27 13:44:21 【问题描述】:

我们正在使用 MariaDb 10.4.14,并使用 Debezium 套件流式传输 binlog。我们遇到了一个问题,因为 binlog streamer 中的 Timestamp 是一个 uint32,它不提供毫秒精度。

您知道是否可以通过更改 MariaDb 或 Debezium 中的配置来获得这种精度?

【问题讨论】:

【参考方案1】:

不,这是不可能的,因为时间戳存储在一个 32 位整数中。

header/description 格式定义如下(来自 mysql Connector/C mariadb_rpl.h):

struct st_mariadb_rpl_format_description_event

  uint16_t format;
  char *server_version;
  uint32_t timestamp;
  uint8_t header_len;
;

format_description 二进制日志事件的协议实现可以在FORMAT_DESCRIPTION_EVENT of Client/Server protocol找到

从 uint32_t 更改时间戳,例如到 uint64_t 或 MYSQL_TIME 会破坏协议,因此会破坏整个复制,还会破坏读取二进制日志的现有应用程序。

【讨论】:

您好,我不确定我是否完全理解您的意思。这意味着它非常阻塞。您不能使用 binlogs 以另一种数据库格式复制数据库。如果我理解得很好,您的意思是无法使用 binlogs 对数据库中的操作进行排序。无法更改您强制执行的任何数据库配置。 你问是否有可能获得微秒精度,我试图解释为什么不可能 - 现在你有一个完全不同的问题。

以上是关于BinLog 中的时间戳是不是可以达到毫秒精度?的主要内容,如果未能解决你的问题,请参考以下文章

如何在蜂巢中获得毫秒精度?

具有毫秒精度的时间戳:如何将它们保存在 MySQL 中

VC中如何获取当前时间(精度达到毫秒级)

如何从 .NET DateTime 中截断毫秒

如何删除时间戳火花sql中的毫秒数

具有毫秒精度的 Linux/OSX 时钟分辨率?