zoukankan      html  css  js  c++  java
  • mysql管理工具之pt

    之前我一直用Seconds_behind_master来衡量主从的延迟,今天看到文档,才觉得多么不可靠!以下是官方文档的描述:

    In essence, this field measures the time difference in seconds between the slave SQL thread and the slave I/O thread.

    也就是说,这个变量是描述的是从库上I/O thread和SQL thread之间的时间差。

    下面使用pt-heartbeat监控主从延迟:

    【原理】:

    1:在主库上创建一张heartbeat表,按照一定的时间频率更新该表的字段(把时间更新进去)。

    2:连接到从库上检查复制的时间记录,和从库的当前系统时间进行比较,得出时间的差异。

    【用法】:

    pt-heartbeat [OPTIONS] [DSN] --update|--monitor|--check|--stop

    【参数说明】

    复制代码
    --check
       检查从的延迟,检查一次就退出,除非指定了--recurse会递归的检查所有的从服务器。
    
    --monitor
       持续监控从的延迟情况。通过--interval指定的间隔时间,打印出从的延迟信息--daemonize
       执行时,放入到后台执行
    
    --file 
       打印--monitor最新的记录到指定的文件,很好的防止满屏幕都是数据的烦恼。
    
    --frames
       在--monitor里输出的[]里的记录段,默认是1m,5m,15m。可以指定1个,如:--frames=1s,多个用逗号隔开。可用单位有秒(s)、分钟(m)、小时(h)、天(d)。
    
    --interval
       检查、更新的间隔时间。默认是见是1s。最小的单位是0.01s,最大精度为小数点后两位,因此0.015将调整至0.02。
    
    --log
       开启daemonized模式的所有日志将会被打印到制定的文件中。
    
    --update
       更新主上的心跳表。
    
    --replace
       使用--replace代替--update模式更新心跳表里的时间字段,这样的好处是不用管表里是否有行。
    
    --stop
      停止运行该工具(--daemonize),在/tmp/目录下创建一个“pt-heartbeat-sentinel” 文件。后面想重新开启则需要把该临时文件删除,才能开启(--daemonize)。
    
    --table
      指定心跳表名,默认heartbeat。
    
    --create-table
      在主上创建心跳监控的表,如果该表不存在。可以自己建立,建议存储引擎改成memory。通过更新该表知道主从延迟的差距。
    CREATE TABLE heartbeat (
      ts varchar(26) NOT NULL,
      server_id  int unsigned NOT NULL PRIMARY KEY,
      file varchar(255) DEFAULT NULL,    -- SHOW MASTER STATUS
      position bigint unsigned DEFAULT NULL, -- SHOW MASTER STATUS
      relay_master_log_file varchar(255) DEFAULT NULL,    -- SHOW SLAVE STATUS
      exec_master_log_pos   bigint unsigned DEFAULT NULL  -- SHOW SLAVE STATUS
    ); 
    复制代码

    【使用案例】

        主库:10.10.101.11  端口3306

        从库:10.10.101.11  端口3307

    1、在主库上执行命令:

    /usr/local/bin/pt-heartbeat -D test --create-table -h 10.10.101.11 -P 3306 -u root -p '*******' --update --daemonize

    -D:表示受监控的数据库
    这时,主库中已经创建了下面的表heartbeat:

    复制代码
    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | checksums      |
    | heartbeat      |
    +----------------+
    2 rows in set (0.00 sec)
    
    mysql> select * from heartbeat;
    +----------------------------+-----------+------------------+----------+-----------------------+---------------------+
    | ts                         | server_id | file             | position | relay_master_log_file | exec_master_log_pos |
    +----------------------------+-----------+------------------+----------+-----------------------+---------------------+
    | 2015-11-02T15:01:45.001340 |    113306 | mysql-bin.000021 |  1240408 | mysql-bin.000021      |                 120 |
    +----------------------------+-----------+------------------+----------+-----------------------+---------------------+
    1 row in set (0.00 sec)
    复制代码

    2、在从库上进行延迟监控:

    #执行一次就退出
    [root@10-10-101-11 backup]# /usr/local/bin/pt-heartbeat -D test  -h 10.10.101.11 -P 3307 -uroot -p'*******' --check
    0.00
    [root@10-10-101-11 backup]#

    持续监控:

    复制代码
    [root@10-10-101-11 backup]# /usr/local/bin/pt-heartbeat -D test  -h 10.10.101.11 -P 3307 -uroot -p'*******' --monitor
    0.00s [  0.00s,  0.00s,  0.00s ]
    0.00s [  0.00s,  0.00s,  0.00s ]
    0.00s [  0.00s,  0.00s,  0.00s ]
    0.00s [  0.00s,  0.00s,  0.00s ]
    0.00s [  0.00s,  0.00s,  0.00s ]
    0.00s [  0.00s,  0.00s,  0.00s ]
    0.00s [  0.00s,  0.00s,  0.00s ]
    0.00s [  0.00s,  0.00s,  0.00s ]
    0.00s [  0.00s,  0.00s,  0.00s ]
    0.00s [  0.00s,  0.00s,  0.00s ]
    0.00s [  0.00s,  0.00s,  0.00s ]
    0.00s [  0.00s,  0.00s,  0.00s ]
    0.00s [  0.00s,  0.00s,  0.00s ]
    复制代码

    更加详细请参考官方说明文档:https://www.percona.com/doc/percona-toolkit/2.2/pt-heartbeat.html

  • 相关阅读:
    PHP函数之array_chunk
    C#常用的数据结构
    SQLServer锁和并发控制
    数据库堵塞和死锁详解
    SQLServer事务隔离级别
    HTML5 Canvas 为网页添加文字水印
    浏览器记住密码的自动填充Input问题完美解决方案
    C#队列Queue实现一个简单的电商网站秒杀程序
    C# 递归省市区三级树结构
    System.InvalidOperationException:“线程间操作无效: 从不是创建控件“txtPortName02”的线程访问它。”
  • 原文地址:https://www.cnblogs.com/wangsicongde/p/7588551.html
Copyright © 2011-2022 走看看