MySQL超时时间设置:使用Druid可以配置。
具体设置方法,代码如下:
<!-- 超过时间限制是否回收 -->
<property name="removeAbandoned" value="true" />
<!-- 超时时间;单位为秒。180秒=3分钟 -->
<property name="removeAbandonedTimeout" value="180" />
<!-- 关闭abanded连接时输出错误日志 -->
<property name="logAbandoned" value="true" />
1.客户端和服务端建立tcp连接超时:connect_timeout2.客户端的连接长期处于空闲连接(sleep)状态超时:interactive_timeout和wait_timeout
3.服务端等待读取客户端发来的数据超时:net_read_timeout
4.服务端等待把数据写给客户端(客户端没有接收)的超时:net_write_timeout
5.事务等待获取行锁(row lock)超时,返回应用失败:innodb_lock_wait_timeout
6.如果innodb_lock_wait_timeout超时自动回滚事务的话(0或1):innodb_rollback_on_timeout
7.事务等待获取MDL锁(metadata locks)超时:lock_wait_timeout
8.stop slave命令的执行超时时间(被回放的大事务阻塞住):rpl_stop_slave_timeout
9.主从复制间,主从hello包的超时时间:slave_net_timeout
10.当innodb_flush_log_at_trx_commit=0/2时,刷新redo log的频率:innodb_flush_log_at_timeout
connect_timeoutconnect_timeout指的是连接过程中握手的超时时间,在5.0.52以后默认为10秒,之前版本默认是5秒。官方文档是这样说的:
connect_timeout: The number of seconds that the mysqld server waits for a connect packet before responding with Bad handshake. The default value is 10 seconds as of MySQL 5.0.52 and 5 seconds before that
mysql的基本原理应该是有个监听线程循环接收请求,当有请求来时,创建线程(或者从线程池中取)来处理这个请求。由于mysql连接采用TCP协议,那么之前势必是需要进行TCP三次握手的。TCP三次握手成功之后,客户端会进入阻塞,等待服务端的消息。服务端这个时候会创建一个线程(或者从线程池中取一个线程)来处理请求,主要验证部分包括host和用户名密码验证。host验证我们比较熟悉,因为在用grant命令授权用户的时候是有指定host的。用户名密码认证则是服务端先生成一个随机数发送给客户端,客户端用该随机数和密码进行多次sha1加密后发送给服务端验证。如果通过,整个连接握手过程完成。(具体握手过程后续找到资料再分析)
由此可见,整个连接握手可能会有各种可能出错。所以这个connect_timeout值就是指这个超时时间了。
interactive_timeout &wait_timeout
还是先看官方文档,从文档上来看wait_timeout和interactive_timeout都是指不活跃的连接超时时间,连接线程启动的时候wait_timeout会根据是交互模式还是非交互模式被设置为这两个值中的一个。如果我们运行mysql -uroot -p命令登陆到mysql,wait_timeout就会被设置为interactive_timeout的值。如果我们在wait_timeout时间内没有进行任何 *** 作,那么再次 *** 作的时候就会提示超时,这是mysql client会重新连接。
The number of seconds the server waits for activity on a noninteractive connection before closing it.
On thread startup, the session wait_timeout value is initialized from the glob
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)