Сервер Ubuntu 16.04 MySql open_file_limit не выйдет выше 65536


16

Я использую Ubuntu 16.04 Server на 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. Я обновил ответ. Действительно, у нас уже были проблемы на наших серверах, потому что мы обновили файл репо /lib/systemd/system/mysql.service. Итак, мы уже перешли к методу, на который вы ссылались. Я забыл обновить свой ответ здесь. Еще раз спасибо за напоминание.
Йерун Вермейлен - MageHost

Эта команда не работает: cat / proc / $ (pgrep mysql) / limit | файлы grep
Василий

1
@BasilA Эта команда работает только после запуска MySQL. Только что проверил это на Ubuntu 16.04.
Йерун Вермёлен - MageHost
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.