如何解决Google Colab连接本地MySQL数据库超时、连接被拒绝问题
故障排查与解决方法
核心问题说明
你当前的操作存在两个底层逻辑错误:
127.0.0.1是Colab运行环境自身的本地回环地址,和你本地部署MySQL的电脑没有任何关联,因此必然返回连接拒绝报错。- 你查询到的公网IP是你的网络出口(路由器/运营商网关)的公共地址,你的个人电脑没有直接暴露在公网中,网关默认不会将3306端口的访问请求转发到你内网的电脑上,因此直接访问公网IP会超时。
可行解决方法
方案1:使用ngrok内网穿透(推荐用于临时测试)
这是无需修改路由器配置的最快方案:
- 本地电脑安装ngrok并完成账号认证
- 本地终端执行命令开启TCP隧道,转发本地MySQL的3306端口:
ngrok tcp 3306 - 执行后ngrok会返回隧道地址,格式为
tcp://[隧道主机]:[隧道端口],例如tcp://0.tcp.ngrok.io:12345 - 修改Colab中的连接字符串,替换对应参数即可:
!pip install PyMySQL !pip install mysql-connector-python from sqlalchemy import create_engine import pandas as pd # 替换为ngrok返回的主机和端口,注意删除原代码中密码后的多余>符号 engine = create_engine("mysql+pymysql://bisma:1234@[隧道主机]:[隧道端口]/emoji_pwd") query= 'select * from users' df = pd.read_sql(query,engine)
方案2:路由器端口映射(适合长期使用)
如果你有路由器管理权限,可以做端口映射:
- 进入路由器后台,找到「虚拟服务器/端口转发」配置项,将公网3306端口(如果运营商封了3306可以换用33060等其他端口)转发到你本地电脑的局域网IP的3306端口
- 确认本地电脑防火墙开放3306端口的入站规则
补充校验项
- 你之前的MySQL授权是给root用户的,你代码中使用的用户名是bisma,需要补充对bisma用户的授权:
GRANT ALL ON emoji_pwd.* TO 'bisma'@'%'; FLUSH PRIVILEGES; - 确认你的MySQL配置中
bind-address=0.0.0.0已经生效,且重启了MySQL服务
内容的提问来源于stack exchange,提问作者Bisma
相关产品推荐
相关产品推荐

