Mysql启动自动设置max_connections为其他值

背景

有同学反应,产品连不上,登陆到服务器,发现连接数不够了。
接着先重启mysql,发现在mysql启动的时候会报Waring

Warning Changed limits: max_open_files,max_connections=214

处理

/etc/security/limits.conf 中设置
* soft nofile 102400
* hard nofile 102400

登出服务器,重新登录。
重启mysql,问题解决

过程

  • 第一时间想到mysql配置得太小,于是找到配置,发现配置的max_connections=5000,明显不是配置问题
  • Linux系统上默认的open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够。

ulimit -a看下,果然是1024

疑问

为什么open files会决定max_connections大小?

max_connections和table_open_cache在系统上对应的是OS的文件句柄(fd),如果这两个值增加,那么相应的也要增加OS的max_open_files设置,不然mysql就会根据max_open_files的值,去主动调整这两个设置。

参考:http://dev.mysql.com/doc/refman/5.5/en/table-cache.html

2015-07-22记

参数调整后,今天出现了客户端连接池用完。

在数据库执行 show processlist; 发现大量的query end的process:

| 167 | paas | xxxxxx  | edas        | Query   | 60400 | query end | INSERT INTO CON_METRIC (APP_ID, ECU_ID, MON_TYPE, MON_DATA, CREATE_TIME) VALUES ('ead5f836-c4c7-4ced |

insert、update、都有,状态都是query end。

查看数据库,cpu/内存都是正常。

发现磁盘满了,最后定位到bin-log日志导致两百多G被用完。删除掉早期的bin-log,恢复正常

你可能感兴趣的:(【原创】,问题排查,操作系统)