Applicable to:
- Plesk for Linux
Symptoms
-
When backing up/restoring/exporting/importing a MySQL database in Plesk, the following error message is shown:
PLESK_INFO: mysqldump: Got error: 1016: "Can't open file: './example_db/table.frm' (errno: 24)" when using LOCK TABLES
PLESK_INFO: Not all the data was backed up into [...]/databasename_1 successfully. mysqldump: Got error: 23: Out of resources when opening file '[...]' (Errcode: 24 - Too many open files) when using LOCK TABLES
-
The value of
max_connections
changes to214
automatically after some time, although the value itself is defined inmy.cnf
:# grep -i 'max_connections' /etc/my.cnf
max_connections=2048# plesk db "SHOW GLOBAL VARIABLES LIKE 'max_connections' \G"
*************************** 1. row ***************************
Variable_name: max_connections
Value: 214
Cause
Default open_files_limit
for MySQL has been reached.
Resolution
Increase open_files_limit
for the MySQL service as below.
Note: The solution below is applicable to systemd-based systems:
- RHEL/CentOS/CloudLunix 7 and above
- Ubuntu 16.04 and above
- Debian 8 and above
-
Connect to the server via SSH.
-
Find the MySQL service in use:
# systemctl list-unit-files | grep -E 'mysql|mariadb'
mariadb.service enabled -
Open the service configuration file from the step above in an editor:
# systemctl edit mariadb.service
-
Add the following content:
CONFIG_TEXT: [Service]
LimitNOFILE=4096 -
Restart the MySQL/MariaDB server to apply the changes:
# systemctl restart mysql mysqld mariadb 2>/dev/null
If the same error appears after these changes, increase the value.
On System V/Upstart systems (Ubuntu 14.04, RHEL/CentOS/CloudLinux 6)
-
Connect to the server via SSH.
-
Add the following lines in
/etc/security/limits.conf
:CONFIG_TEXT: mysql soft nofile 4096
mysql hard nofile 4096 -
Add the following to the end of file into
/etc/pam.d/common-session
:CONFIG_TEXT: session required pam_limits.so
-
Add the following to the end of file into
/etc/pam.d/common-session-noninteractive
:CONFIG_TEXT: session required pam_limits.so
-
Add the following line in
/etc/mysql/my.cnf
and under the[mysqld]
section:CONFIG_TEXT: open_files_limit = 4096
-
Restart the MySQL service:
# service mysql restart
-
Connect to the server via SSH.
-
Add the following line in
/etc/sysctl.conf
:CONFIG_TEXT: fs.file-max = 65536
-
Edit the file
/etc/security/limits.conf
and add lines:CONFIG_TEXT: * soft nproc 40960
* hard nproc 40960
* soft nofile 40960
* hard nofile 40960 -
Edit the file
/etc/security/limits.d/90-nproc.conf
and add lines:CONFIG_TEXT: * soft nproc 40960
* hard nproc 40960
* soft nofile 40960
* hard nofile 40960 -
Add the following line in
/etc/my.cnf
and under the[mysqld]
section:CONFIG_TEXT: open_files_limit = 4096
-
Restart the MySQL service:
# service mariadb restart
Comments
4 comments
Ubuntu has moved from Upstart to Systemd from version 15.04 and no longer respects the limits in /etc/security/limits.conf for system services. These limits now apply only to user sessions.
The limits for the MySQL service are defined in the Systemd configuration file, which you should copy from its default location into /etc/systemd and then edit the copy.
sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/
sudo vim /etc/systemd/system/mysql.service # or your editor of choice
Add the following lines to the bottom of the file:
LimitNOFILE=infinity
LimitMEMLOCK=infinity
You could also set a numeric limit, eg LimitNOFILE=4096
Now reload the Systemd configuration with:
sudo systemctl daemon-reload
Restart MySQL and it should now obey the max_connections directive.
Hello nisamudeen,
Thank you for your reply! A section regarding systemd systems was added accordingly.
Yes it work,after setting params in /etc/systemd/system/mysql.service ,this is for newer ubuntu versions
Been trying for hours, now. None of these solutions is increasing the number above 4185. seems that limit is set somewhere else.
Please sign in to leave a comment.