使用 Google 应用程序脚本将 AWS RDS 连接到 Google 表格时出错
Error on connecting AWS RDS to Google Sheets using Google App Scripts
我正在尝试将 AWS RDS 连接到 Google 表格,但我得到的只是
Failed to establish a database connection. Check connection string, username and password.
我已经尝试了跟踪器中的方法,即"using the IP of the endpoint host address",但仍然出现相同的错误,
我有:
设置 [RDS 设置 - public 可访问性 - 开启] 并验证端点和访问详细信息适用于所有其他查看器(Navicat、管理员等)
在'RDS VPC- Security Groups'入站和出站中添加了所有需要白名单的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);
}
我已经在网上搜索过了,但仍然无法正常工作。
好吧,事实证明 Google Scripts 只支持 MySql v5.5.x 版本,所以超过它会导致问题成为 "failed database connection." 所以使确保连接成功,只需在 RDS 中进行上述相同设置,但 select MySQL 引擎具有版本 5.5.x 并使用此 - (toolbox.googleapps.com/apps/dig ) 查找您的端点 IP 地址以查找可能的 DNS 问题。
我会更新更多。
您可以使用下面的代码片段,不要忘记使用 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';
从 Jul/2021 开始,我能够使用标准 JDBC 连接将 RDS 和 AppScript 与 MySQL 5.7 连接(接受的答案提到了 v5 的问题。5.x版本及以上)。
唯一的技巧是 add/allow 我的 RDS 入站安全组中此列表 (https://www.gstatic.com/ipranges/goog.txt) 中的所有 IP,如 AppScript JDBC 文档所述:
In order to use this method you must allow-list certain CIDR IP
address ranges so that Apps Script's servers can connect to your
database.
https://developers.google.com/apps-script/guides/jdbc
PS: 由于列表很长,我不得不断开并附加到 2 个安全组。
我正在尝试将 AWS RDS 连接到 Google 表格,但我得到的只是
Failed to establish a database connection. Check connection string, username and password.
我已经尝试了跟踪器中的方法,即"using the IP of the endpoint host address",但仍然出现相同的错误,
我有:
设置 [RDS 设置 - public 可访问性 - 开启] 并验证端点和访问详细信息适用于所有其他查看器(Navicat、管理员等)
在'RDS VPC- Security Groups'入站和出站中添加了所有需要白名单的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);
}
我已经在网上搜索过了,但仍然无法正常工作。
好吧,事实证明 Google Scripts 只支持 MySql v5.5.x 版本,所以超过它会导致问题成为 "failed database connection." 所以使确保连接成功,只需在 RDS 中进行上述相同设置,但 select MySQL 引擎具有版本 5.5.x 并使用此 - (toolbox.googleapps.com/apps/dig ) 查找您的端点 IP 地址以查找可能的 DNS 问题。 我会更新更多。
您可以使用下面的代码片段,不要忘记使用 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';
从 Jul/2021 开始,我能够使用标准 JDBC 连接将 RDS 和 AppScript 与 MySQL 5.7 连接(接受的答案提到了 v5 的问题。5.x版本及以上)。
唯一的技巧是 add/allow 我的 RDS 入站安全组中此列表 (https://www.gstatic.com/ipranges/goog.txt) 中的所有 IP,如 AppScript JDBC 文档所述:
In order to use this method you must allow-list certain CIDR IP address ranges so that Apps Script's servers can connect to your database. https://developers.google.com/apps-script/guides/jdbc
PS: 由于列表很长,我不得不断开并附加到 2 个安全组。