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
Мы полностью озадачены и вниз. Любая помощь значительно ценилась бы.
ОС: 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
Ссылки:
Имел ту же проблему на Ubuntu 15.10.
https://bugs.launchpad.net/ubuntu / + source/mysql-5.6 / + ошибка/1434758 - принес решение:
(в моем случае), в противном случае создают/lib/systemd/system/mysql.service и содержание копии в этот файл https://bugs.launchpad.net/ubuntu / + source/mysql-5.6 / + bug/1434758/comments/11 и добавляют эти две строки где-нибудь в файле
LimitNOFILE=infinity
LimitMEMLOCK=infinity
если один или оба существующие файла, проверьте, включено ли это две строки:
LimitNOFILE=infinity
LimitMEMLOCK=infinity
systemctl daemon-reload
... и все должно быть прекрасным.
Поскольку ни один из вышеперечисленных вопросов не устранил проблему для меня (только приводил к тому, что системе не хватало памяти), вот решение, которое я нашел:
В /etc/mysql/my.conf
вам нужно увеличить внутреннюю open_files_limit в MySQL. Поэтому временно добавьте это в конфигурацию и перезапустите MySQL.
[mysqld]
open_files_limit = 100000
sudo /etc/init.d/mysql restart
После запуска операции, которая выдает ошибку «слишком много открытых файлов », вы можете изменить свою конфигурацию на исходную и снова перезапустить MySQL. [ 117]
Спасибо за обходной путь. Но для меня эта проблема была омрачена двумя другими фактами.
После исправления проблемы 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
Затем сервер начал показывать базы данных, но не может получить доступ к некоторым таблицам. Ваш обходной путь с увеличенными лимитами устранил остальные проблемы, спасибо!