使用 Google cloud-sql-proxy (Cloud SQL Auth Proxy) 登录数据库

3 min

language: ja bn en es hi pt ru zh-cn zh-tw

大家好,我是无能。
我尝试通过cloud-sql-proxy连接到数据库时遇到了一些问题,所以在此记录一下。

所需二进制文件安装

保存 cloud-sql-proxy 可执行文件并设置路径

首先,您需要cloud-sql-proxy的可执行文件。
由于它不存在于brew等包中,因此您需要从 Google 网站获取针对您的指令集构建的可执行文件

curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.14.2/cloud-sql-proxy.darwin.arm64
chmod +x cloud-sql-proxy
sudo mv cloud-sql-proxy /usr/local/bin
which cloud-sql-proxy

虽然很少有人这样做,通过homebrew安装的可执行文件会放在/opt/homebrew/bin/下,但这次是用户安装的独特二进制文件,对于FreeBSD的分支MacOS来说,/usr/local/bin似乎更合适,所以我把它放在那里了。

安装 MySQL 二进制文件

看来,如果不指定版本直接执行brew install mysql,可能会因为缺少二进制文件或版本过低而在连接时出错,所以请按以下方式安装。
这方面多亏了前辈,瞬间就解决了。

brew install mysql-client@8.4

然,后,
如果路径未设置,请按以下方式查找并创建符号链接

find /opt/homebrew -name "mysql*"
ln -s /找到的/mysql二进制文件路径 /opt/homebrew/bin/mysql

获取要连接的数据库信息

环境检查与认证

假设您已经完成了登录过程。

gcloud auth login
gcloud auth application-default login

通过以下方式指定项目

gcloud config set project 项目ID

通过以下方式确认项目

gcloud config get-value project

然后通过以下方式确认数据库连接名称

gcloud sql instances describe DB实例名 | grep "^connectionName:" | awk '{print $2}'

通过 cloud-sql-proxy 连接

从机制上讲,这个cloud-sql-proxy会代理数据库。
想象一下,如果要访问虚拟机中存在的数据库本身,需要先通过 SSH 连接到该操作系统并登录到数据库服务器。但通过这个代理,它会使Cloud SQL中存在的数据库服务器在本地主机上Listen
如果数据库端口是开放的,您可能可以直接连接到该数据库服务器,但我认为没有人会在这种不安全的状态下搭建数据库服务器。
因此,如果想尽可能安全、便捷地连接,那么代理数据库可能就是解决方案。

那么,让我们指定刚才确认的数据库连接名称。

cloud-sql-proxy --port 3306 DB连接名

以上是 MySQL 的情况,如果是PostgreSQL等,则需要指定不同的端口,并且所需的二进制文件也会不同,所以这里可能需要进行适当的更改。

如果连接建立成功,就说明已经成功代理,保持当前状态,然后从另一个终端连接到 MySQL 即可。

mysql --user="DB用户" --password="DB用户密码" -h 127.0.0.1

那么,再见。
请多关照。

Related Posts