percona-toolkit(pt-heartbeat)工具监控Mysql主从同步状态

一、下载percona-toolkit工具包

percona-toolkit是一组高级命令行工具的集合,可以查看当前服务的摘要信息,磁盘检测,分析慢查询日志,查找重复索引,实现表同步等等。

[root@push-5-221 src]# cd /usr/local/src/
[root@push-5-221 src]# wget https://www.percona.com/downloads/percona-toolkit/3.0.12/binary/redhat/7/x86_64/percona-toolkit-3.0.12-1.el7.x86_64.rpm

或者

1、安装percona依赖库:

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

2、测试依赖库是否安装成功:

yum list | grep percona

3、安装percona

yum install percona-xtrabackup-24

解决方法:

yum update percona-release

扫描二维码关注公众号,回复: 10409514 查看本文章

yum update

4、安装完成。

 rpm -ql percona-xtrabackup-24

Xtrabackup 2.4.已经不支持MySQL 8.0的备份恢复,使用会报如下错误!

Error: MySQL 8.0 and Percona Server 8.0 are not supported by Percona Xtrabackup 2.4.x series. Please use Percona Xtrabackup 8.0.x for backups and restores.

在percona官方下载centos版本的rpm包,使用yum安装(示例):

yum -y localinstall percona-xtrabackup-80-8.0.1-2.alpha2.el7.x86_64.rpm

  yum install https://repo.percona.com/centos/7/RPMS/noarch/percona-release-0.1-8.noarch.rpm

xtrabackup --version  查看版本

安装percona-xtrabackup-80

yum -y install percona-xtrabackup-80-8.0.7-1.el7.x86_64.rpm

查看安装后结果,发现已经没有innobackupex命令

  rpm -ql percona-xtrabackup-80-8.0.7-1.el7.x86_64

二、安装rpm包

