连接MySQL数据库时出现The dirver has not received any packets from the server

本文解决了一个特定的MySQL连接问题:CommunicationsException导致的Communications link failure。错误原因是超过默认闲置时间,解决方案涉及调整连接URL,并指出root账户可能仅允许通过localhost访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看到网上很多很多的论坛与博客,终于找到我的错误的原因,先上图吧,

使用Connector/J连接MySQL数据库:Communications link failure,The last packet successfully received from the server was *** millisecond ago.The last packet successfully sent to the server was ***  millisecond ago。 这个错误的话,是因为你超过了MySQL的默认闲置时间,要到mini上面改下参数,但是问题的关键不在我,我的错误是:CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driv
er has not received any packets from the server.

解决方法:把Connetion URL=jdbc:mysql://127.0.0.1:3306/mysong

结论:一般而言,默认情况下,root好像只可以通过localhost访问,ip是不可以的,是没有权限,需要修改myslq配置文件。如果数据库和你部署的服务器是用一台机器,那么使用localhost没有问题,要是不在同一台,可能需要改mysql配置,保证ip可以访问。

### 解决 DBeaver 连接 MySQL 出现 “The driver has not received any packets from the server” 问题 此问题是由于多种原因引起的,包括但不限于驱动版本不匹配、SSL 设置不当以及网络连接异常等问题。以下是详细的解决方案。 --- #### 一、检查 MySQL 配置 确保 MySQL 已经正确配置以接受远程连接请求: 1. 修改 MySQL 的绑定地址为 `0.0.0.0`,以便允许来自任何 IP 地址的连接。 编辑 MySQL 配置文件 `/etc/my.cnf` 或 `/etc/mysql/my.cnf`,找到并修改以下内容: ```ini bind-address = 0.0.0.0 ``` 2. 确保防火墙已开放 MySQL 默认端口(3306)。可以执行以下命令临关闭防火墙进行测试: ```bash sudo service firewalld stop ``` 或者只开放特定端口: ```bash sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload ``` 3. 授权用户可以从任意主机访问数据库[^5]。例如,创建一个名为 `test` 的用户,并赋予其全局权限: ```sql USE mysql; CREATE USER 'test'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; SELECT user, host FROM user; ``` --- #### 二、验证网络连通性 在网络层面排查是否存在阻断情况: 1. 使用 `ping` 命令检测虚拟机是否可达: ```bash ping <虚拟机IP> ``` 2. 测试目标端口是否开放: ```bash telnet <虚拟机IP> 3306 ``` 如果无法成功建立连接,则可能是防火墙或其他安全策略阻止了通信。 --- #### 三、调整 JDBC URL 参数 根据引用材料中的经验[^2][^4],尝试更改 JDBC URL 中的相关参数: - **禁用 SSL**:部分情况下,默认启用 SSL 可能导致握手失败。因此可将 `useSSL` 设定为 false: ```plaintext jdbc:mysql://<虚拟机IP>:3306/<database>?serverTimezone=UTC&useSSL=false ``` - 添加超选项防止因长间未响应引发中断: ```plaintext jdbc:mysql://<虚拟机IP>:3306/<database>?serverTimezone=UTC&useSSL=false&connectTimeout=10000 ``` --- #### 四、校验驱动版本一致性 确认所使用的 MySQL Connector/J 版本与目标数据库版本兼容[^3]: - 若目标数据库MySQL 5.x,则推荐使用较旧版的驱动程序(如 v5.1.x)而非最新版(v8.x)。可通过如下方式更换驱动: - 打开 DBeaver 的 `Database` -> `Driver Manager`; - 查找对应 MySQL Driver 并点击 `Edit`; - 删除现有 jar 文件后上传适合的驱动包(例如 [mysql-connector-java-5.1.49.jar](https://dev.mysql.com/downloads/connector/j/))。 --- #### 五、调试日志分析 如果上述措施均未能解决问题,进一步借助日志定位根本原因: 1. 启用客户端的日志记录功能,在 DBeaver 中设置高级属性: ```properties logger.level=FINEST log.file=/path/to/logfile.log ``` 2. 结合服务器侧错误日志共同诊断潜在冲突点。 --- ```python # 示例 Python 脚本用于简单测试连接 import pymysql.cursors connection = pymysql.connect( host='192.168.200.130', user='root', password='your_password', database='gulimall_pms', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor, ssl_disabled=True ) try: with connection.cursor() as cursor: sql = "SELECT VERSION()" cursor.execute(sql) result = cursor.fetchone() print(result) finally: connection.close() ``` --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值