Cloud SQL 錯誤訊息

本頁面說明 Cloud SQL 中可能出現的部分錯誤訊息。

總覽

Cloud SQL 的錯誤訊息來源眾多,且會出現在多個位置。部分錯誤訊息來自資料庫引擎本身、Cloud SQL 服務或用戶端應用程式,有些則是呼叫 Cloud SQL Admin API 時傳回。

本頁面列出 Cloud SQL 中一些最常見的錯誤。如果在這裡找不到您要的錯誤代碼或訊息,可以前往下列網址查看來源參考資料:

如果找不到您看到的錯誤訊息參考資料,也可以在下列位置搜尋,其他使用者可能會有相關經驗:

作業錯誤

A | B | C | D | E | F | G | I | L | M | N | O | P | Q | R | S | T | U | W

錯誤訊息 疑難排解
已取消與資料庫 DB_NAME 的連線 xxx。 應用程式未正確結束連線。

請檢查下列情況:

  • 應用程式未在結束前呼叫 mysql_close()。
  • 通訊錯誤。
  • 應用程式可能已休眠超過 `wait_timeout` 或 `interactive_timeout` 指定的秒數,且未向伺服器發出任何要求。 請參閱第 5.1.7 節「伺服器系統變數」。
  • 應用程式在資料移轉過程中突然終止。
  • max_allowed_packet 變數值可能太小,或查詢所需的記憶體超過分配給 mysqld 的記憶體。如要解決這個問題,請將 max_allowed_packet 旗標提高到更大的數字。
存取遭拒;您需要 (至少一項) SUPER 權限才能執行這項作業。 來源資料庫中可能有檢視表、函式或程序,以 Cloud SQL 不支援的方式參照 DEFINER。

更新外部資料庫中的定義者,例如從 root@localhost 變更為 root@% 或非超級使用者。詳情請參閱「儲存物件存取控管」。

使用者「XXX」@「XXX」的存取權遭拒 (使用密碼:XXX) 可能的原因有很多種,包括:
  • 使用者名稱 (或密碼) 不正確。
  • 使用者從 @XXX 以外的網址連線。
  • 使用者不具備連線至目標資料庫的正確權限。

試試這些做法 ...

  • 確認使用者名稱和對應的密碼。
  • 檢查連線來源,確認是否與使用者具備存取權限的網址相符。
  • 檢查使用者在資料庫中的授予權限。
在網路中找不到分配的 IP 範圍。 修改或移除分配範圍後,未更新虛擬私有雲對接。

您必須修改私人連線。請使用下列指令,並務必使用 --force 引數:

gcloud services vpc-peerings update \
--network=VPC_NETWORK \
--ranges=ALLOCATED_RANGES \
--service=servicenetworking.googleapis.com \
--force
ANY command denied to user 'root'@'%' for table ... 使用者不具備這項作業所需的所有權限。

試試看:

  1. 連線至資料庫 (例如使用 Cloud Shell),並以 root 身分登入。
  2. 執行 USE mysql;。
  3. 使用下列語法授予權限:
    GRANT PERMISSION_1,PERMISSION_2 ON *.* TO 'root' WITH GRANT OPTION;
       
    • 選取
    • INSERT
    • 更新
    • 刪除
    • 建立
    • DROP
    • 重新載入
    • SHUTDOWN
    • 程序
    • 參考資料
    • INDEX
    • ALTER
    • 顯示資料庫
    • CREATE TEMPORARY TABLES
    • LOCK TABLES
    • 執行
    • REPLICATION SLAVE
    • 複製用戶端
    • CREATE VIEW
    • 顯示檢視畫面
    • 建立日常安排
    • 修改日常安排
    • CREATE USER
    • 活動
    • 觸發條件
    • CREATE TABLESPACE
  4. 執行 USE 'Database_Name';,其中 Database_Name 是您要建立檢視表的資料庫。
  5. 在工作階段中執行所有建立檢視表作業,並提交。
錯誤訊息 疑難排解
要求錯誤。 看到這則訊息的原因有很多,Illegal Argument 是最常見的其中一種。在這種情況下,要求使用了錯誤的引數或無效的引數值。如果是其他原因,錯誤訊息可能會提供實用提示。

如果是 Illegal Argument,請檢查要求,確保每個引數都允許,且引數的每個值都有效。如果是其他原因,請查看記錄檔,瞭解是否有更多資訊。

