percona-toolkit 检查 MySQL 主从延迟

文章介绍了如何使用PerconaToolkit中的pt-heartbeat工具来监控MySQL主从复制的延迟,特别是Seconds_Behind_Master参数的局限性以及pt-heartbeat的工作原理和使用方法。作者演示了如何创建和验证heartbeat表,以及如何在主从库上执行监控操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载

获取安装包

下载链接:Percona Toolkit - Percona

编译安装
tar zxvf percona-toolkit-3.0.12_x86_64.tar.gz
cd percona-toolkit-3.0.12
perl Makefile.PL   (安装到非缺省目录 perl Makefile.PL PREFIX=${HOME})
make
make test
make install

Seconds_Behind_Master

主从信息相关参数:

Slave_IO_Running: I/O线程是否被启动并成功地连接到主服务器上。

Slave_SQL_Running: SQL线程是否被启动。

Seconds_Behind_Master:其值可能为NULL、0、大于0

该参数值是 通过比较 sql_thread执行的event的timestamp io_thread复制好的 event的timestamp(简写为ts) 进行比较,而得到的这么一个 差值

  • 当从库sql线程上没有事件被执行时,Seconds_Behind_Master的值为0,表示主从复制良好,可以认为延迟不存在。
  • Seconds_Behind_Master有可能为NULL值,当SQL线程或IO线程没有在执行,或者IO线程在执行但连不上主库时。

缺点

如果主库的网络延迟较大并且I/O阻塞严重。从库的 IO线程 拉取主库的二进制出现 阻力(没有中断,也在复制。sql线程 也能 同步上 IO线程。但是,实际上此时的 从库数据进度 已经落后 主库的数据进度。因此,该参数 并不能 完全衡量 MySQL主从延迟状况

pt-heartbeat

pt-heartbeat 为 percona-toolkit工具包中的一个,安装完 percona-toolkit 之后可以使用

原理
  1. 主库上存在一个用于检查延迟的表heartbeat,可手动或自动创建。
  2. pt-heartbeat使用--update参数连接到主库上并持续(根据设定的--interval参数)使用一个时间戳更新到表heartbeat。
  3. pt-heartbeat使用--monitor 或--check连接到从库,检查从主库同步过来的时间戳,并与当前系统时间戳进行比对产生一个差值, 该值则用于判断延迟。

验证

添加 heartbeat 表

root@LAPTOP-FPIQJ438:/mysql-master/data# pt-heartbeat --user=root --password=123456 -S /tmp/mysql.sock -D test --master-server-id=1 --create-table --update &
[2] 3231
root@LAPTOP-FPIQJ438:/mysql-master/data#

查看验证

mysql> select * from heartbeat;
+----------------------------+-----------+---------------+----------+-----------------------+---------------------+
| ts                         | server_id | file          | position | relay_master_log_file | exec_master_log_pos |
+----------------------------+-----------+---------------+----------+-----------------------+---------------------+
| 2024-01-29T16:36:45.002280 |         1 | binlog.000001 |   598828 | NULL                  |                NULL |
+----------------------------+-----------+---------------+----------+-----------------------+---------------------+
1 row in set (0.00 sec)

更新主库上的 heartbeat

root@LAPTOP-FPIQJ438:/mysql-master/data# pt-heartbeat --user=root --password=123456 -S /tmp/mysql.sock -D test --master-server-id=1 --update &
[3] 3233
root@LAPTOP-FPIQJ438:/mysql-master/data#

从库上监控延迟

pt-heartbeat --user=root --password=123456 -S /tmp/mysql-slave.sock -D test --master-server-id=1 --monitor --print-master-server-id

注意: --master-server-id 为主库的ID。

主从同步正常

停止
root@LAPTOP-FPIQJ438:/mysql-slave#  pt-heartbeat --stop
Successfully created file /tmp/pt-heartbeat-sentinel
root@LAPTOP-FPIQJ438:/mysql-slave#
[2]-  Done                    pt-heartbeat --user=root --password=123456 -S /tmp/mysql.sock -D test --master-server-id=1 --create-table --update
[3]+  Done                    pt-heartbeat --user=root --password=123456 -S /tmp/mysql.sock -D test --master-server-id=1 --update
root@LAPTOP-FPIQJ438:/mysql-slave#

停掉主库上的 pt-heartbeat 进程

再次观察

root@LAPTOP-FPIQJ438:/mysql-slave# rm -rf /tmp/pt-heartbeat-sentinel
root@LAPTOP-FPIQJ438:/mysql-slave#
root@LAPTOP-FPIQJ438:/mysql-slave#
root@LAPTOP-FPIQJ438:/mysql-slave# pt-heartbeat --user=root --password=123456 -S /tmp/mysql-slave.sock -D test --master-server-id=1 --monitor --print-master-server-id
43.00s [  0.72s,  0.14s,  0.05s ] 1
44.00s [  1.45s,  0.29s,  0.10s ] 1
45.00s [  2.20s,  0.44s,  0.15s ] 1
46.00s [  2.97s,  0.59s,  0.20s ] 1
47.00s [  3.75s,  0.75s,  0.25s ] 1
48.00s [  4.55s,  0.91s,  0.30s ] 1
49.00s [  5.37s,  1.07s,  0.36s ] 1
50.00s [  6.20s,  1.24s,  0.41s ] 1
51.00s [  7.05s,  1.41s,  0.47s ] 1
52.00s [  7.92s,  1.58s,  0.53s ] 1

由于主库上的心跳表已经不更新了,从库认为与主库的延迟越来越大。

注意:停止了后台更新进程会在 /tmp目录 下面产生一个 pt-heartbeat-sentinel 文件,下次 再启动 该后台进程 之前 必须 先删除该文件,否则无法启动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值