MySQL编程中,有时候我们会遇到如下的报错信息:

…..

[ERROR] /usr/local/mysql/bin/mysqld: Can’t open file: ‘./yejr/access.frm’ (errno: 24)

[ERROR] /usr/local/mysql/bin/mysqld: Can’t open file: ‘./yejr/accesslog.frm’ (errno: 24)

……

[ERROR] Error in accept: Too many open files

….

这个错误提示意味着打开的文件数已经达到了上限,需要提高上限或者释放一些已经打开的表文件描述符。

MySQL中,有几个地方可能存在文件描述符的限制:

1、在Server层,如果整个mysqld实例打开的文件总数超过了用户进程级别的文件数限制,就需要检查内核的fs.file-max限制、进程级别的ulimit -n限制以及MySQL中的open-files-limit选项是否有哪个超出了限制。只要有一个条件超出限制,都会引发错误。

2、即使Server层的文件数没有超出限制,但是InnoDB层也有限制,所有与InnoDB相关的文件打开总数不能超过innodb-open-files选项的限制。如果超出限制,系统会先关闭最早打开的InnoDB文件描述符,然后才能打开新的文件,但不会抛出错误,只会显示告警信息。

因此,如果遇到超出限制的提示,可以采取以下方法提高上限:

1、首先,提高内核级别的文件总数限制。执行命令:sysctl -w fs.file-max=3264018;

2、其次,提高内核对用户进程级别打开文件数的限制。执行命令:ulimit -n 204800;

3、最后,适当调整MySQL中的几个参数:open-files-limit、innodb-open-files、table-open-cache、table-definition-cache。

以上是关于解决MySQL编程中打开文件数过多的问题的一些注意事项和解决方法。希望对大家有所帮助!