一台电脑不能连接另外一台电脑的数据库

本文介绍了如何解决“Communications link failure”错误,包括延长MySQL连接回收时间、配置连接池测试连接有效性、调整Windows防火墙设置及数据库用户权限等方法。
出现的问题:
Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

解决:
原因1:
首先,请确定客户端电脑能否ping通服务器电脑。不能估计是原因2,可以的话可以继续本方法。

大部分原因是由于数据库回收了连接,而系统的缓冲池不知道,继续使用被回收的连接所致的。

       以MySQL为例:

       第一种解决办法,就是将mysql回收空闲连接的时间变长,mysql默认回收时间是8小时,可以在mysql目录下的my.ini中增加下面配置,将时间改为1天。单位是秒,最大好像是24天:

          [mysqld]

          wait_timeout=86400

       第二种解决办法,可以通过配置,让缓冲池去测试连接是否被回收,如果被回收,则不继续使用,以dbcp为例:

          #SQL查询,用来验证从连接池取出的连接
          dbcp.validationQuery=SELECT 1
          #指明连接是否被空闲连接回收器(如果有)进行检验,如果检测失败,则连接将被从池中去除
          dbcp.testWhileIdle=true
          #在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位,一般比minEvictableIdleTimeMillis小
          dbcp.timeBetweenEvictionRunsMillis=300000
          #在每次空闲连接回收器线程(如果有)运行时检查的连接数量,最好和maxActive一致
         dbcp.numTestsPerEvictionRun=50
          #连接池中连接,在时间段内一直空闲,被逐出连接池的时间(1000*60*60),以毫秒为单位
          dbcp.minEvictableIdleTimeMillis=3600000



原因2:
windows防火墙不允许访问。关闭防火墙,或者允许指定端口访问。

原因3:
1。改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%" 1.mysql -u root -pvmwaremysql>use mysql;mysql>update user set host = '%' where user = 'root';mysql>select host, user from user; 
2. 授权法。例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。 GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; 如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器,并使用mypassword作为密码 GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
3.在window自带的防火墙里的例外添加3306端口 总结: mysql -u root -p mysql>use mysql; mysql>select 'host' from user where user='root'; mysql>update user set host = '%' where user ='root'; mysql>flush privileges; mysql>select 'host' from user where user='root'; 第一句是以权限用户root登录 第二句:选择mysql库 第三句:查看mysql库中的user表的host值(即可进行连接访问的主机/IP名称) 第四句:修改host值(以通配符%的内容增加主机/IP地址),当然也可以直接增加IP地址 第五句:刷新MySQL的系统权限相关表 第六句:再重新查看user表时,有修改。。 重起mysql服务即可完成。

如果第一个方法不行,在网上查了一下,少执行一个语句 mysql>FLUSH   PRIVILEGES
使修改生效.就可以了


### 电脑连接远程数据库报错解决方案 在处理电脑连接一台电脑上的数据库时,出现的报错问题通常与网络配置、数据库用户权限、连接字符串或驱动程序版本等因素有关。以下是针对此类问题的详细分析和解决方法: #### 1. 检查数据库服务是否启动 确保目标数据库服务器已正确启动,并允许远程连接。例如,在MySQL中可以通过以下命令检查: ```sql SHOW VARIABLES LIKE 'skip_networking'; ``` 如果`skip_networking`的值为`ON`,则需要将其设置为`OFF`[^1]。 #### 2. 配置防火墙规则 确认目标数据库服务器的防火墙规则是否允许外部IP地址访问数据库端口(如MySQL默认3306端口)。可以通过以下命令临时关闭防火墙进行测试: ```bash sudo systemctl stop firewalld ``` 或者添加特定端口的放行规则: ```bash sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload ``` #### 3. 修改数据库用户权限 若报错信息类似于`Host ‘XXXX’ is not allowed to connect to this MySQL server`,可能是因为数据库用户的权限未正确配置。可以按照以下步骤修改用户权限[^4]: - 登录数据库服务器:`mysql -u root -p` - 切换到`mysql`数据库:`use mysql;` - 修改用户权限:`update user set Host='%' where User='root';` - 刷新权限:`flush privileges;` #### 4. 校验连接字符串和驱动程序 确保客户端使用的连接字符串与数据库类型匹配。例如,在使用MySQL时,若数据库版本较高,则需要指定正确的驱动类名: ```yaml spring.datasource.driver-class-name: com.mysql.cj.jdbc.Driver ``` 同时,确认`application.yml`或类似配置文件中的数据库地址、用户名、密码及数据库名称均正确无误[^1]。 #### 5. 检查网络连通性 通过`ping`命令测试客户端与数据库服务器之间的网络连通性。例如: ```bash ping <数据库服务器IP> ``` 如果无法正常通信,可能是网络配置或路由问题导致。 #### 6. 使用工具排查问题 对于Navicat等图形化工具连接Oracle或MySQL数据库时,可参考相关解决方案[^2][^3]。例如,Navicat连接Oracle报错时,需检查TNS配置文件是否正确;而连接MySQL时,确保工具版本支持目标数据库的协议版本。 --- ### 示例代码 以下是一个简单的Java程序,用于测试与远程MySQL数据库连接: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DatabaseConnectionTest { public static void main(String[] args) { String url = "jdbc:mysql://<数据库IP>:3306/<数据库名称>?serverTimezone=UTC"; String username = "<用户名>"; String password = "<密码>"; try (Connection connection = DriverManager.getConnection(url, username, password)) { System.out.println("数据库连接成功!"); } catch (SQLException e) { System.err.println("数据库连接失败:" + e.getMessage()); } } } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值