MySQL variables open_files_limit, table_open_cache and max_connections are
inter-related, and this is for obvious reasons: all deal with file descriptors
one way or another.
If one of the value is provided but others are left out, mysqld calculates
others using a formula and in some cases, emits a warning if not possible.
The whole calculation behind obtaining the final file descriptor limit is a bit
byzantine and is as follows (for Linux):
EDIT: This applies to MySQL 5.5, in 5.6, as Daniël in comments pointed out,
few things have changed, check comment for details. I will probably make a
followup post on the differences.
- First it tries to calculate a minimum requirement based on
table_open_cache. As for other variables, if it is not provided in cnf or
on command line it uses defaults.
<br /> /* MyISAM requires two file handles per table. */ wanted_files= 10+max_connections+table_cache_size*2;