无法远程连接GCP云Windows Server上的MySQL,报ETIMEDOUT错误
解决方案:排查Google Cloud Windows Server 2019上MySQL的远程连接超时问题
从你描述的情况来看,telnet失败但ping正常说明网络层面的TCP端口访问被阻断了,结合你的操作,以下是具体排查和修复步骤:
1. 检查Windows Server本地防火墙
GCP的入站规则只是外部访问的第一道关卡,Windows Server自带的防火墙可能会默认阻止3306端口的外部请求:
- 打开「Windows Defender防火墙」→「高级设置」→「入站规则」
- 新建规则:选择「端口」→ 协议选「TCP」→ 特定本地端口填
3306→ 选择「允许连接」→ 按需勾选「域、专用、公网」→ 命名规则(比如「MySQL远程访问」) - 也可以临时关闭防火墙测试,如果能连接,就说明是本地防火墙的问题,再把规则恢复即可。
2. 修改MySQL绑定地址
MySQL默认仅监听本地127.0.0.1,需要配置为允许所有IP访问:
- 找到MySQL配置文件
my.ini(通常隐藏在C:\ProgramData\MySQL\MySQL Server X.X目录下) - 找到
bind-address配置项,修改为:
如果没有这一行,直接添加到bind-address = 0.0.0.0[mysqld]区块下 - 重启MySQL服务(在「服务」列表中找到对应MySQL服务,右键选择「重启」)
3. 验证MySQL监听状态
在Windows Server的命令提示符中执行以下命令,确认MySQL是否在正确监听:
netstat -ano | findstr :3306
如果输出包含0.0.0.0:3306或服务器公网IP:3306,说明监听正常;如果只有127.0.0.1:3306,说明绑定地址配置未生效,需要重新检查my.ini。
4. 确认用户权限配置正确性
虽然你已经执行了权限SQL,但可以再验证配置是否生效:
登录MySQL执行以下查询:
SELECT user, host, plugin FROM mysql.user WHERE user = 'auth0user';
需要确保:
- 存在
host为%的记录 plugin字段值为mysql_native_password- 密码与Node.js脚本中的
password123完全一致
5. 优化Node.js脚本的错误输出
修改你的脚本,打印具体错误信息,方便后续排查:
const mysql = require('mysql'); const connection = mysql.createConnection({ host: '3x.xx.xx.x6', port: 3306, // 建议使用数字类型而非字符串 user: 'auth0user', password: 'password123', database: 'mydb' }); connection.connect(function(err) { if (!err) { console.log('Connected successfully!'); } else { console.error('Connection failed:', err.message); // 可选:打印完整错误栈 // console.error(err.stack); } });
内容的提问来源于stack exchange,提问作者mikeyMike
相关产品推荐
相关产品推荐

