我有一个通过Java JDBC访问的MySQL数据库,它在我的本地网络中正常工作(使用localhost
或192.168.*.*
本地地址)。但是我也想从Internet远程访问它,当我使用全局地址176.214.186.243
连接到它时(它是dynamyc地址,但在我尝试尝试的两天内保持静止),我遇到下一个错误com.mysql.cj.jdbc.exceptions.CommunicationsException: 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.
在MySQL工作台中,我在Picture上显示了特权(所有特权。
但是我仍然无法使用全局IP连接到数据库。
我在做什么错了?
答案 0 :(得分:0)
您应授予指定的用户访问特定IP地址的权限,例如:
将schema.table上的[特权|所有特权]授予“用户名” @“主机名” 由“密码”标识
可以选择; 冲洗特权;
有关更多信息,请使用https://dev.mysql.com/doc/refman/8.0/en/grant.html,https://stackoverflow.com/a/6239145/2137378
更喜欢mysql文档。检查您的mysql版本,并继续关于mysql的确切版本文档。
当然,以上描述是为了让mysql引擎知道其远程用户,并且这两者之间是否存在障碍,例如应该以某种方式解决防火墙。例如如果您使用的是ubuntu,则可以使用以下方法将其禁用来检查防火墙是否是主要问题:
sudo ufw disable
在禁用防火墙并授予特权之后,可以进行远程访问,那么您就知道防火墙是问题所在。如果使用则启用:
sudo ufw enable
答案 1 :(得分:0)
mysql限制对用户,表和远程地址的任何组合的访问。在您的情况下,用户很可能可以在本地访问所有内容,但不能从外部访问(例如,对于root用户来说这是一件好事)。可以通过以下方式更改:
GRANT ALL ON <database>.* TO 'client'@'%.%.%.%' IDENTIFIED BY '<a password for external usage>';
FLUSH PRIVILEGES;
<database>.*
授予对<database>
中alle表的访问权限client
%.%.%.%
表示1.-4处的任何IP地址。数字可以是任何东西
<a password for external usage>
仅用于此连接,可以是其他连接。更多信息here