问题记录: 远程连接Linux中MySQL数据库失败的解决方法

远程连接Linux中MySQL失败的解决方法

虚拟机环境:Ubuntu18.04,MySQL5.7.39

问题描述

在虚拟机上安装好MySQL,并配置相关设置,测试建库、建表等操作正常。在尝试用Windows远程连接Linux的MySQL时,连接测试显示失败,于是检查IP端口号等,确认无误,防火墙也已经放行。又切换DataGrip和SQLyog等图形化界面工具,依然显示失败。


原因分析:

远程连接是通过MySQL所在主机的IP和端口来确定主机的逻辑地址,再通过用户和密码来确定登录哪个用户。比如String url = “jdbc:mysql://192.168.183.134:3306/mysql”,就是先在网络层连接IP为192.168.183.134的主机,再去连接这台主机的具体端口3306(传输层),传输层达成连接后,在应用层用账号密码登陆,访问MySQL数据库:Connection conn = DriverManager.getConnection(url, user, password)。


经过翻阅各种文章,怀疑问题可能在于没有授权。通常情况下,mysql默认不共享远程连接的,只能本地localhost连接。这个时候我们就需要在Mysql中做一些授权。

MySQL开启远程访问:

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

flush privileges;

root: 表远程登录使用的用户名
%: 代表允许任意ip登录,如果要指定特定的IP,把%替换掉对应IP即可
password:远程登录时使用的密码
flush privileges:使权限立即生效

重启服务后再次进行连接测试:

service mysql restart

在这里插入图片描述

依然显示失败,
继续查资料,又怀疑是端口设置的问题,然后在/etc/mysql/my.cnf上加上了port=3306,结果还是连不上,显示端口拒绝访问。

用命令$netstat -apn 找到关于端口3306的信息:
在这里插入图片描述
仔细一看,这里提供的IP是127.0.0.1,一般要接收任意主机发送的消息时,IP会设置为0.0.0.0,而127.0.0.1,MySQL默认只提供给本地访问。(从安全的角度看也是合理的)在linux中,MySQL的用户信息存放在mysql库下的user表中,而在此之前,只是更改了表中的LocalHost字段信息,地址依然是只支持本地访问。
在这里插入图片描述
在这里插入图片描述

接下来要做的就是修改配置文件,开启远程访问功能需要的额外设置。

用vim /etc/mysql/my.cnf 命令进入MySQL的配置文件,手动添加如下配置:

port=3306
bind-address=0.0.0.0

在这里插入图片描述
Esc退出编辑,:wq保存退出,service mysql restart重启服务,再次查询:

 select host,user from mysql.user;

在这里插入图片描述
我们可以看到此时的IP已经更改过来了,再次连接:

在这里插入图片描述
显示连接成功!

  • 10
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值