Seconds_Behind_Master 始终显示从奴隶在主人后面的正确数量?

我还实施了MK-HeartBeat复制监控。

与seconds_behind_master相比,它显示了另一个结果。

哪一个更准确?

有帮助吗?

解决方案

seconds_behind_master基于unix_timestamp()()和记录的时间戳记之间的差异,以记录主机的二进制日志中的查询,或者在从服务器上的继电器日志。 seconds_behind_master实际上会使您在实时的上下文中迷失,如果复制过程会流程一系列长期运行的查询。滞后可以在天文学上生长,直到处理所有中继日志条目,然后秒_BEHIND_MASTER突然下降到零。就实时而言,您无法知道或预期落后时间何时会消散,直到它达到零为止。

严格使用mySQL,您可以按以下方式监视复制滞后:

  • SHOW SLAVE STATUS\G, ,获得两个值
    • Relay_Master_Log_File 代表日志文件,其中包含最后在从属上执行的主上成功执行的SQL语句。
    • Exec_Master_Log_Pos 代表内部的位置 Relay_Master_Log_File 最后一个成功地在从站上执行的主人上成功执行了SQL语句。

您可以针对该二进制日志执行此操作:

TMSTMP=`mysqlbinlog ---start-position=EMLP RMFL | head -50 | grep "^SET TIMESTAMP=" | head -1 | sed 's/=/ /g' | sed 's/\// /g' | awk '{print $3}'`
RIGHTNOW=`date +%s`
(( REPLAG = RIGHTNOW - TMSTMP ))

其中emlp是exec_master_log_pos rmfl,是relay_master_log_file

虽然这实际上是仅使用日志文件和帖子获得复制滞后的正确方法,但您必须

  • 与从属通信以获取所需的日志文件和位置
  • 与主人沟通以检索Binlog的转储
  • 每次检查时将BINLOG转换为(MySqlBinlog),当它不是当前打开的日志时,它可能需要在倾倒主日志文件之前在主上执行齐平日志)

自己从二进制日志中获得复制滞后需要更多的腿部工作。

Mk-heartbeat 检查心跳桌并仅记录。使用主机上的实时表格,并将“心跳表”的从属副本与从属上的unix_timestamp()进行比较,这是一个更简洁的实时滞后测量。

您应该和Mk-heartbeat一起去。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top