Сервер Ubuntu 16.04 MySql open_file_limit не перевищить 65536


16

Я запускаю сервер Ubuntu 16.04 на XenServer, і я стикаюся з проблемою з обмеженням відкритого файлу MySql.

Ось що я зробив досі:

sudo nano /etc/security/limits.conf (посилання)

* soft nofile 1024000
* hard nofile 1024000
* soft nproc 102400
* hard nproc 102400
mysql soft nofile 1024000
mysql hard nofile 1024000

sudo nano /etc/init/mysql.conf (посилання)

limit nofile 1024000 1024000
limit nproc 102400 102400

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf (посилання)

[mysqld_safe]
open_files_limit = 1024000


[mysqld]
open_files_limit = 1024000

Коли вищезгадане не спрацювало, я перейшов до наступного:

sudo nano /etc/sysctl.conf

fs.file-max = 1024000

sudo nano /etc/pam.d/common-session

session required pam_limits.so

sudo nano /etc/pam.d/common-session-noninteractive

session required pam_limits.so

sudo nano /lib/systemd/system/mysql.service

LimitNOFILE=infinity
LimitMEMLOCK=infinity

Коли я входжу в обліковий запис користувача, все здається:

ulimit -Hn
1024000
ulimit -Sn
1024000

Якщо я ввійду як mysql, це також добре виглядає:

mysql@server:~$ ulimit -Hn
1024000
mysql@server:~$ ulimit -Sn
1024000

Однак, коли я дивлюсь на процедуру:

ps -ef | grep mysql
cat /proc/1023/limits | grep open
Max open files  65536 65536 files   

Або коли я дивлюся на це в MySql:

mysql> show global variables like 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 65536 |
+------------------+-------+

З журналів (/var/log/mysql/error.log):

2016-07-25T05: 44: 35.453668Z 0 [Попередження] Не вдалося збільшити кількість max_open_files до більше 65536 (запит: 1024000)

Я тут абсолютно не в ідеях. На початку я починав з open_files_limit з 1024, і один із перерахованих вище, мабуть, змінив його, але мені потрібно, щоб він піднявся вище. Я досягаю цієї межі вже тому, що у мене дуже багато баз даних і таблиць, які іноді мають багато розділів.

Я навіть спробував цифри менш агресивні, ніж 1024000, без удачі.

Якісь ідеї там?

Відповіді:


24

Це працювало для мене на Ubuntu Xenial 16.04:

Створіть реж /etc/systemd/system/mysql.service.d

Введіть /etc/systemd/system/mysql.service.d/override.conf:

[Service]
LimitNOFILE=1024000

Тепер виконуй

systemctl daemon-reload
systemctl restart mysql.service

Так, LimitNOFILE=infinityнасправді, здається, це встановлено на 65536.

Ви можете перевірити вищезазначене після запуску MySQL, виконавши:

cat /proc/$(pgrep mysql)/limits | grep files

1
Оскільки я прийшов сюди першим, але відчув трохи задоволення від коригування якогось системного файлу, я знайшов ще одну нитку, яка пояснює, як виправити файл, який не ризикує перезаписати, під час наступного оновлення: stackoverflow.com/questions/27849331/…
Thomas Urban

Дякуємо @cepharum. Я оновив відповідь. Дійсно, у нас вже виникли проблеми на наших серверах, оскільки ми оновили файл repo /lib/systemd/system/mysql.service. Тож ми вже перейшли до методу, на який ви зверталися. Я забув тут оновити свою відповідь. Ще раз дякую за нагадування.
Jeroen Vermeulen - MageHost

Ця команда не працює: cat / proc / $ (pgrep mysql) / limit | grep files
Василь А

1
@BasilA Ця команда працює лише після запуску MySQL. Щойно тестували його на Ubuntu 16.04.
Jeroen Vermeulen - MageHost
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.