首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新服务器后MySQL无法打开文件: errno: 24

更新服务器后MySQL无法打开文件: errno: 24
EN

Ask Ubuntu用户
提问于 2013-04-30 12:17:20
回答 4查看 34K关注 0票数 16

Ubuntu: 12.04 LTS (LinuxUbuntu3.2.0-40-Generic64-UbuntuSMP MonMar25 21:22:10 UTC 2013 mysql02 x86_64 GNU/Linux)

MySQL: Ubuntu发行版5.5.31

移除!

服务器已经运行了一年多了。然后,这个星期一,MySQL开始失败。一个更新已经导致了问题,我们无法弄清楚它是什么。我们甚至试图回到MySQL 5.5.30,但没有运气。我们5点31分回来。

MySQL错误日志条目:

代码语言:javascript
复制
130430  7:55:46 [ERROR] Error in accept: Too many open files
130430  7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/fclvod.frm' (errno: 24)
130430  7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/fcnote.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffcont.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffcontv.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffnote.frm' (errno: 24)
130430  7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/frcfcl.frm' (errno: 24)

看来我们遇到了极限问题。我们已经完全移除了APPARMOR。我们增加了/etc/安全/限制,但仍然没有运气:

代码语言:javascript
复制
# Out of desperation....
* soft  nofile  49152
* hard  nofile  65536

# No effect!?!!?
#mysql  soft  nofile  49152
#mysql  hard  nofile  65536

为了证明limits.conf是有效的:

代码语言:javascript
复制
root@mysql02:/etc/security# ulimit -Sa | grep "open files"
open files                      (-n) 49152

root@mysql02:/etc/security# ulimit -Ha | grep "open files"
open files                      (-n) 65536

以下是my.cnf中的重要条目

代码语言:javascript
复制
[mysqld_safe]
open_files_limit = 16384

[mysqld]
open_files_limit = 16384

然而:

代码语言:javascript
复制
root@mysql02:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit                                  | 1024

我们完全不知所措。如能提供任何协助,将不胜感激。

EN

回答 4

Ask Ubuntu用户

回答已采纳

发布于 2013-04-30 14:21:49

OS: Ubuntu (Debian)部署

MySQL服务器选项:打开文件-限制

Debian upstart似乎没有使用/etc/security/ limits s.conf中定义的参数,所以当您通过service命令(在upstart下)启动mysql时,它会覆盖这些定义的限制,并使用默认的1024。

解决方案是修改定义upstart服务的mysql.conf文件,它位于/etc/init/mysql.conf中,并在预启动块之前添加以下行:

代码语言:javascript
复制
# NB: Upstart scripts do not respect
# /etc/security/limits.conf, so the open-file limits
# settings need to be applied here.
limit nofile 32000 32000
limit nproc 32000 32000

参考文献:

票数 20
EN

Ask Ubuntu用户

发布于 2016-01-31 18:34:08

在Ubuntu 15.10上也有同样的问题。

https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758 -带来了解决方案:

  1. 检查是否存在/lib/systemd/system/mysql.service或/lib/systemd/system/mysqld.service
  2. (在我的例子中)如果不是,创建/lib/systemd/system/mysql.service并将其内容复制到这个文件https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758/comments/11中,并在文件LimitNOFILE=infinity LimitMEMLOCK=infinity中的某个位置添加这两行
  3. 如果存在一个或两个文件,请检查这两行是否包括: LimitNOFILE=infinity LimitMEMLOCK=infinity
  4. 执行systemctl daemon-reload

..。一切都应该很好。

票数 4
EN

Ask Ubuntu用户

发布于 2017-04-13 13:34:33

由于上面没有一个解决了我的问题(只会导致系统内存不足),下面是我找到的解决方案:

/etc/mysql/my.conf中,您需要增加MySQL的内部open_files_limit。因此,暂时将其添加到配置中并重新启动MySQL。

代码语言:javascript
复制
[mysqld]
open_files_limit = 100000

sudo /etc/init.d/mysql restart

在运行给您提供太多打开文件错误的操作之后,您可以将配置更改为默认配置,并再次重新启动MySQL。

票数 1
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/288471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档