我正在使用 Google Cloud SQL 第二代,并在本地计算机上安装了cloud-sql-proxy 。
在我的本地计算机上,我只需连接到 127.0.0.1:3306,并且在 NodeJs、Php 和使用 mysql 命令行客户端中运行良好。
在 Google App Engine 托管 VM(灵活环境)上,我使用 unix_socket 或 socketPath '/cloudsql/MY_PROJECT_ID:us-central1:SQL_INSTANCE' 这在 Php 和 NodeJs 中也运行良好。
MySQL Workbench 不起作用,我不知道如何连接它。它是否使用其他协议或者 cloud-sql-proxy 仅用于命令行?
这是我启动 cloud-sql-proxy 的方法
这有效:
./cloud_sql_proxy \
-instances=MY_PROJECT:us-central1:MY_SQL_INSTANCE=tcp:3306 \
-credential_file='/Users/ME/SomeFolder/MY_SERVICE_ACC_KEY.json'
Run Code Online (Sandbox Code Playgroud)
之后我使用 MySQL Workbench 尝试连接到 127.0.0.1:3306,但总是收到错误:
SSL connection error: socket layer receive error
Run Code Online (Sandbox Code Playgroud)
本地 PHP、NodeJS 和 mysql 客户端也可以工作。
任何帮助,将不胜感激
对于 Google CloudSQL 第二代实例,启用了故障转移复制。此后,当尝试导入数据库时,不允许创建该过程。收到以下错误。
错误代码:1419。您没有 SUPER 权限并且已启用二进制日志记录(您可能希望使用不太安全的 log_bin_trust_function_creators 变量)
具有故障转移功能的CloudSQL是否真的不支持功能?
示例执行查询
DELIMITER ;;
CREATE FUNCTION `stutzen`(amount INT) RETURNS int(11)
DETERMINISTIC
BEGIN
DECLARE charges FLOAT DEFAULT 1.0;
SELECT valuesettings INTO charges FROM dreamer_tbl WHERE namesettings='stutzen.co';
RETURN FLOOR((amount / 100) * charges) ;
END ;;
DELIMITER ;
Run Code Online (Sandbox Code Playgroud) 我想使用 gcloud 导入工具将 mysql 转储文件导入 mysql 数据库实例,但出现错误:
ubuntu@machine:~/sql$ gcloud sql instances import sql-56-test-8ef0cb104575 gs://dbf/bt_ca_dev_tmp-2017-01-19.sql.gz
ERROR: (gcloud.sql.instances.import) HTTPError 403: Insufficient Permission
Run Code Online (Sandbox Code Playgroud)
我缺少什么确切的权限?我可以使用注册的服务帐户创建 sql 实例,但无法导入数据?
我正在尝试在 Windows 10 64 位操作系统上安装适用于 Google Cloud Platform 的 Cloud SQL 代理,以便我可以使用 Python 脚本将数据转储到 SQL 中。我正在按照本指南进行设置。
我从控制台创建了一个项目和一个 Google Cloud SQL 实例,没有任何问题,并且它显示在 SDK shell 中也没有任何问题。下载代理安装程序并安装后,会打开一个对话框窗口,然后在我可以阅读它之前关闭。
当我转到 Google Cloud SDK shell 并尝试使用以下命令启动 Cloud SQL 代理时:cloud_sql_proxy.exe -instances="[MyInstanceConnectionName]"=tcp:3306
无论我尝试多少次,它都会抛出错误“Cloud Sql Proxy 未被识别为内部或外部命令、可操作程序或批处理文件”。我已经尝试重新下载并重新执行该文件,但仍然无法正常工作。
我在 Windows 10 64 位上安装了带有 Anaconda 的 Python 3.6 和 Google Cloud SDK shell。
python database windows google-cloud-sql google-cloud-platform
我有一个在 Google Cloud SQL 上创建的 Postgres 数据库和用户。
我正在尝试为该用户安装 postgis 扩展:
myuser=> CREATE EXTENSION postgis;
ERROR: permission denied to create extension "postgis"
HINT: Must be superuser to create this extension.
Run Code Online (Sandbox Code Playgroud)
如您所见,它不允许我为该用户创建扩展,因此我尝试使该用户成为该postgres角色的超级用户:
postgres=> ALTER USER myuser WITH SUPERUSER;
ERROR: must be superuser to alter superusers
Run Code Online (Sandbox Code Playgroud)
我收到以下错误。这是因为 Google Cloud SQL 不允许SUPERUSER任何 postgres 帐户使用该角色: https: //cloud.google.com/sql/docs/postgres/users。
所以我处于这种奇怪的炼狱状态,我需要添加这个扩展,但不能。
有关如何进行的任何提示?
我收集了一些原始数据并将其存储在 Google 电子表格中,还有一个现有的 Google Cloud SQL 实例。我正在尝试使用 appscript 从 gsheet 中提取数据,然后推送到 gcloud SQL。
不幸的是,我发现完成“批量插入”花了太多时间。这是我的方法和结果(在这个例子中,我没有展示从 gsheet 中提取数据的方法,因为它很快而且无关紧要):
应用脚本:
var connection = [My Connection];
connection.setAutoCommit(false);
var stmt = connection.prepareStatement('INSERT INTO [testTable]'
+ '(emp_no,title,from_date,to_date) values (?, ?, ?, ?)');
for (var i = 1; i <= 50; i++) { //tuples counter i
stmt.setString(1, 1);
stmt.setString(2, "Worker" + i);
stmt.setString(3, "2018-03-11");
stmt.setString(4, "2019-05-04");
stmt.addBatch();
}
stmt.executeBatch();
connection.commit();
Run Code Online (Sandbox Code Playgroud)
简单的代码,这是我的结果(来自“执行记录”):
当元组计数器i小于 50 时:
[19-08-12 13:57:46:470 NZST] JdbcPreparedStatement.executeBatch() [9.978 秒]
当元组计数器i小于 500 时: …
我希望能够使用 Terraform 在 Google Cloud Platform 中精细地创建/修改 PostgreSQL CloudSQL 实例。目前有一个设置tier = "<instance_type>"
取自 Terraform 文档
name = "master-instance"
database_version = "POSTGRES_11"
region = "us-central1"
settings {
# Second-generation instance tiers are based on the machine
# type. See argument reference below.
tier = "db-f1-micro"
}
}
Run Code Online (Sandbox Code Playgroud)
我如何修改它以匹配我现在拥有的?我可以创建要在 GCP 中使用的自定义图像吗?
我看到有一种方法可以在此处制作自定义图像,但是我将如何在 Terraform 中使用它?
google-cloud-sql google-cloud-platform terraform terraform-provider-gcp
我有一个气流管道,我需要从 pubsub 订阅中获取文件名,然后将该文件导入到云 sql 实例中。我使用 CloudSqlInstanceImportOperator 导入 CSV 文件。该运算符需要一个主体,其中包含文件名和其他参数。由于我在运行时读取了该文件名,因此我还必须在运行时定义主体。这一切都有效。但是当我从 xcom 拉出正文时,它返回一个字符串而不是 python 字典。所以 CloudSqlInstanceImportOperator 给了我以下错误(我的猜测是,因为主体是字符串而不是字典):
Traceback (most recent call last)
File "/usr/local/lib/airflow/airflow/models/taskinstance.py", line 984, in _run_raw_tas
result = task_copy.execute(context=context
File "/usr/local/lib/airflow/airflow/contrib/operators/gcp_sql_operator.py", line 715, in execut
self._validate_body_fields(
File "/usr/local/lib/airflow/airflow/contrib/operators/gcp_sql_operator.py", line 712, in _validate_body_field
api_version=self.api_version).validate(self.body
File "/usr/local/lib/airflow/airflow/contrib/utils/gcp_field_validator.py", line 420, in validat
dictionary_to_validate=body_to_validate
File "/usr/local/lib/airflow/airflow/contrib/utils/gcp_field_validator.py", line 341, in _validate_fiel
value = dictionary_to_validate.get(field_name
AttributeError: 'str' object has no attribute 'get
Run Code Online (Sandbox Code Playgroud)
这是我使用的代码:
import json
import os
from datetime import datetime, timedelta
import ast
from airflow …Run Code Online (Sandbox Code Playgroud) 几周来我一直在努力尝试让 Cloud SQL Postgres 实例来执行任何类型的查询日志记录,但我却一事无成。我意识到这应该是一个超级简单的练习,但我没有更多的解释可以给出,因为它似乎不起作用。
我尝试设置以下标志:
log_min_duration_statement值为 0、100、500 和 1000。
log_statement值为“ddl”、“mod”和“all”。
log_statement_stats设置为“开”。
我还尝试了此处列出的其他一些“可能的嫌疑人”:https://cloud.google.com/sql/docs/postgres/flags无济于事。
我什至尝试启用 pgaudit 日志,但这似乎没有做任何事情。
鉴于此,总是有可能记录这些数据,但我只是找不到它,所以在 stackdriver 中,我的过滤器是:
resource.type="cloudsql_database"
resource.labels.database_id="<<project-name>>:<<instance-name>>"
Run Code Online (Sandbox Code Playgroud)
它显示了数据库上发生的任何错误,例如查询不存在的表,或尝试比较两种不同的数据类型,但没有任何类型的查询。
我什至扫描了我们所有的日志:
textPayload:"select"
Run Code Online (Sandbox Code Playgroud)
这也没有出现任何结果。
任何建议、提示或技巧将不胜感激!
编辑:附加信息。
我可以在所有模式上创建 pgaudit 扩展,而不会出现任何错误。psql 客户端只是回显“CREATE EXTENSION”。
我正在使用私有 IP 从 GKE 环境连接到实例,并且我的应用程序运行 DDL 和 DML 语句。
这是我在云控制台的访问部分中为云 SQL 启用的“审核日志”的图像:

这是我用于负载测试的一个全新实例,因此每天早上我都会使用 terraform 脚本创建一个新实例,以下是相关资源:
resource "google_sql_database_instance" "loadtesting_postgres_master" {
database_version = "POSTGRES_12"
name = "loadtesting-test-instance-12"
project = "${var.projectId}"
region = "${var.region}"
depends_on = ["google_service_networking_connection.private_vpc_connection"]
deletion_protection = false
settings {
activation_policy = "ALWAYS" …Run Code Online (Sandbox Code Playgroud) Google Cloud Run 允许使用 Cloud SQL。但是,如果您在 Google Cloud Build 中构建容器时需要 Cloud SQL,该怎么办?那可能吗?
我有一个 Next.js 项目,它在 Google Cloud Run 上的容器中运行。将我的代码推送到 Cloud Build(安装内容、生成静态页面并将所有内容放入容器中)并部署到 Cloud Run 非常有效。
但是,我只是添加了一些功能,其中它还需要来自我在 Google Cloud SQL 上运行的 PostgreSQL 实例的一些数据。在构建项目(生成静态页面)时使用此数据。
在本地,在我的机器上,这工作正常,因为该项目可以连接到我的 CloudSQL 代理。在 CloudRun 中运行时,这也应该有效,因为 Cloud Run 允许连接到 Cloud SQL 上的 Postgres 实例。
使用 Cloud Build 构建我的项目时,我需要访问我的数据库才能生成我的静态页面。我正在寻找一种将我的 Docker 云构建器连接到 Cloud SQL 的方法,也许就像 Cloud Run(完全托管)提供了一种使用 Cloud SQL 代理进行连接的机制。
这样我就可以/cloudsql/INSTANCE_CONNECTION_NAME在构建我的项目时连接到它!
所以我的问题是:在 Google Cloud Build 上构建我的项目时,如何通过 Cloud SQL 代理连接到我在 Google Cloud SQL 上的 PostgreSQL …
google-cloud-sql google-cloud-platform cloud-sql-proxy google-cloud-build google-cloud-run
google-cloud-sql ×10
mysql ×2
postgresql ×2
python ×2
airflow ×1
database ×1
jdbc ×1
performance ×1
terraform ×1
windows ×1