匯入及匯出資料的最佳做法

本頁面提供使用 Cloud SQL 匯入及匯出資料的最佳做法。如需將資料匯入 Cloud SQL 的逐步操作說明,請參閱「匯入資料」一文。如需匯出資料的逐步操作說明,無論資料位於 Cloud SQL 或您管理的執行個體,請參閱「匯出資料」。

匯入及匯出的最佳作法

以下是匯入及匯出資料時的最佳做法:

不要使用 Cloud Storage 的「要求者付費」值區

當您從 Cloud SQL 執行匯入和匯出作業時,不能使用已啟用要求者付費的 Cloud Storage 值區。

盡量減少匯出作業對效能的影響

對於從 Cloud SQL 匯出的標準資料,系統會在資料庫上線時執行匯出作業。如果匯出的資料較少,影響可能就會降到最低。不過,如果資料庫中有大型資料庫或大型物件 (例如 BLOB),匯出作業可能會降低資料庫效能。這可能會影響對資料庫執行查詢和作業的時間。匯出作業開始後,如果資料庫開始回應緩慢,就無法停止匯出作業。

如要避免匯出作業期間的回應速度變慢,您可以採取下列做法:

  1. 從唯讀備用資源匯出資料。如果您經常匯出資料 (每天或更頻繁),但匯出的資料量很少,這可能會是個不錯的選項。如要從讀取/寫入副本執行匯出作業,請在讀取/寫入副本執行個體上使用 Google Cloud 控制台、gcloud 或 REST API 匯出函式。如要進一步瞭解如何建立及管理唯讀副本,請參閱「 建立唯讀副本」。

  2. 使用無伺服器匯出功能。透過無伺服器匯出功能,Cloud SQL 會建立獨立的暫時執行個體,用於卸載匯出作業。卸載匯出作業可讓主要執行個體上的資料庫繼續以正常效能率提供查詢及執行作業。資料匯出作業完成後,系統會自動刪除暫時性執行個體。如果您要一次性匯出大型資料庫,這可能是不錯的做法。使用 Google Cloud 主控台、gcloud 或 REST API 匯出函式,搭配 offload 標記執行無伺服器匯出作業。

    在無伺服器匯出作業期間,您可以執行其他作業,例如執行個體編輯、匯入和備援。不過,如果您選取 delete,匯出作業會在刪除執行個體後停止,且不會匯出任何資料。

    請參閱下表,瞭解在無伺服器匯出作業執行期間可能遭到封鎖的作業:
    目前的作業 新作業 已封鎖?
    任何作業 無伺服器匯出
    無伺服器匯出 除了無伺服器匯出作業以外的任何作業
    除了無伺服器匯出作業以外的任何作業 除了無伺服器匯出作業以外的任何作業

    無伺服器匯出作業的處理時間比標準匯出作業更長,因為需要花費時間建立暫時執行個體。至少需要五分鐘,但如果資料庫較大,可能需要更長的時間。決定要使用哪一種匯出類型前,請先考量時間、效能和成本的影響。

建立 SQL 傾印檔案時使用正確標記

如果您將資料匯出為 SQL 傾印檔案時,沒有採用正確的程序,則匯入作業可能無法成功。如需瞭解如何建立 SQL 傾印檔案以匯入 Cloud SQL,請參閱匯出資料

壓縮資料以減少費用

Cloud SQL 支援匯入及匯出已壓縮及未壓縮的檔案。壓縮可以節省 Cloud Storage 中的大量儲存空間並減少儲存成本,特別是在您要匯出大型執行個體時。

匯出 SQL 傾印檔案或 CSV 檔案時,請使用 .gz 副檔名來壓縮資料。匯入副檔名為 .gz 的檔案時,檔案會自動解壓縮。

減少長時間執行的匯入與匯出程序

匯入至 Cloud SQL 和從 Cloud SQL 匯出資料可能需要很長的時間才能完成,具體取決於所處理資料的大小。這可能會造成下列影響:

  • 您無法停止長時間執行的 Cloud SQL 執行個體作業。
  • 您一次只能為每個執行個體執行一項匯入或匯出作業,且長時間執行的匯入或匯出作業會阻斷其他作業,例如每日自動備份作業。無伺服器匯出作業可讓您執行其他作業,包括編輯執行個體、匯入、容錯和解除每日自動備份的封鎖。

您可以使用 Cloud SQL 匯入或匯出功能,並使用較小批次的資料,藉此縮短完成每項作業所需的時間。

匯出資料時,您可以從讀取複本執行匯出作業,也可以使用無伺服器匯出功能,盡量減少對資料庫效能造成的影響,並在匯出作業執行期間,允許在執行個體上執行其他作業。

如需更多提示,請參閱「診斷 Cloud SQL 執行個體的問題」。

驗證匯入的資料庫

匯入作業完成後,請連線至資料庫並執行適當的資料庫指令,確保內容正確無誤。例如連結並列出資料庫、資料表和特定項目。

已知限制

如需已知限制的清單,請參閱匯入和匯出資料的問題

自動化匯出作業

雖然 Cloud SQL 並未提供內建方式自動匯出資料庫,但您可以使用多個 Google Cloud元件自行建構自動化工具。詳情請參閱 這份教學課程

疑難排解

匯入作業疑難排解

