MySQL远程连接失败_以阿里云linux3为例

在本地的Navicat连接服务器上的数据库时,出现如下错误:


image.png

遇到问题要学会拆解、分析,从不同的角度考虑问题,慢慢缩小问题范围,最终发现并解决问题;

一个远程的服务连接不上,一般的,考虑:
1、本地和远程是否互通
2、权限是否有问题
而我们的报错中并没有提到权限相关问题;

1、解决网络互通问题

这里,先分析第一种可能:

1.1、使用ping命令

  • 如果ping不通,参考官方文档:

安全相关:检查ECS安全组、云防火墙、安全管控状态。
安全组相关问题:具体操作请参见删除ECS实例的默认安全组规则导致无法ping通ECS实例。
云防火墙相关问题:请登录云防火墙控制台,在访问控制中,检查是否存在由外对内的拒绝规则,禁止了端口的访问和ICMP协议。
安全管控相关问题:具体操作请参见添加安全组规则,添加对安全组ICMP协议的入方向的安全策略。

1.2、使用telnet命令

(win11的telnet命令在”可选功能“中打开,参照文章末尾)
如果ping没问题,但telnet失败,显示 ”在端口xxx连接失败“

image.png

就表示端口未放行。
如果出现端口未放行,怎么办?需要排查两种情况。

  • 1.查看阿里云服务器控制台是否设置了安全组规则。这个需要阿里云账号登录到阿里云,进入服务器控制台设置安全组规则。 具体教程:阿里云服务器如何设置安全组规则图文教程
    也可以参考文章:https://blog.csdn.net/qq_42992704/article/details/104696432

  • 2.查看云服务器Linux系统是否设置了防火墙规则。查看防火墙是否关闭了端口。这个需要ssh远程连接你的linux服务器来查看和设置防火墙规则。具体教程,浏览本文
    1,查看防火墙状态

systemctl status firewalld.service

2,开启防火墙

systemctl start firewalld.service

3,关闭防火墙

systemctl stop firewalld.service

4,禁用防火墙

systemctl disable firewalld.service

5,查看防火墙已开放端口列表

firewall-cmd --list-all

案例:

[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dhcpv6-client ssh
  ports: 3306/tcp  //已经开放的端口会在这里显示。没有显示的端口,是访问不了的。
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

6,防火墙添加端口

[root@localhost ~]# firewall-cmd --permanent --add-port=3306/tcp
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dhcpv6-client ssh
  ports: 8080/tcp 3306/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

7,防火墙关闭端口

[root@localhost ~]# firewall-cmd --permanent --remove-port 3306/tcp
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dhcpv6-client ssh
  ports: 8080/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

来自:https://zhuanlan.zhihu.com/p/344784016

2、解决MySQL远程连接的授权问题

2.1、第一种方法

  • 一般需要改下服务器上mysql的权限,首先登录服务器上的mysql,%:表示可以任何主机都能连接到mysql服务器
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '这里写自己数据库的密码' WITH GRANT OPTION;
  • 或者也可以把 % 换成自己本地的IP地址,如:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.x.x' IDENTIFIED BY '这里写自己数据库的密码' WITH GRANT OPTION;
  • 最后刷新权限使其生效
FLUSH PRIVILEGES;

2.2、 第二种方法

  • 此时的MySQL配置不支持远程连接,登录服务器的mysql后,查看root用户下的 host
use mysql;

select host from user where user='root';
image.png
  • 可以看到root用户下只有 localhost 本地支持连接
  • localhost设置为通配符%,就可以允许远程连接了
update user set host = '%' where user ='root';

localhost 指的是用户开放的IP,可以是localhost(仅本机访问,相当于127.0.0.1),可以是具体的某一IP,也可以是 ‘%’ (所有IP均可访问)

  • 查看更改后的变化
select host, user from user;
  • 最后刷新权限即可
FLUSH PRIVILEGES;

来自:https://developer.aliyun.com/article/872622

附:win11 telnet命令开通过程:

image.png
image.png

你可能感兴趣的:(MySQL远程连接失败_以阿里云linux3为例)