錯誤訊息 疑難排解
無法修改 CreateConnection 中的分配範圍。請改用 UpdateConnection。 修改或移除分配範圍後,未更新虛擬私有雲對接。

您需要修改私人連線。請使用下列指令,並務必使用 --force 引數:

gcloud services vpc-peerings update \
--network=VPC_NETWORK \
--ranges=ALLOCATED_RANGES \
--service=servicenetworking.googleapis.com \
--force
對等方已重設連線。

如果您嘗試執行匯出作業,但 Cloud Storage 在特定時間範圍內未收到任何資料,連線就會重設。

請嘗試使用 pg_dump 手動匯出。

constraints/sql.restrictAuthorizedNetworks。 Authorized Networks 設定會封鎖複製作業。Authorized Networks 在 Google Cloud 控制台的「連線」部分設為公開 IP 位址,且基於安全性考量,不允許複製。

如果可以,請從 Cloud SQL 執行個體中移除所有 Authorized Networks 項目。否則,請 建立 不含任何 Authorized Networks 項目的副本。

檔案群組 PRIMARY 的磁碟空間不足,因此無法為資料庫 database_name 分配新頁面。 PRIMARY 檔案群組是資料庫中的主要和預設檔案群組,空間已用盡。

使用 sp_helpdb 指令取得資料庫相關資訊。

請考慮下列解決方案:

  • 手動擴充磁碟空間,或減少資料庫中的資料。
  • 確認資料庫執行個體已啟用 Automatic storage increase。
  • 新增更多檔案群組,並將資料移至其中。
  • 確保成長不受限。使用 ALTER DATABASE 指令啟用自動成長功能 (如果尚未啟用),並提高檔案大小上限。
  • 管理 tempdb 檔案。使用 DBCC OPENTRAN 和 DBCC SQLPERF 指令,檢查是否有未完成的交易,導致 tempdb 檔案或交易記錄增加。
錯誤訊息 疑難排解
資料庫「user」不存在。 gcloud sql connect --user 僅適用於預設的 postgres 使用者。

連線至預設使用者,然後變更使用者。

磁碟已滿。 建立副本時,主要執行個體磁碟空間可能會用盡。

編輯主要執行個體,升級至較大的磁碟。

錯誤訊息 疑難排解
無法建立子網路。 IP 範圍內沒有可用的位址。

在已分配的 IP 範圍中找不到可用區塊。請為這個服務供應商分配新的範圍。

分配的 IP 範圍內沒有其他可用位址。

請考慮以下可能的情境:

  • 為私人服務連線分配的 IP 範圍大小小於 /24。
  • 私人服務連線的分配 IP 範圍太小,無法容納 Cloud SQL 執行個體數量。
  • 如果是在多個區域建立執行個體,則分配的 IP 範圍大小要求會更大。請參閱分配範圍大小

針對上述各個情境,您可以選擇擴充現有 IP 範圍,或為私人服務連線分配額外的 IP 範圍。

分配新範圍時,請注意不要建立與任何現有分配項目重疊的分配項目。

建立新的 IP 範圍後,請使用下列指令更新虛擬私有雲對接:

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com
--ranges=OLD_RESERVED_RANGE_NAME,NEW_RESERVED_RANGE_NAME \
--network=VPC_NETWORK
--project=PROJECT_ID \
--force

如要擴充現有分配,請務必只增加分配範圍,不要減少。舉例來說,如果原始分配為 10.0.10.0/24,則新分配至少應為 10.0.10.0/23。

一般來說,如果從 /24 分配開始,每增加一個條件 (額外的執行個體類型群組、額外的區域),就將 /mask 減少 1,這是一個很好的經驗法則。舉例來說,如果嘗試在同一個分配中建立這兩種執行個體類型群組,只要從 /24 變更為 /23 即可。

擴充現有 IP 範圍後,請使用下列指令更新虛擬私有雲對接:

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com
--ranges=RESERVED_RANGE_NAME \
--network=VPC_NETWORK \
--project=PROJECT_ID \
--force
錯誤訊息 疑難排解
(gcloud.sql.connect) 您的用戶端似乎沒有 ipv6 連線能力,且資料庫執行個體沒有 ipv4 位址。 您正嘗試使用 Cloud Shell 連線至私人 IP 執行個體。