問題 疑難排解
錯誤訊息:permission denied for schema public 針對 PostgreSQL 15 以上版本,如果目標資料庫是從 template0 建立,則匯入資料可能會失敗。如要解決這個問題,請執行 GRANT ALL ON SCHEMA public TO cloudsqlsuperuser SQL 指令,為 cloudsqlsuperuser 使用者提供公開架構權限。
HTTP Error 409: Operation failed because another operation was already in progress 您的執行個體已有待處理的作業。系統一次只能執行一項作業。請等待目前的作業完成後再提出要求。
匯入作業時間過長。 連線數量過多可能會干擾匯入作業。

關閉未使用的作業。請檢查 Cloud SQL 執行個體的 CPU 和記憶體用量,確保有充足的資源可供使用。如要確保匯入作業有最多資源可用,請先重新啟動執行個體,再開始執行作業。

重新啟動:

  • 關閉所有連線。
  • 結束可能會耗用資源的工作。
如果傾印檔案中有一或多位參照的使用者不存在,匯入作業就會失敗。 在匯入傾印檔案之前,如果資料庫使用者擁有傾印資料庫中的物件,或已取得傾印資料庫中的物件存取權,這類使用者都必須存在於目標資料庫中。如果沒有,匯入作業就無法使用原始擁有權或權限重新建立物件。

請先 建立資料庫使用者,再匯入資料。

匯入資料後,資料磁碟的用量會大幅增加。

匯入資料後,磁碟用量可能會出現非預期的情形。這可能是因為您使用時間點復原功能。

如要解決這個問題,請在匯入資料後停用時間點復原功能,以便刪除記錄並復原儲存空間。請注意,減少使用的儲存空間量,並不會縮減為執行個體配置的儲存空間大小。

錯誤訊息:GRANT stderr: ERROR: must be member of role ROLE_NAME

如果您嘗試匯入在 Cloud Storage 中上傳的 SQL 傾印檔案,且匯入工作已執行約四天,就會出現這則錯誤訊息。

ROLE_NAME 是在來源 PostgreSQL 資料庫中定義的自訂資料庫角色。預設 cloudsqlsuperuser 使用者會匯入 SQL 傾印檔案。不過,這位使用者可能不屬於 ROLE_NAME 角色。

如要解決這個問題,請完成下列步驟:

  1. 在匯入 SQL 傾印檔案的目的地資料庫中建立 ROLE_NAME 角色。
  2. 請勿使用 cloudsqlsuperuser 使用者匯入檔案。請改為在目的地資料庫中,指定 ROLE_NAME 角色的成員。如要指定使用者,請執行下列指令:

    gcloud sql import sql INSTANCE URI [--async]
    [--database=DATABASE, -d DATABASE] [--user=USER] [GCLOUD_WIDE_FLAG …]

排解匯出作業相關問題

問題 疑難排解
HTTP Error 409: Operation failed because another operation was already in progress. 您的執行個體已有待處理的作業。系統一次只能執行一項作業。請等待目前的作業完成後再提出要求。
HTTP Error 403: The service account does not have the required permissions for the bucket. 請確認值區存在,且 Cloud SQL 執行個體 (執行匯出作業) 的服務帳戶具備 Storage Object Creator 角色 (roles/storage.objectCreator),以便將資料匯出至值區。請參閱 Cloud Storage 的 IAM 角色
CSV 匯出成功,但 SQL 匯出失敗。 CSV 和 SQL 格式的匯出方式不同。SQL 格式會匯出整個資料庫,因此可能需要較長的時間才能完成。您可以使用 CSV 格式,定義要匯出哪些資料庫元素。

使用 CSV 匯出功能,只匯出所需資料。

匯出作業耗時過久。 Cloud SQL 不支援並行同步作業。

使用 匯出卸載功能。在匯出卸載作業中,Cloud SQL 不會在來源執行個體上發出匯出作業,而是會啟動卸載執行個體來執行匯出作業。匯出卸載有許多優點,包括提升來源執行個體的效能,以及在匯出作業執行期間解除封鎖管理作業。使用匯出卸載功能時,總延遲時間可能會因啟動卸載執行個體所需的時間而增加。一般來說,如果匯出檔案的大小適中,延遲時間就不會太嚴重。不過,如果匯出內容的大小不大,您可能會發現延遲時間增加。

建立擴充功能時發生錯誤。 傾印檔案包含不支援的擴充功能參照。

編輯快照檔案以移除參照

使用 pg_dumpall 時發生錯誤。 使用 pg_dumpall 公用程式搭配 --global 標記時,需要超級使用者角色,但 PostgreSQL 適用的 Cloud SQL 不支援此角色。如要避免在執行包含使用者名稱的匯出作業時發生錯誤,請一併使用 --no-role-passwords 標記。
匯出作業在匯出任何內容前就逾時,您會看到錯誤訊息 Could not receive data from client: Connection reset by peer. 如果 Cloud Storage 在特定時間範圍內 (通常約七分鐘) 未收到任何資料,連線就會重設。初始匯出查詢可能需要太長的時間才能執行。

使用 pg_dump 工具手動匯出。

您希望匯出作業自動化。 Cloud SQL 不提供自動匯出資料的方式。

您可以使用 Google Cloud產品 (例如 Cloud Scheduler、Pub/Sub 和 Cloud Run 函式) 建構自己的自動匯出系統,類似於本文中說明的 自動備份

後續步驟