MySQL 適用的 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

錯誤訊息 疑難排解
Aborted connection xxx to db: DB_NAME. 應用程式未正確結束連線。

請檢查下列情況:

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

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

Access denied for user 'XXX'@'XXX' (using password: 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),並以根使用者身分登入。
  2. 執行 USE mysql;
  3. 使用下列語法授予權限:
    GRANT PERMISSION_1,PERMISSION_2 ON *.* TO 'root' WITH GRANT OPTION;
       
    • SELECT
    • INSERT
    • 更新
    • 刪除
    • 建立
    • DROP
    • 重新載入
    • SHUTDOWN
    • 程序
    • 參考資料
    • INDEX
    • ALTER
    • SHOW DATABASES
    • 建立暫時性資料表
    • 鎖定資料表
    • 執行
    • REPLICATION SLAVE
    • 複製用戶端
    • 建立檢視區塊
    • 顯示檢視畫面
    • 建立日常安排
    • ALTER ROUTINE
    • 建立使用者
    • 活動
    • 觸發條件
    • 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
Constraints/sql.restrictAuthorizedNetworks。 複製作業遭到 Authorized Networks 設定封鎖。Authorized Networks 在 Google Cloud 控制台的「連線」部分中,設定為使用公開 IP 位址,且基於安全考量,不允許複製。

盡可能從 Cloud SQL 執行個體中移除所有 Authorized Networks 項目。否則,請建立副本,但不要包含任何 Authorized Networks 項目。

錯誤訊息 疑難排解
磁碟空間已滿。 建立副本時,主要執行個體的磁碟大小可能會達到上限。

編輯主要執行個體,將其升級為較大的磁碟大小。

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

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

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

請考慮下列可能情況:

  • 分配給私人服務連線的 IP 範圍小於 /24。
  • 為私人服務連線分配的 IP 範圍大小,不足以容納 Cloud SQL 執行個體數量。
  • 如果在多個區域建立執行個體,分配的 IP 範圍大小需求會更大。請參閱已分配範圍大小

在上述任一情況下,您可以選擇擴展現有範圍,或 為私人服務連線分配額外的 IP 範圍

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

建立新的 IP 範圍後,請使用下列指令更新 VPC 對等互連:

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 範圍後,請使用下列指令更新 VPC 對等互連:

gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com
--ranges=RESERVED_RANGE_NAME \
--network=VPC_NETWORK \
--project=PROJECT_ID \
--force
錯誤訊息 疑難排解
(gcloud.sql.connect) It seems your client does not have ipv6 connectivity and the database instance does not have an ipv4 address. 您嘗試使用 Cloud Shell 連線至私人 IP 執行個體。

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

傾印表格時,收到的封包大於 max_allowed_packet 個位元組。 封包大小超過設定允許的範圍。

使用 mysqldumpmax_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 API, 等待五分鐘,然後重新啟用。

要求無效:執行個體的服務網路設定不正確。 專案未啟用 Service Networking API

在專案中啟用 Service Networking API。如果您嘗試將私人 IP 位址指派給 Cloud SQL 執行個體時看到這項錯誤,且您使用的是共用虛擬私有雲,則也需要為主專案啟用 Service Networking API

錯誤訊息 疑難排解
中繼資料表已鎖定。 其他查詢、程序或交易封鎖了您的查詢,並鎖定資料表。

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

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

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

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

在專案中啟用 Service Networking API。如果您嘗試將私人 IP 位址指派給 Cloud SQL 執行個體時看到這項錯誤,且您使用的是共用虛擬私有雲,則也需要為主專案啟用 Service Networking API

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

請先等待上一個作業完成,再開始其他作業。

這項作業不適用於這個執行個體。 這是對 instances.restoreBackup 進行 API 呼叫時傳回的錯誤,表示您無法將備份還原至儲存空間大小 (XX GB) 小於備份大小 (YY GB) 的執行個體。

編輯目標執行個體,增加儲存空間大小。

錯誤訊息 疑難排解
超過配額。 您已達到每分鐘或每日配額的上限。查看 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 中設定存取權控管,請參閱建立及管理存取權控管清單
  • 確認資料表是否存在。如果資料表確實存在,請確認您具備儲存空間值區的適當權限。

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

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

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

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

資料表「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;
                

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

  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.usecloudsql.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 Dialer 目前與 Go 1.15 不相容。

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

不明錯誤

下表列出一些已知的 Unknown Error 案例,並在適用情況下提供具體解決方法。不過,這並非完整清單。如果表格中沒有您的案件,請查看 Cloud SQL 的公開問題追蹤器。如果找不到問題,請考慮 提交報告,或查看其他支援選項

作業 問題可能出在... 建議做法...
新增使用者 如果使用者已存在於資料庫中,嘗試新增時可能會發生這個錯誤。 確認資料庫中沒有該使用者。
備份 如果在自動或手動備份期間看到這則訊息,可能是執行個體磁碟空間已滿。 如果暫時檔案大小佔用太多空間,您可以重新啟動執行個體來移除檔案,並釋出磁碟空間。否則,您可能需要將執行個體升級為較大的磁碟大小。
複製 如果所選可用區的資源不足,就可能發生這種情況。 請嘗試使用該區域中的其他可用區,或稍後再試。
建立執行個體
  • 如果您嘗試重複使用最近刪除的執行個體名稱,就可能發生這種情況。
  • 連線不穩定也可能導致這個問題。
  • 記錄可能顯示專案未啟用 Service Networking API。
  • 嘗試平行建立多個執行個體時,也可能發生這個錯誤。舉例來說,Terraform 指令碼可讓您嘗試這麼做。
  • 另一個原因可能是特定資源已耗盡,或是超過配額限制。在記錄中尋找類似下列內容的項目: Quota 'INTERNAL_FORWARDING_RULES_WITH_TARGET_INSTANCE_PER_NETWORK' exceeded. Limit: 100.0 globally
  • 如果 IP 範圍中沒有其他可用位址,子網路建立作業就會失敗,並顯示這項錯誤。
  • 執行個體名稱必須在刪除後約一週才能重複使用。
  • 如果連線問題時好時壞,唯一的解決方法就是 再試一次。
  • 為專案啟用 Service Networking API
  • 平行執行個體建立指令碼只會成功建立其中一個執行個體。修改指令碼,等待每個執行個體建立作業完成,再繼續下一個作業。
  • 分配新範圍
建立備用資源 記錄檔中可能會有更具體的錯誤。 檢查 Cloud Logging 中的記錄,找出實際錯誤。

如果錯誤是 set Service Networking service account as servicenetworking.serviceAgent role on consumer project,請停用並重新啟用 Service Networking API。這項動作會建立服務帳戶,以便繼續進行程序。

如果錯誤是 The instance creation failed due to a permission error with the CMEK key defined,請檢查金鑰設定和位置

匯出 如果您在嘗試將資料庫匯出至 Cloud Storage bucket 時看到這則訊息,可能是因為頻寬問題導致轉移失敗。 Cloud SQL 執行個體可能與 Cloud Storage 值區位於不同區域。從一個洲讀取資料並寫入另一個洲,會耗用大量網路資源,並可能導致這類間歇性問題。
容錯移轉 (舊版) 如果您使用舊版容錯移轉設定,當容錯移轉複製機器不夠大,無法處理容錯移轉時,就會發生這種情況。 最佳解決方案是遷移至目前的 高可用性設定。否則,您必須將容錯移轉副本更新為較大的機器。
容錯移轉 (自動) 如果服務偵測到主要執行個體仍有回應,自動容錯移轉作業可能會產生這則錯誤訊息。 在此情況下,您無須採取任何行動。由於不需要容錯移轉,因此不會發生容錯移轉。
匯入 匯入檔案可能含有需要超級使用者角色的陳述式。 編輯檔案,移除需要超級使用者角色的陳述式。

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

此外,有時會出現不明的錯誤代碼。在這個例子中,完整訊息可以是 Unknown Error Code