If you get a Too many connections error
when you try to connect to the mysqld
server, this means that all available connections are in use
by other clients.
The number of connections permitted is controlled by the
max_connections system
variable. The default value is 151 to improve performance when
MySQL is used with the Apache Web server. (Previously, the
default was 100.) If you need to support more connections, you
should set a larger value for this variable.
mysqld actually permits
max_connections+1
clients to connect. The extra connection is reserved for use
by accounts that have the SUPER
privilege. By granting the
SUPER privilege to
administrators and not to normal users (who should not need
it), an administrator can connect to the server and use
SHOW PROCESSLIST to diagnose
problems even if the maximum number of unprivileged clients
are connected. See Section 13.7.5.30, “SHOW PROCESSLIST Syntax”.
The maximum number of connections MySQL supports depends on the quality of the thread library on a given platform, the amount of RAM available, how much RAM is used for each connection, the workload from each connection, and the desired response time. Linux or Solaris should be able to support at 500 to 1000 simultaneous connections routinely and as many as 10,000 connections if you have many gigabytes of RAM available and the workload from each is low or the response time target undemanding. Windows is limited to (open tables × 2 + open connections) < 2048 due to the Posix compatibility layer used on that platform.
Increasing open-files-limit may
be necessary. Also see Section 2.5, “Installing MySQL on Linux”,
for how to raise the operating system limit on how many
handles can be used by MySQL.
[mysqld]
set-variable=max_connections=250
Server administrators can disable persistent connections for PHP scripts in php.ini file:
[MySQL]
; Allow or prevent persistent links.
mysql.allow_persistent=Off
Scripts won't fail, they'll just use non-persistent connections silently.
php_value mysql.connect_timeout 20
define('USE_PCONNECT', 'false'); // use persistent connections?
It defaults to true, so mysql_pconnect() is used, and you get the error message "Warning: mysql_pconnect(): Too many connections ..." Change to false for mysql_connect() to be used.
set-variable=max_connections=500
should be placed in the [mysqld] section. Otherwise MySQL will ignore it.
Full explanation of what I've encountered here: http://www.microshell.com/database/mysql/mysql-too-many-connection-errors/
mysql> SET GLOBAL max_connections = 200;
However, this only lasts until the MySQL Server restarts.
i.e.
do ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
open files (-n) 256
pipe size (512 bytes, -p) 10
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 29995
virtual memory (kbytes, -v) unlimited
Here "open files = 256" which is a very low setting.
At "open files = 1024" I was limited to 214 max connections.
In order the get the 500 + I wanted, I had to set "open files = 4096"
i.e. ulimit -n 4096