不支援從 Cloud Shell 連線至僅有私人 IP 位址的執行個體。

傾印資料表時,封包大小超過 max_allowed_packet 個位元組。 封包大小超過設定允許的上限。

使用 mysqldump 並加上 max_allowed_packet 選項。

如要進一步瞭解如何使用 mysqldump 旗標進行代管匯入遷移作業,請參閱「允許和預設的初始同步旗標」

錯誤訊息 疑難排解
InnoDB: Write to file ./ibtmp1 failed at offset XXXX, YYYY bytes should have been written, only 0 were written. 執行個體在執行自動備份時達到硬性限制。

請確認作業系統和檔案系統支援這個大小的檔案。 確認磁碟未滿或未超出磁碟配額。您可以透過 Google Cloud 控制台申請提高配額,或編輯執行個體,升級至更大的磁碟。

發生內部錯誤。 專案可能缺少這項功能所需的 Service Networking 服務帳戶。

如要手動建立服務帳戶,請按照「建立服務代理並授予角色」一文中的操作說明進行。

要求無效:執行個體的 Service Networking 設定有誤。 專案未啟用 Service Networking API。

在專案中啟用 Service Networking API。如果您在嘗試將私人 IP 位址指派給 Cloud SQL 執行個體時看到這則錯誤訊息,且您使用的是 Shared VPC,則也需要為託管專案啟用 Service Networking API。

執行個體不符合建立副本的條件。 主要執行個體不符合必要的複製條件。如需相關規定清單,請參閱「複製作業限制」。
錯誤訊息 疑難排解
使用者「XXX」登入失敗。 請確認使用者具備嘗試連線的執行個體和資料庫權限,並確保使用正確的憑證。
登入「test」擁有一或多個資料庫。請先變更資料庫擁有者,再捨棄登入資訊。 如要捨棄與已停用資料庫擁有者相關聯的使用者登入資訊,必須先指派新的資料庫擁有者。
錯誤訊息 疑難排解
中繼資料表已鎖定。 其他查詢、程序或交易阻擋了您的查詢,並鎖定資料表。

找出鎖定資料表的程序並停止:

  1. 診斷方式:sql> show processlist;

    清單中的第一個項目可能是持有鎖定的項目,後續項目則在等待該項目。

  2. SHOW INNODB STATUS 指令也很有幫助。
  3. 執行 KILL <var>PID</var> 指令。
錯誤訊息 疑難排解
網路關聯失敗。 專案未啟用 Service Networking API。

在專案中啟用 Service Networking API。如果您在嘗試將私人 IP 位址指派給 Cloud SQL 執行個體時看到這則錯誤訊息,且您使用的是 Shared VPC,則也需要為託管專案啟用 Service Networking API。

錯誤訊息 疑難排解
還有其他正在進行的作業,因此作業失敗。 Cloud SQL 中的大多數作業都是同步作業。一次只能執行一項。

請等待前一項作業完成,再開始另一項作業。

錯誤訊息 疑難排解
使用者「postgres」的密碼驗證失敗。 建立新的 PostgreSQL 適用的 Cloud SQL 執行個體時,系統會建立預設管理員使用者 postgres,但不會建立密碼。您必須先為這位使用者設定密碼,對方才能登入。
錯誤訊息 疑難排解
已超過配額。 已達每分鐘或每日配額上限。查看 Cloud SQL 的配額與限制。

透過Google Cloud 控制台申請提高配額。

錯誤訊息 疑難排解
剩餘的連線運算單元皆為保留狀態。 連線數量已達上限。

提高 max_connections 旗標的值。請參閱「設定資料庫旗標」。

要求缺少有效的 API 金鑰。 您可能沒有有效的服務帳戶金鑰 JSON 檔案,或檔案未儲存在預期位置。

確認 GOOGLE_APPLICATION_CREDENTIALS 環境變數儲存的位置有有效的服務帳戶金鑰 JSON 檔案,且變數指向正確的位置。

錯誤訊息 疑難排解
指定的鍵過長,鍵長度上限為 767 個位元組。 外部主要執行個體可能已設定 innodb_large_prefix 變數。

建立副本時,請將 innodb_large_prefix 旗標設為 ON,或使用該旗標更新現有副本。

SSL 錯誤:邊框間距無效。 伺服器憑證錯誤。

