How to Fix an (errno: 24) in MySQL
When creating a large number of partitions or tables, MySQL may mysteriously stop working and you find this type of error on /var/lib/mysql/$HOSTNAME.err:
[ERROR] /usr/sbin/mysqld: Can't open file: './database/table.frm' (errno: 24)
errno: 24 simply means that too many files are open for the given process. There is a read-only mysql variable called open_files_limit that will show how many open files are allowed by the mysqld:
SHOW VARIABLES LIKE 'open%'
A lot systems set this to something very low, like 1024. Unfortunately, the following will NOT work:
SET open_files_limit=100000
MySQL will respond with:
ERROR 1238 (HY000): Variable 'open_files_limit' is a read only variable
However, it is possible to make a change to /etc/my.cnf. This file may not exist, if not, just create it. Be sure it has the following contents:
[mysqld]
open_files_limit = 100000
Then, be sure to restart mysql:
sudo /etc/init.d/mysql restart
Now, SHOW VARIABLES LIKE 'open%' should show 100000. The number you use may be different.
When creating a large number of partitions or tables, MySQL may mysteriously stop working and you find this type of error on /var/lib/mysql/$HOSTNAME.err:
[ERROR] /usr/sbin/mysqld: Can't open file: './database/table.frm' (errno: 24)
errno: 24 simply means that too many files are open for the given process. There is a read-only mysql variable called open_files_limit that will show how many open files are allowed by the mysqld:
SHOW VARIABLES LIKE 'open%'
A lot systems set this to something very low, like 1024. Unfortunately, the following will NOT work:
SET open_files_limit=100000
MySQL will respond with:
ERROR 1238 (HY000): Variable 'open_files_limit' is a read only variable
However, it is possible to make a change to /etc/my.cnf. This file may not exist, if not, just create it. Be sure it has the following contents:
[mysqld]
open_files_limit = 100000
Then, be sure to restart mysql:
sudo /etc/init.d/mysql restart
Now, SHOW VARIABLES LIKE 'open%' should show 100000. The number you use may be different.