Access denied
Error
MySQL server has gone away
Error
Can't connect to [local] MySQL server
Error
Client does not support authentication protocol
error
Host '...' is blocked
Error
Too many connections
Error
Some non-transactional changed tables couldn't be rolled back
Error
Out of memory
Error
Packet too large
Error
The table is full
Error
Can't create/write to file
Error
Commands out of sync
Error in Client
Ignoring user
Error
Table 'xxx' doesn't exist
Error
Can't initialize character set xxx
error
If you get ERROR '...' not found (errno: 23)
, Can't open
file: ... (errno: 24)
, or any other error with errno 23
or
errno 24
from MySQL, it means that you haven't allocated
enough file descriptors for MySQL. You can use the
perror
utility to get a description of what the error number
means:
shell> perror 23 File table overflow shell> perror 24 Too many open files shell> perror 11 Resource temporarily unavailable
The problem here is that mysqld
is trying to keep open too many
files simultaneously. You can either tell mysqld
not to open so
many files at once or increase the number of file descriptors
available to mysqld
.
To tell mysqld
to keep open fewer files at a time, you can make
the table cache smaller by using the -O table_cache=32
option to
mysqld_safe
(the default value is 64). Reducing the value of
max_connections
will also reduce the number of open files (the
default value is 90).
To change the number of file descriptors available to mysqld
, you
can use the option --open-files-limit=#
to mysqld_safe
or
-O open-files-limit=#
to mysqld
.
See section 4.5.7.4 SHOW VARIABLES
.
The easiest way to do that is to add the option to your option file.
See section 4.1.2 `my.cnf' Option Files. If you have an old mysqld
version that
doesn't support this, you can edit the mysqld_safe
script. There
is a commented-out line ulimit -n 256
in the script. You can
remove the '#'
character to uncomment this line, and change the
number 256 to affect the number of file descriptors available to
mysqld
.
ulimit
(and open-files-limit
) can increase the number of
file descriptors, but only up to the limit imposed by the operating
system. There is also a 'hard' limit that can only be overridden if you
start mysqld_safe
or mysqld
as root (just remember that
you need to also use the --user=...
option in this case). If you
need to increase the OS limit on the number of file descriptors
available to each process, consult the documentation for your operating
system.
Note that if you run the tcsh
shell, ulimit
will not work!
tcsh
will also report incorrect values when you ask for the current
limits! In this case you should start mysqld_safe
with sh
!