ITPub博客

首页 > 应用开发 > IT综合 > 像vmstat一样输出show slave status 监控延迟

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

原创 IT综合 作者:gaopengtttt 时间:2016-09-01 17:46:03 0 删除 编辑
有时候我们想能够像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
然后就可以了

如果哪天写一个监控软件可以把这个集成到子功能上去

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7728585/viewspace-2124364/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
wxh gp_22389860 公众号 MySQL学习 书籍 深入理解MySQL主从原理

注册时间:2021-06-07

  • 博文量
    868
  • 访问量
    3495546