像vmstat一样输出show slave status 监控延迟

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 有时候我们想能够像vmstat一样监控show slave status,当然方法有很多种, 我这里用一下自己的方法,是用C写的调用MYSQL的连接API取到数据 进行小小的处理,输出到屏幕,但是由于只是测试,没有完善,比如连接方式 应该是是参数的方式给出,我这里写死了,但是是一个方法,运行如下: 最后一个字段是字节数,忘记去掉了。
有时候我们想能够像vmstat一样监控show slave status,当然方法有很多种,
我这里用一下自己的方法,是用C写的调用MYSQL的连接API取到数据
进行小小的处理,输出到屏幕,但是由于只是测试,没有完善,比如连接方式
应该是是参数的方式给出,我这里写死了,但是是一个方法,运行如下:
最后一个字段是字节数,忘记去掉了。
slavecheck  1 3 代表1秒一次输出3次
[root@testmy testmysqlc]# ./slavecheck  1 3
success
retrieved 1 rows
Fetched data..
                Slave_IO_State**********::Waiting for master to send event::32
                   Master_Host**********::192.168.190.93::14
                   Master_User**********::repl::4
                   Master_Port**********::3306::4
                 Connect_Retry**********::60::2
               Master_Log_File**********::binlog.000020::13
           Read_Master_Log_Pos**********::120::3
                Relay_Log_File**********::testmy-relay-bin.000005::23
                 Relay_Log_Pos**********::314::3
         Relay_Master_Log_File**********::binlog.000020::13
              Slave_IO_Running**********::Yes::3
             Slave_SQL_Running**********::Yes::3
                    Last_Errno**********::0::1
                  Skip_Counter**********::0::1
           Exec_Master_Log_Pos**********::120::3
               Relay_Log_Space**********::682::3
               Until_Condition**********::None::4
                 Until_Log_Pos**********::0::1
            Master_SSL_Allowed**********::No::2
         Seconds_Behind_Master**********::0::1
 Master_SSL_Verify_Server_Cert**********::No::2
                 Last_IO_Errno**********::0::1
                Last_SQL_Errno**********::0::1
              Master_Server_Id**********::9356::4
                   Master_UUID**********::edc7037b-5a49-11e6-9f9d-000c29a879a3::36
              Master_Info_File**********::/mysqldata/mysql5.7/data/master.info::36
                     SQL_Delay**********::0::1
       Slave_SQL_Running_State**********::Slave has read all relay log; waiting for more updates::54
            Master_Retry_Count**********::86400::5
                 Auto_Position**********::0::1
Retrive error:
success
retrieved 1 rows
Fetched data..
                Slave_IO_State**********::Waiting for master to send event::32
                   Master_Host**********::192.168.190.93::14
                   Master_User**********::repl::4
                   Master_Port**********::3306::4
                 Connect_Retry**********::60::2
               Master_Log_File**********::binlog.000020::13
           Read_Master_Log_Pos**********::120::3
                Relay_Log_File**********::testmy-relay-bin.000005::23
                 Relay_Log_Pos**********::314::3
         Relay_Master_Log_File**********::binlog.000020::13
              Slave_IO_Running**********::Yes::3
             Slave_SQL_Running**********::Yes::3
                    Last_Errno**********::0::1
                  Skip_Counter**********::0::1
           Exec_Master_Log_Pos**********::120::3
               Relay_Log_Space**********::682::3
               Until_Condition**********::None::4
                 Until_Log_Pos**********::0::1
            Master_SSL_Allowed**********::No::2
         Seconds_Behind_Master**********::0::1
 Master_SSL_Verify_Server_Cert**********::No::2
                 Last_IO_Errno**********::0::1
                Last_SQL_Errno**********::0::1
              Master_Server_Id**********::9356::4
                   Master_UUID**********::edc7037b-5a49-11e6-9f9d-000c29a879a3::36
              Master_Info_File**********::/mysqldata/mysql5.7/data/master.info::36
                     SQL_Delay**********::0::1
       Slave_SQL_Running_State**********::Slave has read all relay log; waiting for more updates::54
            Master_Retry_Count**********::86400::5
                 Auto_Position**********::0::1
Retrive error:
success
retrieved 1 rows
Fetched data..
                Slave_IO_State**********::Waiting for master to send event::32
                   Master_Host**********::192.168.190.93::14
                   Master_User**********::repl::4
                   Master_Port**********::3306::4
                 Connect_Retry**********::60::2
               Master_Log_File**********::binlog.000020::13
           Read_Master_Log_Pos**********::120::3
                Relay_Log_File**********::testmy-relay-bin.000005::23
                 Relay_Log_Pos**********::314::3
         Relay_Master_Log_File**********::binlog.000020::13
              Slave_IO_Running**********::Yes::3
             Slave_SQL_Running**********::Yes::3
                    Last_Errno**********::0::1
                  Skip_Counter**********::0::1
           Exec_Master_Log_Pos**********::120::3
               Relay_Log_Space**********::682::3
               Until_Condition**********::None::4
                 Until_Log_Pos**********::0::1
            Master_SSL_Allowed**********::No::2
         Seconds_Behind_Master**********::0::1
 Master_SSL_Verify_Server_Cert**********::No::2
                 Last_IO_Errno**********::0::1
                Last_SQL_Errno**********::0::1
              Master_Server_Id**********::9356::4
                   Master_UUID**********::edc7037b-5a49-11e6-9f9d-000c29a879a3::36
              Master_Info_File**********::/mysqldata/mysql5.7/data/master.info::36
                     SQL_Delay**********::0::1
       Slave_SQL_Running_State**********::Slave has read all relay log; waiting for more updates::54
            Master_Retry_Count**********::86400::5
                 Auto_Position**********::0::1
