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


16

Ubuntu: 12.04 LTS(Linux mysql02 3.2.0-40-generic#64-Ubuntu SMP Mon Mar 25 21:22:10 UTC 2013 x86_64 x86_64 x86_64 GNU / Linux)

MySQL: Ubuntu发行版5.5.31

Apparmor:已删除!

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

MySQL错误日志条目:

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)

看来我们遇到了ulimit问题。我们已经完全删除了APPARMOR。我们增加了/etc/security/limits.conf,仍然没有运气:

# Out of desperation....
* soft  nofile  49152
* hard  nofile  65536

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

并显示limits.conf是否有效:

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中的重要条目

[mysqld_safe]
open_files_limit = 16384

[mysqld]
open_files_limit = 16384

然而:

root@mysql02:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit                                  | 1024

我们完全陷入了困境。任何帮助将不胜感激。


1
关于“打开文件太多”之前的日志中,有什么错误消息?您自更改open_files_limit后已重新启动mysqld,对吗?
2013年

是的,我们每次进行更改时都会重新启动MySQL。我们有一个表被报告为丢失(由于某种原因):30430 8:36:39 InnoDB:错误:尝试打开表,但InnoDB无法:打开表空间文件'./oti_lw_prod/apinvoice_charges .ibd'!

仅供参考,我们将用户转移到另一个主服务器(决斗主设置)服务器(01),现在它表现出完全相同的症状。它(01)的配置与该故障服务器(02)的配置完全相同,并且是该故障转移主服务器(02)死掉的主机。好吧,这个计划实在太多了。我们非常确定这是一个操作系统问题。
2013年

我确定这对于原始海报不起作用,但是对我来说,这发生在安全更新之后,并且重新启动mysql就足够了。
2015年

Answers:


19

操作系统: Ubuntu(Debian)部署

MySQL服务器选项: open-files-limit

看来Debian 新贵没有使用/etc/security/limits.conf中定义的参数,因此,当您通过service命令启动mysql (因此,在新贵下)时,它会覆盖那些已定义的限制并使用默认值1024 。

解决方案是修改定义新贵服务的mysql.conf文件,该文件位于/etc/init/mysql.conf中,并在pre-start之前添加以下几行:

# 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

参考文献:


令人失望的地方没有明确记录。:(我们刚巧碰到David在serverfault上的帖子。–
Van

这是不是一个错误,根据此:bugs.launchpad.net/mysql-server/+bug/938669

在向表中添加分区后,这种情况可能突然变得令人震惊,而且令人震惊,这可能会导致打开文件的增加。
markdwhite '16

这在Ubuntu 15.10上对我有用。升级软件包后,出现了很多“无法打开文件”错误消息,这打破了我的所有站点:(...感谢一百万为我节省了很多头疼和时间
Emmanuel

谁能解释什么是“启动前”块?我正在运行Ubuntu 16并遇到此问题,但配置文件看起来与以前不同
billynoah

4

在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

...一切都会好起来的。


1

由于上述方法均无法解决我的问题(仅导致系统内存不足),因此,我找到了以下解决方案:

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

[mysqld]
open_files_limit = 100000

sudo /etc/init.d/mysql restart

运行使您打开文件错误太多的操作后,您可以将配置更改为默认值,然后重新启动MySQL。


这在Ubuntu 16.04上对我有用,谢谢:)
理查德·弗兰克

0

感谢您的解决方法。但是对我来说,这个问题已被另外两个事实所掩盖。

  1. 我的数据目录不同于默认安装。由于多种原因,包括历史和技术原因。
  2. 我正在从一个非常老的安装升级,该安装经过了许多后向和向前端口。在新安装的MySQL 5.5的首次启动时,未激活InnoDB引擎(内部配置已在配置文件中禁用,但早期版本中可用的插件在5.5中不存在),并且创建升级标记时并未实际升级任何桌子。

修复InnoDB问题后,它仍在吐痰

mysql> SHOW DATABASES;
ERROR 1018 (HY000): Can't read dir of '.' (errno: 24)

我必须在根控制台中启动mysqld并手动重新启动

/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf --force

然后,服务器开始显示数据库,但无法访问某些表。您的解决方案增加了限制,修复了其余问题,谢谢!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.