您的当前位置:首页正文

解决mysql1040错误Toomanyconnections的方法

2022-09-04 来源:布克知识网
解决mysql1040错误Toomanyconnections的⽅法

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

修改/etc/my.cnf这个⽂件,在[mysqld]中新增max_connections=N,如果你没有这个⽂件请从编译源码中的support-files⽂件夹中复制你所需要的*.cnf⽂件为到/etc/my.cnf。我使⽤的是my-medium.cnf,中型服务器配置。例如我的[mysqld]的内容如下 复制代码 代码如下:

[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

由于对mysql还不是很熟悉,所以很多参数没有修改。哈哈。。 2、⾮使⽤mysqld脚本⾃动启动的⽤户。

修改$MYSQL_HOME/bin/mysqld_safe⽂件

例如:/usr/local/mysql/bin/mysqld_safe这个⽂件

grep -n 'max_connection' $MYSQL_HOME/bin/mysqld_safe 修改对应⾏号的max_connections参数值 以上⽅法为参考⽹上的做法写的。

在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连接到同⼀个数据库服务器(⼀个就够了).这需要好的编码习惯和规范.特别是不断的给系统增加

新的功能,如果不注重系统架构和编码规范,当系统的复杂度到了⼀定的程度,整个系统就变得⽆法维护了.出现问题的时候解决起来就很⿇烦了. 解决⽅法是修改/etc/mysql/my.cnf,添加以下⼀⾏: set-variable = max_connections=500

或在启动命令中加上参数max_connections=500

就是修改最⼤连接数,然后重启mysql.默认的连接数是100,太少了,所以容易出现如题错误

1.可能是mysql的max connections设置的问题

2.可能是多次insert,update操作没有关闭session,需要在spring⾥配置transaction⽀持。解决:

1.修改tomcat⾥的session 的time-out时间减少为20,(不是必改项)2.对处理量⼤的对数据库insert或update的操作提供transaction⽀持.

=======================================下⾯的是解决办法:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: \"Too many connections\"因为你的mysql安装⽬录下的my.ini中设定的并发连接数太少或者系统繁忙导致连接数被占满

解决⽅式:

打开MYSQL安装⽬录打开MY.INI找到max_connections(在⼤约第93⾏)默认是100 ⼀般设置到500~1000⽐较合适,重启mysql,这样1040错误就解决啦。

max_connections=1000⼀定要重新启动MYSQL才能⽣效CMD->net stop mysqlnet start mysql

innodb_buffer_pool_size=768Minnodb_log_file_size=256Minnodb_log_buffer_size=8Minnodb_additional_mem_pool_size=4Minnodb_flush_log_at_trx_commit=0innodb_thread_concurrency=20以上是对innodb引擎的初步优化, 发现是更新innodb_log_file_size=256M时候出现了问题,只要加上这个就⽆法启动,后来才知道原来要STOP服务先,然后再删除原来的⽂件………打开/MySQL Server 5.5/data删除ib_logfile0, ib_logfile1........ib_logfilen再开启选项,成功启动。

因篇幅问题不能全部显示,请点此查看更多更全内容