Невозможно увеличить max_open_files для Mysql max-соединений в Ubuntu 15
Я запускаю эту версию Mysql
Ver 14.14 Distrib 5.6.24, for debian-linux-gnu (x86_64)
В этой версии Ubuntu
Distributor ID: Ubuntu
Description: Ubuntu 15.04
Release: 15.04
Codename: vivid
Это конфигурация, установленная для Mysql:
key_buffer_size = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
innodb_buffer_pool_size=20G
innodb_log_buffer_size=16M
tmp_table_size = 32M
max_heap_table_size = 32M
open-files-limit=4510
max_connections=500
myisam-recover = BACKUP
query_cache_type=1
query_cache_limit = 32M
query_cache_size = 32M
Это предупреждения, которые я получаю при запуске MYSQL:
2015-06-17 17:28:53 26720 [Warning] Buffered warning: Could not increase number
of max_open_files to more than 1024 (request: 4510)
2015-06-17 17:28:53 26720 [Warning] Buffered warning: Changed limits: max_connections:
214 (requested 500)
2015-06-17 17:28:53 26720 [Warning] Buffered warning: Changed limits: table_open_cache:
400 (requested 2000)
Я уже пробовал следующие шаги:
1) Добавьте это к /etc/security/limits.conf
mysql soft nofile 65535
mysql hard no file 65535
2) Добавьте это к /etc/pam.d/common-auth
и /etc/pam.d/commom-session
session required pam_limits.so
3) Добавьте это к /etc/mysql/mysql.conf.d/mysqld.cnf
open-files-limit=4510 or open_files_limit=4510
Ни один из них не работал, и я до сих пор не могу подключить mysql max до 500.
Я бы очень признателен за помощь в этом вопросе.
Большое спасибо заранее.
Ответы
Ответ 1
Ubuntu переместился с Upstart на Systemd в версии 15.04 и больше не соблюдает ограничения в /etc/security/limits.conf для системных служб. Эти ограничения теперь применяются только к сеансам пользователя.
Пределы для службы MySQL определены в файле конфигурации Systemd, который вы должны скопировать из своего местоположения по умолчанию в /etc/systemd, а затем отредактировать копию.
sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/
sudo vim /etc/systemd/system/mysql.service # or your editor of choice
Добавьте следующие строки в конец файла:
LimitNOFILE=infinity
LimitMEMLOCK=infinity
Вы также можете установить числовой предел, например LimitNOFILE=4510
.
Теперь перезагрузите конфигурацию Systemd с помощью
sudo systemctl daemon-reload
Перезапустите MySQL, и теперь он должен подчиняться директиве max_connections.
У меня также были проблемы с остановкой MySQL после обновления до 15.04. Если это повлияет на вас (вы будете знать, потому что это займет около 300 секунд, когда вы делаете service mysql stop
или service mysql restart
), добавив следующую строку в тот же файл /etc/systemd/system/mysql.service, исправленный для меня:
ExecStop=/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf shutdown
Эта последняя проблема, по-видимому, была исправлена 16.04, и эта строка больше не требуется, поэтому перед обновлением дистрибутива вы захотите остановить MySQL и удалить строку ExecStop
из файла конфигурации.
Ответ 2
Я предлагаю вам не копировать существующий файл mysql.service, как было предложено, просто создайте файл только с теми изменениями, которые вам интересны. Итак:
mkdir /lib/systemd/system/mysql.service.d
vim /etc/systemd/system/mysql.service.d/limits.conf
И содержимое limit.conf просто:
[Service]
LimitNOFILE=10000
LimitMEMLOCK=10000
или любые ограничения, которые вы предпочитаете.
Ответ 3
Как и в случае с MySQL 5.7.7, это то, что рекомендует документация для Red Hat Enterprise Linux 7, Oracle Linux 7, CentOS 7, SUSE Linux Enterprise Server 12, Fedora 24 и 25:
https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html
В Ubuntu 16.04 служба называется mysql, а не mysqld, поэтому это то, что я сделал:
sudo mkdir /etc/systemd/system/mysql.service.d
sudo vi /etc/systemd/system/mysql.service.d/override.conf
Добавлено это в новый файл override.conf:
[Service]
LimitNOFILE=5000
Затем перезапустите службу:
sudo systemctl daemon-reload
sudo systemctl restart mysql