Heim > Datenbank > MySQL-Tutorial > MySQL 参数autoReconnect=true 解决8小时连接失效

MySQL 参数autoReconnect=true 解决8小时连接失效

WBOY
Freigeben: 2016-06-07 17:21:15
Original
1936 Leute haben es durchsucht

即使在创建Mysql时url中加入了autoReconnect=true参数,一但这个连接两次访问数据库的时间超出了服务器端wait_timeout的时间限制,

1. 即使在创建Mysql时url中加入了autoReconnect=true参数,一但这个连接两次访问数据库的时间超出了服务器端wait_timeout的时间限制,还是会CommunicationsException: The last packet successfully received from the server was xxx milliseconds ago.
2. 服务器端的参数可以用
  show global variables like 'wait_timeout';
  set global wait_timeout=10;
  来进行设置,但是wait_timeout值不应该设的太高.
3. 较好的策略是对处于idle状态的connection定时发送一个sql,来刷新服务器上的时间戳.这可以使用c3p0r的连接池.
4. 对于tomcat的server.xml中使用的连接池,,http://commons.apache.org/dbcp/configuration.html使用DBCP的连接池可以采用
              type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" 
              username="root" password="test" maxActive="500" maxIdle="10" 
              maxWait="-1" timeBetweenEvictionRunsMillis="10000" minEvictableIdleTimeMillis="10000" />
  4.1 设置validationQuery,这样每次borrow(默认为开启)时会通过这个sql校验连接的有效性,但是增加了时间.
  4.2 设置timeBetweenEvictionRunsMillis="10000" minEvictableIdleTimeMillis="10000" 依赖evictor thread线程来把超时的连接关闭.
  4.3 设置testWhileIdle="true" timeBetweenEvictionRunsMillis="10000" validationQuery="select 1" 使得定时去用query检测处于idle状态的连接,也就刷新了服务器端的时间.

5.每次提交的最大packet大小
show global variables like 'max_allowed_packet';
set global max_allowed_packet=1024*1024;

6. SQLyog 中连接参数的设置
  6.1 在SQLyog中的设置 set autocommit=0,这样当前连接的自动提交为false,可以控制事务了.
  6.2 begin; 事务开始
  6.3 select * from test where 1=1 and id =1 for update;这样就把选到的记录行锁上了,再开一个SQLyog,也执行以上相同的操作,就会一直wait在那里.
  6.4 commit; 提交
  6.5 rollback; 回滚
  6.6 set autocommit=0;后应该加上
      set transaction isolation level read committed;
      这样其它客户端就能看到commit的数据,
  疑问:
      如果不设置set transaction isolation level read committed;如果两个客户端都select 相同的数据,一个客户端修改然后提交,另一个客户端不提交当前事务的前提下,去执行select ,取不到另一客户端提交的数据,不知道SQLyog默认的事务级别是什么样的.

7. SQLyog中查看mysql的状态,show global variables like '%lock%'; 是个好方法.对于事务锁(例如for update)报Lock wait timeout exceeded ,只能通过修改my.ini文件innodb_lock_wait_timeout = 100;才能生效.

8. linux下修改用户密码 mysqladmin -u root password "new_pass"

linux

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage