本表依據 MySQL 原始碼 include/mysqld_error.h 整理,涵蓋常見錯誤代碼 (Error Code)、SQLSTATE (部分)、訊息與排查方向。實際開發中請搭配 perror 指令或 SHOW WARNINGS 確認完整上下文。
| 範圍 | 類別 | 典型代碼 |
|---|---|---|
| 1005-1011 | 建立/刪除資料庫/資料表失敗 | 1005, 1007, 1008, 1010 |
| 1020-1038 | 儲存引擎/記錄/記憶體/磁碟 | 1021, 1032, 1037, 1038 |
| 1040-1049 | 連線/認證/權限 | 1040, 1044, 1045, 1049 |
| 1050-1065 | 資料表/欄位/語法 | 1050, 1051, 1054, 1062, 1065 |
| 1081-1116 | 網路/通訊/資源限制 | 1081, 1114, 1116 |
| 1129-1149 | 權限/使用者/語法 | 1130, 1133, 1142, 1146, 1149 |
| 1158-1161 | 網路讀寫超時/錯誤 | 1158, 1159, 1160, 1161 |
| 1169-1235 | 外鍵/資源/版本/權限 | 1169, 1216, 1217, 1226, 1227, 1235 |
df -h、ls -ld /data/mysql、SHOW ENGINE INNODB STATUS 觀察表空間、檢查外鍵參照欄位類型一致。CREATE DATABASE IF NOT EXISTS、DROP DATABASE IF EXISTS 避免報錯。PURGE BINARY LOGS、調整 expire_logs_days。sort_buffer_size、join_buffer_size、優化 SQL 避免大排序、檢查記憶體洩漏、升級實體記憶體。max_connections、檢查連線洩漏 (應用端未關閉)、使用連線池、啟用 thread_cache_size。%、具體 IP、localhost)、FLUSH PRIVILEGES、skip-grant-tables 重置密碼。IF NOT EXISTS/IF EXISTS、遷移腳本版本控管。INSERT IGNORE/ON DUPLICATE KEY UPDATE/REPLACE INTO。socket 路徑權限、/tmp 空間、SELinux/AppArmor。max_heap_table_size 限制)。轉 InnoDB、擴充表空間、調整參數。table_open_cache、table_definition_cache、檢查應用頻繁開關表。max_connect_errors)。FLUSH HOSTS、調大 max_connect_errors、排查應用連線邏輯。SHOW GRANTS、GRANT 補足權限。\`、版本相容性 (如 LATERAL、CTE 需 8.0+)。wait_timeout/net_read_timeout/net_write_timeout 過小、MTU 問題。抓包分析、調整超時參數、啟用 TCP keepalive。ON DELETE CASCADE/SET NULL、暫時關閉 foreign_key_checks=0 (極度謹慎)。GRANT ... WITH MAX_QUERIES_PER_HOUR 或移除限制。SUPER, SHUTDOWN, FILE)。授予對應權限或改用具備權限的帳號。JSON_TABLE 等)。升級 MySQL 版本或改寫 SQL。# Linux 終端機查詢錯誤訊息
perror 1062
# 輸出:MySQL error code 1062: Duplicate entry '%s' for key '%s'
# MySQL 客戶端查詢
SHOW WARNINGS;
SHOW ENGINE INNODB STATUS; -- 含最新外鍵/死鎖錯誤詳情
熟悉高頻錯誤代碼與背後機制,能大幅縮短排查時間。建議將本表整合至團隊知識庫,並在應用端針對關鍵錯誤碼 (1062, 1205, 1216, 1217 等) 實作專用重試/告警/降級邏輯。