root@push-5-221 src]# rpm -ivh percona-toolkit-3.0.12-1.el7.x86_64.rpm 
警告:percona-toolkit-3.0.12-1.el7.x86_64.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID cd2efd2a: NOKEY
错误:依赖检测失败:
        perl(DBI) >= 1.13 被 percona-toolkit-3.0.12-1.el7.x86_64 需要
        perl(DBD::mysql) >= 1.0 被 percona-toolkit-3.0.12-1.el7.x86_64 需要
        perl(IO::Socket::SSL) 被 percona-toolkit-3.0.12-1.el7.x86_64 需要
        perl(Digest::MD5) 被 percona-toolkit-3.0.12-1.el7.x86_64 需要
        perl(Term::ReadK

显示需要一些依赖包,安装相应依赖包

[root@push-5-221 src]#  yum install -y perl-DBI perl-DBD-MySQL perl-Digest-MD5 perl-IO-Socket-SSL perl-TermReadKey

再次安装

[root@push-5-221 src]# rpm -ivh percona-toolkit-3.0.12-1.el7.x86_64.rpm 
警告:percona-toolkit-3.0.12-1.el7.x86_64.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID cd2efd2a: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:percona-toolkit-3.0.12-1.el7     ################################# [100%]
[root@push-5-221 src]# 

安装成功,验证

[root@push-5-221 src]# pt-online-schema-change --version
pt-online-schema-change 3.0.12

三、工具命令的使用

1、pt-heartbeat
    #用于监控mysql复制架构的延迟。
    #主要是通过在主库上的--update线程持续更新指定表上的一个时间戳,从库上--monitor线程或者--check线程检查主库更新的时间戳并与当前系统时间对比,得到延迟值。

2、pt-query-digest
    #用于分析mysql服务器的慢查询日志,并格式化输出以便于查看和分析。

3、pt-diskstats
    #类似于iostat,打印磁盘io统计信息,但是这个工具是交互式并且比iostat更详细。可以分析从远程机器收集的数据。

4、pt-slave-find
    #连接mysql主服务器并查找其所有的从,然后打印出所有从服务器的层级关系。

[root@push-5-221 src]# pt-slave-find --host=127.0.0.1 --user=root --password=xxxxxxx
127.0.0.1
Version         5.7.26-log
Server ID       2213306
Uptime          21+19:54:53 (started 2019-06-12T13:16:24)
Replication     Is not a slave, has 1 slaves connected, is not read_only
Filters         
Binary logging  ROW
Slave status    
Slave mode      STRICT
Auto-increment  increment 1, offset 1
InnoDB version  5.7.26
+- 172.28.5.222
   Version         5.7.26-log
   Server ID       2223306
   Uptime          21+19:07:10 (started 2019-06-12T14:04:07)
   Replication     Is not a slave, has 1 slaves connected, is not read_only
   Filters         
   Binary logging  ROW
   Slave status    
   Slave mode      STRICT
   Auto-increment  increment 1, offset 1
   InnoDB version  5.7.26
   +- 172.28.5.223
      Version         5.7.26-log
      Server ID       2233306
      Uptime          21+19:02:48 (started 2019-06-12T14:08:29)
      Replication     Is not a slave, has 1 slaves connected, is not read_only
      Filters         
      Binary logging  ROW
      Slave status    
      Slave mode      STRICT
      Auto-increment  increment 1, offset 1
      InnoDB version  5.7.26
[root@push-5-221 src]# 

5、pt-stalk
    #用于收集mysql数据库故障时的相关信息便于后续诊断处理。

6、pt-kill
    #Kill掉符合指定条件mysql语句

7、pt-upgrade 

    #该命令主要用于对比不同mysql版本下SQL执行的差异,通常用于升级前进行对比。
    #会生成SQL文件或单独的SQL语句在每个服务器上执行的结果、错误和警告信息等。
  
  8、pt-online-schema-change
    #功能为支持在线变更表构,且不锁定原表,不阻塞原表的DML操作。
    #该特性与Oracle的dbms_redefinition在线重定义表原理基本类似。
    
  9、pt-mysql-summary
    #对连接的mysql服务器生成一份详细的配置情况以及sataus信息
    #在尾部也提供当前实例的的配置文件的信息

四、pt-heartbeat 监控主从同步原理

1、主库上存在一个用于检查延迟的表heartbeat,可手动或自动创建, pt-heartbeat使用--update参数连接到主库上并持续(根据设定的--interval参数)使用一个时间戳更新到表heartbeat

2、pt-heartbeat使用--monitor 或--check连接到从库,检查从主库同步过来的时间戳,并与当前系统时间戳进行比对产生一个差值,该值则用于判断延迟。(注,前提条件是主库与从库应保持时间同步)

五、实际操作pt-heartbeat 监控主从同步

1、主库上手工创建一个heartbeat数据库

mysql> create database heartbeat default CHARACTER set utf8;
Query OK, 1 row affected (0.16 sec)

 2、利用pt-heartbeat的--create-table  参数在主库上添加heartbeat表

[root@push-5-221 ~]# pt-heartbeat -S /var/lib/mysql/3306/mysql.sock -uroot -pxxxxxxxx -D heartbeat --create-table --update
*******************************************************************
 Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
 is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER
 possibly with SSL_ca_file|SSL_ca_path for verification.
 If you really don't want to verify the certificate and keep the
 connection open to Man-In-The-Middle attacks please set
 SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
*******************************************************************
  at /usr/bin/pt-heartbeat line 4515.
*******************************************************************
 Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
 is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER
 possibly with SSL_ca_file|SSL_ca_path for verification.
 If you really don't want to verify the certificate and keep the
 connection open to Man-In-The-Middle attacks please set
 SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
*******************************************************************
  at /usr/bin/pt-heartbeat line 4515.

# A software update is available:

 ctrl+c 退出,进入mysql查看heartbeat表

[root@push-5-221 ~]# mysql -S /var/lib/mysql/3306/mysql.sock -uroot -p
mysql> use heartbeat;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from heartbeat;
+----------------------------+-----------+-------------------+-----------+-----------------------+---------------------+
| ts                         | server_id | file              | position  | relay_master_log_file | exec_master_log_pos |
+----------------------------+-----------+-------------------+-----------+-----------------------+---------------------+
| 2019-07-04T11:12:07.006920 |   2213306 | master-221.000022 | 643873543 | NULL                  |                NULL |
+----------------------------+-----------+-------------------+-----------+-----------------------+---------------------+
1 row in set (0.00 sec)

mysql> 

3、启动pt-heartbeat守护进程,定时更新heartbeat表,定期update(默认1S)最新的timestamp信息到ts字段中

[root@push-5-221 ~]# pt-heartbeat -S /var/lib/mysql/3306/mysql.sock -uroot -pxxxxxxxxxxx -D heartbeat --update --daemonize

4、查看heartbeat表,不停查询,此时发现ts时间戳每秒会更新一次

mysql> select * from heartbeat;
+----------------------------+-----------+-------------------+-----------+-----------------------+---------------------+
| ts                         | server_id | file              | position  | relay_master_log_file | exec_master_log_pos |
+----------------------------+-----------+-------------------+-----------+-----------------------+---------------------+
| 2019-07-04T11:20:06.001140 |   2213306 | master-221.000022 | 659484111 | NULL                  |                NULL |
+----------------------------+-----------+-------------------+-----------+-----------------------+---------------------+
1 row in set (0.00 sec)

mysql> select * from heartbeat;
+----------------------------+-----------+-------------------+-----------+-----------------------+---------------------+
| ts                         | server_id | file              | position  | relay_master_log_file | exec_master_log_pos |
+----------------------------+-----------+-------------------+-----------+-----------------------+---------------------+
| 2019-07-04T11:20:08.064020 |   2213306 | master-221.000022 | 659558141 | NULL                  |                NULL |
+----------------------------+-----------+-------------------+-----------+-----------------------+---------------------+
1 row in set (0.00 sec)

mysql> select * from heartbeat;
+----------------------------+-----------+-------------------+-----------+-----------------------+---------------------+
| ts                         | server_id | file              | position  | relay_master_log_file | exec_master_log_pos |
+----------------------------+-----------+-------------------+-----------+-----------------------+---------------------+
| 2019-07-04T11:20:10.097910 |   2213306 | master-221.000022 | 659633844 | NULL                  |                NULL |
+----------------------------+-----------+-------------------+-----------+-----------------------+---------------------+
1 row in set (0.00 sec)

5、运行pt-hearbeat守护进程连接从库执行监控命令

[root@push-5-221 ~]# pt-heartbeat -uroot -pxxxxxxxxx -h172.28.5.222 --port=3307 -D heartbeat --monitor 
*******************************************************************
 Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
 is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER
 possibly with SSL_ca_file|SSL_ca_path for verification.
 If you really don't want to verify the certificate and keep the
 connection open to Man-In-The-Middle attacks please set
 SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
*******************************************************************
  at /usr/bin/pt-heartbeat line 4515.
*******************************************************************
 Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client
 is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER
 possibly with SSL_ca_file|SSL_ca_path for verification.
 If you really don't want to verify the certificate and keep the
 connection open to Man-In-The-Middle attacks please set
 SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.
*******************************************************************
  at /usr/bin/pt-heartbeat line 4515.

# A software update is available:
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 ]
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 ]
^C

监控数据会每秒刷新一次,可以看到目前主从同步良好,没有延迟。

 6、重启主库更新进程

[root@push-5-221 ~]# pt-heartbeat --stop
Successfully created file /tmp/pt-heartbeat-sentinel
[root@push-5-221 ~]# rm -rf /tmp/pt-heartbeat-sentinel
[root@push-5-221 ~]# pt-heartbeat -S /var/lib/mysql/3306/mysql.sock -uroot -pxxxxxxxxxxx -D heartbeat --update --interval=1 --daemonize
[root@push-5-221 ~]# 

7、使用守护进程监控从库,并输出到日志文件

[root@push-5-221 ~]# pt-heartbeat -uroot -pxxxxxxxxxxx -h172.28.5.222 --port=3307 -D heartbeat --monitor --daemonize --log=/tmp/mysql-slave-sync.log
[root@push-5-221 ~]# 

8、实时查看日志

[root@push-5-221 ~]# tail -f /tmp/mysql-slave-sync.log 
发布了216 篇原创文章 · 获赞 89 · 访问量 45万+

猜你喜欢

转载自blog.csdn.net/eagle89/article/details/104966078
今日推荐