它是什么
先把 Cloud SQL 想成「租一台数据库服务器」。它是 GCP 提供的托管关系型数据库:数据放在表里,用 SQL 查询,适合账号、订单、文章这类有结构的数据。常见选项有 MySQL、PostgreSQL 和 SQL Server。你不用开虚拟机、下载安装包、从零安装数据库软件;在控制台选好类型和规格,GCP 就给你一个能连接的实例。
它更像一台由 GCP 帮你维护的数据库服务器:底层补丁由平台安排,补丁维护窗口、开启高可用后的故障切换、备份入口和监控,都能在控制台或 gcloud(GCP 命令行工具)里查看和设置。下面命令先不创建实例,只确认工具、选项目、打开管理入口并查看现有资源;这样不会一上来产生账单,也让你看清它是项目里的云资源,而不是本机软件。
gcloud version
gcloud init
gcloud services enable sqladmin.googleapis.com
gcloud sql instances list
gcloud sql tiers list
为什么这么做?第一条确认命令行工具装好了;初始化让你登录并选项目;启用服务后才能管理 Cloud SQL;最后两条列出实例和可选规格,帮你建立直觉。
- 坑一:初始化会暂停等选择,不是卡死;项目 ID 常不是中文项目名。
- 坑二:实例列表为空只是还没有数据库;权限不足就找管理员。
- 坑三:启用 API 只是开门,真正创建实例后才按规格、存储持续计费。
- 坑四:托管不等于不用管:高可用、自动备份、维护窗口要检查,维护时连接可能短暂断开,程序要重试。
解决什么问题
做 GCP Cloud SQL 入門,先别急着创建实例,先想清楚它替你省掉哪些麻烦。自己在 Linux 服务器上装 MySQL 或 PostgreSQL,不是“装个数据库”就完:系统补丁、磁盘扩容、版本升级、备份脚本、备份能否恢复、主库挂了怎么切备库,都要管。小白最容易漏的不是 SQL 语法,而是这些没人提醒的配置。
Cloud SQL 把这些日常运维抽象成选项:容量仍要选,但不用自己挂盘、格式化;自动备份、时间点恢复、维护窗口里的版本升级、多可用区高可用可以勾;监控、日志也由平台接住。你不用先写 shell 脚本,也不用半夜重启数据库,只要判断业务需要什么级别并付费。
为什么先确认命令行?新手常在本机、跳板机、Cloud Shell 之间切换,最后把本机数据库当云数据库,或在错误项目里建资源。在控制台右上角打开 Cloud Shell,复制执行下面这行;它只检查 gcloud,不会创建收费资源:
if command -v gcloud >/dev/null; then gcloud --version; else printf '%sn' '未找到 gcloud:请先使用 Cloud Shell,或安装 Google Cloud CLI 后再继续。'; fi
看到版本信息就说明入口正常;看到提示先别继续。常见坑是:自动备份不等于验证过恢复;高可用通常更贵,测试库未必需要;开放 0.0.0.0/0 或给应用账号所有权限,很容易把库暴露在公网。权限先按最小够用来给。
所以,Cloud SQL 最适合网站后台、测试环境、小型业务系统等场景:团队不必先养专职 DBA,可以把精力放在表结构、账号权限和应用连接串上。它解决的是“别让小白从零搭生产级数据库运维体系”,而不是替你设计业务表。
怎么上手
第一次进 Cloud SQL,常先撞见「Cloud SQL Admin API 未启用」。别慌,GCP 的功能默认都是关着的:去「API 和服务 → 库」搜 Cloud SQL Admin API 点「启用」,等一两分钟再回来。先启用再创建,能少踩一个莫名其妙的报错。
- 选引擎:新手选 MySQL 8.0 最省事,教程和客户端最多;换 PostgreSQL 流程一样,只是端口和默认账号不同。
- 选地区:跟应用放同一个区(中文站常用
asia-east1),延迟低、还免跨区流量费。地区建完改不了,想换只能删了重建,先想好再点。 - 选规格和存储:练手用 db-f1-micro + 10 GB SSD 就够;别急着勾高可用、多可用区,那是生产才要花的钱。
- 设密码并创建:给 root 设个强密码,点「创建实例」后要等 3~10 分钟,页面一直转圈是正常的,别反复刷新。
懒得一步步点?下面这套配置和上面完全一致,改掉两个密码就能整段复制执行(前提是装好 Cloud SDK、已登录并选好当前项目):
export PROJECT_ID=$(gcloud config get-value project)
export DB_PASS='ChangeMe_Root_2024!'
export APP_PASS='ChangeMe_App_2024!'
gcloud services enable sqladmin.googleapis.com --project="$PROJECT_ID"
gcloud sql instances create demo-mysql
--project="$PROJECT_ID"
--database-version=MYSQL_8_0
--region=asia-east1
--tier=db-f1-micro
--storage-type=SSD
--storage-size=10GB
--root-password="$DB_PASS"
实例起来后才轮到「怎么连」。默认已经带公网 IP,但不代表谁都能连:必须把自己电脑的出口 IP 加进授权网络。接着上面的变量继续贴,命令会自动取 IP(比手填不容易错),顺手开 SSL、建一个只有单库读写权的小号,最后用客户端真连一次才算验收。电脑没装 mysql 客户端的话,直接用 Cloud Shell,自带。
export MY_IP=$(curl -s ifconfig.me)
gcloud sql instances patch demo-mysql --authorized-networks="${MY_IP}/32"
gcloud sql instances patch demo-mysql --require-ssl
gcloud sql users create appuser --instance=demo-mysql --password="$APP_PASS" --host=%
export DB_IP=$(gcloud sql instances describe demo-mysql --format='value(ipAddresses[0].ipAddress)')
mysql -h "$DB_IP" -u root -p"$DB_PASS" --ssl-mode=REQUIRED
-e "CREATE DATABASE IF NOT EXISTS appdb; GRANT SELECT,INSERT,UPDATE,DELETE ON appdb.* TO 'appuser'@'%'; FLUSH PRIVILEGES;"
mysql -h "$DB_IP" -u appuser -p"$APP_PASS" --ssl-mode=REQUIRED -D appdb -e "SELECT 1;"
应用里的连接串长这样:mysql://appuser:密码@公网IP:3306/appdb?sslMode=REQUIRED。为什么坚持用小号而不是 root?最小权限账号万一泄露,坏人也只能动 appdb 一个库,不至于拖走整台实例。
如果应用和库都在同一个 VPC,更推荐私网:创建时指定 VPC 并关掉公网 IP,同时先启用 Service Networking API、给 VPC 配好私有服务连接。新手最常被「未配置私有服务连接」拦住,建议先用公网跑通,再照控制台「连接 → 专用 IP」的引导切过去。
- 别填
0.0.0.0/0:等于把数据库放在公网裸奔,扫描器几分钟就找上门。家宽 IP 会变,变了重新 patch 一次;注意这个 patch 是整体覆盖,以后加第二条要把旧 IP 一起写上。 - 开了「仅允许 SSL」后,没带
sslmode=require的旧连接串会直接失败,别误判成实例挂了。 - 练完记得删实例:只要它还在跑就一直计费,别让练手账单留到月底。
与替代方案对比
先记一句话:Cloud SQL 是「省心的普通关系库」,不是万能数据库。订单、会员、后台、小型网站这类常规关系型业务,用它很合适,因为备份、补丁、监控、故障切换大多由 Google 做,你主要管账号、表结构和 SQL。
- 对比自己 VM 装库:Cloud SQL 更省心,但可改内核参数、装插件的自由度较低;VM 能像自己电脑一样折腾,却要自己管安全、备份、升级和半夜恢复。小白常踩的坑:别只比月费忘了算运维,也别以为 Cloud SQL 能 SSH 进去拿完整 root。
- 对比 AlloyDB、Spanner、BigQuery:Cloud SQL 更适合常规关系型业务,而不是超大规模分析。AlloyDB 偏高性能 PostgreSQL,Spanner 面向全球强一致和海量扩展,BigQuery 是数仓。坑:用 Cloud SQL 跑大报表会拖慢线上;BigQuery 不适合当登录主库。
- 对比本地练习:如果只需要临时本地练习,Docker 或本机数据库成本更低;如果要全球强一致、海量扩展,应评估更专门的数据库服务。
想零成本试 SQL,先安装并启动 Docker Desktop,在终端或 PowerShell 复制下面三行。第一行开临时 PostgreSQL,第二行等 5 秒,第三行检查是否就绪;看到 accepting connections 再继续,没有就再复制第三行。因为容器初始化要时间,马上连常失败。
docker run --name cloud-sql-practice -e POSTGRES_PASSWORD=test1234 -p 5432:5432 -d postgres:16
sleep 5
docker exec cloud-sql-practice pg_isready -U postgres
就绪后复制这行,在容器里执行一句 SQL,确认能连上;练完执行最后两行清理,避免占端口和磁盘。
docker exec cloud-sql-practice psql -U postgres -c "SELECT version();"
docker stop cloud-sql-practice
docker rm cloud-sql-practice
- 小白坑:提示端口占用,把启动命令端口参数左侧的 5432 改成 5433;提示容器名已存在,先跑清理两行。
- 数据坑:容器删掉数据会没,test1234 只用于本机,别放公网或生产;云实例开着就可能计费,练习完要删除,不只是停止。
最佳实践
实例建好别急着连,先把「后悔药」备上:确认自动备份和时间点恢复(PITR)都开着。为什么:误删一张表时,PITR 能让你回到删表前那一秒,而不是只能找回昨晚的整包备份。小白坑:很多人只勾了备份、从没真恢复过,真出事才发现恢复会另开一个实例、权限也不够,白白耽误几小时。记得每季度演练一次。
# 把 my-instance 改成你的实例名,直接复制执行
gcloud sql instances patch my-instance
--backup-start-time=02:00
--enable-point-in-time-recovery
--retained-backups-count=7
--retained-transaction-log-days=7
接着设「闹钟」:维护窗口挑业务低峰,开启慢查询日志,再给磁盘和 CPU 配告警。为什么:Google 做维护会短暂重启,不挑时间正赶上用户下单就卡了;磁盘写满后数据库会直接变「只读」,等投诉进来就晚了。小白坑:只盯 CPU,忘了看磁盘增长和慢 SQL,最容易半夜翻车。告警去「监控 > 提醒政策」点两下,选「磁盘利用率 > 80%」即可。
# 维护窗口 + 自动扩容;MySQL 顺手开慢查询
# (PostgreSQL 请把最后一行换成 log_min_duration_statement=1000)
gcloud sql instances patch my-instance
--maintenance-window-day=TUE
--maintenance-window-hour=3
--storage-auto-increase
--storage-auto-increase-limit=200
--database-flags=slow_query_log=on,long_query_time=1
再上锁:生产环境别裸奔。优先选私网 IP,别勾公网;连的时候强制 SSL,登录用 IAM 数据库认证或强密码,账号只给「刚好够用」的权限,别图省事全用 root。为什么:公网等于把数据库门牌挂到马路上,机器人几分钟就来试密码。小白坑:本地调试图方便加了 0.0.0.0/0 授权网络,上线忘了删,这是最常被扫穿的原因。
# 清掉危险的公网放行,并强制 SSL
gcloud sql instances patch my-instance
--clear-authorized-networks
--require-ssl
最后管住钱包。打上标签,再去「结算 > 预算和提醒」绑一个预算告警。为什么:测试实例忘了关、只读副本多开一个,月底账单才吓你一跳;标签能让成本按团队分得清清楚楚。小白坑:标签不打,账单里一堆无名实例,根本不知道找谁关。
# 打标签(预算阈值建议填 80%,邮件提醒最省心)
gcloud sql instances patch my-instance
--update-labels=env=prod,owner=team-a
- ✅ 备份开了,也真恢复过一次
- ✅ 维护窗口、慢查询、磁盘告警齐了
- ✅ 私网 + SSL + 最小权限,公网放行已清
- ✅ 标签 + 预算提醒就位
常见问题(FAQ)
Cloud SQL 需要自己登录 SSH 维护系统吗?
通常不需要。它是托管服务,系统补丁和底层维护由 GCP 负责,你主要管实例配置、账号和数据。
新手选 MySQL 还是 PostgreSQL?
看应用要求。老项目或常见建站程序多见 MySQL;需要复杂查询和扩展能力时可考虑 PostgreSQL。
公网连接安全吗?
能不用就不用。生产建议私网访问、SSL、授权网络和最小权限账号一起配置,并定期审查。
为什么账单比想象中高?
常见原因是实例规格、存储、备份、公网流量和长期闲置。先用小规格,设预算告警并定期清理。
可以直接从 VM 连接吗?
可以。同区域同 VPC 用私网更稳,先在 VM 安装客户端,再用内网地址、账号和 SSL 测试。
不想自己折腾 GCP?我们提供云平台代维护、上云迁移与账单代付服务,一对一技术支持。
