第一步,检查网络连接是否稳定,重启路由器和电脑试试,很多时候就是网络抖动导致的超时。
方法一:调整连接池参数
在配置文件里把连接超时时间改大点,比如MySQL的connectTimeout=30000,socketTimeout=60000,测试了下直接就好了,以前老是连不上。
网友分享:我用的是JDBC,添加了?useSSL=false&serverTimezone=UTC&connectTimeout=10000&socketTimeout=30000,问题瞬间解决,实测有效!
方法二:重启数据库服务
最简单的方法就是重启MySQL服务,管理员权限下 services.msc 找到MySQL,重启一下,连接超时直接没了,收藏备用。
另一个网友:数据库服务器内存不够,连接多了就超时,杀掉一些进程,重启服务,立马正常。
方法三:修改my.cnf配置
在my.cnf里加wait_timeout=28800,max_connections=1000,重启mysql,连接超时的毛病全没了,亲测管用。
实测经验:innodb_lock_wait_timeout = 120,设置这个后大表查询超时问题解决了。
方法四:检查防火墙和端口
关掉防火墙,或者在防火墙里放行3306端口,远程连接超时就是这个原因,测试有效。
网友验证:用telnet ip 3306 测试连不通,开了端口后完美。
方法五:Java代码层面解决
用HikariCP连接池,设置leakDetectionThreshold=60000,maximumPoolSize=20,连接超时问题没了。
代码片段:Properties props = new Properties(); props.setProperty("connectTimeout","5000"); props.setProperty("socketTimeout", "10000"); 直接加到url后,实测ok。
FAQ
Q: 为什么数据库连接总是超时?
A: 通常是网络不稳、配置时间太短或服务器负载高引起的,先检查网络。
Q: 修改配置后还需要重启吗?
A: 是的,大部分参数需要重启数据库服务生效。
Q: 远程连接超时怎么搞?
A: 检查端口3306是否开放,防火墙别挡着。
Q: 代码里怎么设置超时时间?
A: 在JDBC URL后加connectTimeout和socketTimeout参数。