[1104 13:24:51.431][evo-brm][DruidDataSource$CreateConnectionThread:run:2787][Druid-ConnectionPool-Create-1771413157][ERROR] create connection SQLException, url: jdbc:mariadb://172.*.*.103:3306/evo_brm?connectTimeout=60000&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=Asia/Shanghai&socketTimeout=60000, errorCode -1, state 08java.sql.SQLNonTransientConnectionException: Could not connect to 172.*.*.103:3306: unexpected end of stream, read 0 bytes from 4at org.mariadb.jdbc.internal.util.ExceptionMapper.get(ExceptionMapper.java:123) ~[mariadb-java-client-1.4.6.jar:?]at org.mariadb.jdbc.internal.util.ExceptionMapper.throwException(ExceptionMapper.java:69) ~[mariadb-java-client-1.4.6.jar:?]at org.mariadb.jdbc.Driver.connect(Driver.java:110) ~[mariadb-java-client-1.4.6.jar:?]at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1652) ~[druid-1.2.4.jar:1.2.4]at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1718) ~[druid-1.2.4.jar:1.2.4]at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2785) ~[druid-1.2.4.jar:1.2.4]
Caused by: org.mariadb.jdbc.internal.util.dao.QueryException: Could not connect to 172.24.74.103:3306: unexpected end of stream, read 0 bytes from 4at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.handleConnectionPhases(AbstractConnectProtocol.java:459) ~[mariadb-java-client-1.4.6.jar:?]at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connect(AbstractConnectProtocol.java:358) ~[mariadb-java-client-1.4.6.jar:?]at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:713) ~[mariadb-java-client-1.4.6.jar:?]at org.mariadb.jdbc.internal.util.Utils.retrieveProxy(Utils.java:471) ~[mariadb-java-client-1.4.6.jar:?]at org.mariadb.jdbc.Driver.connect(Driver.java:105) ~[mariadb-java-client-1.4.6.jar:?]... 3 more
Caused by: java.io.EOFException: unexpected end of stream, read 0 bytes from 4at org.mariadb.jdbc.internal.packet.read.ReadPacketFetcher.getPacket(ReadPacketFetcher.java:100) ~[mariadb-java-client-1.4.6.jar:?]at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.authentication(AbstractConnectProtocol.java:476) ~[mariadb-java-client-1.4.6.jar:?]at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.handleConnectionPhases(AbstractConnectProtocol.java:447) ~[mariadb-java-client-1.4.6.jar:?]at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connect(AbstractConnectProtocol.java:358) ~[mariadb-java-client-1.4.6.jar:?]at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:713) ~[mariadb-java-client-1.4.6.jar:?]at org.mariadb.jdbc.internal.util.Utils.retrieveProxy(Utils.java:471) ~[mariadb-java-client-1.4.6.jar:?]at org.mariadb.jdbc.Driver.connect(Driver.java:105) ~[mariadb-java-client-1.4.6.jar:?]... 3 more
“unexpected end of stream, read 0 bytes from 4” 错误通常与网络连接或数据流的处理有关。在您提到的上下文中,尤其是与 DNS 服务器配置错误和 /etc/hosts
文件配置错误相关,我们可以进一步详细描述这些根本原因。
1. DNS 服务器配置错误
DNS(域名系统)服务器负责将域名解析为 IP 地址。如果 DNS 服务器的配置不正确,可能会导致网络请求失败,进而产生“unexpected end of stream”类似的错误。
可能的配置错误:
- DNS 服务器地址不正确:如果配置了错误的 DNS 服务器地址,客户端可能无法找到正确的服务器,从而无法获取所需的资源。
- DNS 记录缺失或不正确:如果 DNS 记录存在问题(例如 A 记录、CNAME 记录设置不当),域名解析可能错误,导致连接失败。
- DNS 服务器未响应:如果 DNS 服务器由于故障或过载而未响应,客户端将无法完成域名解析,这也会导致数据流意外终止。
- DNS 缓存问题:客户端或者 DNS 服务器的缓存可能包含过期或错误的记录,可能导致解析过程中出现问题。
解决方案:
- 检查 DNS 配置,确保所使用的 DNS 服务器地址是正确的。
- 使用工具如
nslookup
或dig
来验证 DNS 解析是否正常。 - 清除 DNS 缓存,看是否解决了问题。
2. 服务器 /etc/hosts
配置文件错误
/etc/hosts
文件用于在本地计算机上进行域名解析,允许将域名映射到 IP 地址。此文件的错误配置可能会导致网络请求失败。
可能的配置错误:
- 格式错误:
/etc/hosts
文件中的条目如果格式不正确(例如错误的空格、无效的换行符),会导致解析失败。 - 缺失的条目:若在
/etc/hosts
文件中缺少必要的域名到 IP 地址的映射,系统将无法找到相关服务,导致网络请求中断。 - 错误的 IP 地址:如果将域名映射到了错误的 IP 地址,可能导致请求发送至不正确的服务器,或导致连接失败。
- 优先级问题:在某些系统中,
/etc/hosts
文件的优先级高于 DNS,配置不当可能导致系统优先使用本地配置,导致无法访问外部服务。
解决方案:
- 检查
/etc/hosts
文件中的条目,确保格式正确,且所有必要的映射都存在。 - 确认 IP 地址与实际的服务器地址一致,避免将域名指向错误的 IP。
- 在必要时,临时禁用
/etc/hosts
文件的使用,尝试直接通过 DNS 解析来确认问题是否与此相关。
总结
这些配置错误可能导致程序无法成功建立网络连接,从而在读取数据时遇到“unexpected end of stream, read 0 bytes from 4”的错误。因此,确保 DNS 和 /etc/hosts
文件配置正确是解决问题的关键步骤。