我在 Ubuntu 上运行 MySQL。climysql
也是如此http://localhost/phpmyadmin
,但我无法使用以下命令进行连接java.sql.DriverManager.getConnection
:
java.net.SocketException: Network is unreachable (connect failed)
ps
告诉我服务正在运行
/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
文件/etc/mysql/my.cnf
包含/etc/mysql/mysql.conf.d/
另一个文件my.cnf
,该文件包含
[mysqld]
port = 3306
使用 cli,show variables like 'skip_networking'
是OFF
。
netstat -l | grep sql
表示 UNIX 域套接字正在监听,但是 TCP 上没有任何用于 sql 的内容。
这就是为什么jdbc无法连接的原因吗?
我如何解决它?
答案1
检查netstat
端口 3306 是否正在监听。
还请验证是否bind-address
设置为以太网接口地址(或“*”)而不是本地主机地址(这是替代 skip-networking 的新默认值,很可能是问题的根源)。
如果根本没有这条线,那么应该用那默认并有效,因此注释该行也是好的。
在某些系统上,localhost
并且127.0.0.1
不同的含义:前者表示 UNIX 连接,后者表示 TCP 连接。我曾经遇到过这种情况,但已经不记得是在哪个系统上。
确保 Java 套接字连接做连接到您的服务器地址。紧急情况下,尝试使用命令行 MySQL 连接到服务器使用--host
参数强制建立 TCP 连接。
最后,为了确保万无一失,iptables -L -n
应该告诉您该连接是否可能受到防火墙保护。