原创

mysql_连接故障 Too many open files in system

一:问题描述

收到邮件报警,说一台服务器的mysql连不上了。

我手动试了下,连接半个多小时了,mysql一直连接不上,且未反馈错误信息。

错误日志报错:

161128 9:50:18 [ERROR] Error in accept: Too many open files in system

161128 9:54:34 [ERROR] Error in accept: Too many open files in system

 

切换到mysql用户时,也报错误:

[root@vhost_eip_8 init.d]# su - mysql

su: /bin/bash: Too many open files insystem

 

我尝试重启下mysql,结果也重启失败。

[root@vhost_eip_8 mysql]# service mysqldrestart

Shutting down MySQL.....                                   [确定]

Starting MySQL.The server quit withoutupdating PID file (/[失败]ysql/vhost_eip_8.pid).

 

错误日志报错:

161128 12:29:09 mysqld_safe mysqld from pidfile /data/mysql/vhost_eip_8.pid ended

161128 12:29:10 mysqld_safe Starting mysqlddaemon with databases from /data/mysql

^G/usr/local/mysql/bin/mysqld: File'./mysql-bin.index' not found (Errcode: 23)

161128 12:29:10 [ERROR] Aborting

161128 12:29:10 [Note]/usr/local/mysql/bin/mysqld: Shutdown complete

 

报的错误也真是八竿子打不着,mysql-bin.index文件明明存在。

  

我在监控服务器上发现有很多连接该服务器的进程,如:

root    28897 28655  0 12:08 ?        00:00:00 /usr/local/mysql/bin/mysql--host=10.0.3.47 --port=3306 --user=monitor --password=x xxxxxxxxx -e showdatabases;

root    29479 29245  0 10:44 ?        00:00:00 /usr/local/mysql/bin/mysql--host=10.0.3.47 --port=3306 --user=monitor --password=x xxxxxxxxx -e showdatabases;

root    29890 29653  0 11:31 ?        00:00:00 /usr/local/mysql/bin/mysql--host=10.0.3.47 --port=3306 --user=monitor --password=x xxxxxxxxx -e showdatabases;

root    29973 29731  0 11:59 ?        00:00:00 /usr/local/mysql/bin/mysql--host=10.0.3.47 --port=3306 --user=monitor --password=x xxxxxxxxx -e showdatabases;

root    30139 29932  0 11:03 ?        00:00:00 /usr/local/mysql/bin/mysql--host=10.0.3.47 --port=3306 --user=monitor --password=x xxxxxxxxx -e showdatabases;

 

且我把每分钟的监控的计划任务给取消了,结果还是一直收到邮件报警。

我的心脏呀!

我在监控服务器上把这些进程都给杀掉了:

ps -ef | grep mysql | grep -v grep |cut -c 9-15 |xargs kill -9

然后突然一下子收到了十几封报警邮件,我也是醉了,这是山洪暴发了吗?!:

过了几秒,就没有再收到报警邮件了了。

二:出错原因

fs.file-max值设置过小。

该值可以这样查看:

cat /proc/sys/fs/file-max

发现结果是65536

  

三:解决办法

修改/etc/sysctl.conf中的值fs.file-max,为修改成了6553600
然后执行sysctl -p
此时,再重启mysql,就启动成功了。
正文到此结束
Loading...