Couldn’tfindMySQLserver

Couldn’tfindMySQLserver

Couldn’t find MySQL server

1、问题描述:

图片 1

2、删除制定文件:< 喎?”
target=”_blank” class=”keylink”>vcD4KPHAgYWxpZ249″left”>

图片 2

3、正常启动mysql:

图片 3

Couldn’t find MySQL
server 1、问题描述: 2、删除制定文件: vcD4KPHAgYWxpZ249″left”>
3、正常启动mysql:…

现象1

因为硬盘满了,mysql启动不起来了。

在PHP error log里发现:
PHP Warning: mysqli::mysqli(): (HY000/2003): Can’t connect to MySQL
server on ‘XXX.XXX.XXX.XXX’ (99) in /u1/www/XXXX.php on line 10
PHP Warning: mysqli::close(): Couldn’t fetch mysqli in /u1/www/XXXX.php
on line 11
推断:只有在高并发的环境下出现

登录上去看了一下,发现原因。

诊断分析:

删除mysql的日志文件,重启mysql发现错误:Starting MySQL.Manager of
pid-file quit without updating file.[FAILED]

通过MySQL数据库上抓包,没发现异常。又把目标转到php
服务器上。

网上有不少这个原因的解释,但是都不是我想说的。我要说的原因其实很白痴:data/mysql-bin.index没有删除,data/mysql-bin.index是存放日志文件索引的文件,只删除了日志文件而没有对日志的索引文件做处理显然是不行的。

BTW:
linux开着selinux连接MySQL在测试中基本上属于1ms+,禁掉selinux后在0.96左右。selinux还是要禁掉的。
既然又怀疑是PHP的问题就写一个程序测试(禁掉selinux后):
cat tconn.php

删除data/mysql-bin.index文件,再service mysqld start就可以了。

 代码如下

好久没有写日志了,我还没有忘记这里。

function microtime_float()
{
list($usec, $sec) = explode(”
“, microtime());
return ((float)$usec + (float)$sec);
}
 
$time_start = microtime_float();
for ( $i=0; $i<30000; $i++){ 
$dbh=new mysqli(“XXX.XXX.XXX.XXX”, “wubx”, “wubxwubx”, “userdb”,
3308);
$dbh->close();
}
$time_end= microtime_float();
$time_use= ($time_end – $time_start)/30000;
print “$time_usen”;
#php tconn.php
0.00090954260031382

您可能感兴趣的文章:

  • MySQL下PID文件丢失的相关错误的解决方法
  • mysql:Can”t start server: can”t create PID file: No space left
    on device
  • MySQL提示:The server quit without updating PID
    file问题的解决办法
  • linux mysql 报错:MYSQL:The server quit without updating PID
    file
  • Mysql挂掉后无法重启报pid文件丢失的解决方法

再次运行就开始大量的报错。

PHP Warning: mysqli::mysqli(): (HY000/2003): Can’t connect to MySQL
server on ‘XXX.XXX.XXX.XXX’ (99) in /u1/www/XXXX.php on line 10
PHP Warning: mysqli::close(): Couldn’t fetch mysqli in /u1/www/XXXX.php
on line 11
中止该程序后,通过

#strace php tconn.php 运行

得到:

connect(3, {sa_family=AF_INET, sin_port=htons(3308),
sin_addr=inet_addr(“XXX.XXX.XXX.XXX”)}, 16) = -1 EADDRNOTAVAIL (Cannot
assign requested address)
shutdown(3, 2 /* send and receive */) = -1 ENOTCONN (Transport
endpoint is not connected)
看到这个大概明白是本地的网络可能注册不上了,也难怪在MySQL抓包看也正常。

看样子是本地tcp不能重用造成的。改一下在测试

 代码如下