远程连接到 Google Compute Engine VM 上的 MySQL

Remotely connect to MySQL on Google Compute Engine VM

我的问题与 类似,但由于我没有足够的声誉来发表评论,而且该问题的答案也无济于事,我开始提出一个新问题。

我有一个带有 LEMP 的 GCE VM 实例 MySQL Ver 15.1 Distrib 10.1.18-MariaDB,我正在尝试从我的本地机器远程连接到它。

我已经尝试了我之前提到的问题 link 中的所有建议。

这是我的防火墙配置:

在 my.cnf 文件中我有:

bind-address = 0.0.0.0

关于 MySQL 用户权限我有以下:

当我尝试与 wkreport 用户远程连接时,我得到以下结果:

我的问题是,我错过了什么?!

我刚刚找到了问题的解决方案,

特别感谢@Slava 为我指明了方向,毕竟它是 iptables。

因此,我在尝试远程连接时一直收到 "MySQL connection refused" 消息,因此我搜索了一种查看 TCP 连接日志的方法,并找到了 tcpdump 命令。

通过 运行 sudo tcpdump port 3306 -vvv -n 我每次尝试远程连接时都会看到以下输出:

我搜索了 tcpdump 手册页,发现 R 表示 TCP RST (RESET) 标志。

稍微搜索了一下,发现了这个 question,它接受的答案让我再次进入了@Slava 自第一条评论以来建议的 IPTABLES。

那时我仔细观察发现我的 INPUT ACCEPT tcp:3306 是在 REJECT TCP reject-with tcp-reset 规则之后定义的,因此显示了日志。

在此之后,我删除了接受 tcp:3306 的规则并将其添加到拒绝 tcp 规则之前,瞧!

iptables -D INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
iptables -I INPUT {line number from the first reject tcp rule} -p tcp -m tcp --dport 3306 -j ACCEPT

IPTABLES 现在看起来像这样,最后我可以远程连接到 MySQL:

要列出行号类型的 iptables:

sudo iptables -nL --line-numbers

最后的挑战:

  • 为了安全起见,可以通过将您进行远程连接的源 IP 地址列入白名单来改善这一点。

我在虚拟机实例中遇到了类似的问题。 我测试了所有内容,并通过在 mysql.

上创建一个新用户解决了这个问题

我用这个post解决了。