我在另一台计算机上有一个MySQL数据库,我希望能够从其他计算机(甚至是不同网络上的计算机)连接。我做了以下
的MySQL
CREATE USER 'username_here'@'%' IDENTIFIED BY 'password_here';
然后
GRANT ALL PRIVILEGES ON *.* TO 'username_here'@'%';
FLUSH PRIVILEGES;
我还在my.ini文件中注释了bind-address
(我有窗口)
然后在Java应用程序(利用MySQL数据库)中我做了
jdbc:mysql://public_ip:3306/database_name
我在jdbc网址中使用了我的公共IP地址。
最后,我在防火墙中打开了端口3306。但我无法远程连接到数据库。我还需要做些什么来连接?
答案 0 :(得分:0)
首先:不要公开发布你的真实IP地址和端口,还要说你打开了防火墙。也许黑客现在发现攻击太容易了,但你不能依赖它; - )。
对于您的问题:也许您将mysql配置为在localhost 3306上侦听而不是在您的公共IP地址上侦听。请在您的shell中输入netstat -ltn
。如果有一行
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
并且没有公共主机地址,那么您只能从网络内部进行访问。然后,您必须在mysql ini文件中配置主机地址。 (只需用您的IP地址替换127.0.0.1或localhost。
答案 1 :(得分:0)
仅供参考:拥有一个公开开放的数据库服务器端口是一个非常糟糕的主意,特别是MySQL
默认(3306
)端口。您只是邀请人们试图侵入您的数据库。
要远程访问MySQL
,请按以下步骤操作:
1)在my.cnf
文件中注释掉以下几行。
#bind-address = 127.0.0.1
#skip-networking
2)重启mysql服务器。
net stop MySQL
net start MySQL
如果您有The service name is invalid
,那么打开任务管理器=>点击服务按钮=>搜索MySql服务=>重新启动
远程连接mysql:
mysql -h HOST -u USERNAME -pPASSWORD
您还可以使用nmap命令检查打开的端口:
nmap -PN Ip_address
注意:在你的问题中屏蔽你的IP地址。
MySQL Java连接:
Class.forName("com.mysql.jdbc.Driver");
// Setup the connection with the DB
Connection connection = DriverManager.getConnection("jdbc:mysql://publicIpAddress/dbName?",
sqluser,password);