【问题标题】:Error on connecting AWS RDS to Google Sheets using Google App Scripts使用 Google App Scripts 将 AWS RDS 连接到 Google Sheets 时出错
【发布时间】:2019-11-23 13:45:15
【问题描述】:

我正在尝试将 AWS RDS 连接到 Google 表格,但我得到的只是

无法建立数据库连接。检查连接字符串、用户名和密码。

我已经尝试了跟踪器中找到的方法,即“使用端点主机地址的IP”,但仍然出现同样的错误,

我有:

  1. 设置 [RDS SETTINGS - public accessibilty- ON] 并验证端点和访问详细信息适用于所有其他查看器(Navicat、Adminer 等)

  2. 在“RDS VPC-安全组”入站和出站中将所有需要的 google IP 添加到白名单(参考:https://developers.google.com/apps-script/guides/jdbc)。

这是我正在使用的代码:

var connectionName = 'x.x.x.x:3306'
var user = 'admin';
var userPwd = 'pass';
var db = 'dbname';

var dbUrl = 'jdbc:mysql://' + connectionName + '/' + db;

function readFromTable11() {
  var conn = Jdbc.getConnection(dbUrl, user, userPwd); //error here
  Logger.log(conn);
  var start = new Date();
  var stmt = conn.createStatement();
  stmt.setMaxRows(1000);
  var results = stmt.executeQuery('SELECT * FROM items');
  var numCols = results.getMetaData().getColumnCount();

  while (results.next()) {
    var rowString = '';
    for (var col = 0; col < numCols; col++) {
      rowString += results.getString(col + 1) + '\t';
    }
    Logger.log(rowString);
  }

  results.close();
  stmt.close();

  var end = new Date();
  Logger.log('Time elapsed: %sms', end - start);
}

我已经搜遍了网络,但仍然无法正常工作。

【问题讨论】:

  • 管理员用户是您的根用户吗?您是否尝试过专门创建另一个用户来编辑您的数据库?
  • 是的,它是 root 用户,但我看不出这有什么帮助,因为我提供了所有必要的凭据和数据库名称,但会尝试,请添加其他可能的解决方案。跨度>
  • @TanmayDwivedi 你能使用 Apps 脚本连接到主机吗?您是否尝试过使用UrlFetchApp 向它发出请求?如果有,结果如何?
  • 不,它从来没有给我一个成功的连接,UrlFetchApp不是用来获取证书然后获取文本吗?
  • @carlesgg97,我想我在与 DB RDS 的连接设置中缺少一些基本的东西。如果您之前成功完成了此操作,您能否建议一个指南链接或在这里解释一下?跨度>

标签: jdbc google-apps-script amazon-rds database-connectivity


【解决方案1】:

好的,事实证明 Google Scripts 仅支持 MySql v5.5.x 版本,因此超出此范围会导致问题为“数据库连接失败”。因此,为了确保连接成功,只需在 RDS 中进行相同的设置,但选择 MySQL 引擎以获得版本 5.5.x 并使用它 - (toolbox.googleapps.com/apps/dig) 来查找您的端点 IP 地址以查找可能的 DNS 问题. 我会更新更多。

【讨论】:

  • 非常感谢您的解释。我快疯了……这确实是 MySQL 5.5 的问题,而不是 8.*。
【解决方案2】:

你可以使用下面的代码sn-p,别忘了使用useSSL=false

  var server = '111.111.111.111';
  var port = 3306;
  var dbName = 'dbName';
  var username = 'dbName';
  var password = 'password';
  var url = 'jdbc:mysql://'+server+':'+port+'/'+dbName+'?useSSL=false';

【讨论】:

    【解决方案3】:

    截至 2021 年 7 月,我能够使用标准 JDBC 连接将 RDS 和 AppScript 与 MySQL 5.7 连接(接受的答案提到了 v5.5.x 及更高版本的问题)。

    唯一的技巧是在我的 RDS 入站安全组中添加/允许此列表 (https://www.gstatic.com/ipranges/goog.txt) 中的所有 IP,如 AppScript JDBC 文档中所述:

    要使用此方法,您必须允许列出某些 CIDR IP 地址范围,以便 Apps 脚本的服务器可以连接到您的 数据库。 https://developers.google.com/apps-script/guides/jdbc

    PS:由于列表很长,我不得不打破并附加到 2 个安全组。

    【讨论】:

      猜你喜欢
      • 2018-08-06
      • 2020-05-19
      • 2021-04-09
      • 2022-12-01
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多