MySQL не может открыть файлы после обновления сервера: errno: 24

MySQL не может открыть файлы после обновления сервера: errno: 24

Убунту:12.04 LTS (Linux mysql02 3.2.0-40-generic #64-Ubuntu SMP Пн Мар 25 21:22:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux)

MySQL:Дистрибутив Ubuntu 5.5.31

Аппармор:УДАЛЕННЫЙ!

Сервер работал стабильно больше года. А в этот понедельник 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

И чтобы показатьпределы.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

А вот важные записи вмой.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

ОПЕРАЦИОННЫЕ СИСТЕМЫ:Развертывания Ubuntu (Debian)

Вариант сервера MySQL:лимит открытых файлов

Кажется, что Debianвыскочкане использует параметры, определенные в/etc/security/limits.conf, поэтому когда вы запускаете mysql черезуслуга(и, соответственно, в upstart), он переопределяет эти заданные ограничения и использует значение по умолчанию 1024.

Решение состоит в том, чтобы изменитьmysql.confфайл, который определяет службу upstart, он находится в/etc/init/mysql.confи добавьте следующие строкидо the предстартовыйблокировать:

# 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

Использованная литература:

решение2

Была та же проблема на 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

... и все должно быть хорошо.

решение3

Поскольку ни один из вышеперечисленных способов не решил проблему (привел лишь к нехватке памяти в системе), вот решение, которое я нашел:

Вам /etc/mysql/my.confнужно увеличить внутренний open_files_limit MySQL. Поэтому временно добавьте это в конфигурацию и перезапустите MySQL.

[mysqld]
open_files_limit = 100000

sudo /etc/init.d/mysql restart

После выполнения операции, которая дает вамслишком много открытых файловЕсли возникла ошибка, вы можете вернуть конфигурацию по умолчанию и перезапустить MySQL еще раз.

решение4

Спасибо за решение. Но для меня этот вопрос затмили два других факта.

  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

Затем сервер начал показывать базы данных, но не смог получить доступ к некоторым таблицам. Ваш обходной путь с увеличенными лимитами исправил остальные проблемы, спасибо!

Связанный контент