mysql怎样检验是正常_如何检测MYSQL仍正常提供运行

首先,楼主,mysql的连接被占光,出现这种现象,极有可能是你的程序有问题,或者你的业务设计的就有问题,怎么可能会占光呢?莫非是一个业务重新建立一个连接,而不是建立一个连接池,业务通过连接池去操作mysql?

检查mysql僵死有多种办法,snmp可以通过walk或者get来获得对应的状态,hrSWRunStatus后面的就是进程号,hrSWRunPath可以获得到你的mysql执行的命令,同时也有对应的进程号

snmpwalk -v 1 -c public localhost hrSWRunPath

然后可以获得如下内容

HOST-RESOURCES-MIB::hrSWRunPath.13364 = STRING: "redis-server"

HOST-RESOURCES-MIB::hrSWRunPath.14061 = STRING: "php-fpm: master process (/usr/local/php/etc/php-fpm.conf)"

HOST-RESOURCES-MIB::hrSWRunPath.15015 = STRING: "/usr/sbin/httpd"

HOST-RESOURCES-MIB::hrSWRunPath.15819 = STRING: "sleep"

HOST-RESOURCES-MIB::hrSWRunPath.20330 = STRING: "php-fpm: pool www"

HOST-RESOURCES-MIB::hrSWRunPath.21724 = STRING: "php-fpm: pool www"

然后比如我想检查redis-server的运行状态,那么就这么执行

[StevenLiu@liudeMacBook-Pro ~]$ snmpwalk -v 1 -c public localhost hrSWRunStatus.13364

HOST-RESOURCES-MIB::hrSWRunStatus.13364 = INTEGER: runnable(2)

[StevenLiu@liudeMacBook-Pro ~]$

上面是snmp的检测方式,runnable可以判断是否为僵尸进程

如果觉得那么做不方便,还是先检查为啥连接都被占空,这样才是解决根本

然后通过mysql连接接口去连接mysql检测就可以了,具体C代码实现

片段

#include 

#include 

#include 

#include "./get_password.c"

MYSQL *mysql;

MYSQL_RES *result;

MYSQL_ROW sqlrow;

extern char *input_password(char pd[]);

void display_row(MYSQL *ptr);

char *get_name( char name[])

{

int i=0;

char ch;

while((ch=getchar())!='\n')

{

name[i++]=ch;

}

name[i]='\0';

return name;

}

int main()

{

int res;

char name[20],

pd[20];

mysql = mysql_init(NULL);

if(mysql)

printf("mysql init succeed!\n");

else

{

printf("mysql init failed!\n");

return -1;

}

printf("Input you name:\n");

get_name(name);

printf("Input Password:\n");

input_password(pd);

printf("\n");

mysql=mysql_real_connect(mysql, "localhost",name, pd, "test",0,NULL,0);

if(mysql)

printf("mysql connect succeed!\n");

else

{

printf("mysql connect failed!\n");

return -2;

}

res=mysql_query(mysql, "INSERT INTO STUDENT_TBL (id,name,age) values  ('','sbsb1','20'),('','sbsb2','21'),('','sbsb3','19')");

if(!res)

printf("Insert %lu rows.\n",(unsigned long)mysql_affected_rows(mysql));

else

{

printf("Insert failed:%d %s\n",mysql_errno(mysql),mysql_error(mysql));

return -3;

}

res=mysql_query(mysql, "select * from STUDENT_TBL where age='21'");

if(res)

{

printf("action failed:%d %s\n",mysql_errno(mysql),mysql_error(mysql));

return -4;

}

result = mysql_store_result(mysql);

if(result)

{

printf("Retrieved %lu rows.\n",(unsigned long)mysql_num_rows(result));

while (sqlrow=mysql_fetch_row(result) )

{

//  printf("fetching data...\n");

display_row(mysql);

}

if(mysql_errno(mysql))

{

printf("Retrive error:%s\n",mysql_error(mysql));

return -5;

}

}

mysql_free_result(result);

mysql_close(mysql);

printf("connection closed!\n");

getchar();

}

void display_row(MYSQL *ptr)

{

unsigned int field_num=0;

while (field_num

{

printf("%s\t",sqlrow[field_num++]);

}

printf("\n");

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你已经在 MySQL 的配置文件中设置了 `default_authentication_plugin` 选项为 `mysql_native_password`,但 MySQL 仍在以 `caching_sha2_password` 方式运行,则可能存在以下原因: 1. 配置文件中的 `default_authentication_plugin` 选项不起作用:在 MySQL 8.0 中,`default_authentication_plugin` 选项已被删除,因此在配置文件中设置该选项将不起作用。如果你使用的是 MySQL 8.0 版本,则应该使用 `default_authentication_plugin` 选项的替代选项 `default-authentication-plugin`。请确保在配置文件中正确设置了该选项。 2. 用户身份验证插件未更改:即使你在配置文件中设置了 `default_authentication_plugin` 选项,也需要更改每个用户的身份验证插件。你可以使用以下命令更改用户的身份验证插件: ``` ALTER USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; ``` 其中,将 `user` 替换为要更改的用户名,将 `localhost` 替换为相应的主机名或 IP 地址,将 `password` 替换为用户的密码。 3. MySQL 版本不支持 `mysql_native_password` 插件:`mysql_native_password` 插件仅适用于 MySQL 5.7 及更高版本。如果你的 MySQL 版本低于 5.7,则无法使用此插件,并且应该考虑升级到更高版本的 MySQL。 4. 重启 MySQL:在修改配置文件或更改用户身份验证插件后,你需要重启 MySQL 才能使更改生效。请确保已重启 MySQL。 如果你已经检查了所有这些问题,并且 MySQL 仍在以 `caching_sha2_password` 方式运行,则建议检查 MySQL 的日志文件以获取更多信息。可以使用以下命令来查看 MySQL 错误日志: ``` sudo tail -f /var/log/mysql/error.log ``` 请注意,日志路径可能因 Linux 发行版而异。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值