`seconds_behind_master是否显示主的确切从属滞后?
-
16-10-2019 - |
题
做 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一起去。
不隶属于 dba.stackexchange