GCP-108:Cloud SQL 入門——托管關聯式資料庫完全指南
前言
要在雲端跑關聯式資料庫,Cloud SQL 通常是 GCP 上的第一選擇。它是全托管(Full Managed)的,你不用管作業系統、打 patch、排備份,只要建好執行個體、設好連線,剩下就跟操作本地資料庫差不多。
這篇是 GCP 入門系列第 3 課,從零帶你認識 Cloud SQL 的核心概念、定價怎麼算,還有實際怎麼操作。
什麼是 Cloud SQL?
Cloud SQL 是 GCP 提供的全托管關聯式資料庫服務(Fully Managed RDBMS),支援三種資料庫引擎:
| 引擎 | 支援版本 |
|---|---|
| MySQL | 8.0、8.4 |
| PostgreSQL | 14、15、16、17 |
| SQL Server | 2019 Standard/Enterprise/Express/Web、2022 Standard/Enterprise |
所謂「全托管」,就是這些都由 Google 幫你扛:
- 作業系統更新與安全修補
- 資料庫引擎升級(可排程)
- 自動備份
- 儲存空間自動擴充
- 高可用配對(HA)
你要顧的只剩下:Schema、使用者帳號、查詢最佳化、應用程式連線。
版本選型建議
MySQL
- 8.4:目前最新長期支援版(LTS),適合新專案;相較 8.0 預設值更安全、移除舊有已棄用功能,並支援
EXPLAIN ANALYZE(自 8.0.18 起) - 8.0:最廣泛使用版本,生態系相容性最好
不再支援 MySQL 5.7(已 EOL)
PostgreSQL
- 17:最新版,支援
MERGE完整語法、更好的 JSON 路徑查詢 - 16:穩定選擇,大量新功能(邏輯複寫增強、並行查詢改善)
- 14、15:舊系統遷移用
建議新專案直接用 PostgreSQL 16 或 17
執行個體類型(Machine Type)
Cloud SQL 使用 Shared core(共享核心) 和 Dedicated core(專用核心) 兩大類型:
Shared Core(入門/測試用)
| 類型 | vCPU | 記憶體 | 備注 |
|---|---|---|---|
db-f1-micro | 0.2 | 0.6 GB | 無 SLA,不適用生產環境 |
db-g1-small | 0.5 | 1.7 GB | 無 SLA,不適用生產環境 |
⚠️ 重要:db-f1-micro 和 db-g1-small 不提供 SLA,只適合開發、測試、非關鍵工作負載。
Dedicated Core(生產環境)
| 系列 | 格式 | 特性 |
|---|---|---|
| Enterprise | db-n1-*, db-n2-* | 標準生產等級,99.95% SLA |
| Enterprise Plus | db-perf-optimized-N-* | 高效能,99.99% SLA,SSD 資料快取(Data Cache,本地 SSD) |
Enterprise Plus 適合:
- 低延遲要求(< 1ms)
- 讀取密集型工作負載
- 需要 99.99% SLA 的關鍵系統
高可用架構(HA)
Cloud SQL HA 採用**區域內主備(Regional HA)**設計,使用 Regional Persistent Disk 實現資料同步:
┌──────────────────────────────────────┐
│ us-central1 (Region) │
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Primary │ │ Standby │ │
│ │ (Zone A) │ │ (Zone B) │ │
│ └──────┬───────┘ └──────┬───────┘ │
│ │ │ │
│ └────────┬────────┘ │
│ │ │
│ ┌─────────────▼────────────┐ │
│ │ Regional Persistent Disk│ │
│ │ (兩個 Zone 各一份,同步複寫) │ │
│ └──────────────────────────┘ │
└──────────────────────────────────────┘
關鍵特性:
- 使用 Regional Persistent Disk,將寫入同步複寫到兩個 Zone 各自的磁碟,交易必須在兩個 Zone 的磁碟都寫入才算 commit(因此會有同步複寫的延遲,regional disk 的寫入延遲高於 zonal disk)
- 故障切換(Failover)時間:約 60 秒
- 備用節點不對外提供讀取服務(與 RDS Multi-AZ 類似)
- 啟用 HA 後費用約 2 倍(primary + standby)
啟用 HA:
# 建立時啟用
gcloud sql instances create my-db \
--database-version=POSTGRES_16 \
--tier=db-n2-standard-2 \
--region=us-central1 \
--availability-type=REGIONAL # 預設是 ZONAL(無 HA)
連線方式
方式一:Cloud SQL Auth Proxy(推薦)
Cloud SQL Auth Proxy 是 Google 提供的本地代理程式,會用 IAM 驗證幫你開一條加密隧道:
# 下載 Auth Proxy
curl -o cloud-sql-proxy \
https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.14.1/cloud-sql-proxy.linux.amd64
# 啟動代理
./cloud-sql-proxy \
--port=5432 \
PROJECT_ID:REGION:INSTANCE_NAME
應用程式連線:
Host: 127.0.0.1
Port: 5432
User: app-user
Password: ****
Database: mydb
優點:
- 自動加密(TLS)
- 使用 IAM 驗證,不需要開防火牆規則
- 支援 Unix socket(效能更好)
方式二:Private Service Connect(新推薦)
Private Service Connect (PSC) 是現在 Google 最推薦的私有連線方式,用來取代舊的 VPC Peering(Private IP):
# 建立支援 PSC 的 Cloud SQL 執行個體
gcloud sql instances create my-db \
--database-version=MYSQL_8_0 \
--tier=db-n2-standard-2 \
--region=us-central1 \
--no-assign-ip \
--enable-private-service-connect \
--allowed-psc-projects=PROJECT_ID
PSC vs. VPC Peering 比較:
| 特性 | Private Service Connect | VPC Peering |
|---|---|---|
| 路由衝突 | 無(獨立 IP) | 可能衝突 |
| 跨專案 | 支援 | 複雜 |
| 安全性 | 更高(單向存取) | 雙向 |
| 建議程度 | ✅ 推薦 | 逐漸淘汰 |
方式三:Public IP + Authorized Networks
設定最簡單,但安全性也最差。你得在「授權網路」裡加上 IP 白名單:
gcloud sql instances patch my-db \
--authorized-networks=203.0.113.10/32
⚠️ 生產環境不建議使用 Public IP,除非搭配 Cloud SQL Auth Proxy。
使用者與資料庫管理
# 建立資料庫
gcloud sql databases create mydb --instance=my-db
# 建立使用者(MySQL)
gcloud sql users create app-user \
--instance=my-db \
--password=SecurePassword123!
# 建立使用者(PostgreSQL,使用 Cloud IAM 驗證)
gcloud sql users create "sa-name@project.iam" \
--instance=my-db \
--type=cloud_iam_service_account
# 列出所有使用者
gcloud sql users list --instance=my-db
# 連線到資料庫(透過 Cloud Shell)
gcloud sql connect my-db --user=app-user --database=mydb
備份策略
自動備份(Automated Backups)
# 設定自動備份(每天凌晨 2 點,保留 7 天)
gcloud sql instances patch my-db \
--backup-start-time=02:00 \
--retained-backups-count=7
預設行為:
- 每天自動備份
- 保留 7 份(可設定 1~365)
- 存在 Google 管理的儲存空間
隨選備份(On-Demand Backups)
gcloud sql backups create --instance=my-db
時間點還原(Point-in-Time Recovery, PITR)
PITR 讓你還原到任意時間點(不只是備份時間點):
# 啟用 PITR(需要先啟用 binlog/WAL)
gcloud sql instances patch my-db \
--enable-point-in-time-recovery
# 還原到特定時間(PITR 是 clone 出一個新 instance)
gcloud sql instances clone my-db my-db-restored \
--point-in-time='2026-03-10T12:00:00.000Z'
⚠️ PITR 會佔用額外儲存空間(儲存 transaction log)
儲存與擴充
儲存設定
gcloud sql instances create my-db \
--storage-size=20GB \ # 初始儲存大小(最小 10GB)
--storage-type=SSD \ # SSD(建議)或 HDD
--storage-auto-increase # 自動增加儲存(建議啟用)
儲存自動增加(--storage-auto-increase):
- 當可用空間低於門檻值(約 5 + 容量/25 GB,最大 25GB)時自動擴充
- 每次擴充量等於門檻值(= 5 + 容量/25,最大 25GB),並非固定 25GB 或按比例取較大值
- 注意:只能擴充,不能縮小
垂直擴充(修改機器類型)
gcloud sql instances patch my-db \
--tier=db-n2-standard-4
⚠️ 修改 tier 需要重啟,約有 60 秒停機時間(HA 模式下會自動 failover)
讀取副本(Read Replicas)
讀取副本是用來分散讀取負載的:
# 建立讀取副本(同區域)
gcloud sql instances create my-db-replica \
--master-instance-name=my-db \
--region=us-central1
# 建立跨區域讀取副本
gcloud sql instances create my-db-replica-asia \
--master-instance-name=my-db \
--region=asia-east1
讀取副本特性:
- 非同步複寫(可能有延遲)
- 只能執行
SELECT查詢 - 可提升為獨立執行個體(
promote-replica) - 可從副本建立備份(節省 primary 資源)
定價模式
Cloud SQL 無免費層,費用組成:
| 費用項目 | 說明 |
|---|---|
| 執行個體費用 | 依 vCPU + 記憶體計費,按小時 |
| 儲存費用 | SSD $0.17/GB/月,HDD $0.09/GB/月 |
| 備份費用 | 超過執行個體儲存大小的部分才計費 |
| 網路費用 | Egress 計費(同 Region 免費) |
💡 省錢技巧:不用的測試環境記得停機(
gcloud sql instances patch --activation-policy NEVER),停機後只收儲存費用。
與其他 GCP 資料庫服務比較
| 服務 | 類型 | 適用場景 |
|---|---|---|
| Cloud SQL | 托管 RDBMS | 傳統 OLTP 應用,MySQL/PostgreSQL/SQL Server |
| Cloud Spanner | 分散式 RDBMS | 全球一致性,水平擴展,高吞吐 |
| AlloyDB | PostgreSQL 相容 | 高效能 PostgreSQL,比 Cloud SQL 快 4x |
| Firestore | NoSQL 文件型 | 行動/Web 應用,彈性 Schema |
| Bigtable | NoSQL 寬欄型 | 時序資料、IoT,百萬 QPS |
選型決策樹:
需要 SQL?
├─ 是 → 需要水平擴展或全球一致性?
│ ├─ 是 → Cloud Spanner
│ └─ 否 → 需要高效能 PostgreSQL?
│ ├─ 是 → AlloyDB
│ └─ 否 → Cloud SQL ✅
└─ 否 → 文件型 → Firestore;時序/大量寫入 → Bigtable
ACE 考試重點整理
必背知識點
db-f1-micro和db-g1-small無 SLA,不適合生產環境- HA 使用 Regional Persistent Disk,將資料以區塊層級同步複寫(block-level synchronous replication)到兩個 Zone 的磁碟;寫入需在兩個 Zone 的磁碟都落盤後才回報 commit
- 連線方式優先順序:Private Service Connect > Auth Proxy > Public IP
- **VPC Peering(Private IP)**逐漸被 PSC 取代
- PITR 需要啟用
--enable-point-in-time-recovery - 儲存只能增加,不能縮小
- 停機後只收儲存費用(activation-policy NEVER)
常見陷阱題
Q:啟用 HA 後效能如何? A:standby 節點不提供讀取服務,不會提升效能,只提升可用性。要提升效能需另建讀取副本。
Q:讀取副本和 HA standby 有什麼差別? A:HA standby 用於故障切換(Failover),使用者無法直接連線;讀取副本可接受讀取流量,是不同資源。
Q:要降低讀取延遲,應該怎麼做? A:建立同區域讀取副本(低延遲)或跨區域讀取副本(就近存取)。
Q:Cloud SQL 有免費方案嗎? A:沒有。Cloud SQL 從第一個小時就開始計費。
實戰範例:建立 PostgreSQL 生產環境執行個體
# 建立 PostgreSQL 16 生產執行個體
gcloud sql instances create prod-postgres \
--database-version=POSTGRES_16 \
--tier=db-n2-standard-2 \
--region=asia-east1 \
--availability-type=REGIONAL \
--storage-size=50GB \
--storage-type=SSD \
--storage-auto-increase \
--backup-start-time=03:00 \
--retained-backups-count=14 \
--enable-point-in-time-recovery \
--no-assign-ip \
--enable-private-service-connect \
--allowed-psc-projects=$(gcloud config get-value project)
# 建立資料庫
gcloud sql databases create appdb --instance=prod-postgres
# 建立應用程式使用者
gcloud sql users create appuser \
--instance=prod-postgres \
--password="$(openssl rand -base64 32)"
# 建立讀取副本
gcloud sql instances create prod-postgres-replica \
--master-instance-name=prod-postgres \
--region=asia-east1 \
--tier=db-n2-standard-2
總結
Cloud SQL 是 GCP 上最直接的關聯式資料庫選擇,大多數傳統應用場景都罩得住。重點整理:
- 選版本:MySQL 8.0/8.4,PostgreSQL 14-17,依應用相容性選擇
- 選機型:生產環境用 Enterprise 或 Enterprise Plus,測試才用 db-f1-micro
- HA 架構:Regional Persistent Disk 共享儲存,切換約 60 秒
- 連線:優先 Private Service Connect,其次 Auth Proxy
- 備份:自動備份 + PITR,確保 RTO/RPO 達標
下一課 ACE-209:Cloud Pub/Sub 與事件驅動架構,學習如何用訊息佇列解耦微服務。
資料庫選型系列
| 課程 | 服務 | 適合場景 |
|---|---|---|
| 本課 GCP-108 | Cloud SQL | 中小型 OLTP、傳統 SQL 應用 |
| GCP-112 | Firestore | Mobile/Web App、即時同步 |
| GCP-113 | Bigtable | PB 級 IoT/時序、低延遲高吞吐 |
| ACE-211 | BigQuery | PB 級分析、BI 報表 |
| ACE-213 | Spanner | 全球規模 OLTP、強一致性 |
| GCP-115 | Memorystore | 微秒級快取、Session 管理 |
📖 延伸閱讀:不確定該選哪個資料庫?參考 GCP 資料庫選型完全指南,用決策樹 5 分鐘找到答案。