在阿里云的服务器上使用docker安装了MySQL, 然后远程访问总是不通。 查询了很久,排查思路如下:

  1. 检查mysql是否启动,服务是否正常
  2. 检查本机3306端口是否处于监听状态
  3. 检查阿里云控制台是否开启了安全限制, 限制3306和23端口
  4. 检查mysql用户能否在远程进行登录
  5. mysql 的 bind-address 设置为 127.0.0.1

mysql是否启动

这个比较简单, ps -ef | grep mysql 如果能看到对应的进程就是没有问题的

如果使用docker安装,需要docker ps 查看对应的状态

检查本机3306端口是否处于监听状态

可以通过netstat -tlanp | grep 3306 来看mysql是否在监听。

主要如果使用docker安装,要查看docker 3306端口所对应开发是否是指定IP,还是0.0.0.0

如果本地端口监听状态 telnet 127.0.0.1 3306 看看是否成功, 如果成功。则说明本地服务没有问题。

远程 telnet 公网ip 3306

则 在远程 telnet 公网ip 3306 来判断一下是否成功, 如果成功说明没有问题, 如果失败,继续往下看。

查看服务是否安装防火墙,是否开放了3306端口。

检查阿里云控制台是否开启了安全限制
阿里云默认是不会打开 3306端口的,也不会打开telnet的23端口。

需要进行设置, 设置方法见: https://help.aliyun.com/document_detail/25471.html?spm=5176.11065259.1996646101.searchclickresult.42468fa7McebNN

检查mysql用户能否在远程进行登录

如果远程 telnet 公网ip 3306 能够成功。但是使用账户密码链接,提示失败。可能是mysql用户的权限控制导致。

一般root用户都默认只能localhost本机登录。

新建mysql用户的时候 授权ip需要填写 % 。

1
grant select,insert,update,delete on *.* to user@% identified by "123456";

上面语句表示允许user用户在任何IP登录。

可以通过服务器进入mysql然后查询下。

1
2
mysql -u root -p
select host,user from mysql.user;

Mysql8登录密码错误

mysql8的身份验证机制有做修改。可以查看相关文章Docker安装mysql8及远程链接

Mysql bind-address

  1. mysql 的 bind-address 设置为 127.0.0.1

要找到bind-address的设置, 需要找到mysql的配置文件
$ sudo find / -name my.cnf

这个时候就能看到所有的配置相关的文件

原文

阿里云telnet 3306端口失败