建立新的伺服器憑證並輪替。

發生系統錯誤。
  • 使用者可能不具備所有必要的 Cloud Storage 權限。
  • 資料庫資料表可能不存在。

試試這些做法 ...

  • 請確認您至少具備值區的 WRITER 權限和匯出檔案的 READER 權限。如要進一步瞭解如何在 Cloud Storage 中設定存取控管,請參閱「建立及管理存取控管清單」
  • 請確認資料表存在。如果資料表確實存在,請確認您具備儲存空間 bucket 的適當權限。

錯誤訊息 疑難排解
資料表定義已變更。 匯出期間,資料表發生變更。

如果在匯出作業期間使用下列陳述式,轉儲交易可能會失敗:

  • ALTER TABLE
  • CREATE TABLE
  • DROP TABLE
  • RENAME TABLE
  • TRUNCATE TABLE

從傾印作業中移除任何這類陳述式。

暫存檔案大小超過 temp_file_limit。 temp_file_limit 旗標設定過低,不符合資料庫用量。

增加 temp_file_limit 大小。請參閱「設定資料庫旗標」。

資料表「db.table」不存在 如果 MySQL 重新啟動後,一或多個 InnoDB 資料表消失,且 MySQL 錯誤記錄同時出現下列警告,表示外鍵和參照鍵資料欄未同步。
[Warning] InnoDB: Load table db.table failed, the table has missing
foreign key indexes. Turn off 'foreign_key_checks' and try again.
[Warning] InnoDB: Cannot open table db/table from the internal data
dictionary of InnoDB though the .frm file for the table exists.
See InnoDB troubleshooting
for more information.
      

資料庫重新啟動後,MySQL 必須在首次存取時將資料表載入 InnoDB 字典快取。如果偵測到不一致,就會封鎖該資料表的存取權。

mysql> select * from db.table;
ERROR 1146 (42S02): Table db.table doesn't exist
      

關閉 MySQL 工作階段的 foreign_key_checks,即可再次存取資料表。存取資料表並載入字典快取後,InnoDB 不會檢查及回報外鍵不相符的問題,直到下次重新啟動資料庫為止

請修正外鍵不相符的問題,以免發生其他問題。

  1. 停用 mysql 用戶端工作階段的 foreign_key_checks,並存取資料表。
    mysql> SET SESSION FOREIGN_KEY_CHECKS=0;
                
  2. 檢查父項和子項資料表,找出外鍵和參照鍵資料欄之間不相符的部分。
    mysql> SHOW CREATE TABLE parent_table;
    mysql> SHOW CREATE TABLE child_table;
                

    請確認對應的資料欄具有相似的資料類型。固定精確度類型 (例如 INTEGER 和 DECIMAL) 的大小和正負號相同。如果是非二進位 (字元) 字串資料欄,字元集和定序必須相同。

  3. 請使用 ALTER TABLE 陳述式修正不相符的問題。某些作業可能需要先捨棄外鍵限制、套用變更,然後再重新加入外鍵。
  4. 再次重新啟用 foreign_key_checks。
    mysql> SET SESSION FOREIGN_KEY_CHECKS=1;
                
匯出時發生 (逾時)。 CSV 和 SQL 格式的匯出方式不同。SQL 格式包含整個資料庫,可能需要較長時間才能完成。

使用 CSV 格式,並執行多個較小的匯出工作,縮減每項作業的大小和長度。

連線數量過多。 如果 max_connections 旗標值設得太高,可能會導致這項錯誤。如果未依序啟用旗標,也可能發生這種情況。

降低 max_connections 標記值,或與客戶服務團隊聯絡,要求移除標記,然後再執行 hard drain。這會強制執行個體在其他主機上重新啟動,並採用全新設定,不含該旗標或設定。

錯誤訊息 疑難排解
未經授權,無法連線。 授權會在多個層級進行,因此可能有多種原因:
  • 在資料庫層級,資料庫使用者必須存在,且密碼相符
  • 在專案層級,使用者可能沒有正確的 IAM 權限,包括 serviceusage.services.use 或 cloudsql.instances.connect 權限。
  • 在網路層級,如果 Cloud SQL 執行個體使用公開 IP,連線的來源 IP 必須位於授權網路中。

