1040 - Too many connections mysql连接错误

目录
[隐藏]

问题现象:

连接mysql服务器时提示如下错误:

#1040 – Too many connections

问题分析:

连接数超过了 MySQL 设置的值,与 max_connections 和 wait_timeout  都有关系。wait_timeout 的值越大,连接的空闲等待就越长,这样就会造成当前连接数越大。

从官方文档知道linux上面编译安装的mysql默认的连接为100个,这样对于网站的需求来说是远远不够的。
mysql官方告诉我们需要修改max_connections的值,那么我们怎么去修改呢?

解决方法:

1、虚拟主机用户请联系空间商优化 MySQL 服务器的配置;
2、独立主机用户请联系服务器管理员优化 MySQL 服务器的配置,可参考:
修改 MySQL 配置文件(Windows下为 my.ini, Linux下为 my.cnf )中的参数。在[mysqld]中新增max_connections=N,如果没有这个文件请从编译源码中的support-files文件夹中复制你所需要的*.cnf文件为到/etc/my.cnf,或者自行新建。以下为该文件内容参考:

[mysqld]
port              = 3306
socket            = /tmp/mysql.sock
skip-locking
key_buffer = 160M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
max_connections= 1000
wait_timeout = 5

对于非使用mysqld脚本自动启动的用户。
修改$MYSQL_HOME/bin/mysqld_safe文件
例如:/usr/local/mysql/bin/mysqld_safe这个文件
grep -n 'max_connection' $MYSQL_HOME/bin/mysqld_safe
修改对应行号的max_connections参数值

相关:mysql_pconnect() 和mysql_connect()函数

在PHP手册里面找关于mysql_connect和mysql_pconnect的资料,下面是在php手册中对这两个函数的描述:

 mysql_connect 函数原型:
     resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]])
返回:
     如果成功则返回一个MySQL 连接标识,失败则返回FALSE。
描述:
     mysql_connect() 建立一个到MySQL 服务器的连接。当没有提供可选参数时使用以下默认值:server = 'localhost:3306',username =
服务器进程所有者的用户名,password = 空密码。
    如果用同样的参数第二次调用mysql_connect(),将不会建立新连接,而将返回已经打开的连接标识。参数new_link 改变此行为并使
mysql_connect() 总是打开新的连接,甚至当mysql_connect() 曾在前面被用同样的参数调用过。参数client_flags 可以是以下常量的组合
:MYSQL_CLIENT_COMPRESS,MYSQL_CLIENT_IGNORE_SPACE 或者MYSQL_CLIENT_INTERACTIVE。
     注: new_link 参数自PHP 4.2.0 起可用。
         client_flags 参数自PHP 4.3.0 起可用。 
一旦脚本结束,到服务器的连接就会被关闭。除非之前已经调用了mysql_close() 来关闭它。
 

mysql_pconnect 函数原型:
resource mysql_pconnect ( [string server [, string username [, string password [, int client_flags]]]])
返回:
如果成功则返回一个正的MySQL 持久连接标识符,出错则返回FALSE。
描述:
     mysql_pconnect() 建立一个到MySQL 服务器的连接。如果没有提供可选参数,则使用如下默认值:server = 'localhost:3306',
username = 服务器进程所有者的用户名,password = 空密码。client_flags 参数可以是以下常量的组合:MYSQL_CLIENT_COMPRESS,
MYSQL_CLIENT_IGNORE_SPACE 或者MYSQL_CLIENT_INTERACTIVE。
     server 参数也可以包括端口号,例如"hostname:port",或者是本机套接字的的路径,例如":/path/to/socket"。
     注: 对":port" 的支持是3.0B4 版添加的。
         对":/path/to/socket" 的支持是3.0.10 版添加的。

两者之间的区别 :

mysql_pconnect() 和mysql_connect() 非常相似,但有两个主要区别。
     首先,当连接的时候本函数将先尝试寻找一个在同一个主机上用同样的用户名和密码已经打开的(持久)连接,如果找到,则返回此连接标识而不打开新连接。
     其次,当脚本执行完毕后到SQL 服务器的连接不会被关闭,此连接将保持打开以备以后使用(mysql_close() 不会关闭由mysql_pconnect() 建立的连接)。
     可选参数client_flags 自PHP 4.3.0 版起可用。此种连接称为"持久的"。
 
     小结一下,要保证你的系统不会出现Too many connections 错误,需要注意两点:
     1.保证你的apache的最大进程数不超过mysql的最大连接数;
     2.不要在程序里面用过多mysql_pconnect连接到同一个数据库服务器(一个就够了).这需要好的编码习惯和规范。

点赞 (1)
  1. 90后博客说道:

    面对高人 我只能 仰望

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Captcha Code