MySQL从库生成大量小的relay log案例模拟

  • 2019 年 10 月 22 日
  • 笔记

最近看到”八怪”写的《MySQL:产生大量小relay log的故障一例》,因之前也遇到类似的情况,一直没搞懂原理及复现,看完此文章后,本着实践是检验真理的唯一标准的原则,决定自己也手动模拟一番,加深印象。

其中的模拟步骤与原文中不一致,感兴趣的小伙伴也可以自己动手模拟。

 

1.  案例模拟

原理啥的原文已介绍,此处不再赘述,只是直接进行案例模拟。

1.1  修改参数

从库上查看

mysql> select Heartbeat from mysql.slave_master_info;  +-----------+  | Heartbeat |  +-----------+  |         5 |  +-----------+  1 row in set (0.00 sec)

从库上修改

/**   先查看slave_net_timeout参数 */  mysql> show variables like '%slave_net_timeout%';  +-------------------+-------+  | Variable_name     | Value |  +-------------------+-------+  | slave_net_timeout | 10    |  +-------------------+-------+  1 row in set (0.00 sec)    /**  修改参数slave_net_timeout * /  mysql> set global slave_net_timeout =2;  Query OK, 0 rows affected (0.00 sec)

因设置的值比较小,所以效果很明显。

1.2  主从同步调整

/**  先停止同步 */  mysql> stop slave;  Query OK, 0 rows affected (0.00 sec)    /**  调整为延迟60s ,此步骤可以不设置也可以复现,亲测 */  mysql> change master to  master_delay=60;  Query OK, 0 rows affected (0.01 sec)    /**  开启同步 */  mysql> start slave;  Query OK, 0 rows affected (0.01 sec)

1.3  查看relay log

会发现每秒生产1个很小的relay log

-rw-r----- 1 mysql mysql  200 Oct 22 15:59 relay_34.000001  -rw-r----- 1 mysql mysql  366 Oct 22 15:59 relay_34.000002  -rw-r----- 1 mysql mysql  366 Oct 22 15:59 relay_34.000003  -rw-r----- 1 mysql mysql  366 Oct 22 15:59 relay_34.000004  -rw-r----- 1 mysql mysql  366 Oct 22 15:59 relay_34.000005  -rw-r----- 1 mysql mysql  366 Oct 22 15:59 relay_34.000006  -rw-r----- 1 mysql mysql  366 Oct 22 15:59 relay_34.000007  -rw-r----- 1 mysql mysql  366 Oct 22 15:59 relay_34.000008  -rw-r----- 1 mysql mysql  366 Oct 22 15:59 relay_34.000009  -rw-r----- 1 mysql mysql  366 Oct 22 15:59 relay_34.000010  -rw-r----- 1 mysql mysql  366 Oct 22 15:59 relay_34.000011  -rw-r----- 1 mysql mysql  366 Oct 22 15:59 relay_34.000012  -rw-r----- 1 mysql mysql  366 Oct 22 15:59 relay_34.000013  -rw-r----- 1 mysql mysql  366 Oct 22 15:59 relay_34.000014  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000015  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000016  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000017  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000018  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000019  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000020  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000021  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000022  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000023  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000024  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000025  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000026  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000027  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000028  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000029  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000030  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000031  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000032  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000033  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000034  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000035  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000036  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000037  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000038  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000039  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000040  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000041  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000042  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000043  -rw-r----- 1 mysql mysql  366 Oct 22 16:00 relay_34.000044  -rw-r----- 1 mysql mysql  366 Oct 22 16:01 relay_34.000045  -rw-r----- 1 mysql mysql  366 Oct 22 16:01 relay_34.000046  -rw-r----- 1 mysql mysql  366 Oct 22 16:01 relay_34.000047  -rw-r----- 1 mysql mysql  366 Oct 22 16:01 relay_34.000048  -rw-r----- 1 mysql mysql  366 Oct 22 16:01 relay_34.000049  -rw-r----- 1 mysql mysql  366 Oct 22 16:01 relay_34.000050  -rw-r----- 1 mysql mysql  366 Oct 22 16:01 relay_34.000051  -rw-r----- 1 mysql mysql  366 Oct 22 16:01 relay_34.000052  -rw-r----- 1 mysql mysql  320 Oct 22 16:01 relay_34.000053  -rw-r----- 1 mysql mysql 2.3K Oct 22 16:01 relay_34.index

至此也就模拟出相应的现象。

 

2.  搬点原理过来

如果满足下面三个条件,将会出现案例中的故障:

  • 主从中的MASTER_HEARTBEAT_PERIOD的值大于从库slave_net_timeout
  • 主库当前压力很小持续slave_net_timeout设置时间没有产生新的Event
  • 之前主从有一定的延迟

只有按照这个标准去模拟就可以复现了。