1

我已经搜索了以前的问题,但找不到与我的问题完全匹配的问题:

在查询事务期间的什么时候设置二进制日志时间戳,然后写入二进制日志?

上下文:我一直在使用使用主/从复制的数据库。从属服务器经常落后于主服务器,我敢肯定这仅仅是因为二进制日志中有很多事务共享相同的时间戳。当我说很多时,我说的是 1 小时日志中属于 9000 多个条目的 150 多个时间戳(加上返回的 9000 个条目以下的其余部分)。这是使用以下方法发现的:

mysqlbinlog bin-log.0001 | grep 'TIMESTAMP' | uniq -c | awk '{if ($1>9000){print $0}} ' | sed -e 's/\/\*\!\*\/;//g' | gawk -F '=' '{cmd="date -d @"$2; cmd | getline d; print $1"="$2"\t("d")"; close(d)}'

因此,我基本上是在尝试测试共享时间戳的事务数量是否反映了主服务器上的工作负载,以及这些数字是否异常。

在绘制 Second_behind_master 时,它显示线性增长,然后突然下降,这似乎暗示了同样的事情。

MySQL 版本是 5.6.33。

4

1 回答 1

0

“奴隶滞后”有许多可能的原因,在这里很难详细回答。二进制日志时间戳在事务开始时写入。

有一篇有用的帖子介绍了如何在此处确定症状的原因:https ://www.percona.com/blog/2014/05/02/how-to-identify-and-cure-mysql-replication- slave-lag/例如,它解释了 Seconds_Behind_Master 参数如何产生误导,因为它只测量最近执行的中继日志的时间戳与最近由 IO_THREAD 下载的中继日志条目之间的差异。

您会在该网站上找到许多其他可能对您有所帮助的资源。这包括博文中提到的 Percona Toolkit,它与所有 Percona 软件一样完全免费且开源。

披露:我为 Percona 工作。

于 2017-12-04T15:58:46.343 回答