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 distro 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

И чтобы показать limits.conf :

[email protected]:/etc/security# ulimit -Sa | grep "open files"
open files                      (-n) 49152

[email protected]:/etc/security# ulimit -Ha | grep "open files"
open files                      (-n) 65536

И вот важные записи в my.cnf

[mysqld_safe]
open_files_limit = 16384

[mysqld]
open_files_limit = 16384

Однако:

[email protected]:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit                                  | 1024

Мы полностью сбиты с толку. Любая помощь будет принята с благодарностью.

    
задан Van 30.04.2013 в 14:17
источник

4 ответа

19

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

Вариант сервера MySQL: open-files-limit

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

Решение состоит в том, чтобы изменить файл mysql.conf , который определяет службу upstart, расположен в /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

Литература:

ответ дан Van 30.04.2013 в 16:21
источник
4

Была та же проблема на Ubuntu 15.10.

Ссылка - принесли решение:

  1. проверьте, существует ли /lib/systemd/system/mysql.service или /lib/systemd/system/mysqld.service
  2. (в моем случае), если нет, создайте /lib/systemd/system/mysql.service и скопируйте содержимое этого файла Ссылка и добавьте две строки где-нибудь в файл

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  3. , если один или оба существующих файла, проверьте, включены ли эти две строки:

    LimitNOFILE=infinity
    LimitMEMLOCK=infinity
    
  4. выполнить systemctl daemon-reload

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

    
ответ дан Hendrik Eggers 31.01.2016 в 19:34
1

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

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

[mysqld]
open_files_limit = 100000

sudo /etc/init.d/mysql restart

После запуска операции, которая дает вам ошибку too many open files , вы можете изменить конфигурацию до значения по умолчанию и снова перезапустить MySQL.

    
ответ дан mniess 13.04.2017 в 15:34
0

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

  1. Каталог моих данных отличается от установки по умолчанию. По нескольким причинам, как историческим, так и техническим.
  2. Я обновлялся с очень старой установки, которая проходила через несколько back-and forward-ports. При первом запуске недавно установленного 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

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

    
ответ дан AnrDaemon 28.01.2015 в 01:56