在 Google 的 SQL Cloud Postgres 服务中,当我通过 Web 控制台为 PostgreSQL 实例创建数据库时,它会自动将数据库的默认“公共”架构的所有者设置为 cloudsqladmin。看来我无法更改所有权:
mydb=> \dn
List of schemas
Name | Owner
--------+---------------
public | cloudsqladmin
(1 row)
mydb=> alter schema public owner to postgres;
ERROR: must be owner of schema public
mydb=> \du
List of roles
Role name | Attributes | Member of
-------------------+------------------------------------------------+---------------------
cloudsqladmin | Superuser, Create role, Create DB, Replication | {}
cloudsqlagent | Create role, Create DB | {cloudsqlsuperuser}
cloudsqlreplica | Replication | {}
cloudsqlsuperuser | Create role, …Run Code Online (Sandbox Code Playgroud) 我最近遇到了一个授权新的 Google App Script 项目的问题,特别是使用 Cloud SQL 管理 API 的项目。
相同的代码存在于之前授权的 GAS 项目中并且工作正常,但是如果我获取 GAS 项目的副本并尝试第一次运行某个函数,我将无法完成授权过程。下面列出了我正在经历的屏幕:
警告屏幕 (3) 是该过程中最近添加的内容。我不记得今年早些时候创建和运行新项目时遇到过它。我想知道 Google 最近是否对其 OAuth2.0 的安全实现进行了任何更改。
此外,此问题似乎仅影响对 Cloud SQL 管理 API 的 REST 调用。在上面提到的同一个项目中,我能够运行将数据写入同一 Google 项目中的 BigQuery 表的函数,该项目也托管 Cloud SQL 实例。显然,某些范围和代码可以工作。
“ https://www.googleapis.com/auth/sqlservice.admin ”范围包含在我请求并批准的范围列表中。我什至尝试手动编辑 URL 以添加更多请求的范围,但它仍然无法让我通过“执行该操作需要授权”屏幕。
有人有什么想法吗?
编辑:
触发身份验证的相关代码。
// Function to get the ip address of a given CloudSQL instance
function _getInstanceIpAddress_(projectId, sqlInstance) {
var token = _getAuthenticationToken_();
// Create the header authorisation …Run Code Online (Sandbox Code Playgroud) google-api google-apps-script oauth-2.0 google-cloud-sql google-oauth
我正在与一位在 GCP Cloud SQL 部署方面遇到问题的客户合作。有问题抄录如下:
连接到 Cloud SQL 时,连接经常会间歇性失败。这可能看起来像一个 Python 错误:
(psycopg2.DatabaseError) server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
Run Code Online (Sandbox Code Playgroud)
或者,在 Node 中,它可能看起来像超时错误或套接字挂起:
TimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?
Run Code Online (Sandbox Code Playgroud)
据我们所知,我们已正确配置所有内容,并遵循 Cloud SQL 故障排除指南中的所有说明。我们有一个具有 20GB 内存的实例,应支持 250 个连接。应将超时设置为以正确的时间间隔(< 10 分钟)刷新连接。所以我们不确定这里发生了什么。
我知道这并不算什么,但我想尝试尽职调查,看看我们可以如何帮助他们。我意识到我们可能无法得到关于正在发生的事情的完美答案,但我可以向他们询问一些额外的问题来帮助调试问题,这将是一个很大的帮助。
我发现这个类似的问题似乎描述了相同的问题,但没有答案:PostgreSQL 'Sever Closed the Connection Unexpected'
谢谢你的帮助!
我使用 Asp.NET Core 创建了简单的应用程序。它使用实体框架和本地数据库。我将我的应用程序部署到 Google Cloud App Engine,但老实说,我不知道如何处理我的数据库。现在我正在使用本地 sql 服务器,我的 appSettings.json 如下所示:
{
"connectionStrings": {
"smogInfoDBConnectionString": "Server=(localdb)\\mssqllocaldb;Database=SmogInfoDB;Trusted_Connection=True",
"hangfireConnectionString": "Server=(LocalDB)\\MSSQLLocalDB;Integrated Security=true"
}
}
Run Code Online (Sandbox Code Playgroud)
当我在计算机上调试和使用应用程序时,它工作得很好。我知道我需要创建一个 SQL 实例,但如何将我的应用程序连接到该数据库服务器?如何制作连接字符串?
今天早上,我们的 Google CloudSQL for PostgreSQL 高可用 (HA) 集群出现了 5 分钟多一点的停机时间。这是在 Google 要求您提供的维护期间。
Google 很清楚为什么他们需要维护时段(请参阅此处)。令我们震惊的是停机时间的持续时间并且没有执行故障转移。
文档清楚地表明维护是在实例上执行的(而不是在整个集群上执行的)。那么为什么没有像这里记录的那样执行回退呢?他们说,这可能需要长达 60 秒的时间。但花了5分钟多一点的时间。
然后又是;这是定期维护。如果您预料到的话,不必进行自动故障转移。
我们是否误解了文档,我们是否有不切实际的期望,或者我们是否错误配置了我们的应用程序?
我一直在尝试使用私有 IP 连接设置 Google Cloud SQL,其中绑定的 IP 范围是手动分配的,但没有成功。我不知道这是否是实现中的一个错误,因为它仍处于测试阶段,文档中是否缺少某些内容,或者我只是做错了什么。(命令行会话位于底部,用于快速总结我所看到的内容。)
最初,我将其设置为自动分配 IP 范围。一切都工作得很好,除了它选择了 172.17.0.0/24,这是我的 GCE 实例上由 docker 管理的网络之一,所以我无法从那里连接(但可以在另一台没有 docker 的机器上连接)。于是我尝试走手动分配路线。
首先,我拆除了代表我创建的所有关联网络对象。有两个 VPC 对cloudsql-postgres-googleapis-com等
互连,servicenetworking-googleapis-com我将其删除,然后我确认与它们关联的路由条目也消失了。
然后,我按照https://cloud.google.com/vpc/docs/configure-private-services-access#allocing-range的指示创建 10.10.0.0/16,因为我希望它出现在我的default网络中,即自动模式,所以我仅限于下半部分(目前是清晰的)。
此时,我返回到 Cloud SQL 实例创建页面,因为它应该为我完成剩下的工作。我选中“私有IP”框,然后选择
default网络。
我当时没有做笔记,所以我的记忆可能有缺陷,特别是因为我在后来的尝试中的经历始终不同,但我记得看到的是在网络选择下拉列表下方,它说“此实例将使用现有的托管服务连接”。我认为这意味着它将使用我创建的地址范围,并继续创建实例,但实例再次登陆 172.17.0.0/24 网络。
大约在第三次时,即之前该消息所在的位置,它有一个选择框,列出了我的地址范围。同样,我的记忆力很差,所以我不知道我是否看到或点击了“连接”按钮,但最终结果是一样的。
在第四次尝试时,我确实注意到了“连接”按钮,并确保单击它,并等待它说它成功了。它确实做到了,有点:它用我之前看到的有关使用现有连接的相同消息替换了下拉列表和按钮。同样,该实例是在错误的网络上创建的。
我尝试了第五次,这次创建了一个具有新名称的新地址范围 -google-managed-services-default这是我第一次开始时自动分配给它的名称(也是私人服务访问文档建议的名称)。但即使使用该名称并明确选择它,我仍然会在错误的网络上得到实例。
事实上,我现在看到点击“连接”后,我可以去检查路由,看到创建的路由是到172.17.0.0/24。
如果我从命令行执行所有操作,似乎也会发生同样的事情:
$ gcloud beta compute addresses list
NAME ADDRESS/RANGE TYPE PURPOSE NETWORK REGION SUBNET STATUS
google-managed-services-default 10.11.0.0/16 INTERNAL VPC_PEERING default RESERVED
$ gcloud beta services vpc-peerings connect \
--service=servicenetworking.googleapis.com \
--ranges=google-managed-services-default \
--network=default …Run Code Online (Sandbox Code Playgroud) 我正在尝试按照Google 提供的示例将 Cloud Functions 脚本连接到带有 Python 和 MySQL 实例的 Cloud SQL。
我在项目中创建了一个 Cloud SQL 实例,然后创建了一个 Cloud Function,我将整个脚本从链接粘贴到内联编辑器中。我将环境变量设置为连接到 Cloud SQL 所需的环境变量,但出现错误。
为了完成这项工作,我是否缺少一些明显的东西?
错误:函数崩溃。详细信息:(2003 年,“无法连接到 'localhost' 上的 MySQL 服务器([Errno 111] 连接被拒绝)”)
回溯(最近一次调用):文件“/env/local/lib/python3.7/site-packages/pymysql/connections.py”,第 582 行,在 connect **kwargs 中)文件“/opt/python3.7/ lib/python3.7/socket.py", line 727, in create_connection raise err File "/opt/python3.7/lib/python3.7/socket.py", line 716, in create_connection sock.connect(sa) ConnectionRefusedError : [Errno 111] Connection denied 在处理上述异常的过程中,又发生了一个异常: Traceback (most recent call last): File "/user_code/main.py", line 49, in mysql_demo mysql_conn = pymysql.connect(**mysql_config )文件“/env/local/lib/python3.7/site-packages/pymysql/ INIT py”为,线94,在连接返回连接(*指定参数时,** kwargs)文件“/ env的/本地/ LIB …
python google-cloud-sql google-cloud-platform google-cloud-functions
连接到 CloudSQL DB 时,您必须提供 PostgreSQL 配置详细信息(这是有道理的)。当从 Google 的配置页面获取必要的地址信息时,您将获得一个外部 IP 地址(就外部解决方案而言,没有其他地址)以连接到它。然后在使用它时会产生警告:
(node:18101) [DEP0123] DeprecationWarning: Setting the TLS ServerName to an
IP address is not permitted by RFC 6066. This will be ignored in a future
version.
Run Code Online (Sandbox Code Playgroud)
我曾尝试研究此警告,并且正在努力为此提出适当的解决方案,因为 Google 没有为此提供任何类型的服务器名称(或类似名称)。我认为一种解决方案可能是从外部向我的公司服务器添加一个指向该 IP 地址的子域,但老实说这对我们来说并不是很理想(如果这是唯一的解决方案,那很好)。这是一个运行Node 12.7.0在 上的服务器Debian 9.9 (stretch),连接到CloudSQL PostgreSQL 11 (beta).
显然,预期的解决方案是从生产代码库中删除所有 [弃用] 警告,因此希望解决这个问题,以及如何最好地攻击它的任何想法,因为似乎没有人在其他地方发布过这个!
编辑: 我能够通过向上述 IP 添加正确的主机名来解决这个问题。不确定是否有更好的解决方案(如果您找到了,请告诉我!),但这将在此期间起作用,因为无论如何保持外部服务器对我们来说只是一个短期方案。为将其添加到文档而创建的相关问题:https : //github.com/brianc/node-postgres/issues/1950
我正在尝试使用 Debezium Postgres 连接器连接到 Cloud SQL postgres。我在日志中收到以下错误。
connect_1 | org.apache.kafka.connect.errors.ConnectException: org.postgresql.util.PSQLException: FATAL: must be superuser or replication role to start walsender
connect_1 | at io.debezium.connector.postgresql.PostgresConnectorTask.start(PostgresConnectorTask.java:127)
Run Code Online (Sandbox Code Playgroud)
我突然想到我需要将 REPLICATION 添加到我的用户角色中。但是,CloudSQL 文档说明如下。
当您创建新的 Cloud SQL for PostgreSQL 实例时,默认的 postgres 用户已为您创建,但您必须设置其密码。postgres 用户是 cloudsqlsuperuser 角色的一部分,具有以下属性(权限):CREATEROLE、CREATEDB 和 LOGIN。它没有 SUPERUSER 或 REPLICATION 属性。
现在正因为如此,我不能 ALTER ROLE 添加 REPLICATION
ps:云SQL实例配置高可用。
postgresql google-cloud-sql apache-kafka google-cloud-platform debezium
我正在尝试配置构建maven springboot项目然后部署到云运行的云构建触发器。当我没有指定要连接的云 sql 实例时,我遇到了一个问题,但是当我添加"--set-cloudsql-instances", "${_DATABASE_CONNECTION_NAME}"为参数之一时,它会在云构建中引发错误,如下所示:
Step #1: ERROR: (gcloud.beta.run.deploy) PERMISSION_DENIED: The caller does not have permission
Finished Step #1
ERROR
ERROR: build step 1 "gcr.io/cloud-builders/gcloud" failed: exit status 1
Run Code Online (Sandbox Code Playgroud)
以下是我的 cloudbuild.yml
steps:
- name: 'gcr.io/kaniko-project/executor:latest'
args:
- --destination=gcr.io/$PROJECT_ID/${_IMAGE_NAME}
- --cache=true
- name: 'gcr.io/cloud-builders/gcloud'
args: [
"beta", "run",
"deploy", "${_SERVICE_NAME}-${_PROFILE}",
"--image", "gcr.io/${PROJECT_ID}/${_IMAGE_NAME}",
"--region", "${_REGION}",
"--platform", "managed",
"--set-cloudsql-instances", "${_DATABASE_CONNECTION_NAME}",
"--allow-unauthenticated",
"--set-env-vars", "SPRING_PROFILES_ACTIVE=${_SPRING_PROFILE},DATABASE_CONNECTION_NAME=${_DATABASE_CONNECTION_NAME},DATABASE_NAME=${_DATABASE_NAME},DATABASE_USERNAME=${_DATABASE_USERNAME},DATABASE_PASSWORD=${_DATABASE_PASSWORD},MINIO_ACCESS_KEY=${_MINIO_ACCESS_KEY},MINIO_SECRET_KEY=${_MINIO_SECRET_KEY},MINIO_HOSTNAME=${_MINIO_HOSTNAME},MINIO_PORT=${_MINIO_PORT}"
]
images:
- gcr.io/${PROJECT_ID}/${_IMAGE_NAME}
Run Code Online (Sandbox Code Playgroud)
我已经为服务帐户设置了角色/权限,如下所示:
{PROJECT_ID}-compute@developer.gserviceaccount.com : 编辑器,Cloud Sql 客户端 <-- 默认 SA<Cloud run service …google-cloud-sql google-cloud-platform google-cloud-build google-cloud-run
google-cloud-sql ×10
postgresql ×2
apache-kafka ×1
asp.net ×1
c# ×1
debezium ×1
google-api ×1
google-oauth ×1
node.js ×1
oauth-2.0 ×1
python ×1