最近做的项目遇到一个问题,就是要把数据库分出去,部署到不同的电脑上,结果总是连接不上。

实际上想法很简单,就是我在一台主机上写程序,通过jdbc连接到另一台服务器上的数据库,操作另一台数据库的内容。 首先在网上查到就是给外部用户提升一个权限,进入mysql之后,输入

1
grant all privileges on 'a.*' to 'root'@'%' identified by 'password'

简单解释一下, all privileges是指允许用户对表进行所有的操作,比如select,delete,update之类的所有操作 a.*是指允许操作的数据库以及表,a是数据库名,*代表是允许操作所有的表 ‘root'@'%'就是你允许哪个ip的人以什么账户接入进来,我这就是允许所有的用户以root的身份登录进来。 最后就是接入进来的密码。 输入完成需要执行下

1
flush privileges

刷新下,或者重启mysql服务也可以。 结果不行,想到我是不是开着防火墙呢?把防火墙关闭了试试。

1
ufw disable

然后还是错误

1
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

接下来网上就开始众说纷纭了,什么jdbc的包不对应的,什么端口不对的,甚至mysql数据库没开启的都有。结果到我这台电脑上全部都不行。 难道就这么的无解啦?终于,在stackoverflow上面,看到一个人说把mysql的绑定地址修改了。 在/etc/mysql/my.cnf文件里面,有这么一句话

1
bind-address = 127.0.0.1

只需要把这句话注释掉,改成

1
#bind-address = 127.0.0.1

重启下mysql

1
service mysql restart

就好使了。 在查找这个问题的过程中,不得不说好多人都是几乎一样的解决办法,好多都是说没开服务器的或者不是3306端口的,我只想说,最好都是本机测试下再确认吧。