问题描述
在ECS上搭建了MySQL服务端,防火墙安全组一切正常,却无法远程访问。
排查
检查连通性
使用本地的电脑扫描服务器端口,得到结果如下:
1
2
3
4
5
6
7
8
9
10
|
⚡yangz ❯❯ nmap -sS MD
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-26 19:23 中国标准时间
Nmap scan report for MD
Host is up (0.045s latency).
Not shown: 996 filtered tcp ports (no-response)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp closed https
3306/tcp closed mysql
|
结果说明3306的端口是放行的,但服务端未能正常工作。
检查端口
在ECS上检查所有端口的使用情况:
1
2
3
4
|
root@minedl:~# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 24735/mysqld
|
mysql绑定到了本地回环测试的地址上,所以无法对外提供服务。也就是问题所在了。
绑定地址配置
mysql的默认配置是将服务地址监听在127.0.0.1
上的,也就不对外提供服务。将绑定地址改到0.0.0.0
上,才能支持远程访问,做如下配置:
1
|
vim /etc/mysql/mysql.conf.d/mysqld.cnf
|
修改其中的bind-address = 0.0.0.0 ,注意不可以直接注释掉,否则会导致如下第二种结果。
1
2
3
|
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 24735/mysqld #只监听localhost
tcp6 0 0 :::3306 :::* LISTEN 24794/mysqld #只监听ipv6,不监听ipv4
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 24877/mysqld #监听所有ipv4
|
出现结果三,本机访问也成功访问。
总结
很多软件和框架,默认绑定地址都是127.0.0.1
,是无法在其它机器访问的。需要改为0.0.0.0
或者:::
,前者是提供ipv4的服务,后者提供ipv6的服务。