求助:使用R脚本连接Ubuntu系统MySQL服务器失败
解决RStudio连接Ubuntu MySQL失败的问题
从你的描述来看,Windows防火墙确实是最可能的元凶,不过咱们可以一步步排查确认,同时也覆盖其他容易忽略的小问题:
1. 先验证Windows防火墙是否拦截了3306端口
你可以先临时关闭Windows防火墙做个测试:
- 打开「Windows Defender防火墙」→ 「启用或关闭Windows Defender防火墙」
- 把私有和公用网络的防火墙都临时关闭,然后再执行
telnet x.x.x.x 3306测试连接
如果这次能连上了,那百分百是防火墙的问题,接下来要给3306端口添加放行规则: - 回到防火墙设置,点击「高级设置」→ 「入站规则」→ 「新建规则」
- 选择「端口」→ 下一步,输入「3306」,选择「TCP」协议
- 选择「允许连接」→ 勾选对应网络类型(根据你的实际使用环境调整)→ 给规则起个好记的名字(比如「MySQL 3306端口远程访问」)
- 别忘了同步设置「出站规则」,确保Windows能主动发起3306端口的连接请求
2. 确认Ubuntu端的MySQL是否允许远程连接
虽然你能通过Putty登录Ubuntu,但MySQL默认只允许本地连接,这也会导致外部连不上:
- 用Putty登录Ubuntu,打开MySQL配置文件(通常路径是
/etc/mysql/mysql.conf.d/mysqld.cnf) - 找到
bind-address这一行,把它改成0.0.0.0(允许所有IP访问),或者直接改成你Windows机器的具体IP - 重启MySQL服务生效:
sudo systemctl restart mysql - 还要确认你的MySQL用户有远程访问权限:
登录MySQL:mysql -u root -p
执行权限授权命令:GRANT ALL ON *.* TO '你的MySQL用户名'@'你的Windows机器IP' IDENTIFIED BY '你的密码';
刷新权限:FLUSH PRIVILEGES;
3. 检查Ubuntu本地防火墙是否拦截了3306端口
Ubuntu默认可能启用了ufw防火墙,也会挡住外部的连接请求:
- 登录Ubuntu后,先检查ufw状态:
sudo ufw status - 如果看到3306端口没有被允许,就添加放行规则:
sudo ufw allow 3306/tcp - 重启ufw让规则生效:
sudo ufw reload
4. 最后测试RStudio的连接
完成上面的步骤后,先通过telnet x.x.x.x 3306确认能正常连接,再用R脚本测试,比如用RMySQL包的示例代码:
library(RMySQL) con <- dbConnect(MySQL(), user = "你的MySQL用户名", password = "你的MySQL密码", dbname = "要连接的数据库名", host = "x.x.x.x", port = 3306)
如果还是报错,可以把具体的错误信息贴出来,咱们再进一步排查。
内容的提问来源于stack exchange,提问作者SSV
相关产品推荐
相关产品推荐

