perconatoolkit 检查 MySQL 主从延迟

2024年 3月 19日 45.1k 0

下载

获取安装包

下载链接:http://www.percona.com/software/percona-toolkit

 

编译安装

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 文件,下次 再启动 该后台进程 之前 必须 先删除该文件,否则无法启动。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论