美高梅棋牌官网下载-美高梅棋牌官方版下载

大家可以在美高梅棋牌官网下载当中进行野外生存的游戏、也可以泡泡温泉、吃吃烧烤,美高梅棋牌官方版下载成为卓越不凡的超级娱乐企业巨头,注册可提款,通过该系统的运作,以最为合适的娱乐方式将客户传递到最佳平台。

在MySQL复制环境中

2020-01-28 15:23栏目:美高梅棋牌官网下载
TAG:

在MySQL复制环境中,我们通常只根据 Seconds_Behind_Master 的值来判断SLAVE的延迟。这么做大部分情况下尚可接受,但并不够准确,而应该考虑更多因素。

首先,我们先看下SLAVE的状态:

复制代码 代码如下:yejr@imysql.com [(none)] show slave statusG*************************** 1. row ***************************Slave_IO_State: Waiting for master to send event***Master_Log_File: mysql-bin.000327Read_Master_Log_Pos: 668711237Relay_Log_File: mysql-relay-bin.002999Relay_Log_Pos: 214736858Relay_Master_Log_File: mysql-bin.000327Slave_IO_Running: YesSlave_SQL_Running: Yes***Skip_Counter: 0Exec_Master_Log_Pos: 654409041Relay_Log_Space: 229039311***Seconds_Behind_Master: 3296***

可以看到 Seconds_Behind_Master 的值是 3296,也就是SLAVE至少延迟了 3296 秒。

我们再来看下SLAVE上的2个REPLICATION进程状态:

复制代码 代码如下:yejr@imysql.com [(none)] show full processlistG*************************** 1. row ***************************Id: 6User: system userHost:db: NULLCommand: ConnectTime: 22005006State: Waiting for master to send eventInfo: NULL*************************** 2. row ***************************Id: 7User: system userHost:db: NULLCommand: ConnectTime: 3293State: UpdatingInfo: UPDATE ** SET ** WHERE **

可以看到SQL线程一直在执行UPDATE操作,注意到 Time 的值是 3293,看起来像是这个UPDATE操作执行了3293秒,一个普通的SQL而已,肯定不至于需要这么久。实际上,在REPLICATION进程中,Time 这列的值可能有几种情况:1、SQL线程当前执行的binlog中的timestamp和IO线程最新的timestamp的差值,这就是通常大家认为的 Seconds_Behind_Master 值,并不是某个SQL的实际执行耗时;2、SQL线程当前如果没有活跃SQL在执行的话,Time值就是SQL线程的idle time;

而IO线程的Time值则是该线程自从启动以来的总时长,如果系统时间在IO线程启动后发生修改的话,可能会导致该Time值异常,比如变成负数,或者非常大。

来看下面几个状态:

#设置pager,只查看关注的几个status值yejr@imysql.com [(none)] pager cat | egrep -i 'system user|Exec_Master_Log_Pos|Seconds_Behind_Master|Read_Master_Log_Pos'#这是没有活跃SQL的情况,Time值是idle time,并且 Seconds_Behind_Master 为 0yejr@imysql.com [(none)] show processlist; show slave statusG| 6 | system user | | NULL | Connect | 22004245 | Waiting for master to send event | NULL || 7 | system user | | NULL | Connect | 13 | Has read all relay log;**Read_Master_Log_Pos: 445167889Exec_Master_Log_Pos: 445167889Seconds_Behind_Master: 0#和上面一样yejr@imysql.com [(none)] show processlist; show slave statusG| 6 | system user | | NULL | Connect | 22004248 | Waiting for master to send event | NULL || 7 | system user | | NULL | Connect | 16 | Has read all relay log;**Read_Master_Log_Pos: 445167889Exec_Master_Log_Pos: 445167889Seconds_Behind_Master: 0#这时有活跃SQL了,Time值是和 Seconds_Behind_Master 一样,即SQL线程比IO线程“慢”了1秒yejr@imysql.com [(none)] show processlist; show slave statusG| 6 | system user | | NULL | Connect | 22004252 | Waiting for master to send event | NULL || 7 | system user | | floweradmin | Connect | 1 | Updating | update **Read_Master_Log_Pos: 445182239Exec_Master_Log_Pos: 445175263Seconds_Behind_Master: 1#和上面一样yejr@imysql.com [(none)] show processlist; show slave statusG| 6 | system user | | NULL | Connect | 22004254 | Waiting for master to send event | NULL || 7 | system user | | floweradmin | Connect | 1 | Updating | update **Read_Master_Log_Pos: 445207174Exec_Master_Log_Pos: 445196837Seconds_Behind_Master: 1

好了,最后我们说下如何正确判断SLAVE的延迟情况:1、首先看 Relay_Master_Log_File 和 Master_Log_File 是否有差异;2、如果Relay_Master_Log_File 和 Master_Log_File 是一样的话,再来看Exec_Master_Log_Pos 和 Read_Master_Log_Pos 的差异,对比SQL线程比IO线程慢了多少个binlog事件;3、如果Relay_Master_Log_File 和 Master_Log_File 不一样,那说明延迟可能较大,需要从MASTER上取得binlog status,判断当前的binlog和MASTER上的差距;

因此,相对更加严谨的做法是:在第三方监控节点上,对MASTER和SLAVE同时发起SHOW BINARY LOGS和SHOW SLAVE STATUSG的请求,最后判断二者binlog的差异,以及 Exec_Master_Log_Pos 和 Read_Master_Log_Pos 的差异。

例如:在MASTER上执行SHOW BINARY LOGS 的结果是:

+------------------+--------------+| Log_name | File_size |+------------------+--------------+| mysql-bin.000009 | 1073742063 || mysql-bin.000010 | 107374193 |+------------------+--------------+

而在SLAVE上执行SHOW SLAVE STATUSG 的结果是:

Master_Log_File: mysql-bin.000009 Read_Master_Log_Pos: 668711237Relay_Master_Log_File: mysql-bin.000009Slave_IO_Running: YesSlave_SQL_Running: Yes***Exec_Master_Log_Pos: 654409041***Seconds_Behind_Master: 3296***

这时候,SLAVE实际的延迟应该是:mysql-bin.000009 这个binlog中的binlog position 1073742063 和 SLAVE上读取到的binlog position之间的差异延迟,即:

1073742063 - 654409041 = 419333022 个binlog event

并且还要加上 mysql-bin.000010这个binlog已经产生的107374193个binlog event,共

107374193 + 419333022 = 526707215 个binlog event

版权声明:本文由美高梅棋牌官网下载发布于美高梅棋牌官网下载,转载请注明出处:在MySQL复制环境中