1.過程
同事按照文件上配置了下面的jdbc url:
jdbc:mysql://ip:port/db?autoReconnect=true&useUnicode=true&characterEncoding=utf-8
結果導致了 mysql slow log 出現了滿屏的 ping 命令,
# User@Host: db[db] @ [ip] # Query_time: 0.000017 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 Logical_reads: 0 Physical_reads: 0 SET timestamp=1456991083; # administrator command: Ping;
$ ll -h mysqlslow20161115.log
-rw-rw---- 1 dba dba 58G Nov 15 14:17 mysqlslow20161115.log
最後我找到其他同事詢問他們怎麼配置的,為什麼他們的業務沒有生成這麼多日誌呢?最後對比以後發現,其他同事配置了 dbcp 框架,通過dbcp 框架來提供連線池。
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.user}" /> <property name="password" value="${jdbc.password}" /> <property name="maxActive" value="200" /> <property name="maxIdle" value="30" /> <property name="maxWait" value="500" /> <property name="defaultAutoCommit" value="true" /> <property name="minEvictableIdleTimeMillis" value="3600000" /> <property name="timeBetweenEvictionRunsMillis" value="600000" /> </bean>
其中 jdbc.url 引數和前面一個同事麼有區別(ip port db 除外)。
最後解決辦法:
考慮到再讓他們加框架比較費勁,就讓開發把 autoReconnect=true 取消掉了。tail -f mysqlslow.log 沒有發現新增的了。看來裸加一個 autoReconnect 還是很不靠譜的。最後推薦一篇我搜尋時候找到的一篇連線:https://www.percona.com/blog/2010/05/05/checking-for-a-live-database-connection-considered-harmful/