Retrive error:


给出源码

点击(此处)折叠或打开

  1. 文件testcon3.c
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. #include"mysql.h"
  6. void display_row(MYSQL* mycon, const MYSQL_ROW* sqlrow,MYSQL_RES* res_ptr)
  7. {
  8.         unsigned int field_count;
  9.         field_count = 0;
  10.         MYSQL_FIELD *field_ptr;
  11.         char* mychar;

  12.         field_ptr=mysql_fetch_field(res_ptr);
  13.         while (field_count<mysql_field_count(mycon))
  14.         {
  15.                 //if(strlen((*sqlrow)[field_count]))
  16.                 //{
  17.                 if((*sqlrow)[field_count]&&strlen((*sqlrow)[field_count]))
  18.                 {
  19.                 printf("%30s**********::%s::%u",field_ptr->name,(*sqlrow)[field_count],strlen((char *)(*sqlrow)[field_count]));
  20.                 printf("\n");
  21.                 }
  22.                 //}
  23.                 field_count++;
  24.                 field_ptr++;
  25.         }
  26. }

  27. int giveslave(void)
  28. {
  29.         MYSQL *conn_ptr;
  30.         conn_ptr = mysql_init(NULL);
  31.         MYSQL_RES *res_ptr;
  32.         MYSQL_ROW sqlrow;
  33.         int res; //
  34.         if(!conn_ptr)
  35.         {
  36.                 printf("%s\n","error");
  37.                 return 1;
  38.         }

  39.         conn_ptr = mysql_real_connect(conn_ptr,"localhost","root","test123","test",3307,"/mysqldata/mysql5.7/mysqld3307.sock",0);
  40.         if(conn_ptr)
  41.         {
  42.                 printf("%s\n","success");
  43.         }
  44.         else
  45.         {
  46.                 printf("%s\n","error");
  47.         }
  48.         
  49.         res = mysql_query(conn_ptr,"show slave status");
  50.         if(res)
  51.         {
  52.                 printf("show error:",mysql_error(conn_ptr));
  53.         }
  54.         else
  55.         {
  56.                 res_ptr = mysql_store_result(conn_ptr);
  57.                  if(res_ptr)
  58.                  {
  59.                                 printf("retrieved %lu rows\n",(unsigned long)mysql_num_rows(res_ptr));
  60.                                 while((sqlrow = mysql_fetch_row(res_ptr)))
  61.                                         {
  62.                                                 printf("Fetched data..\n");
  63.                                                 display_row(conn_ptr,&sqlrow,res_ptr);
  64.                                         }
  65.                                         if(mysql_error(conn_ptr))
  66.                                         {
  67.                                                 printf("Retrive error:%s\n",mysql_error(conn_ptr));
  68.                                         }
  69.                                         mysql_free_result(res_ptr);
  70.                  }
  71.         }
  72.         mysql_close(conn_ptr);
  73.         return 0;
  74. }

点击(此处)折叠或打开

  1. 文件main.c
  2. #include<stdio.h>
  3. #include <unistd.h>


  4. int main(int argc,char *argv[])
  5. {
  6.    unsigned int m;
  7.    unsigned int n;
  8.    unsigned int i;
  9.    if(argc != 3)
  10.         {printf("error:");return 10;}
  11.    sscanf(argv[2],"%u",&m);
  12.    sscanf(argv[1],"%u",&n);
  13.    for(i=0;i<m;i++)
  14.    {
  15.         giveslave();
  16.         sleep(n);
  17.    }
  18.    return 0;
  19. }
编译
gcc testcon3.c main.c -L/mysqldata/mysql5.7/lib -lmysqlclient -I/mysqldata/mysql5.7/include -g -o slavecheck
然后就可以了

如果哪天写一个监控软件可以把这个集成到子功能上去
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
关系型数据库 MySQL 网络安全
Mysql主从同步时Slave_SQL_Running状态为Yes , 但是Slave_IO_Running状态为Connecting以及NO的情况故障排除
当使用Navicat工具打开这三个数据库时 , 发现主库和从库的数据不同
300 0
|
监控 关系型数据库
Innodb: 自动开启打印show engine status到err日志
这个问题是一个朋友问我的@刘加奇 一、问题描述 为什么我的err日志里面有大量的show engine innodb status的记录,我自己并没有开启innodb_status_output参数。
1339 0
|
关系型数据库 MySQL 安全
MySQL中sync_relay_log选项对I/O thread的影响分析
MySQL中sync_relay_log选项对I/O thread的影响分析
3538 0