You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets连接本地无密码MySQL失败,请求调试帮助

问题分析与解决方案

报错信息

Exception: Failed to establish a database connection. Check connection string, username and password. getDataFromDatabase @ Code.gs:8

核心问题

你的脚本运行在Google云端服务器上,代码里的localhost指向谷歌服务器本身,而非你本地的MySQL机器,云端无法直接访问本地数据库,这是连接失败的根本原因。

解决方案步骤

1. 配置MySQL允许远程访问

  • 打开MySQL配置文件(Windows为my.ini,Linux/macOS为my.cnf),找到bind-address项,修改为0.0.0.0(允许所有IP访问)或你的公网IP,修改后重启MySQL服务。
  • 登录MySQL控制台,执行授权命令(适配无密码场景):
    GRANT ALL PRIVILEGES ON my_database_test.* TO 'root'@'%' IDENTIFIED BY '';
    FLUSH PRIVILEGES;
    
    (安全提示:%代表允许所有IP访问,建议替换为你的公网IP,限制仅该IP能远程连接)

2. 将本地MySQL暴露到公网

谷歌服务器需要能访问到你的本地MySQL,可通过以下方式之一实现:

  • 端口映射:进入路由器管理后台,设置端口映射规则,将外部3306端口映射到本地机器的内网IP和3306端口。
  • 内网穿透:使用ngrok等工具,执行命令ngrok tcp 3306,工具会生成一个带端口的公网地址(如tcp://0.tcp.ngrok.io:12345)。

3. 修改脚本的连接地址

将代码中的address替换为可访问的公网地址:

  • 端口映射场景:
    var address = 'jdbc:mysql://你的公网IP:3306/my_database_test';
    
  • ngrok穿透场景:
    var address = 'jdbc:mysql://0.tcp.ngrok.io:12345/my_database_test';
    

4. 额外检查项

  • 确保本地机器防火墙允许3306端口的外部访问。
  • 先用本地MySQL客户端(如Navicat、MySQL Workbench)测试公网连接,确认正常后再运行脚本。
  • 无密码远程访问存在安全风险,建议后续给数据库用户设置密码,或严格限制访问IP范围。

修正后的示例脚本

function getDataFromDatabase() {
  // 替换为你的公网连接地址
  var address = 'jdbc:mysql://你的公网IP:3306/my_database_test';
  var user = 'root';
  var password = '';
  
  // 建立数据库连接
  var conn = Jdbc.getConnection(address, user, password);
  
  // 执行SQL查询
  var stmt = conn.createStatement();
  var rs = stmt.executeQuery('SELECT * FROM customers');
  
  // 处理查询结果
  var results = [];
  while (rs.next()) {
    results.push([rs.getString(1), rs.getString(2), rs.getString(3)]); // 根据实际列调整索引
  }
  
  // 关闭连接资源
  rs.close();
  stmt.close();
  conn.close();
  
  // 返回结果到Google Sheets
  return results;
}

内容的提问来源于stack exchange,提问作者Nino.Ninov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:11:20