mysql - 无法使用 JDBC 将 Apps 脚本连接到 Cloud SQL

标签 mysql google-apps-script google-cloud-platform google-cloud-sql

所以...我一直在尝试通过 Apps 脚本函数设置与 Cloud SQL for MySQL 数据库的连接,但是我无法弄清楚它为什么不起作用。我一直关注documentation for JDBC ,但是无论我做什么,连接总是失败。

以下是我正在使用的代码:

const connectionName = '<project_id>:<region>:<instance_id>';
const user = '<user>';
const userPwd = '<user_pass>';
const db = '<database>';

const dbUrl = 'jdbc:google:mysql://' + connectionName + '/' + db;

function connect() {
  const conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);

  let start = new Date();
  let stmt = conn.createStatement();

  stmt.setMaxRows(1000);

  let results = stmt.executeQuery('SELECT * FROM entries');
  let numCols = results.getMetaData().getColumnCount();

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

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

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

运行此代码时出现以下错误:

enter image description here

每次运行代码时,我都可以在 mysqlerr 日志中看到新行:

enter image description here

我已使用公共(public) IP 设置了 Cloud SQL 实例,但尚未将任何网络列入白名单。该文档没有提到它是必需的步骤。另外,我已经为此 Apps 脚本项目的 GCP 项目设置了项目编号,但仍然收到此错误。

编辑

根据要求,我添加了有关该实例的更多屏幕截图:

我可以使用 gcloud sqlinstances connect 命令连接到 Cloud SQL 实例,一旦进入,我就可以查询我想要的表。 (请记住,该表目前为空,因为我们目前处于开发的早期阶段)

我相信这排除了我使用错误用户/密码的可能性。

enter image description here

如您所见,我使用的是 max_allowed_pa​​cket 标志的默认值。老实说,我还没有在此实例上设置任何标志。

关于连接名称,我使用的是上面代码片段中共享的格式,实际上我是从 Cloud Console 复制并粘贴的。

下一个屏幕截图是实例设置的摘要:

enter image description here

提前致谢! 😁

最佳答案

我在维护 Google Cloud SQL 连接器库的团队工作。

我能够让您的代码示例与我自己的项目一起使用,所以我不认为您的代码有问题。我要尝试的第一件事是仔细检查 user、userPwd 和 connectionName 的值。如果这些都正确,那么我还将确保您尝试登录的用户有权访问数据库。

对于您在日志中看到的那些错误,此troubleshooting documentation有一些关于您可以尝试的事情的建议。一次建议是增加 max_allowed_packet标志

如果您确定所有这些值都正确,请跟进此评论,我们可以尝试进一步调试。

关于mysql - 无法使用 JDBC 将 Apps 脚本连接到 Cloud SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67269934/

相关文章:

python - 如何使用谷歌云 Python API 将目录复制到谷歌云存储?

mysql - 非常慢的 MYSQL 子查询

mysql - SQL:获取单个表中多行的总和

jquery - 多次调用 google.script.run.withSuccessHandler

Google Compute Engine VM 上的 Ubuntu do-release-upgrade

java - 我可以在 GAE 或 GCE 上调用 Java 进程吗?

mysql - 递归/嵌套事务

mysql - 将 mySQL 表导出到 OpenOffice 电子表格

security - 有没有办法限制可以通过 google.script.run 调用哪些函数?

google-apps-script - 将脚本插入多个Google Spreadsheets