試試這些做法 ...

  • 請確認使用者存在,且密碼相符。
  • 將 Service Usage Consumer 角色指派給使用者帳戶。這個角色包含 serviceusage.services.use 權限。
  • 如果使用公開 IP,請確認來源 IP 位於授權網路。
information_schema 中有不明資料表 COLUMN_STATISTICS。 如果您使用 MySQL 8.0 的 mysqldump 二進位檔,從 MySQL 5.7 資料庫轉儲資料,並匯入 MySQL 8.0 資料庫,就會發生這種情況。

如果您從 MySQL 5.7 資料庫轉儲資料,並匯入 MySQL 8.0 資料庫,請務必使用 MySQL 5.7 的 mysqldump 二進位檔。如果您使用 MySQL 8.0 的 mysqldump 二進位檔,則必須新增 --column-statistics=0 旗標。

錯誤訊息 疑難排解
x509:憑證不適用於任何名稱。 已知問題:Cloud SQL Proxy 撥號器目前與 Go 1.15 不相容。

在問題修正前,請參閱 GitHub 上的這項討論,其中包含解決方法。

不明錯誤

下表列出可能發生 Unknown Error 的已知情況,以及適用的特定解決方法。不過,這份清單並未涵蓋所有情況。如果表格中沒有您的案例,請查看 Cloud SQL 的公開 Issue Tracker。如果找不到問題,請考慮提交報告,或查看其他支援選項。

作業 問題可能出在... 試試以下功能...
新增使用者 如果使用者已存在於資料庫中,您嘗試新增使用者時可能會發生這項錯誤。 請確認資料庫中沒有該使用者。
備份 如果在自動或手動備份期間看到這則訊息,可能是執行個體磁碟已滿。 如果暫存檔案占用過多空間,您可以重新啟動執行個體來移除檔案,並釋出磁碟空間。否則,您可能需要將執行個體升級至較大的磁碟大小。
複製 如果所選可用區的資源不足,就可能發生這種情況。 請改用該區域的其他可用區,或稍後再試。
建立執行個體
  • 如果您嘗試重複使用最近刪除的執行個體名稱,就可能發生這種情況。
  • 也可能是連線不穩所致。
  • 記錄可能會顯示專案未啟用 Service Networking API。
  • 嘗試同時建立多個執行個體時,也可能發生這個錯誤。舉例來說,Terraform 指令碼可讓您嘗試這麼做。
  • 另一個可能原因是特定資源用盡或超過配額限制。在記錄中尋找類似 Quota 'INTERNAL_FORWARDING_RULES_WITH_TARGET_INSTANCE_PER_NETWORK' exceeded. Limit: 100.0 globally 的項目
  • 如果 IP 範圍內沒有可用的位址,子網路建立作業失敗時,就可能發生這個錯誤。
  • 執行個體刪除後,約一週內無法重複使用該執行個體名稱。
  • 如果連線問題時有時無,唯一的解決方法就是再試一次。
  • 為專案啟用 Service Networking API。
  • 平行執行個體建立指令碼只會成功建立其中一個執行個體。修改指令碼,讓系統等待每個執行個體建立作業完成,再繼續執行下一個作業。
  • 分配新範圍。
匯出 如果您在嘗試將資料庫匯出至 Cloud Storage bucket 時看到這則訊息,可能是頻寬問題導致移轉失敗。 Cloud SQL 執行個體可能與 Cloud Storage bucket 位於不同區域。在不同洲之間讀取及寫入資料會耗用大量網路資源,並可能導致這類間歇性問題。
容錯移轉 (自動) 如果服務偵測到主要執行個體仍有回應,自動容錯移轉作業可能會產生這則錯誤訊息。 在這種情況下,您無須採取任何行動。由於不需要容錯移轉,因此不會發生。
匯入 匯入檔案可能包含需要超級使用者角色的陳述式。 編輯檔案,移除任何需要超級使用者角色的陳述式。

Cloud SQL 也會使用一些第三方二進位檔 (例如 mysqld),這可能會產生不明錯誤訊息。這類錯誤屬於第三方二進位檔內部錯誤,不在 Cloud SQL 的範圍內。不過,有時您可以在大約同一時間的 Cloud SQL 記錄檔中找到更具體的錯誤。

此外,有時會出現不明錯誤代碼。在這種情況下,完整訊息可以是 Unknown Error Code。