在mysql中connection设置和wait-timeout的设置

1>MYSQL中遇到too   many  connections的解决方案


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
 

2>mysql中通过设置wait-timeout来提高mysql的性能


在日常的MySQL服务器中,wait-timeout这个参数非常有用。
(在部分MySQL的默认配置中可能没有wait-timeout这个参数项,你在[mysqld]节中加上即可)
参数意义:MySQL客户端的数据库连接闲置最大时间值。

参数默认值:默认值为8小时 。

这个参数的大概意思是某一个MySQL客户端连接闲置的最大时间值,即某一个MySQL客户端连接过程中,闲置的最大时间到达后服务器将其关闭。
MySQL服务器所支撑的最大连接数是有限的,因为每一个连接、第一个表打开的操作都要消耗服务器内存,理想状态是当一个MySQL客户端连接完成工作就自动断开释放内存,如果你的你的网站有大量的MySQL链接请求,这些连接完成SQL执行任务后空闲着啥事也不干,白白占用内存资源,如果 这些连接堆积起来,将导致MySQL超过最大连接数,从而无法新建MySQL连接,有可能导致“Too many connections”的错误。
可以在设置之前用show processlist查看一下MySQL状态,如果你发现你的MYSQL中有大量的Sleep进程,哪么你真的需要设置你的wait-timeout了。依你的程序而定设置多大的值 ,我的设置wait-timeout=10,MySQL中的所有Sleep线程最多只能“睡”10秒,之后就被强行关闭了。



问题:
   如果在配置文件my.cnf中只设置参数wait_timeout=100,则重启服务器后进入,执行:
   Mysql> show variables like “%timeout%”;
会发现参数设置并未生效,仍然为28800(即默认的8个小时)。
查询资料后,要同时设置interactive_timeout和wait_timeout才会生效。
【因此,只需要对MySQL的配置文件进行修改就可以了。
  1.Windows下,配置文件路径为MySQL安装的根目录中。my.ini
  2.Linux系统下,配置文件为路径/etc/my.cnf
  文件中加入
Configuration代码  收藏代码
  1. [mysqld]   
  2. wait_timeout=20  
  3. interactive_timeout=20   
 
  保存退出,重启mysql服务。 
  
  相关参考
  1.MySQL5手册。
  2.http://hi.baidu.com/thinkinginlamp/blog/item/d9e0cb13b04c5428dd540111.html。其中提供了默认参数的一些优化配置方法。



问题1:这里为什么要同时设置interactive_timeout,wait_timeout的设置才会生效?
答:    不设置interactive_timeout,wait_timeout也会生效。
问题2:interactive的值如果设置的和wait_timeout不同,为什么Interactive_timeout会覆盖wait_timeout?
答:在交互模式下(CLIENT_INTERACTIVE),interactive_timeout才生效,非交互模式下,不生效。

问题3:在进行MySQL优化时,因为interactive_timeout决定的是交互连接的时间长短,而wait_timeout决定的是非交互连接的时间长短。如果在进行连接配置时mysql_real_connect()最后一个参数client_flag不设置为CLIENT_INTERACTIVE,是不是interactive_timeout的值不会覆盖wait_timeout?
答:可以做实验试试。

问题4:为了减少长连接的数量,在设置优化时是不是可以将interactive_timeout的值设置的大些,而wait_timeout的值设置的小些?但是问题2的描述好像又不允许这样。。。

答:如2所述,在交互模式下,interactive_timeout取代wait_timeout。这样,如果有的客户端是交互模式方式连接mysql server。那么客户端的timeout受制于interactive_timeout。如果有的客户端是非交互模式,长连接mysql server。那么客户端的timeout受制于wait_timeout。(是否是交互模式的连接,由客户端决定)

3>如何设置wait_timeout的值比较合理??

我的理解是:比如讲wait_timeout值设置为100s意思是说在你访问数据库的间隔超过100s服务器会与客户端断开连接,再次访问数据库则能再次建立连接。

你可能感兴趣的:(在mysql中connection设置和wait-timeout的设置)