我们已经准备好了,你呢?

2026我们与您携手共赢,为您的企业形象保驾护航!

[id_62[[[id_19[]83118]3731]060]]

今日在尝试接入MySQL数据库时,程序长时间未作出响应,经过数分钟后,向我反馈了大量异常信息。

[id_[id_906936[id_249538675]3]415[id_397[id_41[id_583407581]47333]5108]580][id_389999401].mchange.v2[id_205199614].BasicResourcePool[id_47848148][id_[id_2671[id_1082220613]03]0890572]out[id_695634702]in针对新客户的需求作出回应。
java.sql.SQLException:[id_8166[id_113936288]595]
[id_19[id_202061889]882576]com.mchange.v2.sql[id_1321650279].toSQLException(SqlUtils[id_1705479212]:118)
    at com.mchange.v2.c3p0.impl[id_1755962522]3P0PooledConnectionPool.checkoutPooledConnection[id_139270525].java:692)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140)
    at cn.wjinlong.spring.jdbc.JDBCTest.testDataSource(JDBCTest.java:43)
    at sun.reflect[id_1533263303].invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[id_18024[id_2024149056]87].lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model[id_1792475897]$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run[id_241300174].java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners[id_574235982]4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run[id_9333[id_352892211]12].java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
    at com.intellij.rt.execution.junit.JUnitStarter[id_1547644569](JUnitStarter.java:[id_217350022])
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: com.mchange.v2.resourcepool无法获取资源异常资源池无法从其主工厂获取所需资源。or source.
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1469)
    at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:644)
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:554)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool进行结账并标注该连接已被占用(C3P0PooledConnectionPool.java:758)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:685)
    ... 24 more
Caused by: com[id_1435136968].jdbc[id_365302225].jdbc4.CommunicationsException: Communications link failure
最近成功发送至服务器的最后一个数据包是0数毫秒之前,驾驶员尚未从服务器获取到任何数据包。
    at sun.reflect.GeneratedConstructorAccessor6.newInstance(Unknown Source)
    at sun.reflect委托构造器访问实现.newInstanceDelegatingConstructorAccessorImpl 类不允许对构造函数进行直接调用,它通过代理机制间接执行构造函数的初始化过程。.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.SQLError引发通信异常(SQLError.java:989)
    at com.mysql.jdbc.MysqlIO.(MysqlIO.java:341)
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2192)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2225)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2024)
    at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:779)
    at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47)
    at sun.reflect.GeneratedConstructorAccessor5.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)
    at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175)
    at com.mchange.v2.c3p0Wrapper连接池数据源.getPooledConnectionWrapperConnectionPoolDataSource 是一种特殊的数据库连接池数据源,它通过封装其他数据源来提供连接池功能,确保应用程序在运行过程中能够高效地管理数据库连接。.java:220)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
    at com.mchange.v2.c3p0.impl.C对3P0PooledConnectionPool进行管理的是名为1PooledConnectionResourcePoolManager的组件。.acquireResource(C3P0PooledConnectionPool.java:203)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
    at com.mchange.v2.resourcepool.BasicResourcePool在成功获取锁的情况下,禁止在锁内对挂起的获取操作进行获取与递减。(BasicResourcePool.java:1125)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
    at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
    at com.mysql.jdbc.MysqlIO.(MysqlIO.java:300)
    ... 20 more

解决过程

异常的大概意思就是无法从数据库获得连接,所以:

我首先对数据库的配置文件进行了仔细的审查,核实了其中的用户名、密码以及URL等关键信息,以确保没有因疏忽而误输入多余的空格。经过反复检查,最终确认配置文件一切正常。

尽管我的配置信息已经确认无误,我还是怀疑数据库用户的权限可能存在缺陷,因此我决定对用户的权限进行了仔细的核查。

该SQL指令显示的是:展示针对用户名为‘test’且主机为‘%’的相关信息;其中,‘test’代表用户名,‘%’代表主机。

可以看到,test用户拥有对test数据库的所有权限。

此刻我感到十分困惑,不明白问题究竟出在哪里。以前曾多次成功连接,为何这次却遇到了麻烦?经过一番深思熟虑,我发现这次与以往的不同之处在于,我这次连接的是远端的服务器上的MySQL数据库,而之前连接的都是本地服务器上的MySQL。这让我怀疑,或许是远程服务器的防火墙阻止了外部访问。于是,我决定检查一下远程主机的防火墙设置。

可以看到,防火墙并没有拦截的规则。

十分恼火,哈哈哈。这情形真是令人费解,反复思考仍旧毫无头绪,忽然间,我的小脑袋瓜灵机一动,我决定运用(图形化连接数据库的工具)去连接那远端的数据库,想弄清楚问题究竟出在哪里。

2003年,无法在‘xx.xx.xx.xx’上连接MySQL,遇到了(10061号)“错误”问题。

成功报告了错误,我感到非常高兴,因为这表明程序运作正常。此外,我还获得了错误编号,随即开始查找相关资料。有人提出,这个错误可能是由于MySQL服务未启动造成的,这让我不禁感到一阵紧张。这本来是我最先应该考虑的问题,于是我立刻检查了MySQL的状态。

虚惊一场,我就说么,怎么会犯这种错误。

5. 没办法了,是时候祭出我的大法器啦——官方文档

在官方网站上成功找到了相关文档,并且定位到了出现连接错误的部位。点击该链接即可直接跳转。

从文档中发现一段话,和我的问题高度吻合。

于是我去查看了下MySQL的配置文件:

请注意,红框内标注的bind地址为127.0.0.1,这是MySQL的默认配置。在此情况下,我们应当检查MySQL的端口号配置情况。

似乎发现了某些异常,请注意我标记的红框中的127.0.0.1地址,这很可能是问题的根源。稍后我会对此进行详细说明。现在,我们先暂时将bind地址的配置项12.70.0.1进行注释处理,然后重启MySQL服务。重启完成后,我们再次尝试连接,结果连接成功!

这时候我们看一下MySQL的端口情况:

此刻的Local地址已由127.0.0.1变更为0.0.0.0,这意味着在外部访问数据库时,可以与本机的任意IP地址建立连接,而不再局限于本地的回环IP地址127.0.0.1。

总结

MySQL的默认配置中,bind-127.0.0.1的设置会妨碍远程数据库的连接。因此,若需远程访问MySQL,可在其配置文件中将该行取消注释,或将127.0.0.1替换为客户端的IP地址。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/10346.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线