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

Ubuntu: 12.04 LTS (Linux mysql02 3.2.0-40-универсальный # SMP с 64 Ubuntu понедельник 25 марта 21:22:10 GNU/Linux UTC 2013 x86_64 x86_64 x86_64)

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

Мы полностью озадачены и вниз. Любая помощь значительно ценилась бы.

16
задан 30 April 2013 в 18:58

4 ответа

ОС: Ubuntu (Debian) развертывание

MySQL Server Option: открытый предел файлов

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

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

# 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

Ссылки:

19
ответ дан 30 April 2013 в 18:58

Имел ту же проблему на Ubuntu 15.10.

https://bugs.launchpad.net/ubuntu / + source/mysql-5.6 / + ошибка/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
ответ дан 30 April 2013 в 18:58

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

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

[mysqld]
open_files_limit = 100000

sudo /etc/init.d/mysql restart

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

0
ответ дан 30 April 2013 в 18:58

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

  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

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

0
ответ дан 30 April 2013 в 18:58

Другие вопросы по тегам:

Похожие вопросы: