MySQL too many open files 问题的解决方案

关于 mysql too many open files 错误, 网上已经有相当多的文章给出了解决方案:
修改 /etc/security/limits.conf 
修改 /etc/mysql/my.cnf
还有的是修改 mysql.service (估计是比较旧的mysql版本了,反正我用的5.6版本里没有找到这个文件)
一开始我也是按照网上的方法来做, 但发现不总是奏效, 经过一番折腾, 总结了以下两种解决方案, 服务器为 Ubuntu 14.04 LTS:

方案一:
mysql版本: 5.6.33
执行 ps aux|grep mysql
如果只有一个与 mysql 有关的进程, 如:
 mysql 17697 0.6 7.2 1306876 589920 ? Ssl 16:40 0:01 /usr/sbin/mysqld

那么只需要修改  /etc/mysql/my.cnf 文件
在 [mysqld] 组下面增加一项配置: open_files_limit = 102400

然后 sudo service mysql restart 重启mysql服务就可以了.




方案二:
mysql版本: 5.6.28
执行 ps aux|grep mysql
如果有两个与 mysql 有关的进程, 如:
mysql 14890 0.0 0.0 4440 740 ? S 15:42 0:00 /bin/sh /usr/bin/mysqld_safe
mysql 15609 13.3 9.2 17560864 3038636 ? Sl 15:42 8:24 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql

这个时候修改  /etc/mysql/my.cnf 文件是不会起作用的, 
至于原因,在mysql的文档里也有提示:


大概意思是说只有以root用户来启动 mysqld_safes 时这个配置项才会起作用.

但是通过 sudo service mysql start 启动 mysql 的时候,其实执行的是脚本
/etc/init.d/mysql, 通过翻阅 这个脚本的代码,我们会发现其实是以mysql这个
用户来启动mysql的:



至于方案一为什么会有效,估计是启动的时候对配置项 处理有些不一样吧.

对于这种情况,我们需要修改两个文件:

sudo vi /etc/security/limits.conf 然后加入以下两行配置
mysql soft nofile  102400
mysql hard nofile  102400
这些配置跟 ulimit 这个命令有关,感兴趣的可自行了解.

为了让上面的配置生效, 还需要修改另外一个文件.
sudo vi /etc/pam.d/common-session 添加配置项
session required pam_limits.so

然后重启 mysql 就可以了.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误表示打开的文件数超过了操作系统的限制。当MySQL服务器尝试打开一个新的文件时,操作系统会限制打开的文件数目,如果超过了限制就会出现这个错误。 要解决这个问题,可以尝试以下几个步骤: 1. 确认错误日志:首先,查看MySQL的错误日志文件,通常是在MySQL的数据目录下的`hostname.err`文件中。日志中会显示具体的错误信息和可能的原因。 2. 增加文件描述符限制:可以通过修改操作系统的文件描述符限制来解决这个问题。在Linux系统中,可以通过修改`/etc/security/limits.conf`文件来增加限制。例如,可以添加以下行来增加文件描述符的限制: ``` * soft nofile 65535 * hard nofile 65535 ``` 然后重新登录或重启系统生效。 3. 优化MySQL参数:如果增加文件描述符限制后问题仍然存在,可以尝试优化MySQL的一些参数来减少打开的文件数目。例如,可以尝试减少`table_open_cache`和`open_files_limit`参数的值。 4. 检查数据库连接池:如果你使用了数据库连接池,确保连接池正确关闭和释放连接,避免连接泄露。 5. 检查应用程序代码:有时候,应用程序在使用数据库连接后没有正确关闭连接,导致连接没有释放。确保在使用完数据库连接后,及时关闭连接。 通过以上一些步骤,你应该能够解决MySQL的"OS errno 24 - Too many open files"错误。如果问题仍然存在,可以进一步查看MySQL的文档或寻求专业的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值