Столкнулся с подобной проблемой на сервере — через какое-то время mysql-сервер начинал сыпать такими ошибками в огромном количестве и полностью залипал, помогал только рестарт сервиса.

Исходя из ошибки, сразу пошел проверять лимит на максимальное количество открытых файлов/дескрипторов и обнаружил, что их малова-то для этого сервера :

MariaDB [(none)]> show global variables like 'open_files_limit';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 10000 |
+------------------+-------+
1 row in set (0.00 sec)

Тогда как в определенные моменты, исходя по lsof видно было, что этого реально мало.

Выставил везде новый лимит — 45000, а именно:

# grep mysql /etc/security/limits.conf 
mysql hard nofile 45000
mysql soft nofile 45000

 

# grep Limit /usr/lib/systemd/system/mariadb.service
LimitNOFILE=infinity
LimitMEMLOCK=infinity

И все вроде бы хорошо и правильно, но вот не хватает чего-то, т.к. при старте сервиса ругается:

Could not increase number of max_open_files to more than 10000

Я уже голову сломал, и весь lve перелопатил и cagefs (хотя там с чего бы…) — без результатов.

И тут товарищ натолкнул на мысль, где я НЕ посмотрел, а именно:

/etc/systemd/system/mariadb.service.d/

А там обнаружился чудо-файлик, под названием:

/etc/systemd/system/mariadb.service.d/migrated-from-my.cnf-settings.conf

В котором и содержалась вредная строка:

[Service]

LimitNOFILE=10000

Подправил её, далее:

systemctl daemon-reload
systemctl restart mariadb.service

Ииии, все заработало!