mysql 文件描述符_MySQL异常探究:File Descriptor xxxx exceeded FD_SETSIZE=xxxx

25d0038f12f02e09f8a552057c8493cf.png异常LOG

问题表象

表象为:在连接数据库时报以下错误:

The last packet sent successfully to the server was 0 milliseconds ago

导致报此异常LOG的情况真的是太多了,所以为解决此异常,必须去看

查看日志

我找MySQL日志位置的方法,执行如下命令:

ps aux | grep mysql

在结果中找到日志位置:

–log-error=/usr/local/mysql/data/mysqld.local.err

也可以在MySQL客户端输入如下指令来获取:

show variables like ‘log_error’;

日志中显示:

[Warning] File Descriptor 1832 exceeded FD_SETSIZE=1024

从日志可以发现,是mysql打算持有的文件描述符数量超过了系统的限制。

查资料

虽然知道问题就是文件打开过多的问题,但是怎么解决又不知道了。直到我找到如下问题以及回答:https://stackoverflow.com/questions/35347378/ (看elplatt的回答)。

题主的异常LOG和我的是一致的,所以我就开始尝试答案中所说的两个参数:

table_open_cache

max_connections

查看参数目前值

修改之前得先了解自己的MySQL这两个值目前是多少,不能瞎改。在MySQL客户端内输入如下指令获取目前值:

show variables like ‘table_open_cache’;

show variables like ‘max_connections’;

着手修改参数

我发现我的table_open_cache参数值是2000。这明显超过了日志中最大值1024,所以将MySQL此值缩小。

修改/etc/my.cnf:

[mysqld]

table_open_cache=500

然后重启MySQL。发现已经成功!问题不再复现。

开始我是将table_open_cache设置为1025,发现还是超了一些,为1043。所以想,这个参数只控制的是缓存表文件描述符的个数,但是mysql还会打开其他文件啊,比如各种日志文件等。那设置为1025肯定就不行了,得再小点,因为我是本地测试库,所以随意改为500,也不牵扯什么性能,能跑通程序就行。

我没有设置max_connections这个参数,因为我发现我只设置table_open_cache一个参数就能解决我的问题。

祝你好运。

原创文章,作者:geekgao,如若转载,请注明出处:https://www.geekgao.cn/archives/35

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值