请不要用SECONDS

  • 时间:
  • 浏览:1

首先, MySQL 的基因重组是“推”的,而就有“拉”的。“拉”是指 MySQL 的备库不断的循环询问主库是否有数据更新,这一 办法资源消耗多,很久效率单位低。“推”是指 MySQL 的主库在每每个人所有 有数据更新的很久推送这一 变更给备库,这一 办法不还要能在数据有变更的很久才会处在交互,资源消耗少。可能性你是守护进程池池员出身,你一定会选泽“推”的办法。

MySQL 基因重组 守护进程池 会自动将目前基因重组位置记录下来,在主备基因重组中断的很久自动连上主库,并从上次中断的位置重新很久很久结速基因重组。哪些地方地方操作就有全自动化的,不时需人为的干预。这给了 MySQL DBA 带来了好多好多 便利,一起去却也隐藏了好多好多 细节。

其中 master-connect-retry 和 master-retry-count 时需在 Change Master 搭建主备基因重组时指定,而 slave-net-timeout 是很久全局变量,还要能在 MySQL 运行时在线设置。

l  被动处理

MySQL 三种通过 show slave status 提供了 Seconds_Behind_Master ,用于衡量主备之间的基因重组延迟,很久今天碰到了很久场景,发现 Seconds_Behind_Master 为 , 备库的 show slave status 显示 IO/SQL 守护进程池就有正常的 , MySQL 的主库上的变更却长时间无法同步到备库上。可能性那么人为干预,直到很久小时很久, MySQL 才会自动重连主库,继续基因重组主库的变更。

MySQL 还要能指定很久参数,用于基因重组守护进程池重连主库: --master-retry-count ,  --master-connect-retry ,  --slave-net-timeout 

Slave_SQL_Running: Yes

很久语句,可能性你的主库上变更比较频繁,还要能考虑将 slave-net-timeout 设置的小其他,处理主库Binlog dump 守护进程池 终止了,无法将最新的更新推送过来。

具体的重试策略为:备库过了 slave-net-timeout 秒还那么收到主库来的数据,它就会很久很久结速第一次重试。很久每过 master-connect-retry 秒,备库会再次尝试重连主库。直到重试了 master-retry-count 次,它才会放弃重试。可能性重试的过程中,连上了主库,那么它认为当前主库是好的,又会很久很久结速 slave-net-timeout 秒的等待的图片 。

l  在 Binlog dump 被 kill 掉时通知备库 守护进程池 被 kill 掉了。好多好多 朋友重现时时需保证这一 通知发送不还要能备库,也好多好多 说该问题报告 图片重现的关键在于 Binlog dump 被 kill 的消息可能性网络堵塞可能性其他原因无法发送到备库。

slave-net-timeout 的默认值是 31000 秒, master-connect-retry 默认为 100 秒, master-retry-count 默认为 86100 次。也好多好多 说,可能性主库很久小时都那么任何数据变更发送过来,备库才会尝试重连主库。这好多好多 为哪些地方在朋友模拟的场景下,很久小时后,备库才会重连主库,继续同步数据变更的原因。

当然, MySQL 会尽量处理这一 情况。比如:

MySQL 的 Replication 是区别于其他数据库很关键的地方。也是可扩展性和高可用的基础。它三种可能性非常智能化,只时需朋友调用 Change Master 指定 Binlog 文件名和偏移位置就还要能搭建从主库到备库的基因重组关系。

MySQL 的延迟监控大部分直接分发 show slave status 中的 Seconds_Behind_Master 。这一 情况下,Seconds_Behind_Master 就无法用来真实的衡量主备之间的基因重组延迟了。朋友建议通过在主库轮询插入时间信息,并通过基因重组到备库的时间差来获得主备延迟的方案。 Percona 提供了三种同类于的方案 pt-heartbeat 

着实这一 场景非常特殊,遇到的概率何必 高,很久每每个人所有 着实有必要提醒一下使用 MySQL 的 DBA 们。通过对这一 场景的分析,就促进朋友更加深入的理解 MySQL replication 重试机制。

当然 slave-net-timeout 设置的过小就有问题报告 图片,很久会原因可能性主库的变更着实比较少的很久,备库频繁的重新连接主库,造成资源浪费。

l  备库可能性长时间那么收到从主库过来的变更,它会每隔一段时间重连主库。

l  主动预防

基于底下的分析,朋友知道 MySQL 在这一 情况下着实无法处理,那么朋友还要能哪些地方地方办法还要能避开列:

那么 MySQL 具体是怎样才能会“推”的列,实际上备库在向主库申请数据变更记录的很久,时需指定从主库Binlog 的哪个文件 MASTER_LOG_FILE 的具体哪几块个字节偏移位置 MASTER_LOG_POS )。对应的,主库会启动很久 Binlog dump 的守护进程池,将变更的记录从这一 位置很久很久结速四根四根的发给备库。备库总是监听主库过来的变更,接收到四根,才会在本地应用这一 数据变更。

1.  被动处理:修改延迟的监控办法,发现问题报告 图片及时处理。

搭建主备的基因重组,临时断开主库的网络,并 kill 掉主库 MySQL 的 binlog dump 守护进程池。

此时观察备库的基因重组情况, show slave status 中:

一切正常,普通的监控软件就有会发现备库有数据延迟。

影响范围: MySQL , Percona , MariaDB 的所有版本。

2.  主动预防:正确设置 --master-retry-count ,  --master-connect-retry ,  --slave-net-timeout基因重组重试参数。

老出问题报告 图片的很久, Binlog dump 守护进程池池被朋友 kill 掉了。作为监听的一方,备库总是那么收到任何变更,它会认为主库上长时间那么任何变更,原因那么变更数据推送过来。备库是无法判断主库上对应的Binlog dump 守护进程池 到底是意外终止了,还是长时间那么任何数据变更的。好多好多 ,对这三种情况来说,备库都显示为正常。

从底下的分析,朋友还要能大致猜到为哪些地方 show slave status 显示一切正常,很久实际上主库的变更都无法同步到备库上来:

沃趣科技的 Monitor 监控中对主备基因重组的延迟监控,并就有通过 Seconds_Behind_Master 来监控主备的。它采用了同类于于 pt-heartbeat 的办法对主备进行基因重组延迟监控。

Seconds_Behind_Master: 0

发现这一 问题报告 图片很久,朋友只时需 stop slave; start slave; 重启基因重组就能处理这一 问题报告 图片。

要真正的理解前面问题报告 图片的真相以及怎样才能会处理这一 问题报告 图片,朋友还是时需真正的理解 MySQL  基因重组的原理。

Slave_IO_Running: Yes

很久此时你把网络恢复很久,在主库做任何变更,备库都无法获得数据更新了。很久备库上的show slave status 显示: IO 守护进程池 SQL 守护进程池一切正常,基因重组延迟老而是