
Убунту: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- принесли решение:
- проверьте, существует ли /lib/systemd/system/mysql.service или /lib/systemd/system/mysqld.service
(в моем случае) если нет, создайте /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
... и все должно быть хорошо.
решение3
Поскольку ни один из вышеперечисленных способов не решил проблему (привел лишь к нехватке памяти в системе), вот решение, которое я нашел:
Вам /etc/mysql/my.conf
нужно увеличить внутренний open_files_limit MySQL. Поэтому временно добавьте это в конфигурацию и перезапустите MySQL.
[mysqld]
open_files_limit = 100000
sudo /etc/init.d/mysql restart
После выполнения операции, которая дает вамслишком много открытых файловЕсли возникла ошибка, вы можете вернуть конфигурацию по умолчанию и перезапустить MySQL еще раз.
решение4
Спасибо за решение. Но для меня этот вопрос затмили два других факта.
- Мой каталог данных отличается от установки по умолчанию. По нескольким причинам, как историческим, так и техническим.
- Я обновлял очень старую установку, которая прошла через ряд возвратов и пересылок. При первом запуске недавно установленной 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
Затем сервер начал показывать базы данных, но не смог получить доступ к некоторым таблицам. Ваш обходной путь с увеличенными лимитами исправил остальные проблемы, спасибо!